]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
There are some extractable strings in subdirs too.
[dolphin.git] / src / dolphinview.cpp
index e1f1cf53ccde1791c7eb1deed99e73317cb1c598..023a7380024e68945c23a05e4a8ac69b52d16c65 100644 (file)
@@ -57,6 +57,7 @@
 #include "dolphin_generalsettings.h"
 #include "iconmanager.h"
 #include "renamedialog.h"
+#include "tooltipmanager.h"
 #include "viewproperties.h"
 
 DolphinView::DolphinView(QWidget* parent,
@@ -69,6 +70,8 @@ DolphinView::DolphinView(QWidget* parent,
     m_showPreview(false),
     m_loadingDirectory(false),
     m_storedCategorizedSorting(false),
+    m_tabsForFiles(false),
+    m_isContextMenuOpen(false),
     m_mode(DolphinView::IconsView),
     m_topLayout(0),
     m_controller(0),
@@ -80,9 +83,11 @@ DolphinView::DolphinView(QWidget* parent,
     m_dolphinModel(dolphinModel),
     m_dirLister(dirLister),
     m_proxyModel(proxyModel),
-    m_iconManager(0)
+    m_iconManager(0),
+    m_toolTipManager(0),
+    m_rootUrl(),
+    m_currentItemUrl()
 {
-    setFocusPolicy(Qt::StrongFocus);
     m_topLayout = new QVBoxLayout(this);
     m_topLayout->setSpacing(0);
     m_topLayout->setMargin(0);
@@ -97,7 +102,7 @@ DolphinView::DolphinView(QWidget* parent,
     connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
             this, SIGNAL(urlChanged(const KUrl&)));
     connect(m_controller, SIGNAL(requestUrlChange(const KUrl&)),
-            this, SIGNAL(urlChanged(const KUrl&)));
+            this, SLOT(slotRequestUrlChange(const KUrl&)));
 
     connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)),
             this, SLOT(openContextMenu(const QPoint&)));
@@ -111,6 +116,8 @@ DolphinView::DolphinView(QWidget* parent,
             this, SLOT(updateAdditionalInfo(const KFileItemDelegate::InformationList&)));
     connect(m_controller, SIGNAL(itemTriggered(const KFileItem&)),
             this, SLOT(triggerItem(const KFileItem&)));
+    connect(m_controller, SIGNAL(tabRequested(const KUrl&)),
+            this, SIGNAL(tabRequested(const KUrl&)));
     connect(m_controller, SIGNAL(activated()),
             this, SLOT(activate()));
     connect(m_controller, SIGNAL(itemEntered(const KFileItem&)),
@@ -118,6 +125,11 @@ DolphinView::DolphinView(QWidget* parent,
     connect(m_controller, SIGNAL(viewportEntered()),
             this, SLOT(clearHoverInformation()));
 
+    connect(m_dirLister, SIGNAL(redirection(KUrl, KUrl)),
+            this, SLOT(slotRedirection(KUrl, KUrl)));
+    connect(m_dirLister, SIGNAL(completed()),
+            this, SLOT(restoreCurrentItem()));
+
     applyViewProperties(url);
     m_topLayout->addWidget(itemView());
 }
@@ -143,7 +155,6 @@ void DolphinView::setActive(bool active)
     }
 
     m_active = active;
