X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/7045a25e3abaedab0d128f03702eaf48ffe6e0b7..4b0dc69070af505e2bc620dd1be8fd3e7dff7718:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 1c4a45bda..482a5b7e8 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz * + * Copyright (C) 2006 by Peter Penz * * Copyright (C) 2006 by Stefan Monov * * Copyright (C) 2006 by Cvetoslav Ludmiloff * * * @@ -30,8 +30,8 @@ #include "dolphinviewcontainer.h" #include "mainwindowadaptor.h" #ifdef HAVE_NEPOMUK - #include "panels/filter/filterpanel.h" - #include + #include "panels/search/searchpanel.h" + #include #endif #include "panels/folders/folderspanel.h" #include "panels/places/placespanel.h" @@ -51,42 +51,43 @@ #include "dolphin_generalsettings.h" #include "dolphin_iconsmodesettings.h" +#include "dolphin_searchsettings.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include -#include -#include +#include +#include +#include +#include #include -#include +#include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include #include @@ -121,7 +122,7 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_remoteEncoding(0), m_settingsDialog(0), m_lastHandleUrlStatJob(0), - m_filterDockIsTemporaryVisible(false) + m_searchDockIsTemporaryVisible(false) { // Workaround for a X11-issue in combination with KModifierInfo // (see DolphinContextMenu::initializeModifierKeyInfo() for @@ -163,6 +164,11 @@ void DolphinMainWindow::openDirectories(const QList& dirs) return; } + if (dirs.count() == 1) { + m_activeViewContainer->setUrl(dirs.first()); + return; + } + const int oldOpenTabsCount = m_viewTab.count(); const GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings(); @@ -213,7 +219,7 @@ void DolphinMainWindow::openFiles(const QList& files) const int tabCount = m_viewTab.count(); for (int i = 0; i < tabCount; ++i) { m_viewTab[i].primaryView->view()->markUrlsAsSelected(files); - if (m_viewTab[i].secondaryView != 0) { + if (m_viewTab[i].secondaryView) { m_viewTab[i].secondaryView->view()->markUrlsAsSelected(files); } } @@ -256,7 +262,7 @@ void DolphinMainWindow::showCommand(CommandType command) void DolphinMainWindow::refreshViews() { - Q_ASSERT(m_viewTab[m_tabIndex].primaryView != 0); + Q_ASSERT(m_viewTab[m_tabIndex].primaryView); // remember the current active view, as because of // the refreshing the active view might change to @@ -266,7 +272,7 @@ void DolphinMainWindow::refreshViews() const int tabCount = m_viewTab.count(); for (int i = 0; i < tabCount; ++i) { m_viewTab[i].primaryView->refresh(); - if (m_viewTab[i].secondaryView != 0) { + if (m_viewTab[i].secondaryView) { m_viewTab[i].secondaryView->refresh(); } } @@ -279,8 +285,8 @@ void DolphinMainWindow::refreshViews() // Synchronize the split-view setting with the active view: const bool splitView = generalSettings->splitView(); const ViewTab& activeTab = m_viewTab[m_tabIndex]; - const bool toggle = ( splitView && (activeTab.secondaryView == 0)) - || (!splitView && (activeTab.secondaryView != 0)); + const bool toggle = ( splitView && !activeTab.secondaryView) + || (!splitView && activeTab.secondaryView); if (toggle) { toggleSplitView(); } @@ -302,7 +308,7 @@ void DolphinMainWindow::changeUrl(const KUrl& url) } DolphinViewContainer* view = activeViewContainer(); - if (view != 0) { + if (view) { view->setUrl(url); updateEditActions(); updateViewActions(); @@ -328,9 +334,9 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) { updateEditActions(); - Q_ASSERT(m_viewTab[m_tabIndex].primaryView != 0); + Q_ASSERT(m_viewTab[m_tabIndex].primaryView); int selectedUrlsCount = m_viewTab[m_tabIndex].primaryView->view()->selectedItemsCount(); - if (m_viewTab[m_tabIndex].secondaryView != 0) { + if (m_viewTab[m_tabIndex].secondaryView) { selectedUrlsCount += m_viewTab[m_tabIndex].secondaryView->view()->selectedItemsCount(); } @@ -356,13 +362,13 @@ void DolphinMainWindow::updateHistory() QAction* backAction = actionCollection()->action("go_back"); backAction->setToolTip(i18nc("@info", "Go back")); - if (backAction != 0) { + if (backAction) { backAction->setEnabled(index < urlNavigator->historySize() - 1); } QAction* forwardAction = actionCollection()->action("go_forward"); forwardAction->setToolTip(i18nc("@info", "Go forward")); - if (forwardAction != 0) { + if (forwardAction) { forwardAction->setEnabled(index > 0); } } @@ -419,7 +425,6 @@ void DolphinMainWindow::openNewTab(const KUrl& url) viewTab.primaryView = new DolphinViewContainer(url, viewTab.splitter); viewTab.primaryView->setActive(false); connectViewSignals(viewTab.primaryView); - viewTab.primaryView->view()->reload(); m_viewTab.append(viewTab); @@ -434,7 +439,7 @@ void DolphinMainWindow::openNewTab(const KUrl& url) m_viewTab[tabIndex].isPrimaryViewActive = false; } - if (focusWidget != 0) { + if (focusWidget) { // The DolphinViewContainer grabbed the keyboard focus. As the tab is opened // in background, assure that the previous focused widget gets the focus back. focusWidget->setFocus(); @@ -494,13 +499,13 @@ void DolphinMainWindow::openInNewWindow() void DolphinMainWindow::toggleActiveView() { - if (m_viewTab[m_tabIndex].secondaryView == 0) { + if (!m_viewTab[m_tabIndex].secondaryView) { // only one view is available return; } - Q_ASSERT(m_activeViewContainer != 0); - Q_ASSERT(m_viewTab[m_tabIndex].primaryView != 0); + Q_ASSERT(m_activeViewContainer); + Q_ASSERT(m_viewTab[m_tabIndex].primaryView); DolphinViewContainer* left = m_viewTab[m_tabIndex].primaryView; DolphinViewContainer* right = m_viewTab[m_tabIndex].secondaryView; @@ -574,12 +579,12 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event) settings.save(); - if (m_filterDockIsTemporaryVisible) { - QDockWidget* filterDock = findChild("filterDock"); - if (filterDock != 0) { - filterDock->hide(); + if (m_searchDockIsTemporaryVisible) { + QDockWidget* searchDock = findChild("searchDock"); + if (searchDock) { + searchDock->hide(); } - m_filterDockIsTemporaryVisible = false; + m_searchDockIsTemporaryVisible = false; } KXmlGuiWindow::closeEvent(event); @@ -598,7 +603,7 @@ void DolphinMainWindow::saveProperties(KConfigGroup& group) cont->urlNavigator()->isUrlEditable()); cont = m_viewTab[i].secondaryView; - if (cont != 0) { + if (cont) { group.writeEntry(tabProperty("Secondary URL", i), cont->url().url()); group.writeEntry(tabProperty("Secondary Editable", i), cont->urlNavigator()->isUrlEditable()); @@ -619,18 +624,18 @@ void DolphinMainWindow::readProperties(const KConfigGroup& group) cont = m_viewTab[i].secondaryView; const QString secondaryUrl = group.readEntry(tabProperty("Secondary URL", i)); if (!secondaryUrl.isEmpty()) { - if (cont == 0) { + if (!cont) { // a secondary view should be shown, but no one is available // currently -> create a new view toggleSplitView(); cont = m_viewTab[i].secondaryView; - Q_ASSERT(cont != 0); + Q_ASSERT(cont); } cont->setUrl(secondaryUrl); const bool editable = group.readEntry(tabProperty("Secondary Editable", i), false); cont->urlNavigator()->setUrlEditable(editable); - } else if (cont != 0) { + } else if (cont) { // no secondary view should be shown, but the default setting shows // one already -> close the view toggleSplitView(); @@ -676,7 +681,7 @@ void DolphinMainWindow::showErrorMessage(const QString& message) void DolphinMainWindow::slotUndoAvailable(bool available) { QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo)); - if (undoAction != 0) { + if (undoAction) { undoAction->setEnabled(available); } } @@ -713,7 +718,7 @@ void DolphinMainWindow::restoreClosedTab(QAction* action) void DolphinMainWindow::slotUndoTextChanged(const QString& text) { QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo)); - if (undoAction != 0) { + if (undoAction) { undoAction->setText(text); } } @@ -779,7 +784,7 @@ void DolphinMainWindow::invertSelection() void DolphinMainWindow::toggleSplitView() { - if (m_viewTab[m_tabIndex].secondaryView == 0) { + if (!m_viewTab[m_tabIndex].secondaryView) { createSecondaryView(m_tabIndex); setActiveViewContainer(m_viewTab[m_tabIndex].secondaryView); } else if (m_activeViewContainer == m_viewTab[m_tabIndex].secondaryView) { @@ -859,7 +864,7 @@ void DolphinMainWindow::togglePanelLockState() const bool newLockState = !generalSettings->lockPanels(); foreach (QObject* child, children()) { DolphinDockWidget* dock = qobject_cast(child); - if (dock != 0) { + if (dock) { dock->setLocked(newLockState); } } @@ -935,7 +940,7 @@ void DolphinMainWindow::compareFiles() // - both in the secondary view // - one in the primary view and the other in the secondary // view - Q_ASSERT(m_viewTab[m_tabIndex].primaryView != 0); + Q_ASSERT(m_viewTab[m_tabIndex].primaryView); KUrl urlA; KUrl urlB; @@ -944,7 +949,7 @@ void DolphinMainWindow::compareFiles() switch (items.count()) { case 0: { - Q_ASSERT(m_viewTab[m_tabIndex].secondaryView != 0); + Q_ASSERT(m_viewTab[m_tabIndex].secondaryView); items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems(); Q_ASSERT(items.count() == 2); urlA = items[0].url(); @@ -954,7 +959,7 @@ void DolphinMainWindow::compareFiles() case 1: { urlA = items[0].url(); - Q_ASSERT(m_viewTab[m_tabIndex].secondaryView != 0); + Q_ASSERT(m_viewTab[m_tabIndex].secondaryView); items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems(); Q_ASSERT(items.count() == 1); urlB = items[0].url(); @@ -1006,7 +1011,7 @@ void DolphinMainWindow::openTerminal() void DolphinMainWindow::editSettings() { - if (m_settingsDialog == 0) { + if (!m_settingsDialog) { const KUrl url = activeViewContainer()->url(); m_settingsDialog = new DolphinSettingsDialog(url, this); m_settingsDialog->setAttribute(Qt::WA_DeleteOnClose); @@ -1028,7 +1033,7 @@ void DolphinMainWindow::setActiveTab(int index) ViewTab& hiddenTab = m_viewTab[m_tabIndex]; hiddenTab.isPrimaryViewActive = hiddenTab.primaryView->isActive(); hiddenTab.primaryView->setActive(false); - if (hiddenTab.secondaryView != 0) { + if (hiddenTab.secondaryView) { hiddenTab.secondaryView->setActive(false); } QSplitter* splitter = m_viewTab[m_tabIndex].splitter; @@ -1041,7 +1046,7 @@ void DolphinMainWindow::setActiveTab(int index) ViewTab& viewTab = m_viewTab[index]; m_centralWidgetLayout->addWidget(viewTab.splitter, 1); viewTab.primaryView->show(); - if (viewTab.secondaryView != 0) { + if (viewTab.secondaryView) { viewTab.secondaryView->show(); } viewTab.splitter->show(); @@ -1073,7 +1078,7 @@ void DolphinMainWindow::closeTab(int index) // delete tab m_viewTab[index].primaryView->deleteLater(); - if (m_viewTab[index].secondaryView != 0) { + if (m_viewTab[index].secondaryView) { m_viewTab[index].secondaryView->deleteLater(); } m_viewTab[index].splitter->deleteLater(); @@ -1113,21 +1118,21 @@ void DolphinMainWindow::openTabContextMenu(int index, const QPoint& pos) QAction* selectedAction = menu.exec(pos); if (selectedAction == newTabAction) { const ViewTab& tab = m_viewTab[index]; - Q_ASSERT(tab.primaryView != 0); - const KUrl url = (tab.secondaryView != 0) && tab.secondaryView->isActive() ? + Q_ASSERT(tab.primaryView); + const KUrl url = tab.secondaryView && tab.secondaryView->isActive() ? 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); + Q_ASSERT(tab.primaryView); const KUrl primaryUrl = tab.primaryView->url(); DolphinMainWindow* window = DolphinApplication::app()->createMainWindow(); window->changeUrl(primaryUrl); - if (tab.secondaryView != 0) { + if (tab.secondaryView) { const KUrl secondaryUrl = tab.secondaryView->url(); - if (window->m_viewTab[0].secondaryView == 0) { + if (!window->m_viewTab[0].secondaryView) { window->toggleSplitView(); } window->m_viewTab[0].secondaryView->setUrl(secondaryUrl); @@ -1227,21 +1232,35 @@ void DolphinMainWindow::slotSearchModeChanged(bool enabled) return; } - QDockWidget* filterDock = findChild("filterDock"); - if (filterDock == 0) { + QDockWidget* searchDock = findChild("searchDock"); + if (!searchDock) { return; } if (enabled) { - if (!filterDock->isVisible()) { - m_filterDockIsTemporaryVisible = true; + if (!searchDock->isVisible()) { + m_searchDockIsTemporaryVisible = true; } - filterDock->show(); + searchDock->show(); } else { - if (filterDock->isVisible() && m_filterDockIsTemporaryVisible) { - filterDock->hide(); + if (searchDock->isVisible() && m_searchDockIsTemporaryVisible) { + searchDock->hide(); + } + m_searchDockIsTemporaryVisible = false; + } + + SearchPanel* searchPanel = qobject_cast(searchDock->widget()); + if (searchPanel) { + // Per default any search-operation triggered by the Search Panel is done + // "Everywhere". + SearchPanel::SearchMode searchMode = SearchPanel::Everywhere; + + if (enabled && (SearchSettings::location() == QLatin1String("FromHere"))) { + // Only if the search-mode is enabled it is visible for the user whether + // a searching is done "Everywhere" or "From Here" (= current directory). + searchMode = SearchPanel::FromCurrentDir; } - m_filterDockIsTemporaryVisible = false; + searchPanel->setSearchMode(searchMode); } #else Q_UNUSED(enabled); @@ -1307,7 +1326,6 @@ void DolphinMainWindow::init() m_activeViewContainer = m_viewTab[m_tabIndex].primaryView; connectViewSignals(m_activeViewContainer); DolphinView* view = m_activeViewContainer->view(); - view->reload(); m_activeViewContainer->show(); m_actionHandler->setCurrentView(view); @@ -1375,7 +1393,7 @@ void DolphinMainWindow::init() void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContainer) { - Q_ASSERT(viewContainer != 0); + Q_ASSERT(viewContainer); Q_ASSERT((viewContainer == m_viewTab[m_tabIndex].primaryView) || (viewContainer == m_viewTab[m_tabIndex].secondaryView)); if (m_activeViewContainer == viewContainer) { @@ -1412,7 +1430,7 @@ void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContain void DolphinMainWindow::setupActions() { // setup 'File' menu - m_newFileMenu = new DolphinNewFileMenu(this, this); + m_newFileMenu = new DolphinNewFileMenu(this); KMenu* menu = m_newFileMenu->menu(); menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New")); menu->setIcon(KIcon("document-new")); @@ -1449,7 +1467,7 @@ void DolphinMainWindow::setupActions() // doesn't work KAction* cut = KStandardAction::cut(this, SLOT(cut()), actionCollection()); KShortcut cutShortcut = cut->shortcut(); - cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty); + cutShortcut.remove(Qt::SHIFT | Qt::Key_Delete, KShortcut::KeepEmpty); cut->setShortcut(cutShortcut); KStandardAction::copy(this, SLOT(copy()), actionCollection()); KAction* paste = KStandardAction::paste(this, SLOT(paste()), actionCollection()); @@ -1462,7 +1480,7 @@ void DolphinMainWindow::setupActions() KAction* selectAll = actionCollection()->addAction("select_all"); selectAll->setText(i18nc("@action:inmenu Edit", "Select All")); - selectAll->setShortcut(Qt::CTRL + Qt::Key_A); + selectAll->setShortcut(Qt::CTRL | Qt::Key_A); connect(selectAll, SIGNAL(triggered()), this, SLOT(selectAll())); KAction* invertSelection = actionCollection()->addAction("invert_selection"); @@ -1554,11 +1572,11 @@ void DolphinMainWindow::setupActions() // not in menu actions QList nextTabKeys; nextTabKeys.append(KStandardShortcut::tabNext().primary()); - nextTabKeys.append(QKeySequence(Qt::CTRL + Qt::Key_Tab)); + nextTabKeys.append(QKeySequence(Qt::CTRL | Qt::Key_Tab)); QList prevTabKeys; prevTabKeys.append(KStandardShortcut::tabPrev().primary()); - prevTabKeys.append(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab)); + prevTabKeys.append(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_Tab)); KAction* activateNextTab = actionCollection()->addAction("activate_next_tab"); activateNextTab->setText(i18nc("@action:inmenu", "Activate Next Tab")); @@ -1659,24 +1677,24 @@ void DolphinMainWindow::setupDockWidgets() terminalPanel, SLOT(setUrl(KUrl))); #endif - // Setup "Filter" + // Setup "Search" #ifdef HAVE_NEPOMUK - DolphinDockWidget* filterDock = new DolphinDockWidget(i18nc("@title:window", "Filter")); - filterDock->setLocked(lock); - filterDock->setObjectName("filterDock"); - filterDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - Panel* filterPanel = new FilterPanel(filterDock); - filterPanel->setCustomContextMenuActions(QList() << lockLayoutAction); - 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")); - addActionCloneToCollection(filterAction, "show_filter_panel"); - addDockWidget(Qt::RightDockWidgetArea, filterDock); + DolphinDockWidget* searchDock = new DolphinDockWidget(i18nc("@title:window", "Search")); + searchDock->setLocked(lock); + searchDock->setObjectName("searchDock"); + searchDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + Panel* searchPanel = new SearchPanel(searchDock); + searchPanel->setCustomContextMenuActions(QList() << lockLayoutAction); + connect(searchPanel, SIGNAL(urlActivated(KUrl)), this, SLOT(handleUrl(KUrl))); + searchDock->setWidget(searchPanel); + + QAction* searchAction = searchDock->toggleViewAction(); + searchAction->setShortcut(Qt::Key_F12); + searchAction->setIcon(KIcon("system-search")); + addActionCloneToCollection(searchAction, "show_search_panel"); + addDockWidget(Qt::RightDockWidgetArea, searchDock); connect(this, SIGNAL(urlChanged(KUrl)), - filterPanel, SLOT(setUrl(KUrl))); + searchPanel, SLOT(setUrl(KUrl))); #endif const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun(); @@ -1687,7 +1705,7 @@ void DolphinMainWindow::setupDockWidgets() terminalDock->hide(); #endif #ifdef HAVE_NEPOMUK - filterDock->hide(); + searchDock->hide(); #endif } @@ -1730,7 +1748,7 @@ void DolphinMainWindow::setupDockWidgets() panelsMenu->addAction(terminalAction); #endif #ifdef HAVE_NEPOMUK - panelsMenu->addAction(filterAction); + panelsMenu->addAction(searchAction); #endif panelsMenu->addSeparator(); panelsMenu->addAction(lockLayoutAction); @@ -1796,7 +1814,7 @@ void DolphinMainWindow::rememberClosedTab(int index) ClosedTab closedTab; closedTab.primaryUrl = m_viewTab[index].primaryView->url(); - if (m_viewTab[index].secondaryView != 0) { + if (m_viewTab[index].secondaryView) { closedTab.secondaryUrl = m_viewTab[index].secondaryView->url(); closedTab.isSplit = true; } else { @@ -1866,7 +1884,7 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) void DolphinMainWindow::updateSplitAction() { QAction* splitAction = actionCollection()->action("split_view"); - if (m_viewTab[m_tabIndex].secondaryView != 0) { + if (m_viewTab[m_tabIndex].secondaryView) { if (m_activeViewContainer == m_viewTab[m_tabIndex].secondaryView) { splitAction->setText(i18nc("@action:intoolbar Close right view", "Close")); splitAction->setToolTip(i18nc("@info", "Close right view")); @@ -1924,7 +1942,6 @@ void DolphinMainWindow::createSecondaryView(int tabIndex) splitter->addWidget(m_viewTab[tabIndex].secondaryView); splitter->setSizes(QList() << newWidth << newWidth); connectViewSignals(m_viewTab[tabIndex].secondaryView); - m_viewTab[tabIndex].secondaryView->view()->reload(); m_viewTab[tabIndex].secondaryView->setActive(false); m_viewTab[tabIndex].secondaryView->show(); }