]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Details view: Allow to turn off expandable folders like in Dolphin 1.7
authorPeter Penz <peter.penz19@gmail.com>
Fri, 9 Mar 2012 15:12:00 +0000 (16:12 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 9 Mar 2012 15:19:19 +0000 (16:19 +0100)
The option for turning off expandable folders has been removed with
the new view-engine. Due to several requests this option has been
readded again.

As for 4.8.x no new user-interface strings may be introduced, the
line
  ExpandableFolders=false
must be manually added below the section "[DetailsMode]" in the file
~/.kde/share/config/dolphinrc if the expandable-folders feature
should be disabled.

Thanks to H.H. "cyberbeat" for the initial patch!

BUG: 289090
FIXED-IN: 4.8.2

src/kitemviews/kfileitemlistview.cpp
src/kitemviews/kfileitemlistview.h
src/kitemviews/kfileitemlistwidget.cpp
src/kitemviews/kfileitemlistwidget.h
src/kitemviews/kitemlistview.cpp
src/kitemviews/kitemlistview.h
src/settings/dolphin_detailsmodesettings.kcfg
src/settings/viewmodes/viewsettingstab.cpp
src/settings/viewmodes/viewsettingstab.h
src/views/dolphinitemlistcontainer.cpp

index 27ef7fdb5019c633bc1a5eb4fa54299d35025d2f..796a45099cd4818e6f3b50b6c5e9638dac02d62f 100644 (file)
@@ -106,8 +106,6 @@ void KFileItemListView::setItemLayout(Layout layout)
             applyRolesToModel();
         }
         updateLayoutOfVisibleItems();
-
-        setSupportsItemExpanding(m_itemLayout == DetailsLayout);
     }
 }
 
@@ -324,6 +322,8 @@ void KFileItemListView::initializeItemListWidget(KItemListWidget* item)
     case DetailsLayout: fileItemListWidget->setLayout(KFileItemListWidget::DetailsLayout); break;
     default:            Q_ASSERT(false); break;
     }
+
+    fileItemListWidget->setSupportsItemExpanding(supportsItemExpanding());
 }
 
 bool KFileItemListView::itemSizeHintUpdateRequired(const QSet<QByteArray>& changedRoles) const
@@ -388,6 +388,13 @@ void KFileItemListView::onStyleOptionChanged(const KItemListStyleOption& current
     triggerIconSizeUpdate();
 }
 
+void KFileItemListView::onSupportsItemExpandingChanged(bool supportsExpanding)
+{
+    Q_UNUSED(supportsExpanding);
+    applyRolesToModel();
+    updateLayoutOfVisibleItems();
+}
+
 void KFileItemListView::onTransactionBegin()
 {
     m_modelRolesUpdater->setPaused(true);
@@ -569,7 +576,7 @@ void KFileItemListView::applyRolesToModel()
     roles.insert("iconName");
     roles.insert("name");
     roles.insert("isDir");
-    if (m_itemLayout == DetailsLayout) {
+    if (supportsItemExpanding()) {
         roles.insert("isExpanded");
         roles.insert("isExpandable");
         roles.insert("expandedParentsCount");
index 897015641e1221d4a7ef47153dd52f4e7a1f21da..12d0d452b21cd53323563c1aaf6d220e3dd0a224 100644 (file)
@@ -92,6 +92,7 @@ protected:
     virtual void onScrollOffsetChanged(qreal current, qreal previous);
     virtual void onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous);
     virtual void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous);
+    virtual void onSupportsItemExpandingChanged(bool supportsExpanding);
     virtual void onTransactionBegin();
     virtual void onTransactionEnd();
     virtual void resizeEvent(QGraphicsSceneResizeEvent* event);
index c477a37ae5fe61186a1c711ad667b01f7c80bd5a..fb0f4df5798f69eba0a4ae8e4e9d8caa6072533d 100644 (file)
@@ -45,6 +45,7 @@ KFileItemListWidget::KFileItemListWidget(QGraphicsItem* parent) :
     m_isCut(false),
     m_isHidden(false),
     m_isExpandable(false),
+    m_supportsItemExpanding(false),
     m_dirtyLayout(true),
     m_dirtyContent(true),
     m_dirtyContentRoles(),
@@ -88,6 +89,20 @@ KFileItemListWidget::Layout KFileItemListWidget::layout() const
     return m_layout;
 }
 
