]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Create a SidebarTreeView which will include support for drag & drop in later releases...
[dolphin.git] / src / dolphinmainwindow.cpp
index edb57ef7f3e96ba60c9d02fda3c5221666c9af6a..e0a0a5633ac67d546b8e9a328cc191b19c3c7b19 100644 (file)
 \r
 #include <assert.h>\r
 \r
+#include "bookmarkssidebarpage.h"\r
 #include "dolphinapplication.h"\r
 #include "dolphinnewmenu.h"\r
 #include "dolphinsettings.h"\r
 #include "dolphinsettingsdialog.h"\r
 #include "dolphinstatusbar.h"\r
-#include "dolphinapplication.h"\r
-#include "urlnavigator.h"\r
-#include "dolphinsettings.h"\r
-#include "bookmarkssidebarpage.h"\r
 #include "infosidebarpage.h"\r
-#include "dolphin_generalsettings.h"\r
-#include "viewpropertiesdialog.h"\r
-#include "viewproperties.h"\r
 #include "metadataloader.h"\r
 #include "mainwindowadaptor.h"\r
+#include "treeviewsidebarpage.h"\r
+#include "urlnavigator.h"\r
+#include "viewpropertiesdialog.h"\r
+#include "viewproperties.h"\r
+\r
+#include "dolphin_generalsettings.h"\r
 \r
 #include <kaction.h>\r
 #include <kactioncollection.h>\r
@@ -154,12 +154,12 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
 \r
         QString seq = QKeySequence(Qt::ShiftModifier).toString();\r
         seq.chop(1); // chop superfluous '+'\r
