#include <kitemviews/kitemlistcontroller.h>
#include <kitemviews/kitemliststyleoption.h>
-#include <KDirLister>
#include <KGlobalSettings>
#include <views/viewmodecontroller.h>
#include "zoomlevelinfo.h"
-DolphinItemListContainer::DolphinItemListContainer(KDirLister* dirLister,
- QWidget* parent) :
+DolphinItemListContainer::DolphinItemListContainer(QWidget* parent) :
KItemListContainer(parent),
m_zoomLevel(0),
m_fileItemListView(0)
{
- controller()->setModel(new KFileItemModel(dirLister, this));
+ controller()->setModel(new KFileItemModel(this));
m_fileItemListView = new KFileItemListView();
- m_fileItemListView->setWidgetCreator(new KItemListWidgetCreator<DolphinFileItemListWidget>());
- m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
controller()->setView(m_fileItemListView);
+ m_fileItemListView->setWidgetCreator(new KItemListWidgetCreator<DolphinFileItemListWidget>());
+ m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+ m_fileItemListView->setEnlargeSmallPreviews(GeneralSettings::enlargeSmallPreviews());
+
updateAutoActivationDelay();
updateFont();
updateGridSize();
DolphinItemListContainer::~DolphinItemListContainer()
{
- IconsModeSettings::self()->writeConfig();
- CompactModeSettings::self()->writeConfig();
- DetailsModeSettings::self()->writeConfig();
+ writeSettings();
controller()->setView(0);
delete m_fileItemListView;
switch (layout) {
case KFileItemListView::IconsLayout:
m_fileItemListView->setScrollOrientation(Qt::Vertical);
- m_fileItemListView->setHeaderShown(false);
+ m_fileItemListView->setHeaderVisible(false);
+ m_fileItemListView->setSupportsItemExpanding(false);
break;
case KFileItemListView::DetailsLayout:
m_fileItemListView->setScrollOrientation(Qt::Vertical);
- m_fileItemListView->setHeaderShown(true);
+ m_fileItemListView->setHeaderVisible(true);
+ m_fileItemListView->setSupportsItemExpanding(DetailsModeSettings::expandableFolders());
+
break;
case KFileItemListView::CompactLayout:
m_fileItemListView->setScrollOrientation(Qt::Horizontal);
- m_fileItemListView->setHeaderShown(false);
+ m_fileItemListView->setHeaderVisible(false);
+ m_fileItemListView->setSupportsItemExpanding(false);
break;
default:
Q_ASSERT(false);
m_fileItemListView->endTransaction();
}
-void DolphinItemListContainer::refresh()
+void DolphinItemListContainer::readSettings()
{
ViewModeSettings settings(viewMode());
settings.readConfig();
beginTransaction();
m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+
+ const bool expandableFolders = (itemLayout() && KFileItemListView::DetailsLayout) &&
+ DetailsModeSettings::expandableFolders();
+ m_fileItemListView->setSupportsItemExpanding(expandableFolders);
+
updateAutoActivationDelay();
updateFont();
updateGridSize();
endTransaction();
}
+void DolphinItemListContainer::writeSettings()
+{
+ IconsModeSettings::self()->writeConfig();
+ CompactModeSettings::self()->writeConfig();
+ DetailsModeSettings::self()->writeConfig();
+}
+
void DolphinItemListContainer::updateGridSize()
{
const ViewModeSettings settings(viewMode());
m_zoomLevel = ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize, iconSize));
KItemListStyleOption styleOption = m_fileItemListView->styleOption();
- const int innerMargin = (iconSize >= KIconLoader::SizeSmallMedium) ? 4 : 2;
+ const int padding = 2;
+ int horizontalMargin = 0;
+ int verticalMargin = 0;
// Calculate the item-width and item-height
int itemWidth;
int itemHeight;
+ QSize maxTextSize;
+
switch (itemLayout()) {
case KFileItemListView::IconsLayout: {
- const int minItemWidth = 64;
+ const int minItemWidth = 48;
itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64;
- if (itemWidth < iconSize + innerMargin * 2) {
- itemWidth = iconSize + innerMargin * 2;
+
+ if (previewsShown()) {
+ // Optimize the width for previews with a 3:2 aspect ratio instead
+ // of a 1:1 ratio to avoid wasting too much vertical space when
+ // photos.
+ const int minWidth = iconSize * 3 / 2;
+ itemWidth = qMax(itemWidth, minWidth);
+ }
+
+ if (itemWidth < iconSize + padding * 2) {
+ itemWidth = iconSize + padding * 2;
+ }
+
+ itemHeight = padding * 3 + iconSize + styleOption.fontMetrics.lineSpacing();
+ if (IconsModeSettings::maximumTextLines() > 0) {
+ // A restriction is given for the maximum number of textlines (0 means
+ // having no restriction)
+ const int additionalInfoCount = m_fileItemListView->visibleRoles().count() - 1;
+ const int maxAdditionalLines = additionalInfoCount + IconsModeSettings::maximumTextLines();
+ maxTextSize.rheight() = styleOption.fontMetrics.lineSpacing() * maxAdditionalLines;
}
- itemHeight = innerMargin * 2 + iconSize + styleOption.fontMetrics.height();
+
+ horizontalMargin = 4;
+ verticalMargin = 8;
break;
}
case KFileItemListView::CompactLayout: {
- itemWidth = innerMargin * 4 + iconSize + styleOption.fontMetrics.height() * 5;
+ itemWidth = padding * 4 + iconSize + styleOption.fontMetrics.height() * 5;
const int textLinesCount = m_fileItemListView->visibleRoles().count();
- itemHeight = innerMargin * 2 + qMax(iconSize, textLinesCount * styleOption.fontMetrics.height());
+ itemHeight = padding * 2 + qMax(iconSize, textLinesCount * styleOption.fontMetrics.lineSpacing());
+
+ if (CompactModeSettings::maximumTextWidthIndex() > 0) {
+ // A restriction is given for the maximum width of the text (0 means
+ // having no restriction)
+ maxTextSize.rwidth() = styleOption.fontMetrics.height() * 10 *
+ CompactModeSettings::maximumTextWidthIndex();
+ }
+
+ horizontalMargin = 8;
break;
}
case KFileItemListView::DetailsLayout: {
itemWidth = -1;
- itemHeight = innerMargin * 2 + qMax(iconSize, styleOption.fontMetrics.height());
+ itemHeight = padding * 2 + qMax(iconSize, styleOption.fontMetrics.lineSpacing());
break;
}
default:
}
// Apply the calculated values
- styleOption.margin = innerMargin;
+ styleOption.padding = padding;
+ styleOption.horizontalMargin = horizontalMargin;
+ styleOption.verticalMargin = verticalMargin;
styleOption.iconSize = iconSize;
+ styleOption.maxTextSize = maxTextSize;
+ m_fileItemListView->beginTransaction();
m_fileItemListView->setStyleOption(styleOption);
m_fileItemListView->setItemSize(QSizeF(itemWidth, itemHeight));
+ m_fileItemListView->endTransaction();
}
void DolphinItemListContainer::updateFont()