X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ea3e0005018997b83984203e7c1fc7f745d6dbe2..53d65e6392d3b03d7709385df5006d5d34c22852:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 9a4385b13..77cb13c02 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -53,7 +53,6 @@ #include #include #include -#include #include #include #include @@ -89,9 +88,9 @@ DolphinMainWindow::DolphinMainWindow(int id) : new MainWindowAdaptor(this); QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this); - KonqUndoManager::incRef(); + KonqFileUndoManager::incRef(); - KonqUndoManager* undoManager = KonqUndoManager::self(); + KonqFileUndoManager* undoManager = KonqFileUndoManager::self(); undoManager->setUiInterface(new UndoUiInterface(this)); connect(undoManager, SIGNAL(undoAvailable(bool)), @@ -104,7 +103,7 @@ DolphinMainWindow::DolphinMainWindow(int id) : DolphinMainWindow::~DolphinMainWindow() { - KonqUndoManager::decRef(); + KonqFileUndoManager::decRef(); DolphinApplication::app()->removeMainWindow(this); } @@ -123,11 +122,10 @@ void DolphinMainWindow::toggleViews() m_viewContainer[SecondaryView] = container; } -void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl) +void DolphinMainWindow::slotRenaming() { clearStatusBar(); - KonqOperations::rename(this, oldUrl, newUrl); - m_undoCommandTypes.append(KonqUndoManager::RENAME); + m_undoCommandTypes.append(KonqFileUndoManager::RENAME); } void DolphinMainWindow::refreshViews() @@ -150,6 +148,9 @@ void DolphinMainWindow::refreshViews() void DolphinMainWindow::dropUrls(const KUrl::List& urls, const KUrl& destination) { + kDebug() << "Source" << urls; + kDebug() << "Destination:" << destination; + Qt::DropAction action = Qt::CopyAction; Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers(); @@ -175,7 +176,7 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls, QString seq = QKeySequence(Qt::ShiftModifier).toString(); seq.chop(1); // chop superfluous '+' - QAction* moveAction = popup.addAction(KIcon("goto-page"), + QAction* moveAction = popup.addAction(KIcon("go-jump"), i18nc("@action:inmenu", "&Move Here\t%1", seq)); @@ -187,7 +188,7 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls, seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString(); seq.chop(1); - QAction* linkAction = popup.addAction(KIcon("www"), + QAction* linkAction = popup.addAction(KIcon("insert-link"), i18nc("@action:inmenu", "&Link Here\t%1", seq)); @@ -276,32 +277,32 @@ void DolphinMainWindow::slotSortingChanged(DolphinView::Sorting sorting) QAction* action = 0; switch (sorting) { case DolphinView::SortByName: - action = actionCollection()->action("by_name"); + action = actionCollection()->action("sort_by_name"); break; case DolphinView::SortBySize: - action = actionCollection()->action("by_size"); + action = actionCollection()->action("sort_by_size"); break; case DolphinView::SortByDate: - action = actionCollection()->action("by_date"); + action = actionCollection()->action("sort_by_date"); break; case DolphinView::SortByPermissions: - action = actionCollection()->action("by_permissions"); + action = actionCollection()->action("sort_by_permissions"); break; case DolphinView::SortByOwner: - action = actionCollection()->action("by_owner"); + action = actionCollection()->action("sort_by_owner"); break; case DolphinView::SortByGroup: - action = actionCollection()->action("by_group"); + action = actionCollection()->action("sort_by_group"); break; case DolphinView::SortByType: - action = actionCollection()->action("by_type"); + action = actionCollection()->action("sort_by_type"); break; #ifdef HAVE_NEPOMUK case DolphinView::SortByRating: - action = actionCollection()->action("by_rating"); + action = actionCollection()->action("sort_by_rating"); break; case DolphinView::SortByTags: - action = actionCollection()->action("by_tags"); + action = actionCollection()->action("sort_by_tags"); break; #endif default: @@ -321,33 +322,56 @@ void DolphinMainWindow::slotSortOrderChanged(Qt::SortOrder order) descending->setChecked(sortDescending); } -void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::AdditionalInformation info) +void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::InformationList list) { - QAction* action = 0; - switch (info) { - case KFileItemDelegate::FriendlyMimeType: - action = actionCollection()->action("show_mime_info"); - break; - case KFileItemDelegate::Size: - action = actionCollection()->action("show_size_info"); - break; - case KFileItemDelegate::ModificationTime: - action = actionCollection()->action("show_date_info"); - break; - case KFileItemDelegate::NoInformation: - default: - action = actionCollection()->action("clear_info"); - break; - } + QAction* showSizeInfo = actionCollection()->action("show_size_info"); + QAction* showDateInfo = actionCollection()->action("show_date_info"); + QAction* showPermissionsInfo = actionCollection()->action("show_permissions_info"); + QAction* showOwnerInfo = actionCollection()->action("show_owner_info"); + QAction* showGroupInfo = actionCollection()->action("show_group_info"); + QAction* showMimeInfo = actionCollection()->action("show_mime_info"); - if (action != 0) { - KToggleAction* toggleAction = static_cast(action); - toggleAction->setChecked(true); + showSizeInfo->setChecked(false); + showDateInfo->setChecked(false); + showPermissionsInfo->setChecked(false); + showOwnerInfo->setChecked(false); + showGroupInfo->setChecked(false); + showMimeInfo->setChecked(false); + + const DolphinView* view = m_activeViewContainer->view(); - QActionGroup* group = toggleAction->actionGroup(); - Q_ASSERT(group != 0); - const DolphinView* view = m_activeViewContainer->view(); - group->setEnabled(view->mode() == DolphinView::IconsView); + // currently the column view does not support additional information + const bool enable = (view->mode() != DolphinView::ColumnView); + showSizeInfo->setEnabled(enable); + showDateInfo->setEnabled(enable); + showPermissionsInfo->setEnabled(enable); + showOwnerInfo->setEnabled(enable); + showGroupInfo->setEnabled(enable); + showMimeInfo->setEnabled(enable); + + foreach (KFileItemDelegate::Information info, list) { + switch (info) { + case KFileItemDelegate::Size: + showSizeInfo->setChecked(true); + break; + case KFileItemDelegate::ModificationTime: + showDateInfo->setChecked(true); + break; + case KFileItemDelegate::Permissions: + showPermissionsInfo->setChecked(true); + break; + case KFileItemDelegate::Owner: + showOwnerInfo->setChecked(true); + break; + case KFileItemDelegate::OwnerAndGroup: + showGroupInfo->setChecked(true); + break; + case KFileItemDelegate::FriendlyMimeType: + showMimeInfo->setChecked(true); + break; + default: + break; + } } } @@ -458,7 +482,7 @@ void DolphinMainWindow::updateNewMenu() void DolphinMainWindow::rename() { clearStatusBar(); - m_activeViewContainer->renameSelectedItems(); + m_activeViewContainer->view()->renameSelectedItems(); } void DolphinMainWindow::moveToTrash() @@ -466,7 +490,7 @@ void DolphinMainWindow::moveToTrash() clearStatusBar(); const KUrl::List selectedUrls = m_activeViewContainer->view()->selectedUrls(); KonqOperations::del(this, KonqOperations::TRASH, selectedUrls); - m_undoCommandTypes.append(KonqUndoManager::TRASH); + m_undoCommandTypes.append(KonqFileUndoManager::TRASH); } void DolphinMainWindow::deleteItems() @@ -491,6 +515,7 @@ void DolphinMainWindow::deleteItems() void DolphinMainWindow::properties() { const KFileItemList list = m_activeViewContainer->view()->selectedItems(); + KPropertiesDialog dialog(list, this); dialog.exec(); } @@ -534,31 +559,31 @@ void DolphinMainWindow::slotUndoAvailable(bool available) } if (available && (m_undoCommandTypes.count() > 0)) { - const KonqUndoManager::CommandType command = m_undoCommandTypes.takeFirst(); + const KonqFileUndoManager::CommandType command = m_undoCommandTypes.takeFirst(); DolphinStatusBar* statusBar = m_activeViewContainer->statusBar(); switch (command) { - case KonqUndoManager::COPY: + case KonqFileUndoManager::COPY: statusBar->setMessage(i18nc("@info:status", "Copy operation completed."), DolphinStatusBar::OperationCompleted); break; - case KonqUndoManager::MOVE: + case KonqFileUndoManager::MOVE: statusBar->setMessage(i18nc("@info:status", "Move operation completed."), DolphinStatusBar::OperationCompleted); break; - case KonqUndoManager::LINK: + case KonqFileUndoManager::LINK: statusBar->setMessage(i18nc("@info:status", "Link operation completed."), DolphinStatusBar::OperationCompleted); break; - case KonqUndoManager::TRASH: + case KonqFileUndoManager::TRASH: statusBar->setMessage(i18nc("@info:status", "Move to trash operation completed."), DolphinStatusBar::OperationCompleted); break; - case KonqUndoManager::RENAME: + case KonqFileUndoManager::RENAME: statusBar->setMessage(i18nc("@info:status", "Renaming operation completed."), DolphinStatusBar::OperationCompleted); break; - case KonqUndoManager::MKDIR: + case KonqFileUndoManager::MKDIR: statusBar->setMessage(i18nc("@info:status", "Created folder."), DolphinStatusBar::OperationCompleted); break; @@ -581,7 +606,7 @@ void DolphinMainWindow::slotUndoTextChanged(const QString& text) void DolphinMainWindow::undo() { clearStatusBar(); - KonqUndoManager::self()->undo(); + KonqFileUndoManager::self()->undo(); } void DolphinMainWindow::cut() @@ -690,19 +715,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(); + m_activeViewContainer->view()->setMode(mode); } void DolphinMainWindow::sortByName() @@ -770,49 +787,64 @@ void DolphinMainWindow::toggleSortCategorization() view->setCategorizedSorting(!categorizedSorting); } -void DolphinMainWindow::clearInfo() +void DolphinMainWindow::toggleSizeInfo() { - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::NoInformation); + toggleAdditionalInfo("show_size_info", KFileItemDelegate::Size); } -void DolphinMainWindow::showMimeInfo() +void DolphinMainWindow::toggleDateInfo() { - clearStatusBar(); - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::FriendlyMimeType); + toggleAdditionalInfo("show_date_info", KFileItemDelegate::ModificationTime); } -void DolphinMainWindow::showSizeInfo() +void DolphinMainWindow::togglePermissionsInfo() { - clearStatusBar(); - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::Size); + toggleAdditionalInfo("show_permissions_info", KFileItemDelegate::Permissions); } -void DolphinMainWindow::showDateInfo() +void DolphinMainWindow::toggleOwnerInfo() { - clearStatusBar(); - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::ModificationTime); + toggleAdditionalInfo("show_owner_info", KFileItemDelegate::Owner); +} + +void DolphinMainWindow::toggleGroupInfo() +{ + toggleAdditionalInfo("show_group_info", KFileItemDelegate::OwnerAndGroup); +} + +void DolphinMainWindow::toggleMimeInfo() +{ + toggleAdditionalInfo("show_mime_info", KFileItemDelegate::FriendlyMimeType); } void DolphinMainWindow::toggleSplitView() { if (m_viewContainer[SecondaryView] == 0) { - const int newWidth = (m_viewContainer[PrimaryView]->width() - m_splitter->handleWidth()) / 2; // create a secondary view + const int newWidth = (m_viewContainer[PrimaryView]->width() - m_splitter->handleWidth()) / 2; + const DolphinView* view = m_viewContainer[PrimaryView]->view(); - m_viewContainer[SecondaryView] = new DolphinViewContainer(this, - 0, - view->rootUrl()); + m_viewContainer[SecondaryView] = new DolphinViewContainer(this, 0, view->rootUrl()); connectViewSignals(SecondaryView); m_splitter->addWidget(m_viewContainer[SecondaryView]); m_splitter->setSizes(QList() << newWidth << newWidth); m_viewContainer[SecondaryView]->view()->reload(); m_viewContainer[SecondaryView]->setActive(false); m_viewContainer[SecondaryView]->show(); - } else { + } else if (m_activeViewContainer == m_viewContainer[PrimaryView]) { // remove secondary view m_viewContainer[SecondaryView]->close(); m_viewContainer[SecondaryView]->deleteLater(); m_viewContainer[SecondaryView] = 0; + } else { + // The secondary view is active, hence from a users point of view + // the content of the secondary view should be moved to the primary view. + // From an implementation point of view it is more efficient to close + // the primary view and exchange the internal pointers afterwards. + m_viewContainer[PrimaryView]->close(); + m_viewContainer[PrimaryView]->deleteLater(); + m_viewContainer[PrimaryView] = m_viewContainer[SecondaryView]; + m_viewContainer[SecondaryView] = 0; } setActiveViewContainer(m_viewContainer[PrimaryView]); @@ -883,7 +915,9 @@ void DolphinMainWindow::toggleEditLocation() void DolphinMainWindow::editLocation() { - m_activeViewContainer->urlNavigator()->setUrlEditable(true); + KUrlNavigator* navigator = m_activeViewContainer->urlNavigator(); + navigator->setUrlEditable(true); + navigator->setFocus(); } void DolphinMainWindow::adjustViewProperties() @@ -1028,25 +1062,15 @@ void DolphinMainWindow::init() updatePasteAction(); updateGoActions(); - const bool split = generalSettings->splitView(); - if (split) { + if (generalSettings->splitView()) { toggleSplitView(); } - updateSplitAction(split); updateViewActions(); if (firstRun) { // assure a proper default size if Dolphin runs the first time resize(700, 500); } -#ifdef HAVE_NEPOMUK - if (!MetaDataWidget::metaDataAvailable()) { - DolphinStatusBar* statusBar = activeViewContainer()->statusBar(); - statusBar->setMessage(i18nc("@info:status", - "Failed to contact Nepomuk service, annotation and tagging are disabled."), - DolphinStatusBar::Error); - } -#endif emit urlChanged(homeUrl); } @@ -1085,30 +1109,30 @@ void DolphinMainWindow::setupActions() connect(menu, SIGNAL(aboutToShow()), this, SLOT(updateNewMenu())); - QAction* newWindow = actionCollection()->addAction("new_window"); + KAction* newWindow = actionCollection()->addAction("new_window"); newWindow->setIcon(KIcon("window-new")); newWindow->setText(i18nc("@action:inmenu File", "New &Window")); newWindow->setShortcut(Qt::CTRL | Qt::Key_N); connect(newWindow, SIGNAL(triggered()), this, SLOT(openNewMainWindow())); - QAction* rename = actionCollection()->addAction("rename"); + KAction* rename = actionCollection()->addAction("rename"); rename->setText(i18nc("@action:inmenu File", "Rename...")); rename->setShortcut(Qt::Key_F2); connect(rename, SIGNAL(triggered()), this, SLOT(rename())); - QAction* moveToTrash = actionCollection()->addAction("move_to_trash"); + KAction* moveToTrash = actionCollection()->addAction("move_to_trash"); moveToTrash->setText(i18nc("@action:inmenu File", "Move to Trash")); - moveToTrash->setIcon(KIcon("edit-trash")); + moveToTrash->setIcon(KIcon("user-trash")); moveToTrash->setShortcut(QKeySequence::Delete); connect(moveToTrash, SIGNAL(triggered()), this, SLOT(moveToTrash())); - QAction* deleteAction = actionCollection()->addAction("delete"); + KAction* deleteAction = actionCollection()->addAction("delete"); deleteAction->setText(i18nc("@action:inmenu File", "Delete")); deleteAction->setShortcut(Qt::SHIFT | Qt::Key_Delete); deleteAction->setIcon(KIcon("edit-delete")); connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteItems())); - QAction* properties = actionCollection()->addAction("properties"); + KAction* properties = actionCollection()->addAction("properties"); properties->setText(i18nc("@action:inmenu File", "Properties")); properties->setShortcut(Qt::ALT | Qt::Key_Return); connect(properties, SIGNAL(triggered()), this, SLOT(properties())); @@ -1120,16 +1144,21 @@ void DolphinMainWindow::setupActions() SLOT(undo()), actionCollection()); - KStandardAction::cut(this, SLOT(cut()), actionCollection()); + //Need to remove shift+del from cut action, else the shortcut for deletejob + //doesn't work + KAction* cut = KStandardAction::cut(this, SLOT(cut()), actionCollection()); + KShortcut cutShortcut = cut->shortcut(); + cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty); + cut->setShortcut(cutShortcut); KStandardAction::copy(this, SLOT(copy()), actionCollection()); KStandardAction::paste(this, SLOT(paste()), actionCollection()); - QAction* selectAll = actionCollection()->addAction("select_all"); + KAction* selectAll = actionCollection()->addAction("select_all"); selectAll->setText(i18nc("@action:inmenu Edit", "Select All")); selectAll->setShortcut(Qt::CTRL + Qt::Key_A); connect(selectAll, SIGNAL(triggered()), this, SLOT(selectAll())); - QAction* invertSelection = actionCollection()->addAction("invert_selection"); + KAction* invertSelection = actionCollection()->addAction("invert_selection"); invertSelection->setText(i18nc("@action:inmenu Edit", "Invert Selection")); invertSelection->setShortcut(Qt::CTRL | Qt::SHIFT | Qt::Key_A); connect(invertSelection, SIGNAL(triggered()), this, SLOT(invertSelection())); @@ -1143,62 +1172,50 @@ void DolphinMainWindow::setupActions() SLOT(zoomOut()), actionCollection()); - KToggleAction* iconsView = actionCollection()->add("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("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("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("by_name"); - sortByName->setText(i18nc("@action:inmenu Sort", "By Name")); + KToggleAction* sortByName = actionCollection()->add("sort_by_name"); + sortByName->setText(i18nc("@action:inmenu Sort By", "Name")); connect(sortByName, SIGNAL(triggered()), this, SLOT(sortByName())); - KToggleAction* sortBySize = actionCollection()->add("by_size"); - sortBySize->setText(i18nc("@action:inmenu Sort", "By Size")); + KToggleAction* sortBySize = actionCollection()->add("sort_by_size"); + sortBySize->setText(i18nc("@action:inmenu Sort By", "Size")); connect(sortBySize, SIGNAL(triggered()), this, SLOT(sortBySize())); - KToggleAction* sortByDate = actionCollection()->add("by_date"); - sortByDate->setText(i18nc("@action:inmenu Sort", "By Date")); + KToggleAction* sortByDate = actionCollection()->add("sort_by_date"); + sortByDate->setText(i18nc("@action:inmenu Sort By", "Date")); connect(sortByDate, SIGNAL(triggered()), this, SLOT(sortByDate())); - KToggleAction* sortByPermissions = actionCollection()->add("by_permissions"); - sortByPermissions->setText(i18nc("@action:inmenu Sort", "By Permissions")); + KToggleAction* sortByPermissions = actionCollection()->add("sort_by_permissions"); + sortByPermissions->setText(i18nc("@action:inmenu Sort By", "Permissions")); connect(sortByPermissions, SIGNAL(triggered()), this, SLOT(sortByPermissions())); - KToggleAction* sortByOwner = actionCollection()->add("by_owner"); - sortByOwner->setText(i18nc("@action:inmenu Sort", "By Owner")); + KToggleAction* sortByOwner = actionCollection()->add("sort_by_owner"); + sortByOwner->setText(i18nc("@action:inmenu Sort By", "Owner")); connect(sortByOwner, SIGNAL(triggered()), this, SLOT(sortByOwner())); - KToggleAction* sortByGroup = actionCollection()->add("by_group"); - sortByGroup->setText(i18nc("@action:inmenu Sort", "By Group")); + KToggleAction* sortByGroup = actionCollection()->add("sort_by_group"); + sortByGroup->setText(i18nc("@action:inmenu Sort By", "Group")); connect(sortByGroup, SIGNAL(triggered()), this, SLOT(sortByGroup())); - KToggleAction* sortByType = actionCollection()->add("by_type"); - sortByType->setText(i18nc("@action:inmenu Sort", "By Type")); + KToggleAction* sortByType = actionCollection()->add("sort_by_type"); + sortByType->setText(i18nc("@action:inmenu Sort By", "Type")); connect(sortByType, SIGNAL(triggered()), this, SLOT(sortByType())); - KToggleAction* sortByRating = actionCollection()->add("by_rating"); - sortByRating->setText(i18nc("@action:inmenu Sort", "By Rating")); + KToggleAction* sortByRating = actionCollection()->add("sort_by_rating"); + sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating")); - KToggleAction* sortByTags = actionCollection()->add("by_tags"); - sortByTags->setText(i18nc("@action:inmenu Sort", "By Tags")); + KToggleAction* sortByTags = actionCollection()->add("sort_by_tags"); + sortByTags->setText(i18nc("@action:inmenu Sort By", "Tags")); #ifdef HAVE_NEPOMUK if (MetaDataWidget::metaDataAvailable()) { @@ -1233,27 +1250,29 @@ void DolphinMainWindow::setupActions() showInGroups->setText(i18nc("@action:inmenu View", "Show in Groups")); connect(showInGroups, SIGNAL(triggered()), this, SLOT(toggleSortCategorization())); - KToggleAction* clearInfo = actionCollection()->add("clear_info"); - clearInfo->setText(i18nc("@action:inmenu Additional information", "No Information")); - connect(clearInfo, SIGNAL(triggered()), this, SLOT(clearInfo())); - - KToggleAction* showMimeInfo = actionCollection()->add("show_mime_info"); - showMimeInfo->setText(i18nc("@action:inmenu Additional information", "Type")); - connect(showMimeInfo, SIGNAL(triggered()), this, SLOT(showMimeInfo())); - KToggleAction* showSizeInfo = actionCollection()->add("show_size_info"); showSizeInfo->setText(i18nc("@action:inmenu Additional information", "Size")); - connect(showSizeInfo, SIGNAL(triggered()), this, SLOT(showSizeInfo())); + connect(showSizeInfo, SIGNAL(triggered()), this, SLOT(toggleSizeInfo())); KToggleAction* showDateInfo = actionCollection()->add("show_date_info"); showDateInfo->setText(i18nc("@action:inmenu Additional information", "Date")); - connect(showDateInfo, SIGNAL(triggered()), this, SLOT(showDateInfo())); + connect(showDateInfo, SIGNAL(triggered()), this, SLOT(toggleDateInfo())); + + KToggleAction* showPermissionsInfo = actionCollection()->add("show_permissions_info"); + showPermissionsInfo->setText(i18nc("@action:inmenu Additional information", "Permissions")); + connect(showPermissionsInfo, SIGNAL(triggered()), this, SLOT(togglePermissionsInfo())); + + KToggleAction* showOwnerInfo = actionCollection()->add("show_owner_info"); + showOwnerInfo->setText(i18nc("@action:inmenu Additional information", "Owner")); + connect(showOwnerInfo, SIGNAL(triggered()), this, SLOT(toggleOwnerInfo())); - QActionGroup* infoGroup = new QActionGroup(this); - infoGroup->addAction(clearInfo); - infoGroup->addAction(showMimeInfo); - infoGroup->addAction(showSizeInfo); - infoGroup->addAction(showDateInfo); + KToggleAction* showGroupInfo = actionCollection()->add("show_group_info"); + showGroupInfo->setText(i18nc("@action:inmenu Additional information", "Group")); + connect(showGroupInfo, SIGNAL(triggered()), this, SLOT(toggleGroupInfo())); + + KToggleAction* showMimeInfo = actionCollection()->add("show_mime_info"); + showMimeInfo->setText(i18nc("@action:inmenu Additional information", "Type")); + connect(showMimeInfo, SIGNAL(triggered()), this, SLOT(toggleMimeInfo())); KToggleAction* showPreview = actionCollection()->add("show_preview"); showPreview->setText(i18nc("@action:intoolbar", "Preview")); @@ -1265,18 +1284,18 @@ void DolphinMainWindow::setupActions() showHiddenFiles->setShortcut(Qt::ALT | Qt::Key_Period); connect(showHiddenFiles, SIGNAL(triggered()), this, SLOT(toggleShowHiddenFiles())); - QAction* split = actionCollection()->addAction("split_view"); + KAction* split = actionCollection()->addAction("split_view"); split->setShortcut(Qt::Key_F10); - updateSplitAction(false); + updateSplitAction(); connect(split, SIGNAL(triggered()), this, SLOT(toggleSplitView())); - QAction* reload = actionCollection()->addAction("reload"); + KAction* reload = actionCollection()->addAction("reload"); reload->setText(i18nc("@action:inmenu View", "Reload")); reload->setShortcut(Qt::Key_F5); reload->setIcon(KIcon("view-refresh")); connect(reload, SIGNAL(triggered()), this, SLOT(reloadView())); - QAction* stop = actionCollection()->addAction("stop"); + KAction* stop = actionCollection()->addAction("stop"); stop->setText(i18nc("@action:inmenu View", "Stop")); stop->setIcon(KIcon("process-stop")); connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading())); @@ -1289,17 +1308,21 @@ void DolphinMainWindow::setupActions() showFullLocation->setShortcut(Qt::CTRL | Qt::Key_L); connect(showFullLocation, SIGNAL(triggered()), this, SLOT(toggleEditLocation())); - QAction* editLocation = actionCollection()->addAction("edit_location"); + KAction* editLocation = actionCollection()->addAction("edit_location"); editLocation->setText(i18nc("@action:inmenu Navigation Bar", "Edit Location")); editLocation->setShortcut(Qt::Key_F6); connect(editLocation, SIGNAL(triggered()), this, SLOT(editLocation())); - QAction* adjustViewProps = actionCollection()->addAction("view_properties"); + KAction* adjustViewProps = actionCollection()->addAction("view_properties"); adjustViewProps->setText(i18nc("@action:inmenu View", "Adjust View Properties...")); connect(adjustViewProps, SIGNAL(triggered()), this, SLOT(adjustViewProperties())); // setup 'Go' menu - KStandardAction::back(this, SLOT(goBack()), actionCollection()); + KAction* backAction = KStandardAction::back(this, SLOT(goBack()), actionCollection()); + KShortcut backShortcut = backAction->shortcut(); + backShortcut.setAlternate(Qt::Key_Backspace); + backAction->setShortcut(backShortcut); + KStandardAction::forward(this, SLOT(goForward()), actionCollection()); KStandardAction::up(this, SLOT(goUp()), actionCollection()); KStandardAction::home(this, SLOT(goHome()), actionCollection()); @@ -1308,7 +1331,7 @@ void DolphinMainWindow::setupActions() QAction* findFile = actionCollection()->addAction("find_file"); findFile->setText(i18nc("@action:inmenu Tools", "Find File...")); findFile->setShortcut(Qt::CTRL | Qt::Key_F); - findFile->setIcon(KIcon("file-find")); + findFile->setIcon(KIcon("edit-find")); connect(findFile, SIGNAL(triggered()), this, SLOT(findFile())); KToggleAction* showFilterBar = actionCollection()->add("show_filter_bar"); @@ -1316,7 +1339,7 @@ void DolphinMainWindow::setupActions() showFilterBar->setShortcut(Qt::CTRL | Qt::Key_I); connect(showFilterBar, SIGNAL(triggered()), this, SLOT(toggleFilterBarVisibility())); - QAction* compareFiles = actionCollection()->addAction("compare_files"); + KAction* compareFiles = actionCollection()->addAction("compare_files"); compareFiles->setText(i18nc("@action:inmenu Tools", "Compare Files")); compareFiles->setIcon(KIcon("kompare")); compareFiles->setEnabled(false); @@ -1336,6 +1359,7 @@ void DolphinMainWindow::setupDockWidgets() infoDock->setWidget(infoWidget); infoDock->toggleViewAction()->setText(i18nc("@title:window", "Information")); + infoDock->toggleViewAction()->setShortcut(Qt::Key_F11); actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction()); addDockWidget(Qt::RightDockWidgetArea, infoDock); @@ -1354,6 +1378,7 @@ void DolphinMainWindow::setupDockWidgets() treeViewDock->setWidget(treeWidget); treeViewDock->toggleViewAction()->setText(i18nc("@title:window", "Folders")); + treeViewDock->toggleViewAction()->setShortcut(Qt::Key_F7); actionCollection()->addAction("show_folders_panel", treeViewDock->toggleViewAction()); addDockWidget(Qt::LeftDockWidgetArea, treeViewDock); @@ -1374,9 +1399,10 @@ void DolphinMainWindow::setupDockWidgets() terminalDock->setWidget(terminalWidget); terminalDock->toggleViewAction()->setText(i18nc("@title:window", "Terminal")); + terminalDock->toggleViewAction()->setShortcut(Qt::Key_F4); actionCollection()->addAction("show_terminal_panel", terminalDock->toggleViewAction()); - addDockWidget(Qt::RightDockWidgetArea, terminalDock); + addDockWidget(Qt::BottomDockWidgetArea, terminalDock); connect(this, SIGNAL(urlChanged(KUrl)), terminalWidget, SLOT(setUrl(KUrl))); @@ -1387,21 +1413,23 @@ void DolphinMainWindow::setupDockWidgets() terminalDock->hide(); } - QDockWidget *placesDock = new QDockWidget(i18nc("@title:window", "Places")); + QDockWidget* placesDock = new QDockWidget(i18nc("@title:window", "Places")); placesDock->setObjectName("placesDock"); placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - KFilePlacesView *listView = new KFilePlacesView(placesDock); - placesDock->setWidget(listView); - listView->setModel(DolphinSettings::instance().placesModel()); + KFilePlacesView* placesView = new KFilePlacesView(placesDock); + placesDock->setWidget(placesView); + placesView->setModel(DolphinSettings::instance().placesModel()); + placesView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); placesDock->toggleViewAction()->setText(i18nc("@title:window", "Places")); + placesDock->toggleViewAction()->setShortcut(Qt::Key_F9); actionCollection()->addAction("show_places_panel", placesDock->toggleViewAction()); addDockWidget(Qt::LeftDockWidgetArea, placesDock); - connect(listView, SIGNAL(urlChanged(KUrl)), + connect(placesView, SIGNAL(urlChanged(KUrl)), this, SLOT(changeUrl(KUrl))); connect(this, SIGNAL(urlChanged(KUrl)), - listView, SLOT(setUrl(KUrl))); + placesView, SLOT(setUrl(KUrl))); } void DolphinMainWindow::updateHistory() @@ -1430,7 +1458,7 @@ void DolphinMainWindow::updateEditActions() QAction* renameAction = actionCollection()->action("rename"); if (renameAction != 0) { - renameAction->setEnabled(list.count() >= 1); + renameAction->setEnabled(true); } bool enableMoveToTrash = true; @@ -1438,8 +1466,7 @@ void DolphinMainWindow::updateEditActions() KFileItemList::const_iterator it = list.begin(); const KFileItemList::const_iterator end = list.end(); while (it != end) { - KFileItem* item = *it; - const KUrl& url = item->url(); + const KUrl& url = (*it).url(); // only enable the 'Move to Trash' action for local files if (!url.isLocalFile()) { enableMoveToTrash = false; @@ -1466,21 +1493,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(action); toggleAction->setChecked(true); @@ -1503,7 +1516,7 @@ void DolphinMainWindow::updateViewActions() static_cast(actionCollection()->action("show_hidden_files")); showHiddenFilesAction->setChecked(view->showHiddenFiles()); - updateSplitAction(m_viewContainer[SecondaryView] != 0); + updateSplitAction(); KToggleAction* editableLocactionAction = static_cast(actionCollection()->action("editable_location")); @@ -1521,19 +1534,19 @@ void DolphinMainWindow::updateGoActions() void DolphinMainWindow::copyUrls(const KUrl::List& source, const KUrl& dest) { KonqOperations::copy(this, KonqOperations::COPY, source, dest); - m_undoCommandTypes.append(KonqUndoManager::COPY); + m_undoCommandTypes.append(KonqFileUndoManager::COPY); } void DolphinMainWindow::moveUrls(const KUrl::List& source, const KUrl& dest) { KonqOperations::copy(this, KonqOperations::MOVE, source, dest); - m_undoCommandTypes.append(KonqUndoManager::MOVE); + m_undoCommandTypes.append(KonqFileUndoManager::MOVE); } void DolphinMainWindow::linkUrls(const KUrl::List& source, const KUrl& dest) { KonqOperations::copy(this, KonqOperations::LINK, source, dest); - m_undoCommandTypes.append(KonqUndoManager::LINK); + m_undoCommandTypes.append(KonqFileUndoManager::LINK); } void DolphinMainWindow::clearStatusBar() @@ -1560,14 +1573,16 @@ void DolphinMainWindow::connectViewSignals(int viewIndex) this, SLOT(slotSortingChanged(DolphinView::Sorting))); connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)), this, SLOT(slotSortOrderChanged(Qt::SortOrder))); - connect(view, SIGNAL(additionalInfoChanged(KFileItemDelegate::AdditionalInformation)), - this, SLOT(slotAdditionalInfoChanged(KFileItemDelegate::AdditionalInformation))); + connect(view, SIGNAL(additionalInfoChanged(KFileItemDelegate::InformationList)), + this, SLOT(slotAdditionalInfoChanged(KFileItemDelegate::InformationList))); connect(view, SIGNAL(selectionChanged(KFileItemList)), this, SLOT(slotSelectionChanged(KFileItemList))); connect(view, SIGNAL(requestItemInfo(KFileItem)), this, SLOT(slotRequestItemInfo(KFileItem))); connect(view, SIGNAL(activated()), this, SLOT(toggleActiveView())); + connect(view, SIGNAL(renaming()), + this, SLOT(slotRenaming())); const KUrlNavigator* navigator = container->urlNavigator(); connect(navigator, SIGNAL(urlChanged(const KUrl&)), @@ -1576,20 +1591,47 @@ void DolphinMainWindow::connectViewSignals(int viewIndex) this, SLOT(slotHistoryChanged())); } -void DolphinMainWindow::updateSplitAction(bool isSplit) +void DolphinMainWindow::updateSplitAction() { QAction* splitAction = actionCollection()->action("split_view"); - if (isSplit) { - splitAction->setText(i18nc("@action:intoolbar Join views", "Join")); - splitAction->setIcon(KIcon("fileview-join")); + if (m_viewContainer[SecondaryView] != 0) { + if (m_activeViewContainer == m_viewContainer[PrimaryView]) { + splitAction->setText(i18nc("@action:intoolbar Close right view", "Close")); + splitAction->setIcon(KIcon("fileview-close-right")); + } else { + splitAction->setText(i18nc("@action:intoolbar Close left view", "Close")); + splitAction->setIcon(KIcon("fileview-close-left")); + } } else { splitAction->setText(i18nc("@action:intoolbar Split view", "Split")); splitAction->setIcon(KIcon("fileview-split")); } } +void DolphinMainWindow::toggleAdditionalInfo(const char* actionName, + KFileItemDelegate::Information info) +{ + clearStatusBar(); + + DolphinView* view = m_activeViewContainer->view(); + KFileItemDelegate::InformationList list = view->additionalInfo(); + + const bool show = actionCollection()->action(actionName)->isChecked(); + + const int index = list.indexOf(info); + const bool containsInfo = (index >= 0); + if (show && !containsInfo) { + list.append(info); + view->setAdditionalInfo(list); + } else if (!show && containsInfo) { + list.removeAt(index); + view->setAdditionalInfo(list); + Q_ASSERT(list.indexOf(info) < 0); + } +} + DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) : - KonqUndoManager::UiInterface(mainWin), + KonqFileUndoManager::UiInterface(mainWin), m_mainWin(mainWin) { Q_ASSERT(m_mainWin != 0);