]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
There is no need to burden DolphinMainWindow with internals of the context-menu.
[dolphin.git] / src / dolphinmainwindow.cpp
index 5f44249b7244a89093004cc020d23b504067eea3..722a90f9383a4b5883cafb7c28ba40a952f16e4c 100644 (file)
  ***************************************************************************/
 
 #include "dolphinmainwindow.h"
-#include "dolphinviewactionhandler.h"
-#include "dolphinremoteencoding.h"
 
 #include <config-nepomuk.h>
-#ifdef HAVE_NEPOMUK
-#include "search/dolphinsearchoptionsconfigurator.h"
-#endif
 
 #include "dolphinapplication.h"
 #include "dolphincontextmenu.h"
-#include "dolphinnewmenu.h"
-#include "search/dolphinsearchbox.h"
-#include "settings/dolphinsettings.h"
-#include "settings/dolphinsettingsdialog.h"
+#include "dolphinnewfilemenu.h"
 #include "dolphinviewcontainer.h"
+#include "mainwindowadaptor.h"
 #include "panels/folders/folderspanel.h"
 #include "panels/places/placespanel.h"
 #include "panels/information/informationpanel.h"
-#include "mainwindowadaptor.h"
+#include "settings/dolphinsettings.h"
+#include "settings/dolphinsettingsdialog.h"
 #include "statusbar/dolphinstatusbar.h"
-#include "viewproperties.h"
+#include "views/dolphinviewactionhandler.h"
+#include "views/dolphinremoteencoding.h"
+#include "views/draganddrophelper.h"
+#include "views/viewproperties.h"
 
 #ifndef Q_OS_WIN
 #include "panels/terminal/terminalpanel.h"
@@ -48,7 +45,6 @@
 
 #include "dolphin_generalsettings.h"
 #include "dolphin_iconsmodesettings.h"
-#include "draganddrophelper.h"
 
 #include <kaction.h>
 #include <kactioncollection.h>
@@ -107,22 +103,17 @@ Q_DECLARE_METATYPE(ClosedTab)
 
 DolphinMainWindow::DolphinMainWindow(int id) :
     KXmlGuiWindow(0),
-    m_newMenu(0),
+    m_newFileMenu(0),
     m_showMenuBar(0),
     m_tabBar(0),
     m_activeViewContainer(0),
     m_centralWidgetLayout(0),
-    m_searchBox(0),
-#ifdef HAVE_NEPOMUK
-    m_searchOptionsConfigurator(0),
-#endif
     m_id(id),
     m_tabIndex(0),
     m_viewTab(),
     m_actionHandler(0),
     m_remoteEncoding(0),
     m_settingsDialog(0),
-    m_captionStatJob(0),
     m_lastHandleUrlStatJob(0)
 {
     setObjectName("Dolphin#");
@@ -343,15 +334,6 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
     emit selectionChanged(selection);
 }
 
-void DolphinMainWindow::slotWheelMoved(int wheelDelta)
-{
-    if (wheelDelta > 0) {
-        activatePrevTab();
-    } else {
-        activateNextTab();
-    }
-}
-
 void DolphinMainWindow::slotRequestItemInfo(const KFileItem& item)
 {
     emit requestItemInfo(item);
@@ -536,7 +518,6 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
         dialog->setCaption(i18nc("@title:window", "Confirmation"));
         dialog->setButtons(KDialog::Yes | KDialog::No | KDialog::Cancel);
         dialog->setModal(true);
-        dialog->showButtonSeparator(true);
         dialog->setButtonGuiItem(KDialog::Yes, KStandardGuiItem::quit());
         dialog->setButtonGuiItem(KDialog::No, KGuiItem(i18n("C&lose Current Tab"), KIcon("tab-close")));
         dialog->setButtonGuiItem(KDialog::Cancel, KStandardGuiItem::cancel());
@@ -639,16 +620,16 @@ void DolphinMainWindow::readProperties(const KConfigGroup& group)
 
 void DolphinMainWindow::updateNewMenu()
 {
-    m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles());
-    m_newMenu->checkUpToDate();
-    m_newMenu->setPopupFiles(activeViewContainer()->url());
+    m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles());
+    m_newFileMenu->checkUpToDate();
+    m_newFileMenu->setPopupFiles(activeViewContainer()->url());
 }
 
 void DolphinMainWindow::createDirectory()
 {
-    m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles());
-    m_newMenu->setPopupFiles(activeViewContainer()->url());
-    m_newMenu->createDirectory();
+    m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles());
+    m_newFileMenu->setPopupFiles(activeViewContainer()->url());
+    m_newFileMenu->createDirectory();
 }
 
 void DolphinMainWindow::quit()
