]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Provide the "sort by" actions in dolphinpart (konqueror); share and simplify the...
[dolphin.git] / src / dolphinmainwindow.cpp
index c1d6cef39b583d0f1e90ac1f5388a3448524e40d..668f92b7c6cea56b403fe3e7376cf09e9b4f84bc 100644 (file)
@@ -26,6 +26,7 @@
 #include <config-nepomuk.h>
 
 #include "dolphinapplication.h"
+#include "dolphinfileplacesview.h"
 #include "dolphinnewmenu.h"
 #include "dolphinsettings.h"
 #include "dolphinsettingsdialog.h"
 #include "mainwindowadaptor.h"
 #include "terminalsidebarpage.h"
 #include "treeviewsidebarpage.h"
-#include "kurlnavigator.h"
 #include "viewpropertiesdialog.h"
 #include "viewproperties.h"
-#include "kfileplacesmodel.h"
-#include "kfileplacesview.h"
 
 #include "dolphin_generalsettings.h"
 #include "dolphin_iconsmodesettings.h"
@@ -51,6 +49,7 @@
 #include <kdesktopfile.h>
 #include <kdeversion.h>
 #include <kfiledialog.h>
+#include <kfileplacesmodel.h>
 #include <kglobal.h>
 #include <kicon.h>
 #include <kiconloader.h>
@@ -60,6 +59,7 @@
 #include <kmenu.h>
 #include <kmenubar.h>
 #include <kmessagebox.h>
+#include <kurlnavigator.h>
 #include <konqmimedata.h>
 #include <kpropertiesdialog.h>
 #include <kprotocolinfo.h>
@@ -177,51 +177,11 @@ void DolphinMainWindow::changeSelection(const KFileItemList& selection)
     activeViewContainer()->view()->changeSelection(selection);
 }
 
-void DolphinMainWindow::slotViewModeChanged()
+void DolphinMainWindow::slotEditableStateChanged(bool editable)
 {
-    updateViewActions();
-}
-
-void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting)
-{
-    QAction* action = 0;
-    switch (sorting) {
-    case DolphinView::SortByName:
-        action = actionCollection()->action("sort_by_name");
-        break;
-    case DolphinView::SortBySize:
-        action = actionCollection()->action("sort_by_size");
-        break;
-    case DolphinView::SortByDate:
-        action = actionCollection()->action("sort_by_date");
-        break;
-    case DolphinView::SortByPermissions:
-        action = actionCollection()->action("sort_by_permissions");
-        break;
-    case DolphinView::SortByOwner:
-        action = actionCollection()->action("sort_by_owner");
-        break;
-    case DolphinView::SortByGroup:
-        action = actionCollection()->action("sort_by_group");
-        break;
-    case DolphinView::SortByType:
-        action = actionCollection()->action("sort_by_type");
-        break;
-#ifdef HAVE_NEPOMUK
-    case DolphinView::SortByRating:
-        action = actionCollection()->action("sort_by_rating");
-        break;
-    case DolphinView::SortByTags:
-        action = actionCollection()->action("sort_by_tags");
-        break;
-#endif
-    default:
-        break;
-    }
-
-    if (action != 0) {
-        action->setChecked(true);
-    }
+    KToggleAction* editableLocationAction =
+        static_cast<KToggleAction*>(actionCollection()->action("editable_location"));
+    editableLocationAction->setChecked(editable);
 }
 
 void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
@@ -368,7 +328,7 @@ void DolphinMainWindow::slotHandlePlacesError(const QString &message)
 
 void DolphinMainWindow::slotUndoAvailable(bool available)
 {
-    QAction* undoAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Undo));
+    QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo));
     if (undoAction != 0) {
         undoAction->setEnabled(available);
     }
@@ -412,7 +372,7 @@ void DolphinMainWindow::slotUndoAvailable(bool available)
 
 void DolphinMainWindow::slotUndoTextChanged(const QString& text)
 {
-    QAction* undoAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Undo));
+    QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo));
     if (undoAction != 0) {
         undoAction->setText(text);
     }
@@ -441,7 +401,7 @@ void DolphinMainWindow::paste()
 
 void DolphinMainWindow::updatePasteAction()
 {
-    QAction* pasteAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Paste));
+    QAction* pasteAction = actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
     if (pasteAction == 0) {
         return;
     }
@@ -475,61 +435,6 @@ void DolphinMainWindow::invertSelection()
     m_activeViewContainer->view()->invertSelection();
 }
 