-        QAction* moveAction = popup.addAction(KIcon("goto"),\r
+        QAction* moveAction = popup.addAction(KIcon("goto-page"),\r
                                               i18n("&Move Here") + '\t' + seq);\r
 \r
         seq = QKeySequence(Qt::ControlModifier).toString();\r
         seq.chop(1);\r
-        QAction* copyAction = popup.addAction(KIcon("editcopy"),\r
+        QAction* copyAction = popup.addAction(KIcon("edit-copy"),\r
                                               i18n("&Copy Here") + '\t' + seq);\r
 \r
         seq = QKeySequence(Qt::ControlModifier + Qt::ShiftModifier).toString();\r
@@ -168,7 +168,7 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
                                               i18n("&Link Here") + '\t' + seq);\r
 \r
         popup.addSeparator();\r
-        popup.addAction(KIcon("stop"), i18n("Cancel"));\r
+        popup.addAction(KIcon("process-stop"), i18n("Cancel"));\r
 \r
         QAction* activatedAction = popup.exec(QCursor::pos());\r
         if (activatedAction == moveAction) {\r
@@ -250,11 +250,11 @@ void DolphinMainWindow::slotViewModeChanged()
     updateViewActions();\r
 }\r
 \r
-void DolphinMainWindow::slowShowPreviewChanged()\r
+void DolphinMainWindow::slotShowPreviewChanged()\r
 {\r
-    KToggleAction* showPreviewAction =\r
-        static_cast<KToggleAction*>(actionCollection()->action("show_preview"));\r
-    showPreviewAction->setChecked(m_activeView->showPreview());\r
+    // It is not enough to update the 'Show Preview' action, also\r
+    // the 'Zoom In' and 'Zoom Out' actions must be adapted.\r
+    updateViewActions();\r
 }\r
 \r
 void DolphinMainWindow::slotShowHiddenFilesChanged()\r
@@ -329,6 +329,7 @@ void DolphinMainWindow::slotHistoryChanged()
 void DolphinMainWindow::slotUrlChanged(const KUrl& url)\r
 {\r
     updateEditActions();\r
+    updateViewActions();\r
     updateGoActions();\r
     setCaption(url.fileName());\r
 }\r
@@ -437,7 +438,7 @@ void DolphinMainWindow::deleteItems()
     const bool del = KMessageBox::warningContinueCancel(this,\r
                                                         text,\r
                                                         QString(),\r
-                                                        KGuiItem(i18n("Delete"), KIcon("editdelete"))\r
+                                                        KGuiItem(i18n("Delete"), KIcon("edit-delete"))\r
                                                        ) == KMessageBox::Continue;\r
     if (del) {\r
         KIO::Job* job = KIO::del(list);\r
@@ -527,11 +528,32 @@ void DolphinMainWindow::undo()
 \r
 void DolphinMainWindow::cut()\r
 {\r
+    QClipboard* clipboard = QApplication::clipboard();\r
+    const QMimeData* currentMimeData = clipboard->mimeData();\r
+    const bool hadCutSelection = KonqMimeData::decodeIsCutSelection(currentMimeData);\r
+\r
     QMimeData* mimeData = new QMimeData();\r
     const KUrl::List kdeUrls = m_activeView->selectedUrls();\r
     const KUrl::List mostLocalUrls;\r
     KonqMimeData::populateMimeData(mimeData, kdeUrls, mostLocalUrls, true);\r
     QApplication::clipboard()->setMimeData(mimeData);\r
+\r
+    if (hadCutSelection) {\r
+        // If an old cut selection has been applied, the view must\r
+        // be reloaded to get the original icons of the items without an\r
+        // applied item effect.\r
+        m_view[PrimaryIdx]->reload();\r
+        if (m_view[SecondaryIdx] != 0) {\r
+            m_view[SecondaryIdx]->reload();\r
+        }\r
+    }\r
+    else {\r
+        // apply an item effect for the icons of all cut items\r
+        m_view[PrimaryIdx]->updateCutItems();\r
+        if (m_view[SecondaryIdx] != 0) {\r
+            m_view[SecondaryIdx]->updateCutItems();\r
+        }\r
+    }\r
 }\r
 \r
 void DolphinMainWindow::copy()\r
@@ -594,13 +616,7 @@ void DolphinMainWindow::updatePasteAction()
     if (!urls.isEmpty()) {\r
         pasteAction->setEnabled(true);\r
 \r
-        const int count = urls.count();\r
-        if (count == 1) {\r
-            pasteAction->setText(i18n("Paste 1 File"));\r
-        }\r
-        else {\r
-            pasteAction->setText(i18n("Paste %1 Files", count));\r
-        }\r
+        pasteAction->setText(i18np("Paste One File", "Paste %1 Files", urls.count()));\r
     }\r
     else {\r
         pasteAction->setEnabled(false);\r
@@ -918,16 +934,16 @@ void DolphinMainWindow::init()
     assert(manager != 0);\r
     KBookmarkGroup root = manager->root();\r
     if (root.first().isNull()) {\r
-        root.addBookmark(manager, i18n("Home"), settings.generalSettings()->homeUrl(), "folder_home");\r
-        root.addBookmark(manager, i18n("Storage Media"), KUrl("media:/"), "blockdevice");\r
-        root.addBookmark(manager, i18n("Network"), KUrl("remote:/"), "network_local");\r
-        root.addBookmark(manager, i18n("Root"), KUrl("/"), "folder_red");\r
-        root.addBookmark(manager, i18n("Trash"), KUrl("trash:/"), "trashcan_full");\r
+        root.addBookmark(manager, i18n("Home"), settings.generalSettings()->homeUrl(), "folder-home");\r
+        root.addBookmark(manager, i18n("Storage Media"), KUrl("media:/"), "hdd-mount");\r
+        root.addBookmark(manager, i18n("Network"), KUrl("remote:/"), "network-local");\r
+        root.addBookmark(manager, i18n("Root"), KUrl("/"), "folder-red");\r
+        root.addBookmark(manager, i18n("Trash"), KUrl("trash:/"), "user-trash");\r
     }\r
 \r
     setupActions();\r
 \r
-    const KUrl& homeUrl = root.first().url();\r
+    const KUrl& homeUrl = settings.generalSettings()->homeUrl();\r
     setCaption(homeUrl.fileName());\r
     ViewProperties props(homeUrl);\r
     m_view[PrimaryIdx] = new DolphinView(this,\r
@@ -997,12 +1013,12 @@ void DolphinMainWindow::setupActions()
     m_newMenu = new DolphinNewMenu(this);\r
     KMenu* menu = m_newMenu->menu();\r
     menu->setTitle(i18n("Create New..."));\r
-    menu->setIcon(SmallIcon("filenew"));\r
+    menu->setIcon(SmallIcon("document-new"));\r
     connect(menu, SIGNAL(aboutToShow()),\r
             this, SLOT(updateNewMenu()));\r
 \r
     QAction* newWindow = actionCollection()->addAction("new_window");\r
-    newWindow->setIcon(KIcon("window_new"));\r
+    newWindow->setIcon(KIcon("window-new"));\r
     newWindow->setText(i18n("New &Window"));\r
     newWindow->setShortcut(Qt::CTRL | Qt::Key_N);\r
     connect(newWindow, SIGNAL(triggered()), this, SLOT(openNewMainWindow()));\r
@@ -1014,14 +1030,14 @@ void DolphinMainWindow::setupActions()
 \r
     QAction* moveToTrash = actionCollection()->addAction("move_to_trash");\r
     moveToTrash->setText(i18n("Move to Trash"));\r
-    moveToTrash->setIcon(KIcon("edittrash"));\r
+    moveToTrash->setIcon(KIcon("edit-trash"));\r
     moveToTrash->setShortcut(QKeySequence::Delete);\r
     connect(moveToTrash, SIGNAL(triggered()), this, SLOT(moveToTrash()));\r
 \r
     QAction* deleteAction = actionCollection()->addAction("delete");\r
     deleteAction->setText(i18n("Delete"));\r
     deleteAction->setShortcut(Qt::SHIFT | Qt::Key_Delete);\r
-    deleteAction->setIcon(KIcon("editdelete"));\r
+    deleteAction->setIcon(KIcon("edit-delete"));\r
     connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteItems()));\r
 \r
     QAction* properties = actionCollection()->addAction("properties");\r
@@ -1062,13 +1078,13 @@ void DolphinMainWindow::setupActions()
     KToggleAction* iconsView = actionCollection()->add<KToggleAction>("icons");\r
     iconsView->setText(i18n("Icons"));\r
     iconsView->setShortcut(Qt::CTRL | Qt::Key_1);\r
-    iconsView->setIcon(KIcon("view_icon"));\r
+    iconsView->setIcon(KIcon("view-icon"));\r
     connect(iconsView, SIGNAL(triggered()), this, SLOT(setIconsView()));\r
 \r
     KToggleAction* detailsView = actionCollection()->add<KToggleAction>("details");\r
     detailsView->setText(i18n("Details"));\r
     detailsView->setShortcut(Qt::CTRL | Qt::Key_2);\r
-    detailsView->setIcon(KIcon("view_text"));\r
+    detailsView->setIcon(KIcon("fileview-text"));\r
     connect(detailsView, SIGNAL(triggered()), this, SLOT(setDetailsView()));\r
 \r
     QActionGroup* viewModeGroup = new QActionGroup(this);\r
@@ -1112,7 +1128,8 @@ void DolphinMainWindow::setupActions()
     connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder()));\r
 \r
     KToggleAction* showPreview = actionCollection()->add<KToggleAction>("show_preview");\r
