X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/1ce2fb199db7bdf5baf05b61e4e58c549404b4df..e3ed05b37249e487c46ab3e0512b43a8bd9316fc:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index ddabf21a4..e40166e99 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -20,6 +20,7 @@ ***************************************************************************/ #include "dolphinmainwindow.h" +#include "dolphindropcontroller.h" #include @@ -41,6 +42,7 @@ #include "kfileplacesview.h" #include "dolphin_generalsettings.h" +#include "dolphin_iconsmodesettings.h" #include #include @@ -58,7 +60,6 @@ #include #include #include -#include #include #include #include @@ -68,11 +69,13 @@ #include #include #include +#include -#include -#include -#include -#include +#include +#include +#include +#include +#include DolphinMainWindow::DolphinMainWindow(int id) : KXmlGuiWindow(0), @@ -149,81 +152,10 @@ 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(); - const bool shiftPressed = modifier & Qt::ShiftModifier; - const bool controlPressed = modifier & Qt::ControlModifier; - if (shiftPressed && controlPressed) { - // shortcut for 'Link Here' is used - action = Qt::LinkAction; - } else if (shiftPressed) { - // shortcut for 'Move Here' is used - action = Qt::MoveAction; - } else if (controlPressed) { - // shortcut for 'Copy Here' is used - action = Qt::CopyAction; - } else { - // open a context menu which offers the following actions: - // - Move Here - // - Copy Here - // - Link Here - // - Cancel - - KMenu popup(this); - - QString seq = QKeySequence(Qt::ShiftModifier).toString(); - seq.chop(1); // chop superfluous '+' - QAction* moveAction = popup.addAction(KIcon("go-jump"), - i18nc("@action:inmenu", - "&Move Here\t%1", seq)); - - seq = QKeySequence(Qt::ControlModifier).toString(); - seq.chop(1); - QAction* copyAction = popup.addAction(KIcon("edit-copy"), - i18nc("@action:inmenu", - "&Copy Here\t%1", seq)); - - seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString(); - seq.chop(1); - QAction* linkAction = popup.addAction(KIcon("insert-link"), - i18nc("@action:inmenu", - "&Link Here\t%1", seq)); - - popup.addSeparator(); - popup.addAction(KIcon("process-stop"), i18nc("@action:inmenu", "Cancel")); - - QAction* activatedAction = popup.exec(QCursor::pos()); - if (activatedAction == moveAction) { - action = Qt::MoveAction; - } else if (activatedAction == copyAction) { - action = Qt::CopyAction; - } else if (activatedAction == linkAction) { - action = Qt::LinkAction; - } else { - return; - } - } - - switch (action) { - case Qt::MoveAction: - moveUrls(urls, destination); - break; - - case Qt::CopyAction: - copyUrls(urls, destination); - break; - - case Qt::LinkAction: - linkUrls(urls, destination); - break; - - default: - break; - } + DolphinDropController dropController(this); + connect(&dropController, SIGNAL(doingOperation(KonqFileUndoManager::CommandType)), + this, SLOT(slotDoingOperation(KonqFileUndoManager::CommandType))); + dropController.dropUrls(urls, destination); } void DolphinMainWindow::changeUrl(const KUrl& url) @@ -341,8 +273,9 @@ void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::Information const DolphinView* view = m_activeViewContainer->view(); - // currently the column view does not support additional information - const bool enable = (view->mode() != DolphinView::ColumnView); + const bool enable = (view->mode() == DolphinView::DetailsView) || + (view->mode() == DolphinView::IconsView); + showSizeInfo->setEnabled(enable); showDateInfo->setEnabled(enable); showPermissionsInfo->setEnabled(enable); @@ -387,7 +320,12 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) } QAction* compareFilesAction = actionCollection()->action("compare_files"); - compareFilesAction->setEnabled(selectedUrlsCount == 2); + if (selectedUrlsCount == 2) { + const bool kompareInstalled = !KGlobal::dirs()->findExe("kompare").isEmpty(); + compareFilesAction->setEnabled(selectedUrlsCount == 2 && kompareInstalled); + } else { + compareFilesAction->setEnabled(false); + } m_activeViewContainer->updateStatusBar(); @@ -442,34 +380,44 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) KXmlGuiWindow::closeEvent(event); } -void DolphinMainWindow::saveProperties(KConfig* config) +void DolphinMainWindow::saveProperties(KConfigGroup& group) { - KConfigGroup primaryView = config->group("Primary view"); - primaryView.writeEntry("Url", m_viewContainer[PrimaryView]->url().url()); - primaryView.writeEntry("Editable Url", m_viewContainer[PrimaryView]->isUrlEditable()); - if (m_viewContainer[SecondaryView] != 0) { - KConfigGroup secondaryView = config->group("Secondary view"); - secondaryView.writeEntry("Url", m_viewContainer[SecondaryView]->url().url()); - secondaryView.writeEntry("Editable Url", m_viewContainer[SecondaryView]->isUrlEditable()); + DolphinViewContainer* cont = m_viewContainer[PrimaryView]; + group.writeEntry("Primary Url", cont->url().url()); + group.writeEntry("Primary Editable Url", cont->isUrlEditable()); + + cont = m_viewContainer[SecondaryView]; + if (cont != 0) { + group.writeEntry("Secondary Url", cont->url().url()); + group.writeEntry("Secondary Editable Url", cont->isUrlEditable()); } } -void DolphinMainWindow::readProperties(KConfig* config) +void DolphinMainWindow::readProperties(const KConfigGroup& group) { - const KConfigGroup primaryViewGroup = config->group("Primary view"); - m_viewContainer[PrimaryView]->setUrl(primaryViewGroup.readEntry("Url")); - bool editable = primaryViewGroup.readEntry("Editable Url", false); - m_viewContainer[PrimaryView]->urlNavigator()->setUrlEditable(editable); + DolphinViewContainer* cont = m_viewContainer[PrimaryView]; - if (config->hasGroup("Secondary view")) { - const KConfigGroup secondaryViewGroup = config->group("Secondary view"); - if (m_viewContainer[PrimaryView] == 0) { + cont->setUrl(group.readEntry("Primary Url")); + bool editable = group.readEntry("Primary Editable Url", false); + cont->urlNavigator()->setUrlEditable(editable); + + cont = m_viewContainer[SecondaryView]; + const QString secondaryUrl = group.readEntry("Secondary Url"); + if (!secondaryUrl.isEmpty()) { + if (cont == 0) { + // a secondary view should be shown, but no one is available + // currently -> create a new view toggleSplitView(); + cont = m_viewContainer[SecondaryView]; + Q_ASSERT(cont != 0); } - m_viewContainer[PrimaryView]->setUrl(secondaryViewGroup.readEntry("Url")); - editable = secondaryViewGroup.readEntry("Editable Url", false); - m_viewContainer[PrimaryView]->urlNavigator()->setUrlEditable(editable); - } else if (m_viewContainer[SecondaryView] != 0) { + + cont->setUrl(secondaryUrl); + bool editable = group.readEntry("Secondary Editable Url", false); + cont->urlNavigator()->setUrlEditable(editable); + } else if (cont != 0) { + // no secondary view should be shown, but the default setting shows + // one already -> close the view toggleSplitView(); } } @@ -509,8 +457,11 @@ void DolphinMainWindow::properties() { const KFileItemList list = m_activeViewContainer->view()->selectedItems(); - KPropertiesDialog dialog(list, this); - dialog.exec(); + KPropertiesDialog *dialog = new KPropertiesDialog(list, this); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->show(); + dialog->raise(); + dialog->activateWindow(); } void DolphinMainWindow::quit() @@ -614,7 +565,19 @@ void DolphinMainWindow::updatePasteAction() void DolphinMainWindow::selectAll() { clearStatusBar(); - m_activeViewContainer->view()->selectAll(); + + // if the URL navigator is editable and focused, select the whole + // URL instead of all items of the view + + KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator(); + QLineEdit* lineEdit = urlNavigator->editor()->lineEdit(); + const bool selectUrl = urlNavigator->isUrlEditable() && + lineEdit->hasFocus(); + if (selectUrl) { + lineEdit->selectAll(); + } else { + m_activeViewContainer->view()->selectAll(); + } } void DolphinMainWindow::invertSelection() @@ -1116,24 +1079,27 @@ void DolphinMainWindow::setupActions() sortByType->setText(i18nc("@action:inmenu Sort By", "Type")); connect(sortByType, SIGNAL(triggered()), this, SLOT(sortByType())); - KToggleAction* sortByRating = actionCollection()->add("sort_by_rating"); - sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating")); - - KToggleAction* sortByTags = actionCollection()->add("sort_by_tags"); - sortByTags->setText(i18nc("@action:inmenu Sort By", "Tags")); - + // TODO: Hided "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 = actionCollection()->add("sort_by_rating"); + // sortByRating->setText(i18nc("@action:inmenu Sort By", "Rating")); + // + // KToggleAction* sortByTags = actionCollection()->add("sort_by_tags"); + // sortByTags->setText(i18nc("@action:inmenu Sort By", "Tags")); + // #ifdef HAVE_NEPOMUK - if (MetaDataWidget::metaDataAvailable()) { - connect(sortByRating, SIGNAL(triggered()), this, SLOT(sortByRating())); - connect(sortByTags, SIGNAL(triggered()), this, SLOT(sortByTags())); - } - else { - sortByRating->setEnabled(false); - sortByTags->setEnabled(false); - } + // if (MetaDataWidget::metaDataAvailable()) { + // connect(sortByRating, SIGNAL(triggered()), this, SLOT(sortByRating())); + // connect(sortByTags, SIGNAL(triggered()), this, SLOT(sortByTags())); + // } + // else { + // sortByRating->setEnabled(false); + // sortByTags->setEnabled(false); + // } #else - sortByRating->setEnabled(false); - sortByTags->setEnabled(false); + // sortByRating->setEnabled(false); + // sortByTags->setEnabled(false); #endif QActionGroup* sortGroup = new QActionGroup(this); @@ -1144,8 +1110,11 @@ void DolphinMainWindow::setupActions() sortGroup->addAction(sortByOwner); sortGroup->addAction(sortByGroup); sortGroup->addAction(sortByType); - sortGroup->addAction(sortByRating); - sortGroup->addAction(sortByTags); + + // TODO: Hided "sort by rating" and "sort by tags" as without caching the performance + // is too slow currently (Nepomuk will support caching in future releases). + //sortGroup->addAction(sortByRating); + //sortGroup->addAction(sortByTags); KToggleAction* sortDescending = actionCollection()->add("descending"); sortDescending->setText(i18nc("@action:inmenu Sort", "Descending")); @@ -1181,7 +1150,7 @@ void DolphinMainWindow::setupActions() KToggleAction* showPreview = actionCollection()->add("show_preview"); showPreview->setText(i18nc("@action:intoolbar", "Preview")); - showPreview->setIcon(KIcon("fileview-preview")); + showPreview->setIcon(KIcon("view-preview")); connect(showPreview, SIGNAL(triggered()), this, SLOT(togglePreview())); KToggleAction* showHiddenFiles = actionCollection()->add("show_hidden_files"); @@ -1304,6 +1273,8 @@ void DolphinMainWindow::setupDockWidgets() SidebarPage* terminalWidget = new TerminalSidebarPage(terminalDock); terminalDock->setWidget(terminalWidget); + connect(terminalWidget, SIGNAL(hideTerminalSidebarPage()), terminalDock, SLOT(hide())); + terminalDock->toggleViewAction()->setText(i18nc("@title:window", "Terminal")); terminalDock->toggleViewAction()->setShortcut(Qt::Key_F4); actionCollection()->addAction("show_terminal_panel", terminalDock->toggleViewAction()); @@ -1437,24 +1408,6 @@ void DolphinMainWindow::updateGoActions() goUpAction->setEnabled(currentUrl.upUrl() != currentUrl); } -void DolphinMainWindow::copyUrls(const KUrl::List& source, const KUrl& dest) -{ - KonqOperations::copy(this, KonqOperations::COPY, source, dest); - 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(KonqFileUndoManager::MOVE); -} - -void DolphinMainWindow::linkUrls(const KUrl::List& source, const KUrl& dest) -{ - KonqOperations::copy(this, KonqOperations::LINK, source, dest); - m_undoCommandTypes.append(KonqFileUndoManager::LINK); -} - void DolphinMainWindow::clearStatusBar() { m_activeViewContainer->statusBar()->clear(); @@ -1503,14 +1456,14 @@ void DolphinMainWindow::updateSplitAction() 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")); + splitAction->setIcon(KIcon("view-right-close")); } else { splitAction->setText(i18nc("@action:intoolbar Close left view", "Close")); - splitAction->setIcon(KIcon("fileview-close-left")); + splitAction->setIcon(KIcon("view-left-close")); } } else { splitAction->setText(i18nc("@action:intoolbar Split view", "Split")); - splitAction->setIcon(KIcon("fileview-split")); + splitAction->setIcon(KIcon("view-right-new")); } }