X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/6b42e7ba3b87af93d17f714d05ff2ddb09d13519..093efca22dfd247f06e2a669ad968300e71ef08d:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index ddf7b19b1..f3dbfcf6e 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(); @@ -176,17 +179,20 @@ 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"), - i18nc("@action:inmenu", "&Move Here") + '\t' + seq); + 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' + seq); + i18nc("@action:inmenu", + "&Copy Here\t%1", seq)); seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString(); seq.chop(1); QAction* linkAction = popup.addAction(KIcon("www"), - i18nc("@action:inmenu", "&Link Here") + '\t' + seq); + i18nc("@action:inmenu", + "&Link Here\t%1", seq)); popup.addSeparator(); popup.addAction(KIcon("process-stop"), i18nc("@action:inmenu", "Cancel")); @@ -234,7 +240,7 @@ void DolphinMainWindow::changeUrl(const KUrl& url) } } -void DolphinMainWindow::changeSelection(const KFileItemList& selection) +void DolphinMainWindow::changeSelection(const QList& selection) { activeViewContainer()->view()->changeSelection(selection); } @@ -273,32 +279,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: @@ -348,7 +354,7 @@ void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::AdditionalI } } -void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) +void DolphinMainWindow::slotSelectionChanged(const QList& selection) { updateEditActions(); @@ -366,9 +372,9 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) emit selectionChanged(selection); } -void DolphinMainWindow::slotRequestItemInfo(const KUrl& url) +void DolphinMainWindow::slotRequestItemInfo(const KFileItem& item) { - emit requestItemInfo(url); + emit requestItemInfo(item); } void DolphinMainWindow::slotHistoryChanged() @@ -487,8 +493,14 @@ void DolphinMainWindow::deleteItems() void DolphinMainWindow::properties() { - const KFileItemList list = m_activeViewContainer->view()->selectedItems(); - KPropertiesDialog dialog(list, this); + QList list = m_activeViewContainer->view()->selectedItems(); + // ### KPropertiesDialog still uses pointer-based KFileItemList + KFileItemList lst; + // Can't be a const_iterator :( + for ( QList::iterator it = list.begin(), end = list.end() ; it != end ; ++it ) { + lst << & *it; // ugly! + } + KPropertiesDialog dialog(lst, this); dialog.exec(); } @@ -649,7 +661,7 @@ void DolphinMainWindow::updatePasteAction() if (!urls.isEmpty()) { pasteAction->setEnabled(true); - pasteAction->setText(i18np("Paste One File", "Paste %1 Files", urls.count())); + pasteAction->setText(i18ncp("@action:inmenu", "Paste One File", "Paste %1 Files", urls.count())); } else { pasteAction->setEnabled(false); pasteAction->setText(i18nc("@action:inmenu", "Paste")); @@ -793,23 +805,31 @@ void DolphinMainWindow::showDateInfo() 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]); @@ -1025,11 +1045,9 @@ void DolphinMainWindow::init() updatePasteAction(); updateGoActions(); - const bool split = generalSettings->splitView(); - if (split) { + if (generalSettings->splitView()) { toggleSplitView(); } - updateSplitAction(split); updateViewActions(); if (firstRun) { @@ -1163,39 +1181,39 @@ void DolphinMainWindow::setupActions() viewModeGroup->addAction(detailsView); viewModeGroup->addAction(columnView); - 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()) { @@ -1264,7 +1282,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"); @@ -1296,7 +1314,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()); @@ -1333,15 +1355,16 @@ 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); connect(this, SIGNAL(urlChanged(KUrl)), infoWidget, SLOT(setUrl(KUrl))); - connect(this, SIGNAL(selectionChanged(KFileItemList)), - infoWidget, SLOT(setSelection(KFileItemList))); - connect(this, SIGNAL(requestItemInfo(KUrl)), - infoWidget, SLOT(requestDelayedItemInfo(KUrl))); + connect(this, SIGNAL(selectionChanged(QList)), + infoWidget, SLOT(setSelection(QList))); + connect(this, SIGNAL(requestItemInfo(KFileItem)), + infoWidget, SLOT(requestDelayedItemInfo(KFileItem))); // setup "Tree View" QDockWidget* treeViewDock = new QDockWidget(i18nc("@title:window", "Folders")); @@ -1351,6 +1374,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); @@ -1358,8 +1382,8 @@ void DolphinMainWindow::setupDockWidgets() treeWidget, SLOT(setUrl(KUrl))); connect(treeWidget, SIGNAL(changeUrl(KUrl)), this, SLOT(changeUrl(KUrl))); - connect(treeWidget, SIGNAL(changeSelection(KFileItemList)), - this, SLOT(changeSelection(KFileItemList))); + connect(treeWidget, SIGNAL(changeSelection(QList)), + this, SLOT(changeSelection(QList))); connect(treeWidget, SIGNAL(urlsDropped(KUrl::List, KUrl)), this, SLOT(dropUrls(KUrl::List, KUrl))); @@ -1371,9 +1395,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))); @@ -1392,6 +1417,7 @@ void DolphinMainWindow::setupDockWidgets() listView->setModel(DolphinSettings::instance().placesModel()); placesDock->toggleViewAction()->setText(i18nc("@title:window", "Places")); + placesDock->toggleViewAction()->setShortcut(Qt::Key_F9); actionCollection()->addAction("show_places_panel", placesDock->toggleViewAction()); addDockWidget(Qt::LeftDockWidgetArea, placesDock); @@ -1419,7 +1445,7 @@ void DolphinMainWindow::updateHistory() void DolphinMainWindow::updateEditActions() { - const KFileItemList list = m_activeViewContainer->view()->selectedItems(); + const QList list = m_activeViewContainer->view()->selectedItems(); if (list.isEmpty()) { stateChanged("has_no_selection"); } else { @@ -1432,11 +1458,10 @@ void DolphinMainWindow::updateEditActions() bool enableMoveToTrash = true; - KFileItemList::const_iterator it = list.begin(); - const KFileItemList::const_iterator end = list.end(); + QList::const_iterator it = list.begin(); + const QList::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; @@ -1500,7 +1525,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")); @@ -1559,10 +1584,10 @@ void DolphinMainWindow::connectViewSignals(int viewIndex) this, SLOT(slotSortOrderChanged(Qt::SortOrder))); connect(view, SIGNAL(additionalInfoChanged(KFileItemDelegate::AdditionalInformation)), this, SLOT(slotAdditionalInfoChanged(KFileItemDelegate::AdditionalInformation))); - connect(view, SIGNAL(selectionChanged(KFileItemList)), - this, SLOT(slotSelectionChanged(KFileItemList))); - connect(view, SIGNAL(requestItemInfo(KUrl)), - this, SLOT(slotRequestItemInfo(KUrl))); + connect(view, SIGNAL(selectionChanged(QList)), + this, SLOT(slotSelectionChanged(QList))); + connect(view, SIGNAL(requestItemInfo(KFileItem)), + this, SLOT(slotRequestItemInfo(KFileItem))); connect(view, SIGNAL(activated()), this, SLOT(toggleActiveView())); @@ -1573,12 +1598,17 @@ 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"));