+void KFileItemListWidget::setSupportsItemExpanding(bool supportsItemExpanding)
+{
+    if (m_supportsItemExpanding != supportsItemExpanding) {
+        m_supportsItemExpanding = supportsItemExpanding;
+        m_dirtyLayout = true;
+        update();
+    }
+}
+
+bool KFileItemListWidget::supportsItemExpanding() const
+{
+    return m_supportsItemExpanding;
+}
+
 void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
 {
     const_cast<KFileItemListWidget*>(this)->triggerCacheRefreshing();
@@ -119,7 +134,7 @@ void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsIte
     painter->drawStaticText(m_textPos[Name], m_text[Name]);
 
     bool clipAdditionalInfoBounds = false;
-    if (m_layout == DetailsLayout) {
+    if (m_supportsItemExpanding) {
         // Prevent a possible overlapping of the additional-information texts
         // with the icon. This can happen if the user has minimized the width
         // of the name-column to a very small value.
@@ -418,7 +433,7 @@ void KFileItemListWidget::triggerCacheRefreshing()
     refreshCache();
 
     const QHash<QByteArray, QVariant> values = data();
-    m_isExpandable = values["isExpandable"].toBool();
+    m_isExpandable = m_supportsItemExpanding && values["isExpandable"].toBool();
     m_isHidden = values["name"].toString().startsWith(QLatin1Char('.'));
 
     updateExpansionArea();
@@ -432,7 +447,7 @@ void KFileItemListWidget::triggerCacheRefreshing()
 
 void KFileItemListWidget::updateExpansionArea()
 {
-    if (m_layout == DetailsLayout) {
+    if (m_supportsItemExpanding) {
         const QHash<QByteArray, QVariant> values = data();
         Q_ASSERT(values.contains("expandedParentsCount"));
         const int expandedParentsCount = values.value("expandedParentsCount", 0).toInt();
@@ -751,8 +766,13 @@ void KFileItemListWidget::updateDetailsLayoutTextCache()
     const int fontHeight = option.fontMetrics.height();
 
     const qreal columnPadding = option.padding * 3;
-    const qreal firstColumnInc = (m_expansionArea.left() + m_expansionArea.right() + widgetHeight) / 2
-                                 + scaledIconSize;
+    qreal firstColumnInc = scaledIconSize;
+    if (m_supportsItemExpanding) {
+        firstColumnInc += (m_expansionArea.left() + m_expansionArea.right() + widgetHeight) / 2;
+    } else {
+        firstColumnInc += option.padding;
+    }
+
     qreal x = firstColumnInc;
     const qreal y = qMax(qreal(option.padding), (widgetHeight - fontHeight) / 2);
 
index 2feeca810f30b64c6e9ef58304d9283300538ddf..4958313356d8dc56f5a6441e2cddb4d0d5c571d0 100644 (file)
@@ -46,6 +46,9 @@ public:
     void setLayout(Layout layout);
     Layout layout() const;
 
+    void setSupportsItemExpanding(bool supportsItemExpanding);
+    bool supportsItemExpanding() const;
+
     virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
 
     virtual QRectF iconRect() const;
@@ -131,6 +134,7 @@ private:
     bool m_isCut;
     bool m_isHidden;
     bool m_isExpandable;
+    bool m_supportsItemExpanding;
 
     bool m_dirtyLayout;
     bool m_dirtyContent;
index a54e06ddca22151fb243c6a935b05fc565414dad..f1822826d101e2bee8015ef9fe566098d3b91937 100644 (file)
@@ -524,6 +524,15 @@ QHash<QByteArray, QSizeF> KItemListView::visibleRolesSizes(const KItemRangeList&
     return QHash<QByteArray, QSizeF>();
 }
 
+void KItemListView::setSupportsItemExpanding(bool supportsExpanding)
+{
+    if (m_supportsItemExpanding != supportsExpanding) {
+        m_supportsItemExpanding = supportsExpanding;
+        updateSiblingsInformation();
+        onSupportsItemExpandingChanged(supportsExpanding);
+    }
+}
+
 bool KItemListView::supportsItemExpanding() const
 {
     return m_supportsItemExpanding;
@@ -725,6 +734,11 @@ void KItemListView::onStyleOptionChanged(const KItemListStyleOption& current, co
     Q_UNUSED(previous);
 }
 
+void KItemListView::onSupportsItemExpandingChanged(bool supportsExpanding)
+{
+    Q_UNUSED(supportsExpanding);
+}
+
 void KItemListView::onTransactionBegin()
 {
 }
@@ -792,14 +806,6 @@ QList<KItemListWidget*> KItemListView::visibleItemListWidgets() const
     return m_visibleItems.values();
 }
 
-void KItemListView::setSupportsItemExpanding(bool supportsExpanding)
-{
-    if (m_supportsItemExpanding != supportsExpanding) {
-        m_supportsItemExpanding = supportsExpanding;
-        updateSiblingsInformation();
-    }
-}
-
 void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges)
 {
     updateVisibleRolesSizes(itemRanges);
index b416888eb8aa37a28472d1c36a3bac8d19dc5c9a..8f6e11e385649c670aafbe92ebcb2e24a12f9e82 100644 (file)
@@ -201,15 +201,15 @@ public:
     virtual QHash<QByteArray, QSizeF> visibleRolesSizes(const KItemRangeList& itemRanges) const;
 
     /**
-     * @return True if the view supports the expanding of items. Per default
-     *         false is returned. If expanding of items is supported
-     *         (see setSupportsItemExpanding()),the methods
-     *         KItemModelBase::setExpanded(), KItemModelBase::isExpanded(),
-     *         KItemModelBase::isExpandable() and KItemModelBase::expandedParentsCount()
-     *         must be reimplemented. The view-implementation
-     *         has to take care itself how to visually represent the expanded items provided
-     *         by the model.
+     * If set to true, items having child-items can be expanded to show the child-items as
+     * part of the view. Per default the expanding of items is is disabled. If expanding of
+     * items is enabled, the methods KItemModelBase::setExpanded(), KItemModelBase::isExpanded(),
+     * KItemModelBase::isExpandable() and KItemModelBase::expandedParentsCount()
+     * must be reimplemented. The view-implementation
+     * has to take care itself how to visually represent the expanded items provided
+     * by the model.
      */
+    void setSupportsItemExpanding(bool supportsExpanding);
     bool supportsItemExpanding() const;
 
     /**
@@ -327,6 +327,7 @@ protected:
     virtual void onScrollOffsetChanged(qreal current, qreal previous);
     virtual void onVisibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous);
     virtual void onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous);
+    virtual void onSupportsItemExpandingChanged(bool supportsExpanding);
 
     virtual void onTransactionBegin();
     virtual void onTransactionEnd();
@@ -341,13 +342,6 @@ protected:
 
     QList<KItemListWidget*> visibleItemListWidgets() const;
 
-    /**
-     * Must be called by the derived class if it supports the expanding
-     * of items.
-     * @see supportsItemExpanding()
-     */
-    void setSupportsItemExpanding(bool supportsExpanding);
-
 protected slots:
     virtual void slotItemsInserted(const KItemRangeList& itemRanges);
     virtual void slotItemsRemoved(const KItemRangeList& itemRanges);
index 0fb1bf0b549de1e8ca6d503d9782cb9b90de96be..64e99898acaf53f0b3d6de70ab628f078da1e219 100644 (file)
@@ -40,5 +40,9 @@
             <label>Position of columns</label>
             <default>0,1,2,3,4,5,6,7,8</default>
         </entry>
+        <entry name="ExpandableFolders" type="Bool">
+            <label>Expandable folders</label>
+            <default>true</default>
+        </entry>
     </group>
 </kcfg>
index 5dd70000e7371cd3af5cbbf7db724c4846082d32..c734344eea8db5fd44e9e119655f19bffdadad16 100644 (file)
@@ -27,6 +27,7 @@
 #include <KComboBox>
 #include <KLocale>
 
+#include <QCheckBox>
 #include <QGroupBox>
 #include <QLabel>
 #include <QSlider>
@@ -40,7 +41,8 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     m_defaultSizeSlider(0),
     m_previewSizeSlider(0),
     m_fontRequester(0),
-    m_textWidthBox(0)
+    m_textWidthBox(0),
+    m_expandableFolders(0)
 {
     QVBoxLayout* topLayout = new QVBoxLayout(this);
 
@@ -79,7 +81,8 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     textGroupLayout->addWidget(fontLabel, 0, 0, Qt::AlignRight);
     textGroupLayout->addWidget(m_fontRequester, 0, 1);
 
-    if (m_mode == IconsMode) {
+    switch (m_mode) {
+    case IconsMode: {
         QLabel* textWidthLabel = new QLabel(i18nc("@label:listbox", "Text width:"), textGroup);
         m_textWidthBox = new KComboBox(textGroup);
         m_textWidthBox->addItem(i18nc("@item:inlistbox Text width", "Small"));
@@ -89,10 +92,19 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
 
         textGroupLayout->addWidget(textWidthLabel, 2, 0, Qt::AlignRight);
         textGroupLayout->addWidget(m_textWidthBox, 2, 1);
+        break;
+    }
+    case DetailsMode:
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        // m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable folders"), this);
+        break;
+    default:
+        break;
     }
 
     topLayout->addWidget(iconSizeGroup);
     topLayout->addWidget(textGroup);
+    topLayout->addWidget(m_expandableFolders);
     topLayout->addStretch(1);
 
     loadSettings();
@@ -100,8 +112,17 @@ ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
     connect(m_defaultSizeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(changed()));
     connect(m_previewSizeSlider, SIGNAL(valueChanged(int)), this, SIGNAL(changed()));
     connect(m_fontRequester, SIGNAL(changed()), this, SIGNAL(changed()));
-    if (m_mode == IconsMode) {
+
+    switch (m_mode) {
+    case IconsMode:
         connect(m_textWidthBox, SIGNAL(currentIndexChanged(int)), this, SIGNAL(changed()));
+        break;
+    case DetailsMode:
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        //connect(m_expandableFolders, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
+        break;
+    default:
+        break;
     }
 }
 
@@ -114,8 +135,16 @@ void ViewSettingsTab::applySettings()
     const QFont font = m_fontRequester->currentFont();
     const bool useSystemFont = (m_fontRequester->mode() == DolphinFontRequester::SystemFont);
 
-    if (m_mode == IconsMode) {
+    switch (m_mode) {
+    case IconsMode:
         IconsModeSettings::setTextWidthIndex(m_textWidthBox->currentIndex());
+        break;
+    case DetailsMode:
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        //DetailsModeSettings::setExpandableFolders(m_expandableFolders->isChecked());
+        break;
+    default:
+        break;
     }
 
     ViewModeSettings settings(viewMode());
@@ -151,8 +180,16 @@ void ViewSettingsTab::restoreDefaultSettings()
 
 void ViewSettingsTab::loadSettings()
 {
-    if (m_mode == IconsMode) {
+    switch (m_mode) {
+    case IconsMode:
         m_textWidthBox->setCurrentIndex(IconsModeSettings::textWidthIndex());
+        break;
+    case DetailsMode:
+        // Disabled for 4.8.x: No new UI-strings are allowed
+        // m_expandableFolders->setChecked(DetailsModeSettings::expandableFolders());
+        break;
+    default:
+        break;
     }
 
     ViewModeSettings settings(viewMode());
index 2e0f439aacccd9d0b58346178a939fe891a2e2d0..b21fc102c6b473830dd6bb30a76cab3e3da02935 100644 (file)
@@ -25,6 +25,7 @@
 
 class DolphinFontRequester;
 class KComboBox;
+class QCheckBox;
 class QSlider;
 
 /**
@@ -63,6 +64,7 @@ private:
 
     DolphinFontRequester* m_fontRequester;
     KComboBox* m_textWidthBox;
+    QCheckBox* m_expandableFolders;
 };
 
 #endif
index 3b0a9c6b511a4b5f37cf98fc4867dca670b9e16d..1ece52093b1505a2444db8ea27ab0a4e5d4b4488 100644 (file)
@@ -134,14 +134,17 @@ void DolphinItemListContainer::setItemLayout(KFileItemListView::Layout layout)
     case KFileItemListView::IconsLayout:
         m_fileItemListView->setScrollOrientation(Qt::Vertical);
         m_fileItemListView->setHeaderShown(false);
+        m_fileItemListView->setSupportsItemExpanding(false);
         break;
     case KFileItemListView::DetailsLayout:
         m_fileItemListView->setScrollOrientation(Qt::Vertical);
         m_fileItemListView->setHeaderShown(true);
+        m_fileItemListView->setSupportsItemExpanding(DetailsModeSettings::expandableFolders());
         break;
     case KFileItemListView::CompactLayout:
         m_fileItemListView->setScrollOrientation(Qt::Horizontal);
         m_fileItemListView->setHeaderShown(false);
+        m_fileItemListView->setSupportsItemExpanding(false);
         break;
     default:
         Q_ASSERT(false);
@@ -176,6 +179,11 @@ void DolphinItemListContainer::readSettings()
     beginTransaction();
 
     m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+
+    const bool expandableFolders = (itemLayout() && KFileItemListView::DetailsLayout) &&
+                                   DetailsModeSettings::expandableFolders();
+    m_fileItemListView->setSupportsItemExpanding(expandableFolders);
+
     updateAutoActivationDelay();
     updateFont();
     updateGridSize();