X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/d5b2e29be30c7cd603f965e273a9a754166b4fec..ec00f379dc42b00a64ab1af25bb4bb1a06bd7449:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index b20beb26b..db79f4165 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -237,7 +237,7 @@ void DolphinMainWindow::changeUrl(const KUrl& url) } } -void DolphinMainWindow::changeSelection(const KFileItemList& selection) +void DolphinMainWindow::changeSelection(const QList& selection) { activeViewContainer()->view()->changeSelection(selection); } @@ -351,7 +351,7 @@ void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::AdditionalI } } -void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) +void DolphinMainWindow::slotSelectionChanged(const QList& selection) { updateEditActions(); @@ -490,8 +490,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(); } @@ -796,23 +802,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]); @@ -1028,11 +1042,9 @@ void DolphinMainWindow::init() updatePasteAction(); updateGoActions(); - const bool split = generalSettings->splitView(); - if (split) { + if (generalSettings->splitView()) { toggleSplitView(); } - updateSplitAction(split); updateViewActions(); if (firstRun) { @@ -1267,7 +1279,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"); @@ -1342,8 +1354,8 @@ void DolphinMainWindow::setupDockWidgets() 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(selectionChanged(QList)), + infoWidget, SLOT(setSelection(QList))); connect(this, SIGNAL(requestItemInfo(KFileItem)), infoWidget, SLOT(requestDelayedItemInfo(KFileItem))); @@ -1355,7 +1367,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); @@ -1363,8 +1375,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))); @@ -1379,7 +1391,7 @@ void DolphinMainWindow::setupDockWidgets() 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))); @@ -1398,7 +1410,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); @@ -1426,7 +1438,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 { @@ -1439,11 +1451,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; @@ -1507,7 +1518,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")); @@ -1566,8 +1577,8 @@ 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(selectionChanged(QList)), + this, SLOT(slotSelectionChanged(QList))); connect(view, SIGNAL(requestItemInfo(KFileItem)), this, SLOT(slotRequestItemInfo(KFileItem))); connect(view, SIGNAL(activated()), @@ -1580,12 +1591,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"));