]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
Ported to KBookmarkManager::closestBookmark - which even solves another TODO about...
[dolphin.git] / src / dolphinmainwindow.cpp
index 5183f993d31971e0c895df9343a4ca2549ad0c4c..e86ad13fac289f7fd62b5699be0e774ea6fb802b 100644 (file)
@@ -29,7 +29,7 @@
 #include "dolphinsettingsdialog.h"\r
 #include "dolphinstatusbar.h"\r
 #include "infosidebarpage.h"\r
-#include "metadataloader.h"\r
+#include "metadatawidget.h"\r
 #include "mainwindowadaptor.h"\r
 #include "treeviewsidebarpage.h"\r
 #include "urlnavigator.h"\r
@@ -204,6 +204,7 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
 \r
 void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl)\r
 {\r
+    clearStatusBar();\r
     KonqOperations::rename(this, oldUrl, newUrl);\r
     m_undoCommandTypes.append(KonqUndoManager::RENAME);\r
 }\r
@@ -243,13 +244,23 @@ void DolphinMainWindow::refreshViews()
     emit activeViewChanged();\r
 }\r
 \r
-void DolphinMainWindow::changeUrl(const QString& url)\r
+void DolphinMainWindow::changeUrl(const KUrl& url)\r
 {\r
     if (activeView() != 0) {\r
-        activeView()->setUrl(KUrl(url));\r
+        activeView()->setUrl(url);\r
+        updateEditActions();\r
+        updateViewActions();\r
+        updateGoActions();\r
+        setCaption(url.fileName());\r
+        emit urlChanged(url);\r
     }\r
 }\r
 \r
+void DolphinMainWindow::changeSelection(const KFileItemList& selection)\r
+{\r
+    activeView()->changeSelection(selection);\r
+}\r
+\r
 void DolphinMainWindow::slotViewModeChanged()\r
 {\r
     updateViewActions();\r
@@ -337,7 +348,7 @@ void DolphinMainWindow::slotAdditionalInfoChanged(KFileItemDelegate::AdditionalI
     }\r
 }\r
 \r
-void DolphinMainWindow::slotSelectionChanged()\r
+void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)\r
 {\r
     updateEditActions();\r
 \r
@@ -352,7 +363,7 @@ void DolphinMainWindow::slotSelectionChanged()
 \r
     m_activeView->updateStatusBar();\r
 \r
-    emit selectionChanged();\r
+    emit selectionChanged(selection);\r
 }\r
 \r
 void DolphinMainWindow::slotHistoryChanged()\r
@@ -360,14 +371,6 @@ void DolphinMainWindow::slotHistoryChanged()
     updateHistory();\r
 }\r
 \r
