]> cloud.milkyroute.net Git - dolphin.git/commitdiff
DolphinPart: provide a way to switch between view modes in konqueror.
authorDavid Faure <faure@kde.org>
Wed, 10 Oct 2007 23:01:35 +0000 (23:01 +0000)
committerDavid Faure <faure@kde.org>
Wed, 10 Oct 2007 23:01:35 +0000 (23:01 +0000)
Factorized those actions between dolphinmainwindow and dolphinpart (see new methods in dolphinview), and simplified mainwindow code by using the signal from the action group and the QVariant data of the actions (standard Qt4 solution for a group of actions).

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

src/dolphinmainwindow.cpp
src/dolphinmainwindow.h
src/dolphinpart.cpp
src/dolphinpart.h
src/dolphinpart.rc
src/dolphinui.rc
src/dolphinview.cpp
src/dolphinview.h

index a7cbc527afcc5897b1589d91adfa0fd9ebb0a332..74869e9674a26e86c7c1d6b03408934d604dabd1 100644 (file)
@@ -698,19 +698,11 @@ void DolphinMainWindow::invertSelection()
     clearStatusBar();
     m_activeViewContainer->view()->invertSelection();
 }
-void DolphinMainWindow::setIconsView()
-{
-    m_activeViewContainer->view()->setMode(DolphinView::IconsView);
-}
 
-void DolphinMainWindow::setDetailsView()
+void DolphinMainWindow::setViewMode(QAction* action)
 {
-    m_activeViewContainer->view()->setMode(DolphinView::DetailsView);
-}
-
-void DolphinMainWindow::setColumnView()
-{
-    m_activeViewContainer->view()->setMode(DolphinView::ColumnView);
+    const DolphinView::Mode mode = action->data().value<DolphinView::Mode>();
+    m_activeViewContainer->view()->setMode(mode);
 }
 
 void DolphinMainWindow::sortByName()
@@ -1149,28 +1141,16 @@ void DolphinMainWindow::setupActions()
                              SLOT(zoomOut()),
                              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"));
-    connect(iconsView, SIGNAL(triggered()), this, SLOT(setIconsView()));
-
-    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"));
-    connect(detailsView, SIGNAL(triggered()), this, SLOT(setDetailsView()));
 
-    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"));
-    connect(columnView, SIGNAL(triggered()), this, SLOT(setColumnView()));
+    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*)));
 
     KToggleAction* sortByName = actionCollection()->add<KToggleAction>("sort_by_name");
     sortByName->setText(i18nc("@action:inmenu Sort By", "Name"));
@@ -1469,21 +1449,7 @@ void DolphinMainWindow::updateViewActions()
         zoomOutAction->setEnabled(view->isZoomOutPossible());
     }
 
-    QAction* action = 0;
-    switch (view->mode()) {
-    case DolphinView::IconsView:
-        action = actionCollection()->action("icons");
-        break;
-    case DolphinView::DetailsView:
-        action = actionCollection()->action("details");
-        break;
-    case DolphinView::ColumnView:
-        action = actionCollection()->action("columns");
-        break;
-    default:
-        break;
-    }
-
+    QAction* action = actionCollection()->action(view->currentViewModeActionName());
     if (action != 0) {
         KToggleAction* toggleAction = static_cast<KToggleAction*>(action);
         toggleAction->setChecked(true);
index 991312c0cb97b79ec4689d4a1757be329ba6fb65..dac0c0be8fada949ffc85c04592521fe34f13ddf 100644 (file)
@@ -251,14 +251,8 @@ private slots:
      */
     void invertSelection();
 
-    /** The current active view is switched to the icons mode. */
-    void setIconsView();
-
-    /** The current active view is switched to the details mode. */
-    void setDetailsView();
-
-    /** The current active view is switched to the column mode. */
-    void setColumnView();
+    /** The current active view is switched to a new view mode. */
+    void setViewMode(QAction *);
 
     /** The sorting of the current view should be done by the name. */
     void sortByName();
index 092d2e14a68f39e9b44066a054c32cc9a6b234e5..31cde2931d7012961ae13148a1f30bf6df8139ac 100644 (file)
@@ -18,6 +18,9 @@
 */
 
 #include "dolphinpart.h"
+#include <kactioncollection.h>
+#include <ktoggleaction.h>
+#include <QActionGroup>
 #include "dolphinsortfilterproxymodel.h"
 #include "dolphinview.h"
 #include "dolphinmodel.h"
@@ -67,6 +70,8 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QStringLi
                              m_proxyModel);
     setWidget(m_view);
 
