]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Provide an option for the details view to expand folders (= tree view), as this is...
authorPeter Penz <peter.penz19@gmail.com>
Sat, 16 Feb 2008 13:16:59 +0000 (13:16 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 16 Feb 2008 13:16:59 +0000 (13:16 +0000)
BUG: 155571

svn path=/trunk/KDE/kdebase/apps/; revision=775621

src/detailsviewsettingspage.cpp
src/detailsviewsettingspage.h
src/dolphin_detailsmodesettings.kcfg
src/dolphindetailsview.cpp
src/dolphinview.cpp
src/iconmanager.cpp

index 50f2bac8ae0188d2d309d09f2db142548d58a6c7..7ff25179ded5d93c9670c3c0af6c11841e5dec8c 100644 (file)
@@ -42,7 +42,8 @@ DetailsViewSettingsPage::DetailsViewSettingsPage(DolphinMainWindow* mainWindow,
     m_smallIconSize(0),
     m_mediumIconSize(0),
     m_largeIconSize(0),
-    m_fontRequester(0)
+    m_fontRequester(0),
+    m_expandableFolders(0)
 {
     const int spacing = KDialog::spacingHint();
     const int margin = KDialog::marginHint();
@@ -80,6 +81,9 @@ DetailsViewSettingsPage::DetailsViewSettingsPage(DolphinMainWindow* mainWindow,
     textLayout->addWidget(fontLabel);
     textLayout->addWidget(m_fontRequester);
 
+    // create "Expandable Folders" checkbox
+    m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable Folders"), this);
+
     // Add a dummy widget with no restriction regarding
     // a vertical resizing. This assures that the dialog layout
     // is not stretched vertically.
@@ -110,6 +114,8 @@ void DetailsViewSettingsPage::applySettings()
     settings->setFontSize(font.pointSize());
     settings->setItalicFont(font.italic());
     settings->setBoldFont(font.bold());
+
+    settings->setExpandableFolders(m_expandableFolders->isChecked());
 }
 
 void DetailsViewSettingsPage::restoreDefaults()
@@ -147,6 +153,8 @@ void DetailsViewSettingsPage::loadSettings()
         m_fontRequester->setMode(DolphinFontRequester::CustomFont);
         m_fontRequester->setCustomFont(font);
     }
+
+    m_expandableFolders->setChecked(settings->expandableFolders());
 }
 
 #include "detailsviewsettingspage.moc"
index d06b814cf83048f803570b5a6fa5e2c471c21d95..b6622348c5e6d1b93b5be78052fd5e1d4e681ee3 100644 (file)
@@ -58,6 +58,7 @@ private:
     QRadioButton* m_mediumIconSize;
     QRadioButton* m_largeIconSize;
     DolphinFontRequester* m_fontRequester;
+    QCheckBox* m_expandableFolders;
 };
 
 #endif
index ce16a551c6b19428b14ded9f3c9b4194450f84ad..be62e797a555ea7b2e79d9c4839866f54b80cbc1 100644 (file)
@@ -29,5 +29,9 @@
             <label context="@label">Icon size</label>
             <default code="true">KIconLoader::SizeSmall</default>
         </entry>
+        <entry name="ExpandableFolders" type="Bool">
+            <label context="@label">Expandable folders</label>
+            <default>false</default>
+        </entry>
     </group>
 </kcfg>
index df5246bedba18d9f103d6c08308d21f950fd5b6b..63498ed9d21100f4339dcb68b3662125d5c4fa2e 100644 (file)
@@ -54,17 +54,19 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr
     m_elasticBandOrigin(),
     m_elasticBandDestination()
 {
+    const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+    Q_ASSERT(settings != 0);
     Q_ASSERT(controller != 0);
 
     setAcceptDrops(true);
-    setRootIsDecorated(false);
     setSortingEnabled(true);
     setUniformRowHeights(true);
     setSelectionBehavior(SelectItems);
     setDragDropMode(QAbstractItemView::DragDrop);
     setDropIndicatorShown(false);
     setAlternatingRowColors(true);
-    setItemsExpandable(false);
+    setRootIsDecorated(settings->expandableFolders());
+    setItemsExpandable(settings->expandableFolders());
 
     setMouseTracking(true);
     viewport()->setAttribute(Qt::WA_Hover);
@@ -118,10 +120,6 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr
     connect(controller->dolphinView(), SIGNAL(additionalInfoChanged()),
             this, SLOT(updateColumnVisibility()));
 
-    // apply the details mode settings to the widget
-    const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
-    Q_ASSERT(settings != 0);
-
     m_font = QFont(settings->fontFamily(), settings->fontSize());
 
 // TODO: Remove this check when 4.3.2 is released and KDE requires it... this
index b531c6f55f02bb1a69d3222f31be7a75e4b4aeb4..5ce9cb6e17ec2372c2c3ed97d7e906669789a70a 100644 (file)
@@ -227,7 +227,7 @@ void DolphinView::setShowPreview(bool show)
     m_iconManager->setShowPreview(show);
     emit showPreviewChanged();
 
-    loadDirectory(viewPropsUrl, true);
+    loadDirectory(viewPropsUrl);
 }
 
 bool DolphinView::showPreview() const
@@ -248,7 +248,7 @@ void DolphinView::setShowHiddenFiles(bool show)
     m_dirLister->setShowingDotFiles(show);
     emit showHiddenFilesChanged();
 
-    loadDirectory(viewPropsUrl, true);
+    loadDirectory(viewPropsUrl);
 }
 
 bool DolphinView::showHiddenFiles() const
@@ -452,7 +452,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::InformationList info)
     if (itemView() != m_detailsView) {
         // the details view requires no reloading of the directory, as it maps
         // the file item delegate info to its columns internally
-        loadDirectory(viewPropsUrl, true);
+        loadDirectory(viewPropsUrl);
     }
 }
 
index 5940c909e44e6307a620676d73dae832289d1ba6..807b91a9ea3ae45a2947db4eef8cce3d2e13dd3f 100644 (file)
@@ -116,11 +116,24 @@ void IconManager::updateIcons(const KFileItemList& items)
 void IconManager::replaceIcon(const KFileItem& item, const QPixmap& pixmap)
 {
     Q_ASSERT(!item.isNull());
+    if (!m_showPreview) {
+        // the preview has been canceled in the meantime
+        return;
+    }
+
+    // check whether the item is part of the directory lister (it is possible
+    // that a preview from an old directory lister is received)
     KDirLister* dirLister = m_dolphinModel->dirLister();
-    if (!m_showPreview || (item.url().directory() != dirLister->url().path())) {
-        // the preview has been canceled in the meanwhile or the preview
-        // job is still working on items of an older URL, hence
-        // the item is not part of the directory model anymore
+    bool isOldPreview = true;
+    const KUrl::List dirs = dirLister->directories();
+    const QString itemDir = item.url().directory();
+    foreach (KUrl url, dirs) {
+        if (url.path() == itemDir) {
+            isOldPreview = false;
+            break;
+        }
+    }
+    if (isOldPreview) {
         return;
     }
 
@@ -192,7 +205,13 @@ void IconManager::applyCutItemEffect()
         return;
     }
 
-    const KFileItemList items(m_dolphinModel->dirLister()->items());
+    KFileItemList items;
+    KDirLister* dirLister = m_dolphinModel->dirLister();
+    const KUrl::List dirs = dirLister->directories();
+    foreach (KUrl url, dirs) {
+        items << dirLister->itemsForDir(url);
+    }
+
     foreach (KFileItem item, items) {
         if (isCutItem(item)) {
             const QModelIndex index = m_dolphinModel->indexForItem(item);