-void DolphinMainWindow::slotUrlChanged(const KUrl& url)\r
-{\r
-    updateEditActions();\r
-    updateViewActions();\r
-    updateGoActions();\r
-    setCaption(url.fileName());\r
-}\r
-\r
 void DolphinMainWindow::updateFilterBarAction(bool show)\r
 {\r
     KToggleAction* showFilterBarAction =\r
@@ -456,17 +459,29 @@ void DolphinMainWindow::deleteItems()
 {\r
     clearStatusBar();\r
 \r
+    // TODO: if KonqOperations::askDeleteConfirmation() would indicate when\r
+    // the operation has been finished, this method should be used.\r
+\r
     KUrl::List list = m_activeView->selectedUrls();\r
     const uint itemCount = list.count();\r
     Q_ASSERT(itemCount >= 1);\r
 \r
     QString text;\r
     if (itemCount > 1) {\r
-        text = i18n("Do you really want to delete the %1 selected items?",itemCount);\r
+        text = i18n("Do you really want to delete the %1 selected items?", itemCount);\r
     }\r
     else {\r
         const KUrl& url = list.first();\r
-        text = i18n("Do you really want to delete '%1'?",url.fileName());\r
+        QString itemName;\r
+        if (url.protocol() == "trash" ) {\r
+            itemName = url.path();\r
+            // TODO: check comment in konq_undo.cc in the method askDeleteConfirmation()\r
+            itemName.remove(QRegExp("^/[0-9]*-"));\r
+        }\r
+        else {\r
+           itemName = url.pathOrUrl();\r
+        }\r
+        text = i18n("Do you really want to delete '%1'?", itemName);\r
     }\r
 \r
     const bool del = KMessageBox::warningContinueCancel(this,\r
@@ -544,7 +559,7 @@ void DolphinMainWindow::slotUndoAvailable(bool available)
                                       DolphinStatusBar::OperationCompleted);\r
                 break;\r
 \r
-           case KonqUndoManager::MKDIR:\r
+            case KonqUndoManager::MKDIR:\r
                 statusBar->setMessage(i18n("Created directory."),\r
                                       DolphinStatusBar::OperationCompleted);\r
                 break;\r
@@ -572,32 +587,11 @@ 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
@@ -784,6 +778,7 @@ void DolphinMainWindow::toggleSplitView()
         connectViewSignals(SecondaryIdx);\r
         m_splitter->addWidget(m_view[SecondaryIdx]);\r
         m_splitter->setSizes(QList<int>() << newWidth << newWidth);\r
+        m_view[SecondaryIdx]->reload();\r
         m_view[SecondaryIdx]->show();\r
     }\r
     else {\r
@@ -1018,10 +1013,11 @@ void DolphinMainWindow::init()
                                          homeUrl,\r
                                          props.viewMode(),\r
                                          props.showHiddenFiles());\r
-    connectViewSignals(PrimaryIdx);\r
-    m_view[PrimaryIdx]->show();\r
 \r
     m_activeView = m_view[PrimaryIdx];\r
+    connectViewSignals(PrimaryIdx);\r
+    m_view[PrimaryIdx]->reload();\r
+    m_view[PrimaryIdx]->show();\r
 \r
     setCentralWidget(m_splitter);\r
     setupDockWidgets();\r
@@ -1045,9 +1041,11 @@ void DolphinMainWindow::init()
         resize(640, 480);\r
     }\r
     #ifdef HAVE_KMETADATA\r
-    if (!DolphinApplication::app()->metadataLoader()->storageUp())\r
+    if ( !MetaDataWidget::metaDataAvailable() )\r
         activeView()->statusBar()->setMessage(i18n("Failed to contact Nepomuk service, annotation and tagging are disabled."), DolphinStatusBar::Error);\r
     #endif\r
+\r
+    emit urlChanged(homeUrl);\r
 }\r
 \r
 void DolphinMainWindow::loadSettings()\r
@@ -1300,37 +1298,45 @@ void DolphinMainWindow::setupDockWidgets()
     // after the dock concept has been finalized.\r
 \r
     // setup "Bookmarks"\r
-    QDockWidget* shortcutsDock = new QDockWidget(i18n("Bookmarks"));\r
+    QDockWidget* shortcutsDock = new QDockWidget(i18n("Bookmarks"), this);\r
     shortcutsDock->setObjectName("bookmarksDock");\r
     shortcutsDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
-    shortcutsDock->setWidget(new BookmarksSidebarPage(this));\r
+    SidebarPage* shortcutsWidget = new BookmarksSidebarPage(shortcutsDock);\r
+    shortcutsDock->setWidget(shortcutsWidget);\r
+\r
 \r
     shortcutsDock->toggleViewAction()->setText(i18n("Show Bookmarks Panel"));\r
     actionCollection()->addAction("show_bookmarks_panel", shortcutsDock->toggleViewAction());\r
 \r
     addDockWidget(Qt::LeftDockWidgetArea, shortcutsDock);\r
+    connectSidebarPage(shortcutsWidget);\r
 \r
     // setup "Information"\r
-    QDockWidget* infoDock = new QDockWidget(i18n("Information"));\r
+    QDockWidget* infoDock = new QDockWidget(i18n("Information"), this);\r
     infoDock->setObjectName("infoDock");\r
     infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);\r
