diff options
| author | Peter Penz <[email protected]> | 2010-01-25 07:58:24 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2010-01-25 07:58:24 +0000 |
| commit | e5eae108ca4511be9dae5f8bb4a4e1fbb0d89c7a (patch) | |
| tree | 5bdda6c86079466368486a5e89a5f7105d114461 /src/dolphinmainwindow.cpp | |
| parent | 0ad9abf7b1621a834d272c55d3989e53b6abf30e (diff) | |
* Adjust code to use the improved KUrlNavigator API.
* Open a new tab if the URL navigator requests it.
* Get rid of a cyclic dependency between DolphinViewContainer and DolphinMainWindow.
BUG: 181223
svn path=/trunk/KDE/kdebase/apps/; revision=1079843
Diffstat (limited to 'src/dolphinmainwindow.cpp')
| -rw-r--r-- | src/dolphinmainwindow.cpp | 111 |
1 files changed, 77 insertions, 34 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 9349ca7be..002551318 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -29,6 +29,7 @@ #endif #include "dolphinapplication.h" +#include "dolphincontextmenu.h" #include "dolphinnewmenu.h" #include "search/dolphinsearchbox.h" #include "settings/dolphinsettings.h" @@ -415,7 +416,7 @@ void DolphinMainWindow::openNewTab(const KUrl& url) ViewTab viewTab; viewTab.splitter = new QSplitter(this); viewTab.splitter->setChildrenCollapsible(false); - viewTab.primaryView = new DolphinViewContainer(this, viewTab.splitter, url); + viewTab.primaryView = new DolphinViewContainer(url, viewTab.splitter); viewTab.primaryView->setActive(false); connectViewSignals(viewTab.primaryView); viewTab.primaryView->view()->reload(); @@ -553,7 +554,7 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) break; case KDialog::No: // Close only the current tab - closeTab(); + closeTab(); default: event->ignore(); return; @@ -576,12 +577,14 @@ void DolphinMainWindow::saveProperties(KConfigGroup& group) for (int i = 0; i < tabCount; ++i) { const DolphinViewContainer* cont = m_viewTab[i].primaryView; group.writeEntry(tabProperty("Primary URL", i), cont->url().url()); - group.writeEntry(tabProperty("Primary Editable", i), cont->isUrlEditable()); + group.writeEntry(tabProperty("Primary Editable", i), + cont->urlNavigator()->isUrlEditable()); cont = m_viewTab[i].secondaryView; if (cont != 0) { group.writeEntry(tabProperty("Secondary URL", i), cont->url().url()); - group.writeEntry(tabProperty("Secondary Editable", i), cont->isUrlEditable()); + group.writeEntry(tabProperty("Secondary Editable", i), + cont->urlNavigator()->isUrlEditable()); } } } @@ -840,7 +843,8 @@ void DolphinMainWindow::goBack(Qt::MouseButtons buttons) // The default case (left button pressed) is handled in goBack(). if (buttons == Qt::MidButton) { KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigator(); - openNewTab(urlNavigator->historyUrl(urlNavigator->historyIndex() + 1)); + const int index = urlNavigator->historyIndex() + 1; + openNewTab(urlNavigator->locationUrl(index)); } } @@ -849,7 +853,8 @@ void DolphinMainWindow::goForward(Qt::MouseButtons buttons) // The default case (left button pressed) is handled in goForward(). if (buttons == Qt::MidButton) { KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigator(); - openNewTab(urlNavigator->historyUrl(urlNavigator->historyIndex() - 1)); + const int index = urlNavigator->historyIndex() - 1; + openNewTab(urlNavigator->locationUrl(index)); } } @@ -1043,6 +1048,8 @@ void DolphinMainWindow::openTabContextMenu(int index, const QPoint& pos) QAction* newTabAction = menu.addAction(KIcon("tab-new"), i18nc("@action:inmenu", "New Tab")); newTabAction->setShortcut(actionCollection()->action("new_tab")->shortcut()); + QAction* detachTabAction = menu.addAction(KIcon("tab-detach"), i18nc("@action:inmenu", "Detach Tab")); + QAction* closeOtherTabsAction = menu.addAction(KIcon("tab-close-other"), i18nc("@action:inmenu", "Close Other Tabs")); QAction* closeTabAction = menu.addAction(KIcon("tab-close"), i18nc("@action:inmenu", "Close Tab")); @@ -1055,6 +1062,25 @@ void DolphinMainWindow::openTabContextMenu(int index, const QPoint& pos) tab.secondaryView->url() : tab.primaryView->url(); openNewTab(url); m_tabBar->setCurrentIndex(m_viewTab.count() - 1); + } else if (selectedAction == detachTabAction) { + const ViewTab& tab = m_viewTab[index]; + Q_ASSERT(tab.primaryView != 0); + const KUrl primaryUrl = tab.primaryView->url(); + DolphinMainWindow* window = DolphinApplication::app()->createMainWindow(); + window->changeUrl(primaryUrl); + + if (tab.secondaryView != 0) { + const KUrl secondaryUrl = tab.secondaryView->url(); + window->toggleSplitView(); + window->m_viewTab[0].secondaryView->setUrl(secondaryUrl); + if (tab.primaryView->isActive()) { + window->m_viewTab[0].primaryView->setActive(true); + } else { + window->m_viewTab[0].secondaryView->setActive(true); + } + } + window->show(); + closeTab(index); } else if (selectedAction == closeOtherTabsAction) { const int count = m_tabBar->count(); for (int i = 0; i < index; ++i) { @@ -1068,6 +1094,12 @@ void DolphinMainWindow::openTabContextMenu(int index, const QPoint& pos) } } +void DolphinMainWindow::slotTabMoved(int from, int to) +{ + m_viewTab.move(from, to); + m_tabIndex = m_tabBar->currentIndex(); +} + void DolphinMainWindow::handlePlacesClick(const KUrl& url, Qt::MouseButtons buttons) { if (buttons & Qt::MidButton) { @@ -1091,12 +1123,6 @@ void DolphinMainWindow::searchItems() #endif } -void DolphinMainWindow::slotTabMoved(int from, int to) -{ - m_viewTab.move(from, to); - m_tabIndex = m_tabBar->currentIndex(); -} - void DolphinMainWindow::showSearchOptions() { #ifdef HAVE_NEPOMUK @@ -1104,6 +1130,37 @@ void DolphinMainWindow::showSearchOptions() #endif } +void DolphinMainWindow::handleUrl(const KUrl& url) +{ + if (KProtocolManager::supportsListing(url)) { + activeViewContainer()->setUrl(url); + } else { + new KRun(url, this); + } +} + +void DolphinMainWindow::slotCaptionStatFinished(KJob* job) +{ + m_captionStatJob = 0; + const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult(); + const QString name = entry.stringValue(KIO::UDSEntry::UDS_DISPLAY_NAME); + setCaption(name); +} + +void DolphinMainWindow::slotWriteStateChanged(bool isFolderWritable) +{ + newMenu()->setEnabled(isFolderWritable); +} + +void DolphinMainWindow::openContextMenu(const KFileItem& item, + const KUrl& url, + const QList<QAction*>& customActions) +{ + DolphinContextMenu contextMenu(this, item, url); + contextMenu.setCustomActions(customActions); + contextMenu.open(); +} + void DolphinMainWindow::init() { DolphinSettings& settings = DolphinSettings::instance(); @@ -1129,9 +1186,8 @@ void DolphinMainWindow::init() connect(m_actionHandler, SIGNAL(actionBeingHandled()), SLOT(clearStatusBar())); connect(m_actionHandler, SIGNAL(createDirectory()), SLOT(createDirectory())); ViewProperties props(homeUrl); - m_viewTab[m_tabIndex].primaryView = new DolphinViewContainer(this, - m_viewTab[m_tabIndex].splitter, - homeUrl); + m_viewTab[m_tabIndex].primaryView = new DolphinViewContainer(homeUrl, + m_viewTab[m_tabIndex].splitter); m_activeViewContainer = m_viewTab[m_tabIndex].primaryView; connectViewSignals(m_activeViewContainer); @@ -1166,7 +1222,7 @@ void DolphinMainWindow::init() connect(m_tabBar, SIGNAL(testCanDecode(const QDragMoveEvent*, bool&)), this, SLOT(slotTestCanDecode(const QDragMoveEvent*, bool&))); connect(m_tabBar, SIGNAL(wheelDelta(int)), - this, SLOT(slotWheelMoved(int))); + this, SLOT(slotWheelMoved(int))); connect(m_tabBar, SIGNAL(mouseMiddleClick(int)), this, SLOT(closeTab(int))); connect(m_tabBar, SIGNAL(tabMoved(int, int)), @@ -1633,6 +1689,8 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) { connect(container, SIGNAL(showFilterBarChanged(bool)), this, SLOT(updateFilterBarAction(bool))); + connect(container, SIGNAL(writeStateChanged(bool)), + this, SLOT(slotWriteStateChanged(bool))); DolphinView* view = container->view(); connect(view, SIGNAL(selectionChanged(KFileItemList)), @@ -1643,6 +1701,8 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) this, SLOT(toggleActiveView())); connect(view, SIGNAL(tabRequested(const KUrl&)), this, SLOT(openNewTab(const KUrl&))); + connect(view, SIGNAL(requestContextMenu(KFileItem, const KUrl&, const QList<QAction*>&)), + this, SLOT(openContextMenu(KFileItem, const KUrl&, const QList<QAction*>&))); const KUrlNavigator* navigator = container->urlNavigator(); connect(navigator, SIGNAL(urlChanged(const KUrl&)), @@ -1710,7 +1770,7 @@ void DolphinMainWindow::createSecondaryView(int tabIndex) const int newWidth = (m_viewTab[tabIndex].primaryView->width() - splitter->handleWidth()) / 2; const DolphinView* view = m_viewTab[tabIndex].primaryView->view(); - m_viewTab[tabIndex].secondaryView = new DolphinViewContainer(this, 0, view->rootUrl()); + m_viewTab[tabIndex].secondaryView = new DolphinViewContainer(view->rootUrl(), 0); splitter->addWidget(m_viewTab[tabIndex].secondaryView); splitter->setSizes(QList<int>() << newWidth << newWidth); connectViewSignals(m_viewTab[tabIndex].secondaryView); @@ -1748,23 +1808,6 @@ void DolphinMainWindow::setUrlAsCaption(const KUrl& url) } } -void DolphinMainWindow::handleUrl(const KUrl& url) -{ - if (KProtocolManager::supportsListing(url)) { - activeViewContainer()->setUrl(url); - } else { - new KRun(url, this); - } -} - -void DolphinMainWindow::slotCaptionStatFinished(KJob* job) -{ - m_captionStatJob = 0; - const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult(); - const QString name = entry.stringValue(KIO::UDSEntry::UDS_DISPLAY_NAME); - setCaption(name); -} - QString DolphinMainWindow::squeezedText(const QString& text) const { const QFontMetrics fm = fontMetrics(); |
