X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/26a75802ebcd74dc9182ff8f2ef9acf8319e0037..38760a3010b954087690fb0aed0f3cdbe596807b:/src/dolphinviewactionhandler.cpp diff --git a/src/dolphinviewactionhandler.cpp b/src/dolphinviewactionhandler.cpp index dc4d6a909..ff3fafc42 100644 --- a/src/dolphinviewactionhandler.cpp +++ b/src/dolphinviewactionhandler.cpp @@ -19,19 +19,24 @@ #include "dolphinviewactionhandler.h" +#include "additionalinfoaccessor.h" #include "settings/viewpropertiesdialog.h" #include "dolphinview.h" #include "zoomlevelinfo.h" - #include #include #include +#include +#include #include +#include +#include #include #include #include + DolphinViewActionHandler::DolphinViewActionHandler(KActionCollection* collection, QObject* parent) : QObject(parent), m_actionCollection(collection), @@ -56,6 +61,8 @@ void DolphinViewActionHandler::setCurrentView(DolphinView* view) 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()), @@ -68,17 +75,22 @@ void DolphinViewActionHandler::setCurrentView(DolphinView* view) 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->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...")); @@ -105,7 +117,7 @@ void DolphinViewActionHandler::createActions() // so that the Edit menu isn't affected. KAction* deleteWithTrashShortcut = m_actionCollection->addAction("delete_shortcut"); // The descriptive text is just for the shortcuts editor. - deleteWithTrashShortcut->setText(i18nc("@action:inmenu File", "Delete (using shortcut for Trash)")); + deleteWithTrashShortcut->setText(i18nc("@action \"Move to Trash\" for non-local files, etc.", "Delete (using shortcut for Trash)")); deleteWithTrashShortcut->setShortcut(QKeySequence::Delete); deleteWithTrashShortcut->setEnabled(false); connect(deleteWithTrashShortcut, SIGNAL(triggered()), this, SLOT(slotDeleteItems())); @@ -118,11 +130,16 @@ void DolphinViewActionHandler::createActions() 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("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, @@ -135,6 +152,7 @@ void DolphinViewActionHandler::createActions() KToggleAction* showPreview = m_actionCollection->add("show_preview"); 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))); @@ -142,11 +160,35 @@ void DolphinViewActionHandler::createActions() sortDescending->setText(i18nc("@action:inmenu Sort", "Descending")); connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder())); + KToggleAction* sortFoldersFirst = m_actionCollection->add("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("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("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("show_in_groups"); showInGroups->setText(i18nc("@action:inmenu View", "Show in Groups")); @@ -154,7 +196,7 @@ void DolphinViewActionHandler::createActions() KToggleAction* showHiddenFiles = m_actionCollection->add("show_hidden_files"); showHiddenFiles->setText(i18nc("@action:inmenu View", "Show Hidden Files")); - showHiddenFiles->setShortcut(Qt::ALT | Qt::Key_Period); + showHiddenFiles->setShortcuts(QList() << Qt::ALT + Qt::Key_Period << Qt::Key_F8); connect(showHiddenFiles, SIGNAL(triggered(bool)), this, SLOT(toggleShowHiddenFiles(bool))); KAction* adjustViewProps = m_actionCollection->addAction("view_properties"); @@ -162,7 +204,6 @@ void DolphinViewActionHandler::createActions() 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->setShortcut(Qt::CTRL | Qt::Key_F); @@ -172,40 +213,25 @@ void DolphinViewActionHandler::createActions() QActionGroup* DolphinViewActionHandler::createAdditionalInformationActionGroup() { - QActionGroup* showInformationGroup = new QActionGroup(m_actionCollection); - showInformationGroup->setExclusive(false); - - KToggleAction* showSizeInfo = m_actionCollection->add("show_size_info"); - showSizeInfo->setText(i18nc("@action:inmenu Additional information", "Size")); - showSizeInfo->setData(KFileItemDelegate::Size); - showSizeInfo->setActionGroup(showInformationGroup); - - KToggleAction* showDateInfo = m_actionCollection->add("show_date_info"); - showDateInfo->setText(i18nc("@action:inmenu Additional information", "Date")); - showDateInfo->setData(KFileItemDelegate::ModificationTime); - showDateInfo->setActionGroup(showInformationGroup); + QActionGroup* additionalInfoGroup = new QActionGroup(m_actionCollection); + additionalInfoGroup->setExclusive(false); - KToggleAction* showPermissionsInfo = m_actionCollection->add("show_permissions_info"); - showPermissionsInfo->setText(i18nc("@action:inmenu Additional information", "Permissions")); - showPermissionsInfo->setData(KFileItemDelegate::Permissions); - showPermissionsInfo->setActionGroup(showInformationGroup); + KActionMenu* showInformationMenu = m_actionCollection->add("additional_info"); + showInformationMenu->setText(i18nc("@action:inmenu View", "Additional Information")); + showInformationMenu->setDelayed(false); - KToggleAction* showOwnerInfo = m_actionCollection->add("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("show_group_info"); - showGroupInfo->setText(i18nc("@action:inmenu Additional information", "Group")); - showGroupInfo->setData(KFileItemDelegate::OwnerAndGroup); - showGroupInfo->setActionGroup(showInformationGroup); - - KToggleAction* showMimeInfo = m_actionCollection->add("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(name); + action->setText(infoAccessor.translation(info)); + action->setData(info); + action->setActionGroup(additionalInfoGroup); + } - return showInformationGroup; + return additionalInfoGroup; } Q_DECLARE_METATYPE(DolphinView::Sorting) @@ -220,74 +246,27 @@ QActionGroup* DolphinViewActionHandler::createSortByActionGroup() sortByName->setData(QVariant::fromValue(DolphinView::SortByName)); sortByActionGroup->addAction(sortByName); - KToggleAction* sortBySize = m_actionCollection->add("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("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("sort_by_permissions"); - sortByPermissions->setText(i18nc("@action:inmenu Sort By", "Permissions")); - sortByPermissions->setData(QVariant::fromValue(DolphinView::SortByPermissions)); - sortByActionGroup->addAction(sortByPermissions); - - KToggleAction* sortByOwner = m_actionCollection->add("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("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("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("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("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(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(); m_currentView->setMode(mode); + + QAction* viewModeMenu = m_actionCollection->action("view_mode"); + viewModeMenu->setIcon(KIcon(action->icon())); } void DolphinViewActionHandler::slotRename() @@ -302,10 +281,11 @@ void DolphinViewActionHandler::slotTrashActivated(Qt::MouseButtons, Qt::Keyboard // 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() @@ -340,17 +320,26 @@ QString DolphinViewActionHandler::currentViewModeActionName() const 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()); @@ -358,7 +347,6 @@ void DolphinViewActionHandler::updateViewActions() QAction* showHiddenFilesAction = m_actionCollection->action("show_hidden_files"); showHiddenFilesAction->setChecked(m_currentView->showHiddenFiles()); - } void DolphinViewActionHandler::zoomIn() @@ -380,6 +368,11 @@ void DolphinViewActionHandler::toggleSortOrder() m_currentView->toggleSortOrder(); } +void DolphinViewActionHandler::toggleSortFoldersFirst() +{ + m_currentView->toggleSortFoldersFirst(); +} + void DolphinViewActionHandler::slotSortOrderChanged(Qt::SortOrder order) { QAction* descending = m_actionCollection->action("descending"); @@ -387,6 +380,11 @@ void DolphinViewActionHandler::slotSortOrderChanged(Qt::SortOrder order) descending->setChecked(sortDescending); } +void DolphinViewActionHandler::slotSortFoldersFirstChanged(bool foldersFirst) +{ + m_actionCollection->action("folders_first")->setChecked(foldersFirst); +} + void DolphinViewActionHandler::toggleAdditionalInfo(QAction* action) { emit actionBeingHandled(); @@ -427,6 +425,7 @@ KToggleAction* DolphinViewActionHandler::iconsModeAction() { KToggleAction* iconsView = m_actionCollection->add("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)); @@ -437,6 +436,7 @@ KToggleAction* DolphinViewActionHandler::detailsModeAction() { KToggleAction* detailsView = m_actionCollection->add("details"); 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)); @@ -447,6 +447,7 @@ KToggleAction* DolphinViewActionHandler::columnsModeAction() { KToggleAction* columnView = m_actionCollection->add("columns"); 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)); @@ -455,43 +456,27 @@ KToggleAction* DolphinViewActionHandler::columnsModeAction() 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())); } } @@ -517,8 +502,9 @@ void DolphinViewActionHandler::slotSortTriggered(QAction* action) void DolphinViewActionHandler::slotAdjustViewProperties() { emit actionBeingHandled(); - ViewPropertiesDialog dlg(m_currentView); - dlg.exec(); + QPointer dialog = new ViewPropertiesDialog(m_currentView); + dialog->exec(); + delete dialog; } void DolphinViewActionHandler::slotFindFile()