]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinviewcontainer.cpp
Improvements for slow sorting roles
[dolphin.git] / src / dolphinviewcontainer.cpp
index 47195bbca2a7b4f4b032788037fa8f149212890a..1c15c88a99c6d8699d5d053a1c42b86b974ca7bf 100644 (file)
@@ -30,7 +30,6 @@
 #include <KDesktopFile>
 #include <KFileItemDelegate>
 #include <KFilePlacesModel>
-#include <KGlobalSettings>
 #include <KLocale>
 #include <KIconEffect>
 #include <KIO/NetAccess>
@@ -48,8 +47,9 @@
 #include "dolphinmainwindow.h"
 #include "filterbar/filterbar.h"
 #include "search/dolphinsearchbox.h"
-#include "settings/dolphinsettings.h"
 #include "statusbar/dolphinstatusbar.h"
+#include "views/dolphinplacesmodel.h"
+#include "views/draganddrophelper.h"
 #include "views/viewmodecontroller.h"
 #include "views/viewproperties.h"
 
@@ -70,7 +70,7 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) :
     m_topLayout->setSpacing(0);
     m_topLayout->setMargin(0);
 
-    m_urlNavigator = new KUrlNavigator(DolphinSettings::instance().placesModel(), url, this);
+    m_urlNavigator = new KUrlNavigator(DolphinPlacesModel::instance(), url, this);
     connect(m_urlNavigator, SIGNAL(urlsDropped(KUrl,QDropEvent*)),
             this, SLOT(dropUrls(KUrl,QDropEvent*)));
     connect(m_urlNavigator, SIGNAL(activated()),
@@ -78,7 +78,7 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) :
     connect(m_urlNavigator->editor(), SIGNAL(completionModeChanged(KGlobalSettings::Completion)),
             this, SLOT(saveUrlCompletionMode(KGlobalSettings::Completion)));
 
-    const GeneralSettings* settings = DolphinSettings::instance().generalSettings();
+    const GeneralSettings* settings = GeneralSettings::self();
     m_urlNavigator->setUrlEditable(settings->editableUrl());
     m_urlNavigator->setShowFullPath(settings->showFullPath());
     m_urlNavigator->setHomeUrl(KUrl(settings->homeUrl()));
@@ -102,7 +102,8 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) :
     connect(m_view, SIGNAL(startedPathLoading(KUrl)),     this, SLOT(slotStartedPathLoading()));
     connect(m_view, SIGNAL(finishedPathLoading(KUrl)),    this, SLOT(slotFinishedPathLoading()));
     connect(m_view, SIGNAL(itemCountChanged()),           this, SLOT(delayedStatusBarUpdate()));
-    connect(m_view, SIGNAL(pathLoadingProgress(int)),     this, SLOT(updateProgress(int)));
+    connect(m_view, SIGNAL(pathLoadingProgress(int)),     this, SLOT(updateLoadingProgress(int)));
+    connect(m_view, SIGNAL(sortProgress(int)),            this, SLOT(updateSortProgress(int)));
     connect(m_view, SIGNAL(infoMessage(QString)),         this, SLOT(showInfoMessage(QString)));
     connect(m_view, SIGNAL(errorMessage(QString)),        this, SLOT(showErrorMessage(QString)));
     connect(m_view, SIGNAL(urlIsFileError(KUrl)),         this, SLOT(openFile(KUrl)));
@@ -211,20 +212,20 @@ DolphinSearchBox* DolphinViewContainer::searchBox()
     return m_searchBox;
 }
 
-void DolphinViewContainer::refresh()
+void DolphinViewContainer::readSettings()
 {
-    GeneralSettings* settings = DolphinSettings::instance().generalSettings();
-    if (settings->modifiedStartupSettings()) {
+    if (GeneralSettings::modifiedStartupSettings()) {
         // The startup settings should only get applied if they have been
         // modified by the user. Otherwise keep the (possibly) different current
         // settings of the URL navigator and the filterbar.
-        m_urlNavigator->setUrlEditable(settings->editableUrl());
-        m_urlNavigator->setShowFullPath(settings->showFullPath());
-        setFilterBarVisible(settings->filterBar());
+        m_urlNavigator->setUrlEditable(GeneralSettings::editableUrl());
+        m_urlNavigator->setShowFullPath(GeneralSettings::showFullPath());
+        m_urlNavigator->setHomeUrl(KUrl(GeneralSettings::homeUrl()));
+        setFilterBarVisible(GeneralSettings::filterBar());
     }
 
-    m_view->refresh();
-    m_statusBar->refresh();
+    m_view->readSettings();
+    m_statusBar->readSettings();
 }
 
 bool DolphinViewContainer::isFilterBarVisible() const
@@ -332,7 +333,7 @@ void DolphinViewContainer::updateStatusBar()
     }
 }
 