-void DolphinMainWindow::setViewMode(QAction* action)
-{
-    const DolphinView::Mode mode = action->data().value<DolphinView::Mode>();
-    m_activeViewContainer->view()->setMode(mode);
-}
-
-void DolphinMainWindow::sortByName()
-{
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByName);
-}
-
-void DolphinMainWindow::sortBySize()
-{
-    m_activeViewContainer->view()->setSorting(DolphinView::SortBySize);
-}
-
-void DolphinMainWindow::sortByDate()
-{
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByDate);
-}
-
-void DolphinMainWindow::sortByPermissions()
-{
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByPermissions);
-}
-
-void DolphinMainWindow::sortByOwner()
-{
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByOwner);
-}
-
-void DolphinMainWindow::sortByGroup()
-{
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByGroup);
-}
-
-void DolphinMainWindow::sortByType()
-{
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByType);
-}
-
-void DolphinMainWindow::sortByRating()
-{
-#ifdef HAVE_NEPOMUK
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByRating);
-#endif
-}
-
-void DolphinMainWindow::sortByTags()
-{
-#ifdef HAVE_NEPOMUK
-    m_activeViewContainer->view()->setSorting(DolphinView::SortByTags);
-#endif
-}
-
 void DolphinMainWindow::toggleSplitView()
 {
     if (m_viewContainer[SecondaryView] == 0) {
@@ -815,8 +720,8 @@ void DolphinMainWindow::setupActions()
                           SLOT(undo()),
                           actionCollection());
 
-    //Need to remove shift+del from cut action, else the shortcut for deletejob
-    //doesn't work
+    // need to remove shift+del from cut action, else the shortcut for deletejob
+    // doesn't work
     KAction* cut = KStandardAction::cut(this, SLOT(cut()), actionCollection());
     KShortcut cutShortcut = cut->shortcut();
     cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty);
@@ -835,86 +740,7 @@ void DolphinMainWindow::setupActions()
     connect(invertSelection, SIGNAL(triggered()), this, SLOT(invertSelection()));
 
     // setup 'View' menu
-
-    KToggleAction* iconsView = DolphinView::iconsModeAction(actionCollection());
-    KToggleAction* detailsView = DolphinView::detailsModeAction(actionCollection());
-    KToggleAction* columnView = DolphinView::columnsModeAction(actionCollection());
-
-    QActionGroup* viewModeGroup = new QActionGroup(this);
-    viewModeGroup->addAction(iconsView);
-    viewModeGroup->addAction(detailsView);
-    viewModeGroup->addAction(columnView);
-    connect(viewModeGroup, SIGNAL(triggered(QAction*)), this, SLOT(setViewMode(QAction*)));
-
-    //QActionGroup* sortActionGroup = DolphinView::createSortActionGroup(actionCollection());
-    //connect(sortActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(sortActionGroupTriggered(QAction*)));
-
-    // TODO use a QActionGroup
-
-    KToggleAction* sortByName = actionCollection()->add<KToggleAction>("sort_by_name");
-    sortByName->setText(i18nc("@action:inmenu Sort By", "Name"));
-    connect(sortByName, SIGNAL(triggered()), this, SLOT(sortByName()));
-
-    KToggleAction* sortBySize = actionCollection()->add<KToggleAction>("sort_by_size");
-    sortBySize->setText(i18nc("@action:inmenu Sort By", "Size"));
-    connect(sortBySize, SIGNAL(triggered()), this, SLOT(sortBySize()));
-
-    KToggleAction* sortByDate = actionCollection()->add<KToggleAction>("sort_by_date");
-    sortByDate->setText(i18nc("@action:inmenu Sort By", "Date"));
-    connect(sortByDate, SIGNAL(triggered()), this, SLOT(sortByDate()));
-
-    KToggleAction* sortByPermissions = actionCollection()->add<KToggleAction>("sort_by_permissions");
-    sortByPermissions->setText(i18nc("@action:inmenu Sort By", "Permissions"));
-    connect(sortByPermissions, SIGNAL(triggered()), this, SLOT(sortByPermissions()));
-
-    KToggleAction* sortByOwner = actionCollection()->add<KToggleAction>("sort_by_owner");
-    sortByOwner->setText(i18nc("@action:inmenu Sort By", "Owner"));
-    connect(sortByOwner, SIGNAL(triggered()), this, SLOT(sortByOwner()));
-
-    KToggleAction* sortByGroup = actionCollection()->add<KToggleAction>("sort_by_group");
-    sortByGroup->setText(i18nc("@action:inmenu Sort By", "Group"));
-    connect(sortByGroup, SIGNAL(triggered()), this, SLOT(sortByGroup()));
-
-    KToggleAction* sortByType = actionCollection()->add<KToggleAction>("sort_by_type");
-    sortByType->setText(i18nc("@action:inmenu Sort By", "Type"));
-    connect(sortByType, SIGNAL(triggered()), this, SLOT(sortByType()));
-
-    // TODO: Hided "sort by rating" and "sort by tags" as without caching the performance
-    // is too slow currently (Nepomuk will support caching in future releases).
-    //
-    // KToggleAction* sortByRating = actionCollection()->add<KToggleAction>("sort_by_rating");
-    // sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating"));
-    //
-    // KToggleAction* sortByTags = actionCollection()->add<KToggleAction>("sort_by_tags");
-    // sortByTags->setText(i18nc("@action:inmenu Sort By", "Tags"));
-    //
-#ifdef HAVE_NEPOMUK
-    // if (MetaDataWidget::metaDataAvailable()) {
-    //     connect(sortByRating, SIGNAL(triggered()), this, SLOT(sortByRating()));
-    //     connect(sortByTags, SIGNAL(triggered()), this, SLOT(sortByTags()));
-    // }
-    // else {
-    //     sortByRating->setEnabled(false);
-    //     sortByTags->setEnabled(false);
-    // }
-#else
-    // sortByRating->setEnabled(false);
-    // sortByTags->setEnabled(false);
-#endif
-
-    QActionGroup* sortGroup = new QActionGroup(this);
-    sortGroup->addAction(sortByName);
-    sortGroup->addAction(sortBySize);
-    sortGroup->addAction(sortByDate);
-    sortGroup->addAction(sortByPermissions);
-    sortGroup->addAction(sortByOwner);
-    sortGroup->addAction(sortByGroup);
-    sortGroup->addAction(sortByType);
-
-    // TODO: Hided "sort by rating" and "sort by tags" as without caching the performance
-    // is too slow currently (Nepomuk will support caching in future releases).
-    //sortGroup->addAction(sortByRating);
-    //sortGroup->addAction(sortByTags);
+    // (note that most of it is set up in DolphinViewActionHandler)
 
     KAction* split = actionCollection()->addAction("split_view");
     split->setShortcut(Qt::Key_F3);
