]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinmainwindow.cpp
KonqFileUndoManager moved to kdelibs, as KIO::FileUndoManager. Ported the code in...
[dolphin.git] / src / dolphinmainwindow.cpp
index 37fdce75b6fc1d6d224efc39c7ca2d2fd5b2228d..43818f58042ea3319675fdcdf2fee9893f63cacf 100644 (file)
@@ -32,6 +32,7 @@
 #include "dolphinsettingsdialog.h"
 #include "dolphinstatusbar.h"
 #include "dolphinviewcontainer.h"
+#include "fileitemcapabilities.h"
 #include "infosidebarpage.h"
 #include "metadatawidget.h"
 #include "mainwindowadaptor.h"
@@ -101,10 +102,8 @@ DolphinMainWindow::DolphinMainWindow(int id) :
     new MainWindowAdaptor(this);
     QDBusConnection::sessionBus().registerObject(QString("/dolphin/MainWindow%1").arg(m_id), this);
 
-    KonqFileUndoManager::incRef();
-
-    KonqFileUndoManager* undoManager = KonqFileUndoManager::self();
-    undoManager->setUiInterface(new UndoUiInterface(this));
+    KIO::FileUndoManager* undoManager = KIO::FileUndoManager::self();
+    undoManager->setUiInterface(new UndoUiInterface());
 
     connect(undoManager, SIGNAL(undoAvailable(bool)),
             this, SLOT(slotUndoAvailable(bool)));
@@ -116,7 +115,6 @@ DolphinMainWindow::DolphinMainWindow(int id) :
 
 DolphinMainWindow::~DolphinMainWindow()
 {
-    KonqFileUndoManager::decRef();
     DolphinApplication::app()->removeMainWindow(this);
 }
 
@@ -135,7 +133,7 @@ void DolphinMainWindow::toggleViews()
     m_viewTab[m_tabIndex].secondaryView = container;
 }
 
-void DolphinMainWindow::slotDoingOperation(KonqFileUndoManager::CommandType commandType)
+void DolphinMainWindow::slotDoingOperation(KIO::FileUndoManager::CommandType commandType)
 {
     clearStatusBar();
     m_undoCommandTypes.append(commandType);
@@ -162,8 +160,8 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls,
                                  const KUrl& destination)
 {
     DolphinDropController dropController(this);
-    connect(&dropController, SIGNAL(doingOperation(KonqFileUndoManager::CommandType)),
-            this, SLOT(slotDoingOperation(KonqFileUndoManager::CommandType)));
+    connect(&dropController, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)),
+            this, SLOT(slotDoingOperation(KIO::FileUndoManager::CommandType)));
     dropController.dropUrls(urls, destination);
 }
 