-    showPreview->setText(i18n("Show Preview"));\r
+    showPreview->setText(i18n("Preview"));\r
+    showPreview->setIcon(KIcon("thumbnail-show"));\r
     connect(showPreview, SIGNAL(triggered()), this, SLOT(togglePreview()));\r
 \r
     KToggleAction* showHiddenFiles = actionCollection()->add<KToggleAction>("show_hidden_files");\r
@@ -1121,20 +1138,20 @@ void DolphinMainWindow::setupActions()
     connect(showHiddenFiles, SIGNAL(triggered()), this, SLOT(toggleShowHiddenFiles()));\r
 \r
     KToggleAction* split = actionCollection()->add<KToggleAction>("split_view");\r
-    split->setText(i18n("Split View"));\r
+    split->setText(i18n("Split"));\r
     split->setShortcut(Qt::Key_F10);\r
-    split->setIcon(KIcon("view_left_right"));\r
+    split->setIcon(KIcon("view-left-right"));\r
     connect(split, SIGNAL(triggered()), this, SLOT(toggleSplitView()));\r
 \r
     QAction* reload = actionCollection()->addAction("reload");\r
     reload->setText(i18n("Reload"));\r
     reload->setShortcut(Qt::Key_F5);\r
-    reload->setIcon(KIcon("reload"));\r
+    reload->setIcon(KIcon("view-refresh"));\r
     connect(reload, SIGNAL(triggered()), this, SLOT(reloadView()));\r
 \r
     QAction* stop = actionCollection()->addAction("stop");\r
     stop->setText(i18n("Stop"));\r
