┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Faure <[email protected]>2008-02-13 18:45:20 +0000
committerDavid Faure <[email protected]>2008-02-13 18:45:20 +0000
commit804a1967002b8d0714a865296fa2360c957284e6 (patch)
treeedb5ca8ae6f3657c1b518ac142339fad8b9c5165 /src
parent9a8f75e93cbddca787cbfea8d27ed60009a44512 (diff)
Provide the dolphinpart view modes (Icons, Details, Columns) in konqueror's View Modes menu.
(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
Diffstat (limited to 'src')
-rw-r--r--src/dolphinmainwindow.cpp31
-rw-r--r--src/dolphinmainwindow.h7
-rw-r--r--src/dolphinpart.cpp40
-rw-r--r--src/dolphinpart.desktop23
-rw-r--r--src/dolphinpart.h36
-rw-r--r--src/dolphinview.cpp43
-rw-r--r--src/dolphinview.h24
-rw-r--r--src/dolphinviewactionhandler.cpp63
-rw-r--r--src/dolphinviewactionhandler.h33
9 files changed, 160 insertions, 140 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 160c423ec..556473471 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -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)),
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h
index bddeba7b1..4f4e765a8 100644
--- a/src/dolphinmainwindow.h
+++ b/src/dolphinmainwindow.h
@@ -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);
diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp
index b6f2698c3..1cd336c8c 100644
--- a/src/dolphinpart.cpp
+++ b/src/dolphinpart.cpp
@@ -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"
diff --git a/src/dolphinpart.desktop b/src/dolphinpart.desktop
index dc2ead040..6a7bfd72b 100644
--- a/src/dolphinpart.desktop
+++ b/src/dolphinpart.desktop
@@ -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
+
diff --git a/src/dolphinpart.h b/src/dolphinpart.h
index 795a7b194..75d7ee951 100644
--- a/src/dolphinpart.h
+++ b/src/dolphinpart.h
@@ -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
@@ -101,11 +124,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.
*/
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp
index 3fec8fdfb..4b221a0e3 100644
--- a/src/dolphinview.cpp
+++ b/src/dolphinview.cpp
@@ -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();
diff --git a/src/dolphinview.h b/src/dolphinview.h
index f1500429b..af0dd62a2 100644
--- a/src/dolphinview.h
+++ b/src/dolphinview.h
@@ -38,7 +38,6 @@
#include <QListView>
#include <QWidget>
-class QActionGroup;
class DolphinController;
class DolphinColumnView;
class DolphinDetailsView;
@@ -305,34 +304,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
* second is the text for the action
diff --git a/src/dolphinviewactionhandler.cpp b/src/dolphinviewactionhandler.cpp
index 6cd539d36..81f990270 100644
--- a/src/dolphinviewactionhandler.cpp
+++ b/src/dolphinviewactionhandler.cpp
@@ -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;
+}
diff --git a/src/dolphinviewactionhandler.h b/src/dolphinviewactionhandler.h
index a11d19bb1..d4790a38d 100644
--- a/src/dolphinviewactionhandler.h
+++ b/src/dolphinviewactionhandler.h
@@ -23,6 +23,7 @@
#include "libdolphin_export.h"
#include <QtCore/QObject>
+class KToggleAction;
class QAction;
class QActionGroup;
class DolphinView;
@@ -55,6 +56,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.
*/
@@ -75,6 +82,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 */
-