@@ -731,6 +712,11 @@ void DolphinMainWindow::paste()
     m_activeViewContainer->view()->paste();
 }
 
+void DolphinMainWindow::find()
+{
+    m_activeViewContainer->setSearchModeEnabled(true);
+}
+
 void DolphinMainWindow::updatePasteAction()
 {
     QAction* pasteAction = actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
@@ -831,7 +817,15 @@ void DolphinMainWindow::replaceLocation()
 void DolphinMainWindow::goBack()
 {
     clearStatusBar();
-    m_activeViewContainer->urlNavigator()->goBack();
+    
+    KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
+    urlNavigator->goBack();
+    
+    if (urlNavigator->locationState().isEmpty()) {
+        // An empty location state indicates a redirection URL,
+        // which must be skipped too
+        urlNavigator->goBack();       
+    }
 }
 
 void DolphinMainWindow::goForward()
@@ -1123,21 +1117,6 @@ void DolphinMainWindow::slotTestCanDecode(const QDragMoveEvent* event, bool& can
     canDecode = KUrl::List::canDecode(event->mimeData());
 }
 
-void DolphinMainWindow::searchItems()
-{
-#ifdef HAVE_NEPOMUK
-    const KUrl nepomukSearchUrl = m_searchOptionsConfigurator->nepomukSearchUrl();
-    m_activeViewContainer->setUrl(nepomukSearchUrl);
-#endif
-}
-
-void DolphinMainWindow::showSearchOptions()
-{
-#ifdef HAVE_NEPOMUK
-    m_searchOptionsConfigurator->show();
-#endif
-}
-
 void DolphinMainWindow::handleUrl(const KUrl& url)
 {
     delete m_lastHandleUrlStatJob;
@@ -1178,17 +1157,9 @@ void DolphinMainWindow::tabDropEvent(int tab, QDropEvent* event)
     }
 }
 
-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);
+    newFileMenu()->setEnabled(isFolderWritable);
 }
 
 void DolphinMainWindow::openContextMenu(const KFileItem& item,
@@ -1239,14 +1210,6 @@ 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()));
-    connect(this, SIGNAL(urlChanged(KUrl)), m_searchOptionsConfigurator, SLOT(setDirectory(KUrl)));
-#endif
-
     m_tabBar = new KTabBar(this);
     m_tabBar->setMovable(true);
     m_tabBar->setTabsClosable(true);
@@ -1260,8 +1223,6 @@ void DolphinMainWindow::init()
             this, SLOT(openNewTab()));
     connect(m_tabBar, SIGNAL(testCanDecode(const QDragMoveEvent*, bool&)),
             this, SLOT(slotTestCanDecode(const QDragMoveEvent*, bool&)));
-    connect(m_tabBar, SIGNAL(wheelDelta(int)),
-            this, SLOT(slotWheelMoved(int)));
     connect(m_tabBar, SIGNAL(mouseMiddleClick(int)),
             this, SLOT(closeTab(int)));
     connect(m_tabBar, SIGNAL(tabMoved(int, int)),
@@ -1275,9 +1236,6 @@ 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, 1);
 
@@ -1286,28 +1244,18 @@ void DolphinMainWindow::init()
     emit urlChanged(homeUrl);
 
     setupGUI(Keys | Save | Create | ToolBar);
-
-    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");
 
     QClipboard* clipboard = QApplication::clipboard();
     connect(clipboard, SIGNAL(dataChanged()),
             this, SLOT(updatePasteAction()));
-    updatePasteAction();
-    updateGoActions();
 
     if (generalSettings->splitView()) {
         toggleSplitView();
     }
+    updateEditActions();
     updateViewActions();
+    updateGoActions();
 
     QAction* showFilterBarAction = actionCollection()->action("show_filter_bar");
     showFilterBarAction->setChecked(generalSettings->filterBar());
