X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5bb2a0f3c9f2d07dcb0739b88e37b203b451ecf3..1fdd594ea5efc3cf75082ce96a511c5cabb663e5:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 9a5e5e3a8..b666cacb0 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -28,6 +28,9 @@ #include "dolphinnewfilemenu.h" #include "dolphinviewcontainer.h" #include "mainwindowadaptor.h" +#ifdef HAVE_NEPOMUK + #include "panels/filter/filterpanel.h" +#endif #include "panels/folders/folderspanel.h" #include "panels/places/placespanel.h" #include "panels/information/informationpanel.h" @@ -52,6 +55,7 @@ #include #include #include +#include #include #include #include @@ -114,7 +118,8 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_actionHandler(0), m_remoteEncoding(0), m_settingsDialog(0), - m_lastHandleUrlStatJob(0) + m_lastHandleUrlStatJob(0), + m_filterDockIsTemporaryVisible(false) { // Workaround for a X11-issue in combination with KModifierInfo // (see DolphinContextMenu::initializeModifierKeyInfo() for @@ -462,17 +467,27 @@ void DolphinMainWindow::activatePrevTab() void DolphinMainWindow::openInNewTab() { const KFileItemList list = m_activeViewContainer->view()->selectedItems(); - if ((list.count() == 1) && list[0].isDir()) { - openNewTab(m_activeViewContainer->view()->selectedUrls()[0]); + if (list.isEmpty()) { + openNewTab(m_activeViewContainer->url()); + } else if ((list.count() == 1) && list[0].isDir()) { + openNewTab(list[0].url()); } } void DolphinMainWindow::openInNewWindow() { + KUrl newWindowUrl; + const KFileItemList list = m_activeViewContainer->view()->selectedItems(); - if ((list.count() == 1) && list[0].isDir()) { + if (list.isEmpty()) { + newWindowUrl = m_activeViewContainer->url(); + } else if ((list.count() == 1) && list[0].isDir()) { + newWindowUrl = list[0].url(); + } + + if (!newWindowUrl.isEmpty()) { DolphinMainWindow* window = DolphinApplication::app()->createMainWindow(); - window->changeUrl(m_activeViewContainer->view()->selectedUrls()[0]); + window->changeUrl(newWindowUrl); window->show(); } } @@ -559,6 +574,14 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) settings.save(); + if (m_filterDockIsTemporaryVisible) { + QDockWidget* filterDock = findChild("filterDock"); + if (filterDock != 0) { + filterDock->hide(); + } + m_filterDockIsTemporaryVisible = false; + } + KXmlGuiWindow::closeEvent(event); } @@ -902,30 +925,31 @@ void DolphinMainWindow::compareFiles() KUrl urlA; KUrl urlB; - KUrl::List urls = m_viewTab[m_tabIndex].primaryView->view()->selectedUrls(); - switch (urls.count()) { + KFileItemList items = m_viewTab[m_tabIndex].primaryView->view()->selectedItems(); + + switch (items.count()) { case 0: { Q_ASSERT(m_viewTab[m_tabIndex].secondaryView != 0); - urls = m_viewTab[m_tabIndex].secondaryView->view()->selectedUrls(); - Q_ASSERT(urls.count() == 2); - urlA = urls[0]; - urlB = urls[1]; + items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems(); + Q_ASSERT(items.count() == 2); + urlA = items[0].url(); + urlB = items[1].url(); break; } case 1: { - urlA = urls[0]; + urlA = items[0].url(); Q_ASSERT(m_viewTab[m_tabIndex].secondaryView != 0); - urls = m_viewTab[m_tabIndex].secondaryView->view()->selectedUrls(); - Q_ASSERT(urls.count() == 1); - urlB = urls[0]; + items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems(); + Q_ASSERT(items.count() == 1); + urlB = items[0].url(); break; } case 2: { - urlA = urls[0]; - urlB = urls[1]; + urlA = items[0].url(); + urlB = items[1].url(); break; } @@ -1156,7 +1180,7 @@ void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job) m_lastHandleUrlStatJob = 0; const KIO::UDSEntry entry = static_cast(job)->statResult(); const KUrl url = static_cast(job)->url(); - if ( entry.isDir() ) { + if (entry.isDir()) { activeViewContainer()->setUrl(url); } else { new KRun(url, this); @@ -1178,13 +1202,52 @@ void DolphinMainWindow::slotWriteStateChanged(bool isFolderWritable) newFileMenu()->setEnabled(isFolderWritable); } +void DolphinMainWindow::slotSearchModeChanged(bool enabled) +{ + QDockWidget* filterDock = findChild("filterDock"); + if (filterDock == 0) { + return; + } + + if (enabled) { + if (!filterDock->isVisible()) { + m_filterDockIsTemporaryVisible = true; + } + filterDock->show(); + } else { + if (filterDock->isVisible() && m_filterDockIsTemporaryVisible) { + filterDock->hide(); + } + m_filterDockIsTemporaryVisible = false; + } +} + void DolphinMainWindow::openContextMenu(const KFileItem& item, const KUrl& url, const QList& customActions) { - DolphinContextMenu contextMenu(this, item, url); - contextMenu.setCustomActions(customActions); - contextMenu.open(); + QPointer contextMenu = new DolphinContextMenu(this, item, url); + contextMenu->setCustomActions(customActions); + const DolphinContextMenu::Command command = contextMenu->open(); + + switch (command) { + case DolphinContextMenu::OpenParentFolderInNewWindow: { + DolphinMainWindow* window = DolphinApplication::app()->createMainWindow(); + window->changeUrl(item.url().upUrl()); + window->show(); + break; + } + + case DolphinContextMenu::OpenParentFolderInNewTab: + openNewTab(item.url().upUrl()); + break; + + case DolphinContextMenu::None: + default: + break; + } + + delete contextMenu; } void DolphinMainWindow::init() @@ -1459,7 +1522,7 @@ void DolphinMainWindow::setupActions() connect(openTerminal, SIGNAL(triggered()), this, SLOT(openTerminal())); // setup 'Settings' menu - m_showMenuBar = KStandardAction::showMenubar(this, SLOT(toggleShowMenuBar()), actionCollection()); + m_showMenuBar = KStandardAction::showHideMenubar(this, SLOT(toggleShowMenuBar()), actionCollection()); KStandardAction::preferences(this, SLOT(editSettings()), actionCollection()); // not in menu actions @@ -1551,12 +1614,32 @@ void DolphinMainWindow::setupDockWidgets() terminalPanel, SLOT(setUrl(KUrl))); #endif + // setup "Filter" +#ifdef HAVE_NEPOMUK + QDockWidget* filterDock = new QDockWidget(i18nc("@title:window", "Filter")); + filterDock->setObjectName("filterDock"); + filterDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + Panel* filterPanel = new FilterPanel(filterDock); + connect(filterPanel, SIGNAL(urlActivated(KUrl)), this, SLOT(handleUrl(KUrl))); + filterDock->setWidget(filterPanel); + + QAction* filterAction = filterDock->toggleViewAction(); + filterAction->setShortcut(Qt::Key_F12); + filterAction->setIcon(KIcon("view-filter")); + addDockWidget(Qt::RightDockWidgetArea, filterDock); + connect(this, SIGNAL(urlChanged(KUrl)), + filterPanel, SLOT(setUrl(KUrl))); +#endif + const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun(); if (firstRun) { infoDock->hide(); foldersDock->hide(); #ifndef Q_OS_WIN terminalDock->hide(); +#endif +#ifdef HAVE_NEPOMUK + filterDock->hide(); #endif } @@ -1589,6 +1672,9 @@ void DolphinMainWindow::setupDockWidgets() #ifndef Q_OS_WIN panelsMenu->addAction(terminalAction); #endif +#ifdef HAVE_NEPOMUK + panelsMenu->addAction(filterAction); +#endif } void DolphinMainWindow::updateEditActions() @@ -1688,6 +1774,8 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) this, SLOT(updateFilterBarAction(bool))); connect(container, SIGNAL(writeStateChanged(bool)), this, SLOT(slotWriteStateChanged(bool))); + connect(container, SIGNAL(searchModeChanged(bool)), + this, SLOT(slotSearchModeChanged(bool))); DolphinView* view = container->view(); connect(view, SIGNAL(selectionChanged(KFileItemList)),