]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
differ between pasting one folder, pasting one file and pasting n items
[dolphin.git] / src / dolphinmainwindow.cpp
index 7ae98f896b114f4e0e929819887a85fb46a5279d..69da1b94fad490f88b32488852ff20abb40cf9c4 100644 (file)
@@ -26,6 +26,7 @@
 #include <config-nepomuk.h>
 
 #include "dolphinapplication.h"
+#include "dolphinfileplacesview.h"
 #include "dolphinnewmenu.h"
 #include "dolphinsettings.h"
 #include "dolphinsettingsdialog.h"
 #include "infosidebarpage.h"
 #include "metadatawidget.h"
 #include "mainwindowadaptor.h"
-#include "terminalsidebarpage.h"
 #include "treeviewsidebarpage.h"
-#include "kurlnavigator.h"
 #include "viewpropertiesdialog.h"
 #include "viewproperties.h"
-#include "kfileplacesmodel.h"
-#include "kfileplacesview.h"
+
+#ifndef Q_OS_WIN
+#include "terminalsidebarpage.h"
+#endif
 
 #include "dolphin_generalsettings.h"
 #include "dolphin_iconsmodesettings.h"
@@ -51,6 +52,7 @@
 #include <kdesktopfile.h>
 #include <kdeversion.h>
 #include <kfiledialog.h>
+#include <kfileplacesmodel.h>
 #include <kglobal.h>
 #include <kicon.h>
 #include <kiconloader.h>
@@ -60,6 +62,7 @@
 #include <kmenu.h>
 #include <kmenubar.h>
 #include <kmessagebox.h>
+#include <kurlnavigator.h>
 #include <konqmimedata.h>
 #include <kpropertiesdialog.h>
 #include <kprotocolinfo.h>
@@ -177,6 +180,13 @@ void DolphinMainWindow::changeSelection(const KFileItemList& selection)
     activeViewContainer()->view()->changeSelection(selection);
 }
 
+void DolphinMainWindow::slotEditableStateChanged(bool editable)
+{
+    KToggleAction* editableLocationAction =
+        static_cast<KToggleAction*>(actionCollection()->action("editable_location"));
+    editableLocationAction->setChecked(editable);
+}
+
 void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
 {
     updateEditActions();
@@ -205,9 +215,20 @@ void DolphinMainWindow::slotRequestItemInfo(const KFileItem& item)
     emit requestItemInfo(item);
 }
 
-void DolphinMainWindow::slotHistoryChanged()
+void DolphinMainWindow::updateHistory()
 {
-    updateHistory();
+    const KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
+    const int index = urlNavigator->historyIndex();
+
+    QAction* backAction = actionCollection()->action("go_back");
+    if (backAction != 0) {
+        backAction->setEnabled(index < urlNavigator->historySize() - 1);
+    }
+
+    QAction* forwardAction = actionCollection()->action("go_forward");
+    if (forwardAction != 0) {
+        forwardAction->setEnabled(index > 0);
+    }
 }
 
 void DolphinMainWindow::updateFilterBarAction(bool show)
@@ -321,7 +342,7 @@ void DolphinMainWindow::slotHandlePlacesError(const QString &message)
 
 void DolphinMainWindow::slotUndoAvailable(bool available)
 {
-    QAction* undoAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Undo));
+    QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo));
     if (undoAction != 0) {
         undoAction->setEnabled(available);
     }
@@ -365,7 +386,7 @@ void DolphinMainWindow::slotUndoAvailable(bool available)
 
 void DolphinMainWindow::slotUndoTextChanged(const QString& text)
 {
-    QAction* undoAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Undo));
+    QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo));
     if (undoAction != 0) {
         undoAction->setText(text);
     }
@@ -394,7 +415,7 @@ void DolphinMainWindow::paste()
 
 void DolphinMainWindow::updatePasteAction()
 {
-    QAction* pasteAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Paste));
+    QAction* pasteAction = actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
     if (pasteAction == 0) {
         return;
     }
@@ -460,7 +481,6 @@ void DolphinMainWindow::toggleSplitView()
 
     setActiveViewContainer(m_viewContainer[PrimaryView]);
     updateViewActions();
-    emit activeViewChanged(); // TODO unused; remove?
 }
 
 void DolphinMainWindow::reloadView()
@@ -492,6 +512,11 @@ void DolphinMainWindow::editLocation()
     KUrlNavigator* navigator = m_activeViewContainer->urlNavigator();
     navigator->setUrlEditable(true);
     navigator->setFocus();
+
+    // select the whole text of the combo box editor
+    QLineEdit* lineEdit = navigator->editor()->lineEdit();
+    const QString text = lineEdit->text();
+    lineEdit->setSelection(0, text.length());
 }
 
 void DolphinMainWindow::adjustViewProperties()
