(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
activeViewContainer()->view()->changeSelection(selection);
}
-void DolphinMainWindow::slotViewModeChanged()
-{
- updateViewActions();
-}
-
void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting)
{
QAction* action = 0;
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);
// 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()));
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");
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)),
#include <QtCore/QList>
+class KAction;
class DolphinViewActionHandler;
class DolphinApplication;
class DolphinViewContainer;
*/
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();
/** 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);
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);
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
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()));
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");
}
}
-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) {
}
}
+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"
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
+
// 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:
*/
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);
* @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
*/
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.
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();
#include <QListView>
#include <QWidget>
-class QActionGroup;
class DolphinController;
class DolphinColumnView;
class DolphinDetailsView;
*/
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
***************************************************************************/
#include "dolphinviewactionhandler.h"
+#include <kdebug.h>
#include "dolphinview.h"
m_currentView = view;
+ connect(view, SIGNAL(modeChanged()),
+ this, SLOT(updateViewActions()));
connect(view, SIGNAL(showPreviewChanged()),
this, SLOT(slotShowPreviewChanged()));
connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)),
// 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);
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();
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());
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;
+}
#include "libdolphin_export.h"
#include <QtCore/QObject>
+class KToggleAction;
class QAction;
class QActionGroup;
class DolphinView;
*/
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.
*/
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.
*/
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 */
-