-    infoDock->setWidget(new InfoSidebarPage(this));\r
+    SidebarPage* infoWidget = new InfoSidebarPage(infoDock);\r
+    infoDock->setWidget(infoWidget);\r
+\r
 \r
     infoDock->toggleViewAction()->setText(i18n("Show Information Panel"));\r
     actionCollection()->addAction("show_info_panel", infoDock->toggleViewAction());\r
 \r
     addDockWidget(Qt::RightDockWidgetArea, infoDock);\r
+    connectSidebarPage(infoWidget);\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
+    TreeViewSidebarPage* treeWidget = new TreeViewSidebarPage(treeViewDock);\r
+    treeViewDock->setWidget(treeWidget);\r
 \r
     treeViewDock->toggleViewAction()->setText(i18n("Show Folders Panel"));\r
     actionCollection()->addAction("show_folders_panel", treeViewDock->toggleViewAction());\r
 \r
     addDockWidget(Qt::LeftDockWidgetArea, treeViewDock);\r
+    connectSidebarPage(treeWidget);\r
 \r
     const bool firstRun = DolphinSettings::instance().generalSettings()->firstRun();\r
     if (firstRun) {\r
@@ -1342,11 +1348,10 @@ void DolphinMainWindow::setupDockWidgets()
 void DolphinMainWindow::updateHistory()\r
 {\r
     int index = 0;\r
-    const QLinkedList<UrlNavigator::HistoryElem> list = m_activeView->urlHistory(index);\r
 \r
     QAction* backAction = actionCollection()->action("go_back");\r
     if (backAction != 0) {\r
-        backAction->setEnabled(index < static_cast<int>(list.count()) - 1);\r
+        backAction->setEnabled(index < m_activeView->urlNavigator()->historySize() - 1);\r
     }\r
 \r
     QAction* forwardAction = actionCollection()->action("go_forward");\r
@@ -1487,17 +1492,32 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
             this, SLOT(slotSortOrderChanged(Qt::SortOrder)));\r
     connect(view, SIGNAL(additionalInfoChanged(KFileItemDelegate::AdditionalInformation)),\r
             this, SLOT(slotAdditionalInfoChanged(KFileItemDelegate::AdditionalInformation)));\r
-    connect(view, SIGNAL(selectionChanged()),\r
-            this, SLOT(slotSelectionChanged()));\r
+    connect(view, SIGNAL(selectionChanged(KFileItemList)),\r
+            this, SLOT(slotSelectionChanged(KFileItemList)));\r
     connect(view, SIGNAL(showFilterBarChanged(bool)),\r
             this, SLOT(updateFilterBarAction(bool)));\r
+    connect(view, SIGNAL(urlChanged(KUrl)),\r
+            this, SLOT(changeUrl(KUrl)));\r
 \r
     const UrlNavigator* navigator = view->urlNavigator();\r
     connect(navigator, SIGNAL(urlChanged(const KUrl&)),\r
-            this, SLOT(slotUrlChanged(const KUrl&)));\r
+            this, SLOT(changeUrl(const KUrl&)));\r
     connect(navigator, SIGNAL(historyChanged()),\r
             this, SLOT(slotHistoryChanged()));\r
+}\r
+void DolphinMainWindow::connectSidebarPage(SidebarPage* page)\r
+{\r
+    connect(page, SIGNAL(changeUrl(KUrl)),\r
+            this, SLOT(changeUrl(KUrl)));\r
+    connect(page, SIGNAL(changeSelection(KFileItemList)),\r
+            this, SLOT(changeSelection(KFileItemList)));\r
+    connect(page, SIGNAL(urlsDropped(KUrl::List,KUrl)),\r
+            this, SLOT(dropUrls(KUrl::List,KUrl)));\r
 \r
+    connect(this, SIGNAL(urlChanged(KUrl)),\r
+            page, SLOT(setUrl(KUrl)));\r
+     connect(this, SIGNAL(selectionChanged(KFileItemList)),\r
+             page, SLOT(setSelection(KFileItemList)));\r
 }\r
 \r
 DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) :\r