]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Provide the dolphinpart view modes (Icons, Details, Columns) in konqueror's View...
authorDavid Faure <faure@kde.org>
Wed, 13 Feb 2008 18:45:20 +0000 (18:45 +0000)
committerDavid Faure <faure@kde.org>
Wed, 13 Feb 2008 18:45:20 +0000 (18:45 +0000)
(this is done using a Q_PROPERTY in the dolphin part and a signal; the available view modes for creating the menu in the first place are listed in dolphinpart.desktop)
Konqueror: cleaned up the old (complex) handling of view modes as N toolbar buttons from M services grouped by library (240 lines less!).
Dolphin: moved view mode handling to DolphinViewActionHandler, removes duplication between part and mainwindow.

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

src/dolphinmainwindow.cpp
src/dolphinmainwindow.h
src/dolphinpart.cpp
src/dolphinpart.desktop
src/dolphinpart.h
src/dolphinview.cpp
src/dolphinview.h
src/dolphinviewactionhandler.cpp
src/dolphinviewactionhandler.h

index 160c423ecc038979fbe8423300d3e56542be1468..55647347104734a7b854521632738699230cfd51 100644 (file)
@@ -177,11 +177,6 @@ void DolphinMainWindow::changeSelection(const KFileItemList& selection)
     activeViewContainer()->view()->changeSelection(selection);
 }
 
-void DolphinMainWindow::slotViewModeChanged()
-{
-    updateViewActions();
-}
-
 void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting)
 {
     QAction* action = 0;
@@ -482,12 +477,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);
@@ -843,21 +832,10 @@ void DolphinMainWindow::setupActions()
 
     // 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*)));
-
+    //TODO
     //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()));
@@ -1126,11 +1104,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");
@@ -1162,8 +1135,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)),
index bddeba7b1d42721e7e361f1932d8d670ec626b20..4f4e765a8b67adc4de60f26a8dab4b423d564f74 100644 (file)
@@ -34,6 +34,7 @@
 
 #include <QtCore/QList>
 
+class KAction;
 class DolphinViewActionHandler;
 class DolphinApplication;
 class DolphinViewContainer;
@@ -222,9 +223,6 @@ private slots:
      */
     void invertSelection();
 
-    /** 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();
 
@@ -314,9 +312,6 @@ private slots:
     /** Opens the settings dialog for Dolphin. */
     void editSettings();
 
-    /** Updates the state of all 'View' menu actions. */
-    void slotViewModeChanged();
-
     /** Updates the state of the 'Sort by' actions. */
     void slotSortingChanged(DolphinView::Sorting sorting);
 
index b6f2698c3df018e96313a4537ffa3b536113c9a1..1cd336c8cc30cb02605921171c26890183b04eaf 100644 (file)
@@ -93,7 +93,7 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QStringLi
     connect(m_view, SIGNAL(urlChanged(KUrl)),
             this, SLOT(slotUrlChanged(KUrl)));
     connect(m_view, SIGNAL(modeChanged()),
-            this, SLOT(updateViewActions()));
+            this, SIGNAL(viewModeChanged())); // relay signal
     // TODO slotSortingChanged
 
     m_actionHandler = new DolphinViewActionHandler(actionCollection(), this);
@@ -104,12 +104,9 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QStringLi
             this, SLOT(updatePasteAction()));
 
     createActions();
-    updateViewActions();
+    m_actionHandler->updateViewActions();
     slotSelectionChanged(KFileItemList()); // initially disable selection-dependent actions
 
-    // TODO provide the viewmode actions in the menu, merged with the existing view-mode-actions somehow
-    // [Q_PROPERTY introspection?]
-
     // TODO sort_by_* actions
 
     // TODO there was a "always open a new window" (when clicking on a directory) setting in konqueror
@@ -123,12 +120,6 @@ DolphinPart::~DolphinPart()
 
 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*)));
-
     KAction *editMimeTypeAction = actionCollection()->addAction( "editMimeType" );
     editMimeTypeAction->setText( i18nc("@action:inmenu Edit", "&Edit File Type..." ) );
     connect(editMimeTypeAction, SIGNAL(triggered()), SLOT(slotEditMimeType()));
