X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/22187ee54783ac99f3e5f94f0cdba9cd633b2d0f..d324e790d62c8a341abd06e845f8fe8d64aa8ef3:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index e83b8ac48..ebc8dc268 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -24,17 +24,20 @@ #include "dolphinremoteencoding.h" #include +#ifdef HAVE_NEPOMUK +#include "search/dolphinsearchoptionsconfigurator.h" +#endif #include "dolphinapplication.h" #include "dolphinnewmenu.h" +#include "search/dolphinsearchbox.h" +#include "search/dolphinsearchoptionsconfigurator.h" #include "settings/dolphinsettings.h" #include "settings/dolphinsettingsdialog.h" -#include "dolphinsearchbox.h" #include "dolphinviewcontainer.h" #include "panels/folders/folderspanel.h" #include "panels/places/placespanel.h" #include "panels/information/informationpanel.h" -#include "panels/information/metadatawidget.h" #include "mainwindowadaptor.h" #include "statusbar/dolphinstatusbar.h" #include "viewproperties.h" @@ -109,6 +112,9 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_activeViewContainer(0), m_centralWidgetLayout(0), m_searchBox(0), +#ifdef HAVE_NEPOMUK + m_searchOptionsConfigurator(0), +#endif m_id(id), m_tabIndex(0), m_viewTab(), @@ -165,23 +171,23 @@ void DolphinMainWindow::showCommand(CommandType command) DolphinStatusBar* statusBar = m_activeViewContainer->statusBar(); switch (command) { case KIO::FileUndoManager::Copy: - statusBar->setMessage(i18nc("@info:status", "Copy operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully copied."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Move: - statusBar->setMessage(i18nc("@info:status", "Move operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully moved."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Link: - statusBar->setMessage(i18nc("@info:status", "Link operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully linked."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Trash: - statusBar->setMessage(i18nc("@info:status", "Move to trash operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully moved to trash."), DolphinStatusBar::OperationCompleted); break; case KIO::FileUndoManager::Rename: - statusBar->setMessage(i18nc("@info:status", "Renaming operation completed."), + statusBar->setMessage(i18nc("@info:status", "Successfully renamed."), DolphinStatusBar::OperationCompleted); break; @@ -297,11 +303,13 @@ void DolphinMainWindow::updateHistory() const int index = urlNavigator->historyIndex(); QAction* backAction = actionCollection()->action("go_back"); + backAction->setToolTip(i18nc("@info", "Go back")); if (backAction != 0) { backAction->setEnabled(index < urlNavigator->historySize() - 1); } QAction* forwardAction = actionCollection()->action("go_forward"); + forwardAction->setToolTip(i18nc("@info", "Go forward")); if (forwardAction != 0) { forwardAction->setEnabled(index > 0); } @@ -545,12 +553,14 @@ void DolphinMainWindow::readProperties(const KConfigGroup& group) void DolphinMainWindow::updateNewMenu() { + m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); m_newMenu->slotCheckUpToDate(); m_newMenu->setPopupFiles(activeViewContainer()->url()); } void DolphinMainWindow::createDirectory() { + m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); m_newMenu->setPopupFiles(activeViewContainer()->url()); m_newMenu->createDirectory(); } @@ -750,6 +760,32 @@ void DolphinMainWindow::goUp() m_activeViewContainer->urlNavigator()->goUp(); } +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)); + } +} + +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)); + } +} + +void DolphinMainWindow::goUp(Qt::MouseButtons buttons) +{ + // The default case (left button pressed) is handled in goUp(). + if (buttons == Qt::MidButton) { + openNewTab(activeViewContainer()->url().upUrl()); + } +} + void DolphinMainWindow::goHome() { clearStatusBar(); @@ -867,7 +903,7 @@ void DolphinMainWindow::setActiveTab(int index) m_tabIndex = index; ViewTab& viewTab = m_viewTab[index]; - m_centralWidgetLayout->addWidget(viewTab.splitter); + m_centralWidgetLayout->addWidget(viewTab.splitter, 1); viewTab.primaryView->show(); if (viewTab.secondaryView != 0) { viewTab.secondaryView->show(); @@ -972,9 +1008,12 @@ void DolphinMainWindow::slotTestCanDecode(const QDragMoveEvent* event, bool& can canDecode = KUrl::List::canDecode(event->mimeData()); } -void DolphinMainWindow::searchItems(const KUrl& url) +void DolphinMainWindow::searchItems() { - m_activeViewContainer->setUrl(url); +#ifdef HAVE_NEPOMUK + const KUrl nepomukUrl = m_searchOptionsConfigurator->nepomukUrl(); + m_activeViewContainer->setUrl(nepomukUrl); +#endif } void DolphinMainWindow::slotTabMoved(int from, int to) @@ -983,6 +1022,13 @@ void DolphinMainWindow::slotTabMoved(int from, int to) m_tabIndex = m_tabBar->currentIndex(); } +void DolphinMainWindow::showSearchOptions() +{ +#ifdef HAVE_NEPOMUK + m_searchOptionsConfigurator->show(); +#endif +} + void DolphinMainWindow::init() { DolphinSettings& settings = DolphinSettings::instance(); @@ -1023,6 +1069,13 @@ void DolphinMainWindow::init() connect(this, SIGNAL(urlChanged(const KUrl&)), m_remoteEncoding, SLOT(slotAboutToOpenUrl())); +#ifdef HAVE_NEPOMUK + m_searchOptionsConfigurator = new DolphinSearchOptionsConfigurator(this); + m_searchOptionsConfigurator->hide(); + connect(m_searchOptionsConfigurator, SIGNAL(searchOptionsChanged()), + this, SLOT(searchItems())); +#endif + m_tabBar = new KTabBar(this); m_tabBar->setMovable(true); m_tabBar->setTabsClosable(true); @@ -1049,8 +1102,11 @@ void DolphinMainWindow::init() m_centralWidgetLayout = new QVBoxLayout(centralWidget); m_centralWidgetLayout->setSpacing(0); m_centralWidgetLayout->setMargin(0); +#ifdef HAVE_NEPOMUK + m_centralWidgetLayout->addWidget(m_searchOptionsConfigurator); +#endif m_centralWidgetLayout->addWidget(m_tabBar); - m_centralWidgetLayout->addWidget(m_viewTab[m_tabIndex].splitter); + m_centralWidgetLayout->addWidget(m_viewTab[m_tabIndex].splitter, 1); setCentralWidget(centralWidget); setupDockWidgets(); @@ -1060,6 +1116,12 @@ void DolphinMainWindow::init() m_searchBox->setParent(toolBar("searchToolBar")); m_searchBox->show(); + connect(m_searchBox, SIGNAL(requestSearchOptions()), + this, SLOT(showSearchOptions())); +#ifdef HAVE_NEPOMUK + connect(m_searchBox, SIGNAL(searchTextChanged(QString)), + m_searchOptionsConfigurator, SLOT(setCustomSearchQuery(QString))); +#endif stateChanged("new_file"); @@ -1164,7 +1226,11 @@ void DolphinMainWindow::setupActions() cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty); cut->setShortcut(cutShortcut); KStandardAction::copy(this, SLOT(copy()), actionCollection()); - KStandardAction::paste(this, SLOT(paste()), actionCollection()); + KAction* paste = KStandardAction::paste(this, SLOT(paste()), actionCollection()); + // The text of the paste-action is modified dynamically by Dolphin + // (e. g. to "Paste One Folder"). To prevent that the size of the toolbar changes + // due to the long text, the text "Paste" is used: + paste->setIconText(i18nc("@action:inmenu Edit", "Paste")); KAction* selectAll = actionCollection()->addAction("select_all"); selectAll->setText(i18nc("@action:inmenu Edit", "Select All")); @@ -1192,6 +1258,7 @@ void DolphinMainWindow::setupActions() KAction* stop = actionCollection()->addAction("stop"); stop->setText(i18nc("@action:inmenu View", "Stop")); + stop->setToolTip(i18nc("@info", "Stop loading")); stop->setIcon(KIcon("process-stop")); connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading())); @@ -1207,6 +1274,7 @@ void DolphinMainWindow::setupActions() // setup 'Go' menu KAction* backAction = KStandardAction::back(this, SLOT(goBack()), actionCollection()); + connect(backAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(goBack(Qt::MouseButtons))); KShortcut backShortcut = backAction->shortcut(); backShortcut.setAlternate(Qt::Key_Backspace); backAction->setShortcut(backShortcut); @@ -1224,8 +1292,12 @@ void DolphinMainWindow::setupActions() m_recentTabsMenu->addSeparator(); m_recentTabsMenu->setEnabled(false); - KStandardAction::forward(this, SLOT(goForward()), actionCollection()); - KStandardAction::up(this, SLOT(goUp()), actionCollection()); + KAction* forwardAction = KStandardAction::forward(this, SLOT(goForward()), actionCollection()); + connect(forwardAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(goForward(Qt::MouseButtons))); + + KAction* upAction = KStandardAction::up(this, SLOT(goUp()), actionCollection()); + connect(upAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), this, SLOT(goUp(Qt::MouseButtons))); + KStandardAction::home(this, SLOT(goHome()), actionCollection()); // setup 'Tools' menu @@ -1282,7 +1354,7 @@ void DolphinMainWindow::setupActions() // 'Search' toolbar m_searchBox = new DolphinSearchBox(this); - connect(m_searchBox, SIGNAL(search(KUrl)), this, SLOT(searchItems(KUrl))); + connect(m_searchBox, SIGNAL(search(QString)), this, SLOT(searchItems())); KAction* search = new KAction(this); actionCollection()->addAction("search_bar", search); @@ -1298,6 +1370,7 @@ void DolphinMainWindow::setupDockWidgets() infoDock->setObjectName("infoDock"); infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); Panel* infoPanel = new InformationPanel(infoDock); + connect(infoPanel, SIGNAL(urlActivated(KUrl)), this, SLOT(handleUrl(KUrl))); infoDock->setWidget(infoPanel); QAction* infoAction = infoDock->toggleViewAction(); @@ -1507,13 +1580,16 @@ void DolphinMainWindow::updateSplitAction() if (m_viewTab[m_tabIndex].secondaryView != 0) { if (m_activeViewContainer == m_viewTab[m_tabIndex].secondaryView) { splitAction->setText(i18nc("@action:intoolbar Close right view", "Close")); + splitAction->setToolTip(i18nc("@info", "Close right view")); splitAction->setIcon(KIcon("view-right-close")); } else { splitAction->setText(i18nc("@action:intoolbar Close left view", "Close")); + splitAction->setToolTip(i18nc("@info", "Close left view")); splitAction->setIcon(KIcon("view-left-close")); } } else { splitAction->setText(i18nc("@action:intoolbar Split view", "Split")); + splitAction->setToolTip(i18nc("@info", "Split view")); splitAction->setIcon(KIcon("view-right-new")); } } @@ -1580,10 +1656,20 @@ void DolphinMainWindow::setUrlAsCaption(const KUrl& url) caption = url.protocol(); } } - + setCaption(caption); } +void DolphinMainWindow::handleUrl(const KUrl& url) +{ + if (KProtocolManager::supportsListing(url)) { + activeViewContainer()->setUrl(url); + } + else { + new KRun(url, this); + } +} + QString DolphinMainWindow::squeezedText(const QString& text) const { const QFontMetrics fm = fontMetrics();