X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/965107fd024be86eb014ee360211a66b320a3b43..47d7cdffdd2d2c04067a5088eaeff67add53dde3:/src/views/dolphinitemlistcontainer.cpp diff --git a/src/views/dolphinitemlistcontainer.cpp b/src/views/dolphinitemlistcontainer.cpp index 9e7a15f74..88e10d8a3 100644 --- a/src/views/dolphinitemlistcontainer.cpp +++ b/src/views/dolphinitemlistcontainer.cpp @@ -31,7 +31,6 @@ #include #include -#include #include #include @@ -39,28 +38,28 @@ #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()); - m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle()); controller()->setView(m_fileItemListView); + m_fileItemListView->setWidgetCreator(new KItemListWidgetCreator()); + 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; @@ -134,15 +133,19 @@ void DolphinItemListContainer::setItemLayout(KFileItemListView::Layout layout) 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); @@ -169,11 +172,20 @@ void DolphinItemListContainer::endTransaction() 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(); @@ -183,6 +195,15 @@ void DolphinItemListContainer::refresh() << "imagethumbnail" << "jpegthumbnail"); m_fileItemListView->setEnabledPlugins(plugins); + + endTransaction(); +} + +void DolphinItemListContainer::writeSettings() +{ + IconsModeSettings::self()->writeConfig(); + CompactModeSettings::self()->writeConfig(); + DetailsModeSettings::self()->writeConfig(); } void DolphinItemListContainer::updateGridSize() @@ -194,40 +215,82 @@ void DolphinItemListContainer::updateGridSize() 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; - itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64; // TODO: - if (itemWidth < iconSize + innerMargin * 2) { - itemWidth = iconSize + innerMargin * 2; + const int minItemWidth = 48; + itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64; + + 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 * 2; + 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: Q_ASSERT(false); break; + default: + itemWidth = -1; + itemHeight = -1; + Q_ASSERT(false); + break; } // 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() @@ -247,6 +310,12 @@ void DolphinItemListContainer::updateFont() m_fileItemListView->setStyleOption(styleOption); } +void DolphinItemListContainer::updateAutoActivationDelay() +{ + const int delay = GeneralSettings::autoExpandFolders() ? 750 : -1; + controller()->setAutoActivationDelay(delay); +} + ViewModeSettings::ViewMode DolphinItemListContainer::viewMode() const { ViewModeSettings::ViewMode mode; @@ -255,7 +324,9 @@ ViewModeSettings::ViewMode DolphinItemListContainer::viewMode() const case KFileItemListView::IconsLayout: mode = ViewModeSettings::IconsMode; break; case KFileItemListView::CompactLayout: mode = ViewModeSettings::CompactMode; break; case KFileItemListView::DetailsLayout: mode = ViewModeSettings::DetailsMode; break; - default: Q_ASSERT(false); break; + default: mode = ViewModeSettings::IconsMode; + Q_ASSERT(false); + break; } return mode;