X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e12944d443e1e1236cfaca20bdba9aeeeb003c5c..b5eca6dc2aaa6f90d7dc2fe27ab9ccc45aee77f2:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 641f12c05..a7cbc527a 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -150,6 +150,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(); @@ -321,33 +324,37 @@ 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* showMimeInfo = actionCollection()->action("show_mime_info"); + QAction* showSizeInfo = actionCollection()->action("show_size_info"); + QAction* showDateInfo = actionCollection()->action("show_date_info"); - if (action != 0) { - KToggleAction* toggleAction = static_cast(action); - toggleAction->setChecked(true); + showMimeInfo->setChecked(false); + showSizeInfo->setChecked(false); + showDateInfo->setChecked(false); - QActionGroup* group = toggleAction->actionGroup(); - Q_ASSERT(group != 0); - const DolphinView* view = m_activeViewContainer->view(); - group->setEnabled(view->mode() == DolphinView::IconsView); + const DolphinView* view = m_activeViewContainer->view(); + // currently only the icons view supports additional information + const bool enable = (view->mode() == DolphinView::IconsView); + showMimeInfo->setEnabled(enable); + showSizeInfo->setEnabled(enable); + showDateInfo->setEnabled(enable); + + foreach (KFileItemDelegate::Information info, list) { + switch (info) { + case KFileItemDelegate::FriendlyMimeType: + showMimeInfo->setChecked(true); + break; + case KFileItemDelegate::Size: + showSizeInfo->setChecked(true); + break; + case KFileItemDelegate::ModificationTime: + showDateInfo->setChecked(true); + break; + default: + break; + } } } @@ -491,6 +498,7 @@ void DolphinMainWindow::deleteItems() void DolphinMainWindow::properties() { const KFileItemList list = m_activeViewContainer->view()->selectedItems(); + KPropertiesDialog dialog(list, this); dialog.exec(); } @@ -770,49 +778,49 @@ void DolphinMainWindow::toggleSortCategorization() view->setCategorizedSorting(!categorizedSorting); } -void DolphinMainWindow::clearInfo() -{ - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::NoInformation); -} - -void DolphinMainWindow::showMimeInfo() +void DolphinMainWindow::toggleMimeInfo() { - clearStatusBar(); - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::FriendlyMimeType); + toggleAdditionalInfo("show_mime_info", KFileItemDelegate::FriendlyMimeType); } -void DolphinMainWindow::showSizeInfo() +void DolphinMainWindow::toggleSizeInfo() { - clearStatusBar(); - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::Size); + toggleAdditionalInfo("show_size_info", KFileItemDelegate::Size); } -void DolphinMainWindow::showDateInfo() +void DolphinMainWindow::toggleDateInfo() { - clearStatusBar(); - m_activeViewContainer->view()->setAdditionalInfo(KFileItemDelegate::ModificationTime); + toggleAdditionalInfo("show_date_info", KFileItemDelegate::ModificationTime); } 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]); @@ -1028,11 +1036,9 @@ void DolphinMainWindow::init() updatePasteAction(); updateGoActions(); - const bool split = generalSettings->splitView(); - if (split) { + if (generalSettings->splitView()) { toggleSplitView(); } - updateSplitAction(split); updateViewActions(); if (firstRun) { @@ -1233,27 +1239,17 @@ 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())); + connect(showMimeInfo, SIGNAL(triggered()), this, SLOT(toggleMimeInfo())); 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())); - - QActionGroup* infoGroup = new QActionGroup(this); - infoGroup->addAction(clearInfo); - infoGroup->addAction(showMimeInfo); - infoGroup->addAction(showSizeInfo); - infoGroup->addAction(showDateInfo); + connect(showDateInfo, SIGNAL(triggered()), this, SLOT(toggleDateInfo())); KToggleAction* showPreview = actionCollection()->add("show_preview"); showPreview->setText(i18nc("@action:intoolbar", "Preview")); @@ -1267,7 +1263,7 @@ void DolphinMainWindow::setupActions() QAction* 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"); @@ -1299,7 +1295,11 @@ void DolphinMainWindow::setupActions() 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()); @@ -1336,7 +1336,7 @@ void DolphinMainWindow::setupDockWidgets() infoDock->setWidget(infoWidget); infoDock->toggleViewAction()->setText(i18nc("@title:window", "Information")); - infoDock->toggleViewAction()->setShortcut(Qt::Key_F8); + infoDock->toggleViewAction()->setShortcut(Qt::Key_F11); actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction()); addDockWidget(Qt::RightDockWidgetArea, infoDock); @@ -1355,7 +1355,7 @@ void DolphinMainWindow::setupDockWidgets() treeViewDock->setWidget(treeWidget); treeViewDock->toggleViewAction()->setText(i18nc("@title:window", "Folders")); - treeViewDock->toggleViewAction()->setShortcut(Qt::Key_F9); + treeViewDock->toggleViewAction()->setShortcut(Qt::Key_F7); actionCollection()->addAction("show_folders_panel", treeViewDock->toggleViewAction()); addDockWidget(Qt::LeftDockWidgetArea, treeViewDock); @@ -1398,7 +1398,7 @@ void DolphinMainWindow::setupDockWidgets() listView->setModel(DolphinSettings::instance().placesModel()); placesDock->toggleViewAction()->setText(i18nc("@title:window", "Places")); - placesDock->toggleViewAction()->setShortcut(Qt::Key_F7); + placesDock->toggleViewAction()->setShortcut(Qt::Key_F9); actionCollection()->addAction("show_places_panel", placesDock->toggleViewAction()); addDockWidget(Qt::LeftDockWidgetArea, placesDock); @@ -1442,8 +1442,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; @@ -1507,7 +1506,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")); @@ -1564,8 +1563,8 @@ 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)), @@ -1580,18 +1579,45 @@ 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), m_mainWin(mainWin)