@@ -1359,8 +1307,8 @@ void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContain
 void DolphinMainWindow::setupActions()
 {
     // setup 'File' menu
-    m_newMenu = new DolphinNewMenu(this, this);
-    KMenu* menu = m_newMenu->menu();
+    m_newFileMenu = new DolphinNewFileMenu(this, this);
+    KMenu* menu = m_newFileMenu->menu();
     menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
     menu->setIcon(KIcon("document-new"));
     connect(menu, SIGNAL(aboutToShow()),
@@ -1405,6 +1353,8 @@ void DolphinMainWindow::setupActions()
     // due to the long text, the text "Paste" is used:
     paste->setIconText(i18nc("@action:inmenu Edit", "Paste"));
 
+    KStandardAction::find(this, SLOT(find()), actionCollection());
+
     KAction* selectAll = actionCollection()->addAction("select_all");
     selectAll->setText(i18nc("@action:inmenu Edit", "Select All"));
     selectAll->setShortcut(Qt::CTRL + Qt::Key_A);
@@ -1474,11 +1424,6 @@ void DolphinMainWindow::setupActions()
     KStandardAction::home(this, SLOT(goHome()), actionCollection());
 
     // setup 'Tools' menu
-    KToggleAction* showSearchBar = actionCollection()->add<KToggleAction>("show_search_bar");
-    showSearchBar->setText(i18nc("@action:inmenu Tools", "Show Search Bar"));
-    showSearchBar->setShortcut(Qt::CTRL | Qt::Key_S);
-    connect(showSearchBar, SIGNAL(triggered(bool)), this, SLOT(toggleFilterBarVisibility(bool)));
-
     KToggleAction* showFilterBar = actionCollection()->add<KToggleAction>("show_filter_bar");
     showFilterBar->setText(i18nc("@action:inmenu Tools", "Show Filter Bar"));
     showFilterBar->setIcon(KIcon("view-filter"));
@@ -1530,16 +1475,6 @@ void DolphinMainWindow::setupActions()
     openInNewWindow->setText(i18nc("@action:inmenu", "Open in New Window"));
     openInNewWindow->setIcon(KIcon("window-new"));
     connect(openInNewWindow, SIGNAL(triggered()), this, SLOT(openInNewWindow()));
-
-    // 'Search' toolbar
-    m_searchBox = new DolphinSearchBox(this);
-    connect(m_searchBox, SIGNAL(search(QString)), this, SLOT(searchItems()));
-
-    KAction* search = new KAction(this);
-    actionCollection()->addAction("search_bar", search);
-    search->setText(i18nc("@action:inmenu", "Search Bar"));
-    search->setDefaultWidget(m_searchBox);
-    search->setShortcutConfigurable(false);
 }
 
 void DolphinMainWindow::setupDockWidgets()
@@ -1602,6 +1537,7 @@ void DolphinMainWindow::setupDockWidgets()
 
     const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun();
     if (firstRun) {
+        infoDock->hide();
         foldersDock->hide();
 #ifndef Q_OS_WIN
         terminalDock->hide();
@@ -1628,7 +1564,7 @@ void DolphinMainWindow::setupDockWidgets()
     connect(this, SIGNAL(urlChanged(KUrl)),
             placesPanel, SLOT(setUrl(KUrl)));
 
-    KActionMenu* panelsMenu = new KActionMenu(i18nc("@action:inmenu File", "Panels"), this);
+    KActionMenu* panelsMenu = new KActionMenu(i18nc("@action:inmenu View", "Panels"), this);
     actionCollection()->addAction("panels", panelsMenu);
     panelsMenu->setDelayed(false);
     panelsMenu->addAction(placesAction);
@@ -1833,26 +1769,18 @@ QString DolphinMainWindow::tabProperty(const QString& property, int tabIndex) co
 
 void DolphinMainWindow::setUrlAsCaption(const KUrl& url)
 {
-    delete m_captionStatJob;
-    m_captionStatJob = 0;
-
-    if (url.protocol() == QLatin1String("file")) {
-        QString caption;
-        if (url.equals(KUrl("file:///"))) {
-            caption = '/';
-        } else {
-            caption = url.fileName();
-            if (caption.isEmpty()) {
-                caption = url.protocol();
-            }
+    QString caption;
+    if (!url.isLocalFile()) {
+        caption.append(url.protocol() + " - ");
+        if (url.hasHost()) {
+            caption.append(url.host() + " - ");
         }
-
-        setCaption(caption);
-    } else {
-        m_captionStatJob = KIO::stat(url, KIO::HideProgressInfo);
-        connect(m_captionStatJob, SIGNAL(result(KJob*)),
-                this, SLOT(slotCaptionStatFinished(KJob*)));
     }
+
+    const QString fileName = url.fileName().isEmpty() ? "/" : url.fileName();
+    caption.append(fileName);
+
+    setCaption(caption);
 }
 
 QString DolphinMainWindow::squeezedText(const QString& text) const