]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
icon renamings:
[dolphin.git] / src / dolphinview.cpp
index 51dbb708caeb8fdaf972ada0b5a2f2b9a9d53d81..f4b533d6194cf45abfc868dd4aa84e24ff794223 100644 (file)
@@ -19,6 +19,8 @@
  ***************************************************************************/
 
 #include "dolphinview.h"
+#include <ktoggleaction.h>
+#include <kactioncollection.h>
 
 #include <QApplication>
 #include <QClipboard>
@@ -88,8 +90,16 @@ DolphinView::DolphinView(QWidget* parent,
 
     m_controller = new DolphinController(this);
     m_controller->setUrl(url);
+
+    // Receiver of the DolphinView signal 'urlChanged()' don't need
+    // to care whether the internal controller changed the URL already or whether
+    // the controller just requested an URL change and will be updated later.
+    // In both cases the URL has been changed:
     connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
             this, SIGNAL(urlChanged(const KUrl&)));
+    connect(m_controller, SIGNAL(requestUrlChange(const KUrl&)),
+            this, SIGNAL(urlChanged(const KUrl&)));
+
     connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)),
             this, SLOT(openContextMenu(const QPoint&)));
     connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&, const QModelIndex&, QWidget*)),
@@ -194,7 +204,6 @@ void DolphinView::setMode(Mode mode)
     const bool categorized = m_storedCategorizedSorting && supportsCategorizedSorting();
     if (categorized != m_proxyModel->isCategorizedModel()) {
         m_proxyModel->setCategorizedModel(categorized);
-        m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
         emit categorizedSortingChanged();
     }
 
@@ -263,7 +272,6 @@ void DolphinView::setCategorizedSorting(bool categorized)
 
     m_storedCategorizedSorting = categorized;
     m_proxyModel->setCategorizedModel(categorized);
-    m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
 
     emit categorizedSortingChanged();
 }
@@ -466,18 +474,11 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl)
         return;
     }
 
-    const bool restoreColumnView =  !rootUrl.isEmpty()
-                                    && !rootUrl.equals(url, KUrl::CompareWithoutTrailingSlash)
-                                    && rootUrl.isParentOf(url);
-
     m_controller->setUrl(url); // emits urlChanged, which we forward
 
-    if (restoreColumnView) {
+    if (!rootUrl.isEmpty() && rootUrl.isParentOf(url)) {
         applyViewProperties(rootUrl);
         loadDirectory(rootUrl);
-        // Restoring the column view relies on the URL-history. It might be possible
-        // that the view properties have been changed or deleted in the meantime, so
-        // it cannot be asserted that really a column view has been created:
         if (itemView() == m_columnView) {
             m_columnView->setRootUrl(rootUrl);
             m_columnView->showColumn(url);
@@ -487,11 +488,41 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl)
         loadDirectory(url);
     }
 
-    itemView()->setFocus();
-
     emit startedPathLoading(url);
 }
 
+void DolphinView::setNameFilter(const QString& nameFilter)
+{
+    // The name filter of KDirLister does a 'hard' filtering, which
+    // means that only the items are shown where the names match
+    // exactly the filter. This is non-transparent for the user, which
+    // just wants to have a 'soft' filtering: does the name contain
+    // the filter string?
+    QString adjustedFilter(nameFilter);
+    adjustedFilter.insert(0, '*');
+    adjustedFilter.append('*');
+
+    m_dirLister->setNameFilter(adjustedFilter);
+    m_dirLister->emitChanges();
+
+    if (isColumnViewActive()) {
+        // adjusting the directory lister is not enough in the case of the
+        // column view, as each column has its own directory lister internally...
+        m_columnView->setNameFilter(nameFilter);
+    }
+}
+
+void DolphinView::calculateItemCount(int& fileCount, int& folderCount)
+{
+    foreach (KFileItem item, m_dirLister->items()) {
+        if (item.isDir()) {
+            ++folderCount;
+        } else {
+            ++fileCount;
+        }
+    }
+}
+
 void DolphinView::setUrl(const KUrl& url)
 {
     updateView(url, KUrl());
@@ -631,7 +662,6 @@ void DolphinView::applyViewProperties(const KUrl& url)
     const bool categorized = m_storedCategorizedSorting && supportsCategorizedSorting();
     if (categorized != m_proxyModel->isCategorizedModel()) {
         m_proxyModel->setCategorizedModel(categorized);
-        m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder());
         emit categorizedSortingChanged();
     }
 
@@ -854,7 +884,6 @@ void DolphinView::createView()
             this, SLOT(emitContentsMoved()));
     connect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)),
             this, SLOT(emitContentsMoved()));
-    view->setFocus();
 }
 
 QAbstractItemView* DolphinView::itemView() const
@@ -927,4 +956,47 @@ void DolphinView::applyCutItemEffect()
     }
 }
 
+KToggleAction* DolphinView::iconsModeAction(KActionCollection* actionCollection)
+{
+    KToggleAction* iconsView = actionCollection->add<KToggleAction>("icons");
+    iconsView->setText(i18nc("@action:inmenu View Mode", "Icons"));
+    iconsView->setShortcut(Qt::CTRL | Qt::Key_1);
+    iconsView->setIcon(KIcon("fileview-icon"));
+    iconsView->setData(QVariant::fromValue(IconsView));
+    return iconsView;
+}
+
+KToggleAction* DolphinView::detailsModeAction(KActionCollection* actionCollection)
+{
+    KToggleAction* detailsView = actionCollection->add<KToggleAction>("details");
+    detailsView->setText(i18nc("@action:inmenu View Mode", "Details"));
+    detailsView->setShortcut(Qt::CTRL | Qt::Key_2);
+    detailsView->setIcon(KIcon("fileview-detailed"));
+    detailsView->setData(QVariant::fromValue(DetailsView));
+    return detailsView;
+}
+
+KToggleAction* DolphinView::columnsModeAction(KActionCollection* actionCollection)
+{
+    KToggleAction* columnView = actionCollection->add<KToggleAction>("columns");
+    columnView->setText(i18nc("@action:inmenu View Mode", "Columns"));
+    columnView->setShortcut(Qt::CTRL | Qt::Key_3);
+    columnView->setIcon(KIcon("fileview-column"));
+    columnView->setData(QVariant::fromValue(ColumnView));
+    return columnView;
+}
+
+QString DolphinView::currentViewModeActionName() const
+{
+    switch (m_mode) {
+    case DolphinView::IconsView:
+        return "icons";
+    case DolphinView::DetailsView:
+        return "details";
+    case DolphinView::ColumnView:
+        return "columns";
+    }
+    return QString(); // can't happen
+}
+
 #include "dolphinview.moc"