@@ -210,15 +201,6 @@ void DolphinPart::updatePasteAction()
     emit m_extension->setActionText( "paste", pasteInfo.second );
 }
 
-void DolphinPart::updateViewActions()
-{
-    m_actionHandler->updateViewActions();
-    QAction* action = actionCollection()->action(m_view->currentViewModeActionName());
-    if (action != 0) {
-        action->setChecked(true);
-    }
-}
-
 KAboutData* DolphinPart::createAboutData()
 {
     return new KAboutData("dolphinpart", "dolphin", ki18nc("@title", "Dolphin Part"), "0.1");
@@ -356,12 +338,6 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&)
     }
 }
 
-void DolphinPart::slotViewModeActionTriggered(QAction* action)
-{
-    const DolphinView::Mode mode = action->data().value<DolphinView::Mode>();
-    m_view->setMode(mode);
-}
-
 void DolphinPart::slotUrlChanged(const KUrl& url)
 {
     if (m_view->url() != url) {
@@ -408,4 +384,16 @@ void DolphinPart::slotProperties()
     }
 }
 
+void DolphinPart::setCurrentViewMode(const QString& viewModeName)
+{
+    QAction* action = actionCollection()->action(viewModeName);
+    Q_ASSERT(action);
+    action->trigger();
+}
+
+QString DolphinPart::currentViewMode() const
+{
+    return m_actionHandler->currentViewModeActionName();
+}
+
 #include "dolphinpart.moc"
index dc2ead0405a125f36c4869a615a5d3ba725eff53..6a7bfd72b2bb41b3915953c6058e637b86634676 100644 (file)
@@ -9,3 +9,26 @@ X-KDE-BrowserView-HideFromMenus=true
 X-KDE-BrowserView-Built-Into=konqueror
 Icon=view_icon
 InitialPreference=7
+
+# Provide info about the view modes using the Actions mechanism so that KService parses it.
+# Konqueror then queries KService to get hold of the translated texts for the view modes
+Actions=icons;details;columns;
+
+[Desktop Action icons]
+Name=Icons
+Icon=view-list-icons
+# Dummy
+Exec=dolphin
+
+[Desktop Action details]
+Name=Details
+Icon=view-list-details
+# Dummy
+Exec=dolphin
+
+[Desktop Action columns]
+Name=Columns
+Icon=view-file-columns
+# Dummy
+Exec=dolphin
+
index 795a7b1947d1be4f32bdfa6d2147206b32a746ff..75d7ee951cfbe71d33447d3c7baa4ac8d743f977 100644 (file)
@@ -43,17 +43,38 @@ class DolphinPart : public KParts::ReadOnlyPart
     // Even though it's konqueror doing the undo...
     Q_PROPERTY( bool supportsUndo READ supportsUndo )
 
+    Q_PROPERTY( QString currentViewMode READ currentViewMode WRITE setCurrentViewMode )
+
 public:
     explicit DolphinPart(QWidget* parentWidget, QObject* parent, const QStringList& args);
     ~DolphinPart();
 
     static KAboutData* createAboutData();
 
+    /**
+     * Standard KParts::ReadOnlyPart openUrl method.
+     * Called by Konqueror to view a directory in DolphinPart.
+     */
     virtual bool openUrl(const KUrl& url);
 
     /// see the supportsUndo property
     bool supportsUndo() const { return true; }
 
+    /**
+     * Used by konqueror for setting the view mode
+     * @param viewModeName internal name for the view mode, like "icons"
+     * Those names come from the Actions line in dolphinpart.desktop,
+     * and have to match the name of the KActions.
+     */
+    void setCurrentViewMode(const QString& viewModeName);
+
+    /**
+     * Used by konqueror for displaying the current view mode.
+     * @see setCurrentViewMode
+     */
+    QString currentViewMode() const;
+
+    /// Returns the view owned by this part; used by DolphinPartBrowserExtension
     DolphinView* view() { return m_view; }
 
 protected:
@@ -62,6 +83,12 @@ protected:
      */
     virtual bool openFile() { return true; }
 
