#include "dolphinviewactionhandler.h"
+#include "additionalinfoaccessor.h"
#include "settings/viewpropertiesdialog.h"
#include "dolphinview.h"
#include "zoomlevelinfo.h"
-
#include <konq_operations.h>
#include <kaction.h>
#include <kactioncollection.h>
+#include <kactionmenu.h>
+#include <kfileitemdelegate.h>
#include <klocale.h>
+#include <knewmenu.h>
+#include <kselectaction.h>
#include <ktoggleaction.h>
#include <krun.h>
#include <kpropertiesdialog.h>
+
DolphinViewActionHandler::DolphinViewActionHandler(KActionCollection* collection, QObject* parent)
: QObject(parent),
m_actionCollection(collection),
this, SLOT(slotShowPreviewChanged()));
connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)),
this, SLOT(slotSortOrderChanged(Qt::SortOrder)));
+ connect(view, SIGNAL(sortFoldersFirstChanged(bool)),
+ this, SLOT(slotSortFoldersFirstChanged(bool)));
connect(view, SIGNAL(additionalInfoChanged()),
this, SLOT(slotAdditionalInfoChanged()));
connect(view, SIGNAL(categorizedSortingChanged()),
this, SLOT(slotZoomLevelChanged(int)));
}
+DolphinView* DolphinViewActionHandler::currentView()
+{
+ return m_currentView;
+}
+
void DolphinViewActionHandler::createActions()
{
// This action doesn't appear in the GUI, it's for the shortcut only.
- // KNewMenu takes care of the GUI stuff.
+ // KNewFileMenu takes care of the GUI stuff.
KAction* newDirAction = m_actionCollection->addAction("create_dir");
- newDirAction->setText(i18nc("@action", "Create &Folder..."));
+ newDirAction->setText(i18nc("@action", "Create Folder..."));
newDirAction->setShortcut(Qt::Key_F10);
newDirAction->setIcon(KIcon("folder-new"));
- connect(newDirAction, SIGNAL(triggered()), SLOT(slotCreateDir()));
+ connect(newDirAction, SIGNAL(triggered()), this, SIGNAL(createDirectory()));
- // Edit menu
+ // File menu
KAction* rename = m_actionCollection->addAction("rename");
- rename->setText(i18nc("@action:inmenu File", "&Rename..."));
+ rename->setText(i18nc("@action:inmenu File", "Rename..."));
rename->setShortcut(Qt::Key_F2);
rename->setIcon(KIcon("edit-rename"));
connect(rename, SIGNAL(triggered()), this, SLOT(slotRename()));
KAction* moveToTrash = m_actionCollection->addAction("move_to_trash");
- moveToTrash->setText(i18nc("@action:inmenu File", "&Move to Trash"));
+ moveToTrash->setText(i18nc("@action:inmenu File", "Move to Trash"));
moveToTrash->setIcon(KIcon("user-trash"));
moveToTrash->setShortcut(QKeySequence::Delete);
connect(moveToTrash, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)),
KAction* deleteAction = m_actionCollection->addAction("delete");
deleteAction->setIcon(KIcon("edit-delete"));
- deleteAction->setText(i18nc("@action:inmenu File", "&Delete"));
+ deleteAction->setText(i18nc("@action:inmenu File", "Delete"));
deleteAction->setShortcut(Qt::SHIFT | Qt::Key_Delete);
connect(deleteAction, SIGNAL(triggered()), this, SLOT(slotDeleteItems()));
KAction *propertiesAction = m_actionCollection->addAction( "properties" );
// Well, it's the File menu in dolphinmainwindow and the Edit menu in dolphinpart... :)
- propertiesAction->setText( i18nc("@action:inmenu File", "&Properties") );
+ propertiesAction->setText( i18nc("@action:inmenu File", "Properties") );
+ propertiesAction->setIcon(KIcon("document-properties"));
propertiesAction->setShortcut(Qt::ALT | Qt::Key_Return);
connect(propertiesAction, SIGNAL(triggered()), SLOT(slotProperties()));
// View menu
-
- QActionGroup* viewModeActions = new QActionGroup(this);
- viewModeActions->addAction(iconsModeAction());
- viewModeActions->addAction(detailsModeAction());
- viewModeActions->addAction(columnsModeAction());
+ KToggleAction* iconsAction = iconsModeAction();
+ KToggleAction* detailsAction = detailsModeAction();
+ KToggleAction* columnsAction = columnsModeAction();
+
+ KSelectAction* viewModeActions = m_actionCollection->add<KSelectAction>("view_mode");
+ viewModeActions->setText(i18nc("@action:intoolbar", "View Mode"));
+ viewModeActions->addAction(iconsAction);
+ viewModeActions->addAction(detailsAction);
+ viewModeActions->addAction(columnsAction);
+ viewModeActions->setToolBarMode(KSelectAction::MenuMode);
connect(viewModeActions, SIGNAL(triggered(QAction*)), this, SLOT(slotViewModeActionTriggered(QAction*)));
KStandardAction::zoomIn(this,
m_actionCollection);
KToggleAction* showPreview = m_actionCollection->add<KToggleAction>("show_preview");
- showPreview->setText(i18nc("@action:intoolbar", "P&review"));
+ showPreview->setText(i18nc("@action:intoolbar", "Preview"));
+ showPreview->setToolTip(i18nc("@info", "Show preview of files and folders"));
showPreview->setIcon(KIcon("view-preview"));
connect(showPreview, SIGNAL(triggered(bool)), this, SLOT(togglePreview(bool)));
KToggleAction* sortDescending = m_actionCollection->add<KToggleAction>("descending");
- sortDescending->setText(i18nc("@action:inmenu Sort", "Des&cending"));
+ sortDescending->setText(i18nc("@action:inmenu Sort", "Descending"));
connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder()));
+ KToggleAction* sortFoldersFirst = m_actionCollection->add<KToggleAction>("folders_first");
+ sortFoldersFirst->setText(i18nc("@action:inmenu Sort", "Folders First"));
+ connect(sortFoldersFirst, SIGNAL(triggered()), this, SLOT(toggleSortFoldersFirst()));
+
+ // View -> Sort By
QActionGroup* sortByActionGroup = createSortByActionGroup();
connect(sortByActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(slotSortTriggered(QAction*)));
- QActionGroup* showInformationActionGroup = createAdditionalInformationActionGroup();
- connect(showInformationActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(toggleAdditionalInfo(QAction*)));
+ KActionMenu* sortByActionMenu = m_actionCollection->add<KActionMenu>("sort");
+ sortByActionMenu->setText(i18nc("@action:inmenu View", "Sort By"));
+ sortByActionMenu->setDelayed(false);
+
+ foreach (QAction* action, sortByActionGroup->actions()) {
+ sortByActionMenu->addAction(action);
+ }
+ sortByActionMenu->addSeparator();
+ sortByActionMenu->addAction(sortDescending);
+ sortByActionMenu->addAction(sortFoldersFirst);
+
+ // View -> Additional Information
+ QActionGroup* additionalInfoGroup = createAdditionalInformationActionGroup();
+ connect(additionalInfoGroup, SIGNAL(triggered(QAction*)), this, SLOT(toggleAdditionalInfo(QAction*)));
+
+ KActionMenu* additionalInfoMenu = m_actionCollection->add<KActionMenu>("additional_info");
+ additionalInfoMenu->setText(i18nc("@action:inmenu View", "Additional Information"));
+ additionalInfoMenu->setDelayed(false);
+ foreach (QAction* action, additionalInfoGroup->actions()) {
+ additionalInfoMenu->addAction(action);
+ }
KToggleAction* showInGroups = m_actionCollection->add<KToggleAction>("show_in_groups");
- showInGroups->setText(i18nc("@action:inmenu View", "Show in &Groups"));
+ showInGroups->setText(i18nc("@action:inmenu View", "Show in Groups"));
connect(showInGroups, SIGNAL(triggered(bool)), this, SLOT(toggleSortCategorization(bool)));
KToggleAction* showHiddenFiles = m_actionCollection->add<KToggleAction>("show_hidden_files");
- showHiddenFiles->setText(i18nc("@action:inmenu View", "Show &Hidden Files"));
- showHiddenFiles->setShortcut(Qt::ALT | Qt::Key_Period);
+ showHiddenFiles->setText(i18nc("@action:inmenu View", "Show Hidden Files"));
+ showHiddenFiles->setShortcuts(QList<QKeySequence>() << Qt::ALT + Qt::Key_Period << Qt::Key_F8);
connect(showHiddenFiles, SIGNAL(triggered(bool)), this, SLOT(toggleShowHiddenFiles(bool)));
KAction* adjustViewProps = m_actionCollection->addAction("view_properties");
- adjustViewProps->setText(i18nc("@action:inmenu View", "Adjust &View Properties..."));
+ adjustViewProps->setText(i18nc("@action:inmenu View", "Adjust View Properties..."));
connect(adjustViewProps, SIGNAL(triggered()), this, SLOT(slotAdjustViewProperties()));
// Tools menu
-
KAction* findFile = m_actionCollection->addAction("find_file");
- findFile->setText(i18nc("@action:inmenu Tools", "&Find File..."));
+ findFile->setText(i18nc("@action:inmenu Tools", "Find File..."));
findFile->setShortcut(Qt::CTRL | Qt::Key_F);
findFile->setIcon(KIcon("edit-find"));
connect(findFile, SIGNAL(triggered()), this, SLOT(slotFindFile()));
QActionGroup* DolphinViewActionHandler::createAdditionalInformationActionGroup()
{
- QActionGroup* showInformationGroup = new QActionGroup(m_actionCollection);
- showInformationGroup->setExclusive(false);
-
- KToggleAction* showSizeInfo = m_actionCollection->add<KToggleAction>("show_size_info");
- showSizeInfo->setText(i18nc("@action:inmenu Additional information", "&Size"));
- showSizeInfo->setData(KFileItemDelegate::Size);
- showSizeInfo->setActionGroup(showInformationGroup);
-
- KToggleAction* showDateInfo = m_actionCollection->add<KToggleAction>("show_date_info");
- showDateInfo->setText(i18nc("@action:inmenu Additional information", "D&ate"));
- showDateInfo->setData(KFileItemDelegate::ModificationTime);
- showDateInfo->setActionGroup(showInformationGroup);
+ QActionGroup* additionalInfoGroup = new QActionGroup(m_actionCollection);
+ additionalInfoGroup->setExclusive(false);
- KToggleAction* showPermissionsInfo = m_actionCollection->add<KToggleAction>("show_permissions_info");
- showPermissionsInfo->setText(i18nc("@action:inmenu Additional information", "Pe&rmissions"));
- showPermissionsInfo->setData(KFileItemDelegate::Permissions);
- showPermissionsInfo->setActionGroup(showInformationGroup);
+ KActionMenu* showInformationMenu = m_actionCollection->add<KActionMenu>("additional_info");
+ showInformationMenu->setText(i18nc("@action:inmenu View", "Additional Information"));
+ showInformationMenu->setDelayed(false);
- KToggleAction* showOwnerInfo = m_actionCollection->add<KToggleAction>("show_owner_info");
- showOwnerInfo->setText(i18nc("@action:inmenu Additional information", "&Owner"));
- showOwnerInfo->setData(KFileItemDelegate::Owner);
- showOwnerInfo->setActionGroup(showInformationGroup);
+ const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance();
- KToggleAction* showGroupInfo = m_actionCollection->add<KToggleAction>("show_group_info");
- showGroupInfo->setText(i18nc("@action:inmenu Additional information", "Gro&up"));
- showGroupInfo->setData(KFileItemDelegate::OwnerAndGroup);
- showGroupInfo->setActionGroup(showInformationGroup);
-
- KToggleAction* showMimeInfo = m_actionCollection->add<KToggleAction>("show_mime_info");
- showMimeInfo->setText(i18nc("@action:inmenu Additional information", "&Type"));
- showMimeInfo->setData(KFileItemDelegate::FriendlyMimeType);
- showMimeInfo->setActionGroup(showInformationGroup);
+ const KFileItemDelegate::InformationList infos = infoAccessor.keys();
+ foreach (KFileItemDelegate::Information info, infos) {
+ const QString name = infoAccessor.actionCollectionName(info, AdditionalInfoAccessor::AdditionalInfoType);
+ KToggleAction* action = m_actionCollection->add<KToggleAction>(name);
+ action->setText(infoAccessor.translation(info));
+ action->setData(info);
+ action->setActionGroup(additionalInfoGroup);
+ }
- return showInformationGroup;
+ return additionalInfoGroup;
}
Q_DECLARE_METATYPE(DolphinView::Sorting)
sortByActionGroup->setExclusive(true);
KToggleAction* sortByName = m_actionCollection->add<KToggleAction>("sort_by_name");
- sortByName->setText(i18nc("@action:inmenu Sort By", "&Name"));
+ sortByName->setText(i18nc("@action:inmenu Sort By", "Name"));
sortByName->setData(QVariant::fromValue(DolphinView::SortByName));
sortByActionGroup->addAction(sortByName);
- KToggleAction* sortBySize = m_actionCollection->add<KToggleAction>("sort_by_size");
- sortBySize->setText(i18nc("@action:inmenu Sort By", "&Size"));
- sortBySize->setData(QVariant::fromValue(DolphinView::SortBySize));
- sortByActionGroup->addAction(sortBySize);
-
- KToggleAction* sortByDate = m_actionCollection->add<KToggleAction>("sort_by_date");
- sortByDate->setText(i18nc("@action:inmenu Sort By", "&Date"));
- sortByDate->setData(QVariant::fromValue(DolphinView::SortByDate));
- sortByActionGroup->addAction(sortByDate);
-
- KToggleAction* sortByPermissions = m_actionCollection->add<KToggleAction>("sort_by_permissions");
- sortByPermissions->setText(i18nc("@action:inmenu Sort By", "Pe&rmissions"));
- sortByPermissions->setData(QVariant::fromValue(DolphinView::SortByPermissions));
- sortByActionGroup->addAction(sortByPermissions);
-
- KToggleAction* sortByOwner = m_actionCollection->add<KToggleAction>("sort_by_owner");
- sortByOwner->setText(i18nc("@action:inmenu Sort By", "&Owner"));
- sortByOwner->setData(QVariant::fromValue(DolphinView::SortByOwner));
- sortByActionGroup->addAction(sortByOwner);
-
- KToggleAction* sortByGroup = m_actionCollection->add<KToggleAction>("sort_by_group");
- sortByGroup->setText(i18nc("@action:inmenu Sort By", "&Group"));
- sortByGroup->setData(QVariant::fromValue(DolphinView::SortByGroup));
- sortByActionGroup->addAction(sortByGroup);
-
- KToggleAction* sortByType = m_actionCollection->add<KToggleAction>("sort_by_type");
- sortByType->setText(i18nc("@action:inmenu Sort By", "&Type"));
- sortByType->setData(QVariant::fromValue(DolphinView::SortByType));
- sortByActionGroup->addAction(sortByType);
-
- // TODO: Hid "sort by rating" and "sort by tags" as without caching the performance
- // is too slow currently (Nepomuk will support caching in future releases).
- //
- // KToggleAction* sortByRating = m_actionCollection->add<KToggleAction>("sort_by_rating");
- // sortByRating->setData(QVariant::fromValue(DolphinView::SortByRating));
- // sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating"));
- // sortByActionGroup->addAction(sortByRating);
- //
- // KToggleAction* sortByTags = m_actionCollection->add<KToggleAction>("sort_by_tags");
- // sortByTags->setData(QVariant::fromValue(DolphinView::SortByTags));
- // sortByTags->setText(i18nc("@action:inmenu Sort By", "Tags"));
- // sortByActionGroup->addAction(sortByTags);
- //
-#ifdef HAVE_NEPOMUK
- // if (!MetaDataWidget::metaDataAvailable()) {
- // sortByRating->setEnabled(false);
- // sortByTags->setEnabled(false);
- // }
-#else
- // sortByRating->setEnabled(false);
- // sortByTags->setEnabled(false);
-#endif
-
-
+ const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance();
+ const KFileItemDelegate::InformationList infos = infoAccessor.keys();
+ foreach (KFileItemDelegate::Information info, infos) {
+ const QString name = infoAccessor.actionCollectionName(info, AdditionalInfoAccessor::SortByType);
+ KToggleAction* action = m_actionCollection->add<KToggleAction>(name);
+ action->setText(infoAccessor.translation(info));
+ const DolphinView::Sorting sorting = infoAccessor.sorting(info);
+ action->setData(QVariant::fromValue(sorting));
+ sortByActionGroup->addAction(action);
+ }
return sortByActionGroup;
}
-void DolphinViewActionHandler::slotCreateDir()
-{
- Q_ASSERT(m_currentView);
- 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);
+
+ QAction* viewModeMenu = m_actionCollection->action("view_mode");
+ viewModeMenu->setIcon(KIcon(action->icon()));
}
void DolphinViewActionHandler::slotRename()
// Note: kde3's konq_mainwindow.cpp used to check
// reason == KAction::PopupMenuActivation && ...
// but this isn't supported anymore
- if (modifiers & Qt::ShiftModifier)
+ if (modifiers & Qt::ShiftModifier) {
m_currentView->deleteSelectedItems();
- else
+ } else {
m_currentView->trashSelectedItems();
+ }
}
void DolphinViewActionHandler::slotDeleteItems()
return QString(); // can't happen
}
+KActionCollection* DolphinViewActionHandler::actionCollection()
+{
+ return m_actionCollection;
+}
+
void DolphinViewActionHandler::updateViewActions()
{
QAction* viewModeAction = m_actionCollection->action(currentViewModeActionName());
if (viewModeAction != 0) {
viewModeAction->setChecked(true);
+
+ QAction* viewModeMenu = m_actionCollection->action("view_mode");
+ viewModeMenu->setIcon(KIcon(viewModeAction->icon()));
}
QAction* showPreviewAction = m_actionCollection->action("show_preview");
showPreviewAction->setChecked(m_currentView->showPreview());
slotSortOrderChanged(m_currentView->sortOrder());
+ slotSortFoldersFirstChanged(m_currentView->sortFoldersFirst());
slotAdditionalInfoChanged();
slotCategorizedSortingChanged();
slotSortingChanged(m_currentView->sorting());
QAction* showHiddenFilesAction = m_actionCollection->action("show_hidden_files");
showHiddenFilesAction->setChecked(m_currentView->showHiddenFiles());
-
}
void DolphinViewActionHandler::zoomIn()
m_currentView->toggleSortOrder();
}
+void DolphinViewActionHandler::toggleSortFoldersFirst()
+{
+ m_currentView->toggleSortFoldersFirst();
+}
+
void DolphinViewActionHandler::slotSortOrderChanged(Qt::SortOrder order)
{
QAction* descending = m_actionCollection->action("descending");
descending->setChecked(sortDescending);
}
+void DolphinViewActionHandler::slotSortFoldersFirstChanged(bool foldersFirst)
+{
+ m_actionCollection->action("folders_first")->setChecked(foldersFirst);
+}
+
void DolphinViewActionHandler::toggleAdditionalInfo(QAction* action)
{
emit actionBeingHandled();
KToggleAction* DolphinViewActionHandler::iconsModeAction()
{
KToggleAction* iconsView = m_actionCollection->add<KToggleAction>("icons");
- iconsView->setText(i18nc("@action:inmenu View Mode", "&Icons"));
+ iconsView->setText(i18nc("@action:inmenu View Mode", "Icons"));
+ iconsView->setToolTip(i18nc("@info", "Icons view mode"));
iconsView->setShortcut(Qt::CTRL | Qt::Key_1);
iconsView->setIcon(KIcon("view-list-icons"));
iconsView->setData(QVariant::fromValue(DolphinView::IconsView));
KToggleAction* DolphinViewActionHandler::detailsModeAction()
{
KToggleAction* detailsView = m_actionCollection->add<KToggleAction>("details");
- detailsView->setText(i18nc("@action:inmenu View Mode", "Det&ails"));
+ detailsView->setText(i18nc("@action:inmenu View Mode", "Details"));
+ detailsView->setToolTip(i18nc("@info", "Details view mode"));
detailsView->setShortcut(Qt::CTRL | Qt::Key_2);
detailsView->setIcon(KIcon("view-list-details"));
detailsView->setData(QVariant::fromValue(DolphinView::DetailsView));
KToggleAction* DolphinViewActionHandler::columnsModeAction()
{
KToggleAction* columnView = m_actionCollection->add<KToggleAction>("columns");
- columnView->setText(i18nc("@action:inmenu View Mode", "Col&umns"));
+ columnView->setText(i18nc("@action:inmenu View Mode", "Columns"));
+ columnView->setToolTip(i18nc("@info", "Columns view mode"));
columnView->setShortcut(Qt::CTRL | Qt::Key_3);
columnView->setIcon(KIcon("view-file-columns"));
columnView->setData(QVariant::fromValue(DolphinView::ColumnView));
void DolphinViewActionHandler::slotSortingChanged(DolphinView::Sorting sorting)
{
+ const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance();
+ const KFileItemDelegate::InformationList infos = infoAccessor.keys();
+
QAction* action = 0;
- switch (sorting) {
- case DolphinView::SortByName:
+ if (sorting == DolphinView::SortByName) {
action = m_actionCollection->action("sort_by_name");
- break;
- case DolphinView::SortBySize:
- action = m_actionCollection->action("sort_by_size");
- break;
- case DolphinView::SortByDate:
- action = m_actionCollection->action("sort_by_date");
- break;
- case DolphinView::SortByPermissions:
- action = m_actionCollection->action("sort_by_permissions");
- break;
- case DolphinView::SortByOwner:
- action = m_actionCollection->action("sort_by_owner");
- break;
- case DolphinView::SortByGroup:
- action = m_actionCollection->action("sort_by_group");
- break;
- case DolphinView::SortByType:
- action = m_actionCollection->action("sort_by_type");
- break;
-#ifdef HAVE_NEPOMUK
- case DolphinView::SortByRating:
- action = m_actionCollection->action("sort_by_rating");
- break;
- case DolphinView::SortByTags:
- action = m_actionCollection->action("sort_by_tags");
- break;
-#endif
- default:
- break;
+ } else {
+ foreach (const KFileItemDelegate::Information info, infos) {
+ if (sorting == infoAccessor.sorting(info)) {
+ const QString name = infoAccessor.actionCollectionName(info, AdditionalInfoAccessor::SortByType);
+ action = m_actionCollection->action(name);
+ break;
+ }
+ }
}
if (action != 0) {
action->setChecked(true);
+
+ QAction* sortByMenu = m_actionCollection->action("sort");
+ sortByMenu->setIcon(KIcon(action->icon()));
}
}
void DolphinViewActionHandler::slotAdjustViewProperties()
{
emit actionBeingHandled();
- ViewPropertiesDialog dlg(m_currentView);
- dlg.exec();
+ QPointer<ViewPropertiesDialog> dialog = new ViewPropertiesDialog(m_currentView);
+ dialog->exec();
+ delete dialog;
}
void DolphinViewActionHandler::slotFindFile()