+    setXMLFile("dolphinpart.rc");
+
     connect(m_view, SIGNAL(infoMessage(QString)),
             this, SLOT(slotInfoMessage(QString)));
     connect(m_view, SIGNAL(errorMessage(QString)),
@@ -81,7 +86,11 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QStringLi
     connect(m_view, SIGNAL(requestItemInfo(KFileItem)),
             this, SLOT(slotRequestItemInfo(KFileItem)));
 
-    // TODO provide a way to switch from iconview to listview (and others)
+    createActions();
+    updateViewActions();
+
+    // TODO provide these actions in the menu, merged with the existing view-mode-actions somehow
+    // [Q_PROPERTY introspection?]
 
     // TODO connect to urlsDropped
 
@@ -102,6 +111,24 @@ DolphinPart::~DolphinPart()
     delete m_dirLister;
 }
 
+void DolphinPart::createActions()
+{
+    QActionGroup* viewModeActions = new QActionGroup(this);
+    viewModeActions->addAction(DolphinView::iconsModeAction(actionCollection()));
+    viewModeActions->addAction(DolphinView::detailsModeAction(actionCollection()));
+    viewModeActions->addAction(DolphinView::columnsModeAction(actionCollection()));
+    connect(viewModeActions, SIGNAL(triggered(QAction*)), this, SLOT(slotViewModeActionTriggered(QAction*)));
+}
+
+void DolphinPart::updateViewActions()
+{
+    QAction* action = actionCollection()->action(m_view->currentViewModeActionName());
+    if (action != 0) {
+        KToggleAction* toggleAction = static_cast<KToggleAction*>(action);
+        toggleAction->setChecked(true);
+    }
+}
+
 KAboutData* DolphinPart::createAboutData()
 {
     return new KAboutData("dolphinpart", 0, ki18nc("@title", "Dolphin Part"), "0.1");
@@ -191,4 +218,10 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&)
     emit m_extension->popupMenu( QCursor::pos(), items, KParts::OpenUrlArguments(), KParts::BrowserArguments(), popupFlags );
 }
 
+void DolphinPart::slotViewModeActionTriggered(QAction* action)
+{
+    const DolphinView::Mode mode = action->data().value<DolphinView::Mode>();
+    m_view->setMode(mode);
+}
+
 #include "dolphinpart.moc"
index b0def14f4627d504285e412c59cabc3d48f2c0f2..e4a0ffc9b32a415fdd3abed228a1c4e95991f74a 100644 (file)
@@ -67,6 +67,14 @@ private Q_SLOTS:
      * @url   URL which contains \a item.
      */
     void slotOpenContextMenu(const KFileItem& item, const KUrl& url);
+    /**
+     * Emitted when the user requested a change of view mode
+     */
+    void slotViewModeActionTriggered(QAction*);
+
+private:
+    void createActions();
+    void updateViewActions();
 
 private:
     DolphinView* m_view;