-void DolphinViewContainer::updateProgress(int percent)
+void DolphinViewContainer::updateLoadingProgress(int percent)
 {
     if (m_statusBar->progressText().isEmpty()) {
         m_statusBar->setProgressText(i18nc("@info:progress", "Loading folder..."));
@@ -340,6 +341,14 @@ void DolphinViewContainer::updateProgress(int percent)
     m_statusBar->setProgress(percent);
 }
 
+void DolphinViewContainer::updateSortProgress(int percent)
+{
+    if (m_statusBar->progressText().isEmpty()) {
+        m_statusBar->setProgressText(i18nc("@info:progress", "Sorting..."));
+    }
+    m_statusBar->setProgress(percent);
+}
+
 void DolphinViewContainer::slotStartedPathLoading()
 {
     if (isSearchUrl(url())) {
@@ -352,7 +361,7 @@ void DolphinViewContainer::slotStartedPathLoading()
         // Trigger an undetermined progress indication. The progress
         // information in percent will be triggered by the percent() signal
         // of the directory lister later.
-        updateProgress(-1);
+        updateLoadingProgress(-1);
     }
 }
 
@@ -374,6 +383,11 @@ void DolphinViewContainer::slotFinishedPathLoading()
 
 void DolphinViewContainer::slotItemActivated(const KFileItem& item)
 {
+    // It is possible to activate items on inactive views by
+    // drag & drop operations. Assure that activating an item always
+    // results in an active view.
+    m_view->setActive(true);
+
     KUrl url = item.targetUrl();
 
     if (item.isDir()) {
@@ -381,9 +395,7 @@ void DolphinViewContainer::slotItemActivated(const KFileItem& item)
         return;
     }
 
-    const GeneralSettings* settings = DolphinSettings::instance().generalSettings();
-    const bool browseThroughArchives = settings->browseThroughArchives();
-    if (browseThroughArchives && item.isFile() && url.isLocalFile()) {
+    if (GeneralSettings::browseThroughArchives() && item.isFile() && url.isLocalFile()) {
         // Generic mechanism for redirecting to tar:/<path>/ when clicking on a tar file,
         // zip:/<path>/ when clicking on a zip file, etc.
         // The .protocol file specifies the mimetype that the kioslave handles.
@@ -427,12 +439,7 @@ void DolphinViewContainer::showItemInfo(const KFileItem& item)
             m_statusBar->clear();
         }
     } else {
-        QString message;
-        if (item.isDir()) {
-            message = item.name();
-        } else {
-            message = i18nc("@info:status filename (type)", "%1 (%2)", item.name(), item.mimeComment());
-        }
+        const QString message = item.isDir() ? item.text() : item.getStatusBarInfo();
         m_statusBar->setMessage(message, DolphinStatusBar::Default);
     }
 }
@@ -536,9 +543,7 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const KUrl& url)
 
 void DolphinViewContainer::dropUrls(const KUrl& destination, QDropEvent* event)
 {
-    Q_UNUSED(destination);
-    Q_UNUSED(event);
-    //DragAndDropHelper::instance().dropUrls(KFileItem(), destination, event, this);
+    DragAndDropHelper::dropUrls(KFileItem(), destination, event);
 }
 
 void DolphinViewContainer::redirect(const KUrl& oldUrl, const KUrl& newUrl)
@@ -564,9 +569,7 @@ void DolphinViewContainer::requestFocus()
 
 void DolphinViewContainer::saveUrlCompletionMode(KGlobalSettings::Completion completion)
 {
-    DolphinSettings& settings = DolphinSettings::instance();
-    settings.generalSettings()->setUrlCompletionMode(completion);
-    settings.save();
+    GeneralSettings::setUrlCompletionMode(completion);
 }
 
 void DolphinViewContainer::slotHistoryChanged()