@@ -599,9 +624,11 @@ void DolphinMainWindow::editSettings()
 
 void DolphinMainWindow::init()
 {
+    DolphinSettings& settings = DolphinSettings::instance();
+
     // Check whether Dolphin runs the first time. If yes then
     // a proper default window size is given at the end of DolphinMainWindow::init().
-    GeneralSettings* generalSettings = DolphinSettings::instance().generalSettings();
+    GeneralSettings* generalSettings = settings.generalSettings();
     const bool firstRun = generalSettings->firstRun();
     if (firstRun) {
         generalSettings->setViewPropsTimestamp(QDateTime::currentDateTime());
@@ -611,11 +638,9 @@ void DolphinMainWindow::init()
 
     m_splitter = new QSplitter(this);
 
-    DolphinSettings& settings = DolphinSettings::instance();
-
     setupActions();
 
-    const KUrl& homeUrl = settings.generalSettings()->homeUrl();
+    const KUrl& homeUrl = generalSettings->homeUrl();
     setCaption(homeUrl.fileName());
     m_actionHandler = new DolphinViewActionHandler(actionCollection(), this);
     connect(m_actionHandler, SIGNAL(actionBeingHandled()), SLOT(clearStatusBar()));
@@ -671,6 +696,8 @@ void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContain
     m_activeViewContainer = viewContainer;
     m_activeViewContainer->setActive(true);
 
+    m_actionHandler->setCurrentView(viewContainer->view());
+
     updateHistory();
     updateEditActions();
     updateViewActions();
@@ -679,9 +706,6 @@ void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContain
     const KUrl& url = m_activeViewContainer->url();
     setCaption(url.fileName());
 
-    m_actionHandler->setCurrentView(viewContainer->view());
-
-    emit activeViewChanged(); // TODO unused; remove?
     emit urlChanged(url);
 }
 
@@ -713,8 +737,8 @@ void DolphinMainWindow::setupActions()
                           SLOT(undo()),
                           actionCollection());
 
-    //Need to remove shift+del from cut action, else the shortcut for deletejob
-    //doesn't work
+    // need to remove shift+del from cut action, else the shortcut for deletejob
+    // doesn't work
     KAction* cut = KStandardAction::cut(this, SLOT(cut()), actionCollection());
     KShortcut cutShortcut = cut->shortcut();
     cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty);
@@ -751,9 +775,7 @@ void DolphinMainWindow::setupActions()
     stop->setIcon(KIcon("process-stop"));
     connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading()));
 
-    // TODO: the URL navigator must emit a signal if the editable state has been
-    // changed, so that the corresponding showFullLocation action is updated. Also
-    // the naming "Show full Location" is currently confusing...
+    // TODO: the naming "Show full Location" is currently confusing...
     KToggleAction* showFullLocation = actionCollection()->add<KToggleAction>("editable_location");
     showFullLocation->setText(i18nc("@action:inmenu Navigation Bar", "Show Full Location"));
     showFullLocation->setShortcut(Qt::CTRL | Qt::Key_L);
@@ -844,6 +866,7 @@ void DolphinMainWindow::setupDockWidgets()
             this, SLOT(dropUrls(KUrl::List, KUrl)));
 
     // setup "Terminal"
+#ifndef Q_OS_WIN
     QDockWidget* terminalDock = new QDockWidget(i18nc("@title:window", "Terminal"));
     terminalDock->setObjectName("terminalDock");
     terminalDock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
@@ -859,18 +882,22 @@ void DolphinMainWindow::setupDockWidgets()
     addDockWidget(Qt::BottomDockWidgetArea, terminalDock);
     connect(this, SIGNAL(urlChanged(KUrl)),
             terminalWidget, SLOT(setUrl(KUrl)));
+#endif
 
     const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun();
     if (firstRun) {
         infoDock->hide();
         treeViewDock->hide();
+#ifndef Q_OS_WIN
         terminalDock->hide();
+#endif
     }
 
     QDockWidget* placesDock = new QDockWidget(i18nc("@title:window", "Places"));
     placesDock->setObjectName("placesDock");
     placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
-    KFilePlacesView* placesView = new KFilePlacesView(placesDock);
+
+    DolphinFilePlacesView* placesView = new DolphinFilePlacesView(placesDock);
     placesDock->setWidget(placesView);
     placesView->setModel(DolphinSettings::instance().placesModel());
     placesView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -886,22 +913,6 @@ void DolphinMainWindow::setupDockWidgets()
             placesView, SLOT(setUrl(KUrl)));
 }
 
-void DolphinMainWindow::updateHistory()
-{
-    const KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
-    const int index = urlNavigator->historyIndex();
-
-    QAction* backAction = actionCollection()->action("go_back");
-    if (backAction != 0) {
-        backAction->setEnabled(index < urlNavigator->historySize() - 1);
-    }
-
-    QAction* forwardAction = actionCollection()->action("go_forward");
-    if (forwardAction != 0) {
-        forwardAction->setEnabled(index > 0);
-    }
-}
-
 void DolphinMainWindow::updateEditActions()
 {
     const KFileItemList list = m_activeViewContainer->view()->selectedItems();
@@ -950,7 +961,7 @@ void DolphinMainWindow::updateViewActions()
 
 void DolphinMainWindow::updateGoActions()
 {
-    QAction* goUpAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Up));
+    QAction* goUpAction = actionCollection()->action(KStandardAction::name(KStandardAction::Up));
     const KUrl& currentUrl = m_activeViewContainer->url();
     goUpAction->setEnabled(currentUrl.upUrl() != currentUrl);
 }
@@ -980,7 +991,9 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
     connect(navigator, SIGNAL(urlChanged(const KUrl&)),
             this, SLOT(changeUrl(const KUrl&)));
     connect(navigator, SIGNAL(historyChanged()),
-            this, SLOT(slotHistoryChanged()));
+            this, SLOT(updateHistory()));
+    connect(navigator, SIGNAL(editableStateChanged(bool)),
+            this, SLOT(slotEditableStateChanged(bool)));
 }
 
 void DolphinMainWindow::updateSplitAction()