@@ -389,31 +387,31 @@ void DolphinMainWindow::slotUndoAvailable(bool available)
     }
 
     if (available && (m_undoCommandTypes.count() > 0)) {
-        const KonqFileUndoManager::CommandType command = m_undoCommandTypes.takeFirst();
+        const KIO::FileUndoManager::CommandType command = m_undoCommandTypes.takeFirst();
         DolphinStatusBar* statusBar = m_activeViewContainer->statusBar();
         switch (command) {
-        case KonqFileUndoManager::COPY:
+        case KIO::FileUndoManager::Copy:
             statusBar->setMessage(i18nc("@info:status", "Copy operation completed."),
                                   DolphinStatusBar::OperationCompleted);
             break;
-        case KonqFileUndoManager::MOVE:
+        case KIO::FileUndoManager::Move:
             statusBar->setMessage(i18nc("@info:status", "Move operation completed."),
                                   DolphinStatusBar::OperationCompleted);
             break;
-        case KonqFileUndoManager::LINK:
+        case KIO::FileUndoManager::Link:
             statusBar->setMessage(i18nc("@info:status", "Link operation completed."),
                                   DolphinStatusBar::OperationCompleted);
             break;
-        case KonqFileUndoManager::TRASH:
+        case KIO::FileUndoManager::Trash:
             statusBar->setMessage(i18nc("@info:status", "Move to trash operation completed."),
                                   DolphinStatusBar::OperationCompleted);
             break;
-        case KonqFileUndoManager::RENAME:
+        case KIO::FileUndoManager::Rename:
             statusBar->setMessage(i18nc("@info:status", "Renaming operation completed."),
                                   DolphinStatusBar::OperationCompleted);
             break;
 
-        case KonqFileUndoManager::MKDIR:
+        case KIO::FileUndoManager::Mkdir:
             statusBar->setMessage(i18nc("@info:status", "Created folder."),
                                   DolphinStatusBar::OperationCompleted);
             break;
@@ -436,7 +434,8 @@ void DolphinMainWindow::slotUndoTextChanged(const QString& text)
 void DolphinMainWindow::undo()
 {
     clearStatusBar();
-    KonqFileUndoManager::self()->undo();
+    KIO::FileUndoManager::self()->uiInterface()->setParentWidget(this);
+    KIO::FileUndoManager::self()->undo();
 }
 
 void DolphinMainWindow::cut()
@@ -457,10 +456,6 @@ void DolphinMainWindow::paste()
 void DolphinMainWindow::updatePasteAction()
 {
     QAction* pasteAction = actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
-    if (pasteAction == 0) {
-        return;
-    }
-
     QPair<bool, QString> pasteInfo = m_activeViewContainer->view()->pasteInfo();
     pasteAction->setEnabled(pasteInfo.first);
     pasteAction->setText(pasteInfo.second);
@@ -753,8 +748,9 @@ void DolphinMainWindow::openTabContextMenu(int index, const QPoint& pos)
     QAction* selectedAction = menu.exec(pos);
     if (selectedAction == newTabAction) {
         const ViewTab& tab = m_viewTab[index];
-        const KUrl url = tab.primaryView->isActive() ? tab.primaryView->url() :
-                                                       tab.secondaryView->url();
+        Q_ASSERT(tab.primaryView != 0);
+        const KUrl url = (tab.secondaryView != 0) && tab.secondaryView->isActive() ?
+                         tab.secondaryView->url() : tab.primaryView->url();
         openNewTab(url);
         m_tabBar->setCurrentIndex(m_viewTab.count() - 1);
     } else if (selectedAction == closeOtherTabsAction) {
@@ -812,6 +808,8 @@ void DolphinMainWindow::init()
             this, SLOT(closeTab(int)));
     connect(m_tabBar, SIGNAL(contextMenu(int, const QPoint&)),
             this, SLOT(openTabContextMenu(int, const QPoint&)));
+    connect(m_tabBar, SIGNAL(newTabRequest()),
+            this, SLOT(openNewTab()));
     m_tabBar->blockSignals(true);  // signals get unblocked after at least 2 tabs are open
 
     QWidget* centralWidget = new QWidget(this);
@@ -1107,26 +1105,11 @@ void DolphinMainWindow::updateEditActions()
     } else {
         stateChanged("has_selection");
 
-        QAction* renameAction = actionCollection()->action("rename");
-        if (renameAction != 0) {
-            renameAction->setEnabled(true);
-        }
-
-        bool enableMoveToTrash = true;
-
-        KFileItemList::const_iterator it = list.begin();
-        const KFileItemList::const_iterator end = list.end();
-        while (it != end) {
-            const KUrl& url = (*it).url();
-            // only enable the 'Move to Trash' action for local files
-            if (!url.isLocalFile()) {
-                enableMoveToTrash = false;
-            }
-            ++it;
-        }
-
-        QAction* moveToTrashAction = actionCollection()->action("move_to_trash");
-        moveToTrashAction->setEnabled(enableMoveToTrash);
+        FileItemCapabilities capabilities(list);
+        actionCollection()->action("rename")->setEnabled(capabilities.supportsMoving());
+        const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving();
+        actionCollection()->action("move_to_trash")->setEnabled(enableMoveToTrash);
+        actionCollection()->action("delete")->setEnabled(capabilities.supportsDeleting());
     }
     updatePasteAction();
 }
@@ -1169,8 +1152,8 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container)
             this, SLOT(slotRequestItemInfo(KFileItem)));
     connect(view, SIGNAL(activated()),
             this, SLOT(toggleActiveView()));
-    connect(view, SIGNAL(doingOperation(KonqFileUndoManager::CommandType)),
-            this, SLOT(slotDoingOperation(KonqFileUndoManager::CommandType)));
+    connect(view, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)),
+            this, SLOT(slotDoingOperation(KIO::FileUndoManager::CommandType)));
     connect(view, SIGNAL(tabRequested(const KUrl&)),
             this, SLOT(openNewTab(const KUrl&)));
 
@@ -1205,11 +1188,9 @@ QString DolphinMainWindow::tabName(const KUrl& url) const
     return url.equals(KUrl("file:///")) ? "/" : url.fileName();
 }
 
-DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) :
-    KonqFileUndoManager::UiInterface(mainWin),
-    m_mainWin(mainWin)
+DolphinMainWindow::UndoUiInterface::UndoUiInterface() :
+    KIO::FileUndoManager::UiInterface()
 {
-    Q_ASSERT(m_mainWin != 0);
 }
 
 DolphinMainWindow::UndoUiInterface::~UndoUiInterface()
@@ -1218,8 +1199,13 @@ DolphinMainWindow::UndoUiInterface::~UndoUiInterface()
 
 void DolphinMainWindow::UndoUiInterface::jobError(KIO::Job* job)
 {
-    DolphinStatusBar* statusBar = m_mainWin->activeViewContainer()->statusBar();
-    statusBar->setMessage(job->errorString(), DolphinStatusBar::Error);
+    DolphinMainWindow* mainWin= qobject_cast<DolphinMainWindow *>(parentWidget());
+    if (mainWin) {
+        DolphinStatusBar* statusBar = mainWin->activeViewContainer()->statusBar();
+        statusBar->setMessage(job->errorString(), DolphinStatusBar::Error);
+    } else {
+        KIO::FileUndoManager::UiInterface::jobError(job);
+    }
 }
 
 #include "dolphinmainwindow.moc"