-    m_selectionModel->clearSelection();
 
     QColor color = KColorScheme(QPalette::Active, KColorScheme::View).background().color();
     if (active) {
@@ -164,6 +175,7 @@ void DolphinView::setActive(bool active)
     update();
 
     if (active) {
+        itemView()->setFocus();
         emit activated();
     }
 
@@ -296,7 +308,7 @@ KFileItemList DolphinView::selectedItems() const
     KFileItemList itemList;
 
     const QModelIndexList indexList = selection.indexes();
-    foreach (QModelIndex index, indexList) {
+    foreach (const QModelIndex &index, indexList) {
         KFileItem item = m_dolphinModel->itemForIndex(index);
         if (!item.isNull()) {
             itemList.append(item);
@@ -310,7 +322,7 @@ KUrl::List DolphinView::selectedUrls() const
 {
     KUrl::List urls;
     const KFileItemList list = selectedItems();
-    foreach (KFileItem item, list) {
+    foreach (const KFileItem &item, list) {
         urls.append(item.url());
     }
     return urls;
@@ -463,7 +475,7 @@ void DolphinView::setNameFilter(const QString& nameFilter)
 
 void DolphinView::calculateItemCount(int& fileCount, int& folderCount)
 {
-    foreach (KFileItem item, m_dirLister->items()) {
+    foreach (const KFileItem &item, m_dirLister->items()) {
         if (item.isDir()) {
             ++folderCount;
         } else {
@@ -474,6 +486,8 @@ void DolphinView::calculateItemCount(int& fileCount, int& folderCount)
 
 void DolphinView::setUrl(const KUrl& url)
 {
+    // remember current item candidate (see restoreCurrentItem())
+    m_currentItemUrl = url;
     updateView(url, KUrl());
 }
 
@@ -513,13 +527,13 @@ void DolphinView::renameSelectedItems()
         if (newName.isEmpty()) {
             emit errorMessage(dialog.errorString());
         } else {
-            // TODO: check how this can be integrated into KonqFileUndoManager/KonqOperations
+            // TODO: check how this can be integrated into KIO::FileUndoManager/KonqOperations
             // as one operation instead of n rename operations like it is done now...
             Q_ASSERT(newName.contains('#'));
 
             // iterate through all selected items and rename them...
             int index = 1;
-            foreach (KFileItem item, items) {
+            foreach (const KFileItem &item, items) {
                 const KUrl& oldUrl = item.url();
                 QString number;
                 number.setNum(index++);
@@ -531,7 +545,7 @@ void DolphinView::renameSelectedItems()
                     KUrl newUrl = oldUrl;
                     newUrl.setFileName(name);
                     KonqOperations::rename(this, oldUrl, newUrl);
-                    emit doingOperation(KonqFileUndoManager::RENAME);
+                    emit doingOperation(KIO::FileUndoManager::Rename);
                 }
             }
         }
@@ -561,14 +575,14 @@ void DolphinView::renameSelectedItems()
             KUrl newUrl = oldUrl;
             newUrl.setFileName(newName);
             KonqOperations::rename(this, oldUrl, newUrl);
-            emit doingOperation(KonqFileUndoManager::RENAME);
+            emit doingOperation(KIO::FileUndoManager::Rename);
         }
     }
 }
 
 void DolphinView::trashSelectedItems()
 {
-    emit doingOperation(KonqFileUndoManager::TRASH);
+    emit doingOperation(KIO::FileUndoManager::Trash);
     KonqOperations::del(this, KonqOperations::TRASH, selectedUrls());
 }
 
@@ -743,10 +757,14 @@ void DolphinView::triggerItem(const KFileItem& item)
         return;
     }
 
-    if (item.isNull()) {
+    // TODO: the m_isContextMenuOpen check is a workaround for Qt-issue 207192
+    if (item.isNull() || m_isContextMenuOpen) {
         return;
     }
 
+    if (m_toolTipManager != 0) {
+        m_toolTipManager->hideTip();
+    }
     emit itemTriggered(item); // caught by DolphinViewContainer or DolphinPart
 }
 
@@ -764,7 +782,13 @@ void DolphinView::openContextMenu(const QPoint& pos)
         item = fileItem(index);
     }
 
+    if (m_toolTipManager != 0) {
+        m_toolTipManager->hideTip();
+    }
+
+    m_isContextMenuOpen = true; // TODO: workaround for Qt-issue 207192
     emit requestContextMenu(item, url());
+    m_isContextMenuOpen = false;
 }
 
 void DolphinView::dropUrls(const KUrl::List& urls,
@@ -785,8 +809,8 @@ void DolphinView::dropUrls(const KUrl::List& urls,
 {
     DolphinDropController dropController(this);
     // forward doingOperation signal up to the mainwindow
-    connect(&dropController, SIGNAL(doingOperation(KonqFileUndoManager::CommandType)),
-            this, SIGNAL(doingOperation(KonqFileUndoManager::CommandType)));
+    connect(&dropController, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)),
+            this, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)));
     dropController.dropUrls(urls, destination);
 }
 
@@ -898,6 +922,16 @@ QPair<bool, QString> DolphinView::pasteInfo() const
     return ret;
 }
 
+void DolphinView::setTabsForFilesEnabled(bool tabsForFiles)
+{
+    m_tabsForFiles = tabsForFiles;
+}
+
+bool DolphinView::isTabsForFilesEnabled() const
+{
+    return m_tabsForFiles;
+}
+
 void DolphinView::emitContentsMoved()
 {
     // only emit the contents moved signal if:
@@ -930,6 +964,21 @@ void DolphinView::slotDeleteFileFinished(KJob* job)
     }
 }
 
+
+void DolphinView::restoreCurrentItem()
+{
+    const QModelIndex dirIndex = m_dolphinModel->indexForUrl(m_currentItemUrl);
+    if (dirIndex.isValid()) {
+        const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex);
+        QAbstractItemView* view = itemView();
+        const bool clearSelection = !hasSelection();
+        view->setCurrentIndex(proxyIndex);
+        if (clearSelection) {
+            view->clearSelection();
+        }
+    }
+}
+
 void DolphinView::loadDirectory(const KUrl& url, bool reload)
 {
     if (!url.isValid()) {
@@ -1080,6 +1129,10 @@ void DolphinView::createView()
     m_iconManager = new IconManager(view, m_proxyModel);
     m_iconManager->setShowPreview(m_showPreview);
 
+    if (DolphinSettings::instance().generalSettings()->showToolTips()) {
+        m_toolTipManager = new ToolTipManager(view, m_proxyModel);
+    }
+
     m_topLayout->insertWidget(1, view);
 
     connect(view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),
@@ -1103,6 +1156,7 @@ void DolphinView::deleteView()
         m_columnView = 0;
         m_fileItemDelegate = 0;
         m_iconManager = 0;
+        m_toolTipManager = 0;
     }
 }
 
@@ -1143,11 +1197,24 @@ void DolphinView::pasteToUrl(const KUrl& url)
     const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData);
     if (KonqMimeData::decodeIsCutSelection(mimeData)) {
         KonqOperations::copy(this, KonqOperations::MOVE, sourceUrls, url);
-        emit doingOperation(KonqFileUndoManager::MOVE);
+        emit doingOperation(KIO::FileUndoManager::Move);
         clipboard->clear();
     } else {
         KonqOperations::copy(this, KonqOperations::COPY, sourceUrls, url);
-        emit doingOperation(KonqFileUndoManager::COPY);
+        emit doingOperation(KIO::FileUndoManager::Copy);
+    }
+}
+
+void DolphinView::slotRequestUrlChange(const KUrl& url)
+{
+    emit requestUrlChange(url);
+    m_controller->setUrl(url);
+}
+
+void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl)
+{
+    if (oldUrl == m_controller->url()) {
+        m_controller->setUrl(newUrl);
     }
 }