From: David Faure Date: Wed, 10 Oct 2007 23:01:35 +0000 (+0000) Subject: DolphinPart: provide a way to switch between view modes in konqueror. X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/8d4fb3608927960d9e45e672ce1cbe1fa3a548f9?ds=sidebyside DolphinPart: provide a way to switch between view modes in konqueror. 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 --- diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index a7cbc527a..74869e967 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -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(); + m_activeViewContainer->view()->setMode(mode); } void DolphinMainWindow::sortByName() @@ -1149,28 +1141,16 @@ void DolphinMainWindow::setupActions() SLOT(zoomOut()), actionCollection()); - KToggleAction* iconsView = actionCollection()->add("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("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("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("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(action); toggleAction->setChecked(true); diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index 991312c0c..dac0c0be8 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -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(); diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 092d2e14a..31cde2931 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -18,6 +18,9 @@ */ #include "dolphinpart.h" +#include +#include +#include #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(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(); + m_view->setMode(mode); +} + #include "dolphinpart.moc" diff --git a/src/dolphinpart.h b/src/dolphinpart.h index b0def14f4..e4a0ffc9b 100644 --- a/src/dolphinpart.h +++ b/src/dolphinpart.h @@ -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; diff --git a/src/dolphinpart.rc b/src/dolphinpart.rc index 8d1c8b69c..2247c57b8 100644 --- a/src/dolphinpart.rc +++ b/src/dolphinpart.rc @@ -1 +1,58 @@ - + + + + + + + + + + Sort by + + + + + + + + + + + + + + Additional Information + + + + + + + + + Panels + + + + + + + Navigation Bar + + + + + + + + + + + + +Dolphin Toolbar + + + + + diff --git a/src/dolphinui.rc b/src/dolphinui.rc index 21d10c5f7..f43b8761f 100644 --- a/src/dolphinui.rc +++ b/src/dolphinui.rc @@ -121,6 +121,6 @@ - + diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 59341b65b..ecc4dc341 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -19,6 +19,8 @@ ***************************************************************************/ #include "dolphinview.h" +#include +#include #include #include @@ -960,4 +962,47 @@ void DolphinView::applyCutItemEffect() } } +KToggleAction* DolphinView::iconsModeAction(KActionCollection* actionCollection) +{ + KToggleAction* iconsView = actionCollection->add("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("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("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" diff --git a/src/dolphinview.h b/src/dolphinview.h index 4e76c87c2..aef541a89 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -37,6 +37,7 @@ #include #include +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