+Q_SIGNALS:
+    /**
+     * Emitted when the view mode changes. Used by konqueror.
+     */
+    void viewModeChanged();
+
 private Q_SLOTS:
     void slotCompleted(const KUrl& url);
     void slotCanceled(const KUrl& url);
@@ -83,10 +110,6 @@ 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*);
 
     /**
      * Asks the host to open the URL \a url if the current view has
@@ -100,11 +123,6 @@ private Q_SLOTS:
      */
     void slotSelectionChanged(const KFileItemList& selection);
 
-    /**
-     * Same as in DolphinMainWindow: updates the view menu actions
-     */
-    void updateViewActions();
-
     /**
      * Updates the text of the paste action dependent from
      * the number of items which are in the clipboard.
index 3fec8fdfb0d3087a0eb943f6e35a3ab8005658df..4b221a0e34acb9d25af110350c0f4acc1cede5b4 100644 (file)
@@ -976,49 +976,6 @@ bool DolphinView::isCutItem(const KFileItem& item) const
     return false;
 }
 
-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("view-list-icons"));
-    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("view-list-details"));
-    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("view-file-columns"));
-    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
-}
-
 void DolphinView::renameSelectedItems()
 {
     const KFileItemList items = selectedItems();
index f1500429b23f577a49c1fe710ef3949437ae9fd7..af0dd62a2ac17d7c2be6a278a71f78be4d57f464 100644 (file)
@@ -38,7 +38,6 @@
 #include <QListView>
 #include <QWidget>
 
-class QActionGroup;
 class DolphinController;
 class DolphinColumnView;
 class DolphinDetailsView;
@@ -304,34 +303,11 @@ 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);
-
     /**
      * Updates the state of the 'Additional Information' actions in \a collection.
      */
     void updateAdditionalInfoActions(KActionCollection* collection);
 
-    /**
-     * Returns the action name corresponding to the current view mode
-     */
-    QString currentViewModeActionName() const;
-
     /**
      * Returns the state of the paste action:
      * first is whether the action should be enabled
index 6cd539d36d1abe00e24bf82c1f269fe354ed97c8..81f99027083c16377ba0cf57371ee91f034346c4 100644 (file)
@@ -18,6 +18,7 @@
  ***************************************************************************/
 
 #include "dolphinviewactionhandler.h"
+#include <kdebug.h>
 
 #include "dolphinview.h"
 
@@ -46,6 +47,8 @@ void DolphinViewActionHandler::setCurrentView(DolphinView* view)
 
     m_currentView = view;
 
+    connect(view, SIGNAL(modeChanged()),
+            this, SLOT(updateViewActions()));
     connect(view, SIGNAL(showPreviewChanged()),
             this, SLOT(slotShowPreviewChanged()));
     connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)),
@@ -89,6 +92,12 @@ void DolphinViewActionHandler::createActions()
 
     // View menu
 
+    QActionGroup* viewModeActions = new QActionGroup(this);
+    viewModeActions->addAction(iconsModeAction());
+    viewModeActions->addAction(detailsModeAction());
+    viewModeActions->addAction(columnsModeAction());
+    connect(viewModeActions, SIGNAL(triggered(QAction*)), this, SLOT(slotViewModeActionTriggered(QAction*)));
+
     KStandardAction::zoomIn(this,
                             SLOT(zoomIn()),
                             m_actionCollection);
@@ -164,6 +173,12 @@ void DolphinViewActionHandler::slotCreateDir()
     KonqOperations::newDir(m_currentView, m_currentView->url());
 }
 
+void DolphinViewActionHandler::slotViewModeActionTriggered(QAction* action)
+{
+    const DolphinView::Mode mode = action->data().value<DolphinView::Mode>();
+    m_currentView->setMode(mode);
+}
+
 void DolphinViewActionHandler::slotRename()
 {
     emit actionBeingHandled();
@@ -201,8 +216,26 @@ void DolphinViewActionHandler::slotShowPreviewChanged()
     updateViewActions();
 }
 
