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
This commit is contained in:
David Faure 2007-10-10 23:01:35 +00:00
parent 3b8c3c1b1e
commit 8d4fb36089
8 changed files with 183 additions and 53 deletions

View 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);

View 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();

View 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"

View 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;

View 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>

View file

@ -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>

View 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"

View 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