index 8d1c8b69c3fce7bea45c73efd06983e3c419a92f..2247c57b82232da0119301dfe72c9fbbf56af19c 100644 (file)
@@ -1 +1,58 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui version="2" name="dolphinpart" >
+ <MenuBar>
+   <Menu name="edit">
+   <Action name="select_all" />
+   <Action name="invert_selection" />
+  </Menu>
+  <Menu name="view">
+   <Menu name="sort">
+    <text context="@title:menu">Sort by</text>
+    <Action name="sort_by_name" />
+    <Action name="sort_by_size" />
+    <Action name="sort_by_date" />
+    <Action name="sort_by_permissions" />
+    <Action name="sort_by_owner" />
+    <Action name="sort_by_group" />
+    <Action name="sort_by_type" />
+    <Action name="sort_by_rating" />
+    <Action name="sort_by_tags" />
+    <Separator/>
+    <Action name="descending" />
+   </Menu>
+   <Menu name="additional_info">
+    <text context="@title:menu">Additional Information</text>
+    <Action name="show_mime_info" />
+    <Action name="show_size_info" />
+    <Action name="show_date_info" />
+   </Menu>
+   <Action name="show_preview" />
+   <Action name="show_in_groups" />
+   <Action name="show_hidden_files" />
+   <Menu name="panels">
+    <text context="@title:menu">Panels</text>
+    <Action name="show_places_panel" />
+    <Action name="show_info_panel" />
+    <Action name="show_folders_panel" />
+    <Action name="show_terminal_panel" />
+   </Menu>
+   <Menu name="navigation_bar">
+    <text context="@title:menu">Navigation Bar</text>
+    <Action name="editable_location" />
+    <Action name="edit_location" />
+   </Menu>
+   <Separator/>
+   <Action name="view_properties" />
+  </Menu>
+  <Menu name="tools">
+    <Action name="find_file" />
+    <Action name="show_filter_bar" />
+    <Action name="compare_files" />
+  </Menu>
+</MenuBar>
+<ToolBar name="mainToolBar"><text context="@title:menu">Dolphin Toolbar</text>
+  <Action name="icons" />
+  <Action name="details" />
+  <Action name="columns" />
+</ToolBar>
+</kpartgui>
index 21d10c5f796826a01d291cf5c4c4e65d17878214..f43b8761f6a32f26dfd3c4dce56de11ff29c0d99 100644 (file)
   <Action name="split_view" />
  </ToolBar>
  <ActionProperties>
-  <Action shortcut="Backspace;XF86Back" name="go_back" />
+  <Action shortcut="Backspace; XF86Back" name="go_back" />
  </ActionProperties>
 </kpartgui>
index 59341b65ba1bac676cab7a883cafd98ab6ae08d0..ecc4dc3419b4fc3aa8ffe5ba8dd23e0219bd1d90 100644 (file)
@@ -19,6 +19,8 @@
  ***************************************************************************/
 
 #include "dolphinview.h"
+#include <ktoggleaction.h>
+#include <kactioncollection.h>
 
 #include <QApplication>
 #include <QClipboard>
@@ -960,4 +962,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"
index 4e76c87c220788d4aaa75c8d3cdbb3de623c6118..aef541a89cbf5999dfd1223d70758350125da43f 100644 (file)
@@ -37,6 +37,7 @@
 #include <QListView>
 #include <QWidget>
 
+class KToggleAction;
 class DolphinController;
 class KDirLister;
 class KFileItemDelegate;
@@ -319,6 +320,29 @@ public:
      */
     void calculateItemCount(int& fileCount, int& folderCount);
 
+    /**
+     * Returns the "switch to icons mode" action.
+     * This code is here to share it between the mainwindow and the part
+     */
+    static KToggleAction* iconsModeAction(KActionCollection* collection);
+
+    /**
+     * Returns the "switch to details mode" action.
+     * This code is here to share it between the mainwindow and the part
+     */
+    static KToggleAction* detailsModeAction(KActionCollection* collection);
+
+    /**
+     * Returns the "switch to columns mode" action.
+     * This code is here to share it between the mainwindow and the part
+     */
+    static KToggleAction* columnsModeAction(KActionCollection* collection);
+
+    /**
+     * Returns the action name corresponding to the current view mode
+     */
+    QString currentViewModeActionName() const;
+
 public slots:
     /**
      * Changes the directory to \a url. If the current directory is equal to
@@ -603,4 +627,7 @@ private:
     KUrl m_rootUrl;
 };
 
+/// Allow using DolphinView::Mode in QVariant
+Q_DECLARE_METATYPE(DolphinView::Mode)
+
 #endif // DOLPHINVIEW_H