@@ -932,9 +758,7 @@ void DolphinMainWindow::setupActions()
     stop->setIcon(KIcon("process-stop"));
     connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading()));
 
-    // TODO: the URL navigator must emit a signal if the editable state has been
-    // changed, so that the corresponding showFullLocation action is updated. Also
-    // the naming "Show full Location" is currently confusing...
+    // TODO: the naming "Show full Location" is currently confusing...
     KToggleAction* showFullLocation = actionCollection()->add<KToggleAction>("editable_location");
     showFullLocation->setText(i18nc("@action:inmenu Navigation Bar", "Show Full Location"));
     showFullLocation->setShortcut(Qt::CTRL | Qt::Key_L);
@@ -1051,7 +875,8 @@ void DolphinMainWindow::setupDockWidgets()
     QDockWidget* placesDock = new QDockWidget(i18nc("@title:window", "Places"));
     placesDock->setObjectName("placesDock");
     placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
-    KFilePlacesView* placesView = new KFilePlacesView(placesDock);
+
+    DolphinFilePlacesView* placesView = new DolphinFilePlacesView(placesDock);
     placesDock->setWidget(placesView);
     placesView->setModel(DolphinSettings::instance().placesModel());
     placesView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -1119,14 +944,6 @@ void DolphinMainWindow::updateViewActions()
 {
     m_actionHandler->updateViewActions();
 
-    const DolphinView* view = m_activeViewContainer->view();
-    QAction* action = actionCollection()->action(view->currentViewModeActionName());
-    if (action != 0) {
-        action->setChecked(true);
-    }
-
-    slotSortingChanged(view->sorting());
-
     QAction* showFilterBarAction = actionCollection()->action("show_filter_bar");
     showFilterBarAction->setChecked(m_activeViewContainer->isFilterBarVisible());
 
@@ -1139,7 +956,7 @@ void DolphinMainWindow::updateViewActions()
 
 void DolphinMainWindow::updateGoActions()
 {
-    QAction* goUpAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Up));
+    QAction* goUpAction = actionCollection()->action(KStandardAction::name(KStandardAction::Up));
     const KUrl& currentUrl = m_activeViewContainer->url();
     goUpAction->setEnabled(currentUrl.upUrl() != currentUrl);
 }
@@ -1156,10 +973,6 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
             this, SLOT(updateFilterBarAction(bool)));
 
     DolphinView* view = container->view();
-    connect(view, SIGNAL(modeChanged()),
-            this, SLOT(slotViewModeChanged()));
-    connect(view, SIGNAL(sortingChanged(DolphinView::Sorting)),
-            this, SLOT(slotSortingChanged(DolphinView::Sorting)));
     connect(view, SIGNAL(selectionChanged(KFileItemList)),
             this, SLOT(slotSelectionChanged(KFileItemList)));
     connect(view, SIGNAL(requestItemInfo(KFileItem)),
@@ -1174,6 +987,8 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
             this, SLOT(changeUrl(const KUrl&)));
     connect(navigator, SIGNAL(historyChanged()),
             this, SLOT(slotHistoryChanged()));
+    connect(navigator, SIGNAL(editableStateChanged(bool)),
+            this, SLOT(slotEditableStateChanged(bool)));
 }
 
 void DolphinMainWindow::updateSplitAction()