+QString DolphinViewActionHandler::currentViewModeActionName() const
+{
+    switch (m_currentView->mode()) {
+    case DolphinView::IconsView:
+        return "icons";
+    case DolphinView::DetailsView:
+        return "details";
+    case DolphinView::ColumnView:
+        return "columns";
+    }
+    return QString(); // can't happen
+}
+
 void DolphinViewActionHandler::updateViewActions()
 {
+    QAction* viewModeAction = m_actionCollection->action(currentViewModeActionName());
+    if (viewModeAction != 0) {
+        viewModeAction->setChecked(true);
+    }
+
     QAction* zoomInAction = m_actionCollection->action(KStandardAction::stdName(KStandardAction::ZoomIn));
     if (zoomInAction != 0) {
         zoomInAction->setEnabled(m_currentView->isZoomInPossible());
@@ -284,3 +317,33 @@ void DolphinViewActionHandler::slotShowHiddenFilesChanged()
     showHiddenFilesAction->setChecked(m_currentView->showHiddenFiles());
 }
 
+
+KToggleAction* DolphinViewActionHandler::iconsModeAction()
+{
+    KToggleAction* iconsView = m_actionCollection->add<KToggleAction>("icons");
+    iconsView->setText(i18nc("@action:inmenu View Mode", "Icons"));
+    iconsView->setShortcut(Qt::CTRL | Qt::Key_1);
+    iconsView->setIcon(KIcon("view-list-icons"));
+    iconsView->setData(QVariant::fromValue(DolphinView::IconsView));
+    return iconsView;
+}
+
+KToggleAction* DolphinViewActionHandler::detailsModeAction()
+{
+    KToggleAction* detailsView = m_actionCollection->add<KToggleAction>("details");
+    detailsView->setText(i18nc("@action:inmenu View Mode", "Details"));
+    detailsView->setShortcut(Qt::CTRL | Qt::Key_2);
+    detailsView->setIcon(KIcon("view-list-details"));
+    detailsView->setData(QVariant::fromValue(DolphinView::DetailsView));
+    return detailsView;
+}
+
+KToggleAction* DolphinViewActionHandler::columnsModeAction()
+{
+    KToggleAction* columnView = m_actionCollection->add<KToggleAction>("columns");
+    columnView->setText(i18nc("@action:inmenu View Mode", "Columns"));
+    columnView->setShortcut(Qt::CTRL | Qt::Key_3);
+    columnView->setIcon(KIcon("view-file-columns"));
+    columnView->setData(QVariant::fromValue(DolphinView::ColumnView));
+    return columnView;
+}
index a11d19bb188c3df98d60547374ff3a226794c093..d4790a38da76d9e15aef247dedcc30eaffe2de28 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "libdolphin_export.h"
 #include <QtCore/QObject>
+class KToggleAction;
 class QAction;
 class QActionGroup;
 class DolphinView;
@@ -54,6 +55,12 @@ public:
      */
     void setCurrentView(DolphinView* view);
 
+    /**
+     * Returns the name of the action for the current viewmode
+     */
+    QString currentViewModeActionName() const;
+
+public Q_SLOTS:
     /**
      * Update all actions in the 'View' menu, i.e. those that depend on the
      * settings in the current view.
@@ -74,6 +81,11 @@ private Q_SLOTS:
      */
     void slotCreateDir();
 
+    /**
+     * Emitted when the user requested a change of view mode
+     */
+    void slotViewModeActionTriggered(QAction*);
+
     /**
      * Let the user input a name for the selected item(s) and trigger
      * a renaming afterwards.
@@ -156,10 +168,27 @@ private:
      */
     QActionGroup* createAdditionalInformationActionGroup();
 
+    /**
+     * Returns the "switch to icons mode" action.
+     * Helper method for createActions();
+     */
+    KToggleAction* iconsModeAction();
+
+    /**
+     * Returns the "switch to details mode" action.
+     * Helper method for createActions();
+     */
+    KToggleAction* detailsModeAction();
+
+    /**
+     * Returns the "switch to columns mode" action.
+     * Helper method for createActions();
+     */
+    KToggleAction* columnsModeAction();
+
+
     KActionCollection* m_actionCollection;
     DolphinView* m_currentView;
 };
 
-
 #endif /* DOLPHINVIEWACTIONHANDLER_H */
-