-    stop->setIcon(KIcon("stop"));\r
+    stop->setIcon(KIcon("process-stop"));\r
     connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading()));\r
 \r
     // TODO: the URL navigator must emit a signal if the editable state has been\r
@@ -1170,7 +1187,7 @@ void DolphinMainWindow::setupActions()
     QAction* findFile = actionCollection()->addAction("find_file");\r
     findFile->setText(i18n("Find File..."));\r
     findFile->setShortcut(Qt::Key_F);\r
-    findFile->setIcon(KIcon("filefind"));\r
+    findFile->setIcon(KIcon("file-find"));\r
     connect(findFile, SIGNAL(triggered()), this, SLOT(findFile()));\r
 \r
     KToggleAction* showFilterBar = actionCollection()->add<KToggleAction>("show_filter_bar");\r
@@ -1190,6 +1207,10 @@ void DolphinMainWindow::setupActions()
 \r
 void DolphinMainWindow::setupDockWidgets()\r
 {\r
+    // TODO: there's a lot copy/paste code here. Provide a generic approach\r
+    // after the dock concept has been finalized.\r
+\r
+    // setup "Bookmarks"\r
     QDockWidget* shortcutsDock = new QDockWidget(i18n("Bookmarks"));\r
     shortcutsDock->setObjectName("bookmarksDock");\r
     shortcutsDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
@@ -1200,6 +1221,7 @@ void DolphinMainWindow::setupDockWidgets()
 \r
     addDockWidget(Qt::LeftDockWidgetArea, shortcutsDock);\r
 \r
+    // setup "Information"\r
     QDockWidget* infoDock = new QDockWidget(i18n("Information"));\r
     infoDock->setObjectName("infoDock");\r
     infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
@@ -1209,6 +1231,23 @@ void DolphinMainWindow::setupDockWidgets()
     actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction());\r
 \r
     addDockWidget(Qt::RightDockWidgetArea, infoDock);\r
+\r
+    // setup "Tree View"\r
+    QDockWidget* treeViewDock = new QDockWidget(i18n("Folders")); // TODO: naming?\r
+    treeViewDock->setObjectName("treeViewDock");\r
+    treeViewDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
+    treeViewDock->setWidget(new TreeViewSidebarPage(this));\r
+\r
+    treeViewDock->toggleViewAction()->setText(i18n("Show Folders Panel"));\r
+    actionCollection()->addAction("show_folders_panel", treeViewDock->toggleViewAction());\r
+\r
+    addDockWidget(Qt::LeftDockWidgetArea, treeViewDock);\r
+\r
+    const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun();\r
+    if (firstRun) {\r
+        infoDock->hide();\r
+        treeViewDock->hide();\r
+    }\r
 }\r
 \r
 void DolphinMainWindow::updateHistory()\r
@@ -1349,7 +1388,7 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
     connect(view, SIGNAL(modeChanged()),\r
             this, SLOT(slotViewModeChanged()));\r
     connect(view, SIGNAL(showPreviewChanged()),\r
-            this, SLOT(slowShowPreviewChanged()));\r
+            this, SLOT(slotShowPreviewChanged()));\r
     connect(view, SIGNAL(showHiddenFilesChanged()),\r
             this, SLOT(slotShowHiddenFilesChanged()));\r
     connect(view, SIGNAL(sortingChanged(DolphinView::Sorting)),\r