┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Faure <[email protected]>2007-10-10 23:01:35 +0000
committerDavid Faure <[email protected]>2007-10-10 23:01:35 +0000
commit8d4fb3608927960d9e45e672ce1cbe1fa3a548f9 (patch)
treefe8691ccdb83ece1bcfc6b9beabf218b5d7607c5 /src
parent3b8c3c1b1e2d05d09aca2de0b0bf922fb9530b0d (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/dolphinmainwindow.cpp50
-rw-r--r--src/dolphinmainwindow.h10
-rw-r--r--src/dolphinpart.cpp35
-rw-r--r--src/dolphinpart.h8
-rw-r--r--src/dolphinpart.rc59
-rw-r--r--src/dolphinui.rc2
-rw-r--r--src/dolphinview.cpp45
-rw-r--r--src/dolphinview.h27
8 files changed, 183 insertions, 53 deletions
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<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);
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 <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"
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 @@
-
+<!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>
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 @@
<Action name="split_view" />
</ToolBar>
<ActionProperties>
- <Action shortcut="Backspace;XF86Back" name="go_back" />
+ <Action shortcut="Backspace; XF86Back" name="go_back" />
</ActionProperties>
</kpartgui>
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 <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"
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 <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