]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
Rename all the URL navigator related classes to prepare their migration
[dolphin.git] / src / dolphinview.cpp
index 17bbd608dd5080287d1ad3e3e1b6a9eeb886eecd..1aa7e0ff8055f85fe95f92528fd225d484a90dbf 100644 (file)
 #include <QItemSelectionModel>
 #include <QMouseEvent>
 #include <QVBoxLayout>
+#include <QTimer>
+#include <QScrollBar>
 
 #include <kdirmodel.h>
 #include <kfileitemdelegate.h>
+#include <kfileplacesmodel.h>
 #include <klocale.h>
 #include <kiconeffect.h>
 #include <kio/netaccess.h>
@@ -39,6 +42,7 @@
 #include <konq_operations.h>
 #include <kurl.h>
 
+#include "dolphincolumnview.h"
 #include "dolphincontroller.h"
 #include "dolphinstatusbar.h"
 #include "dolphinmainwindow.h"
 #include "dolphincontextmenu.h"
 #include "filterbar.h"
 #include "renamedialog.h"
-#include "urlnavigator.h"
+#include "kurlnavigator.h"
 #include "viewproperties.h"
 #include "dolphinsettings.h"
+#include "dolphin_generalsettings.h"
 
 DolphinView::DolphinView(DolphinMainWindow* mainWindow,
                          QWidget* parent,
@@ -71,6 +76,7 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow,
     m_controller(0),
     m_iconsView(0),
     m_detailsView(0),
+    m_columnView(0),
     m_fileItemDelegate(0),
     m_filterBar(0),
     m_statusBar(0),
@@ -91,7 +97,9 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow,
     connect(clipboard, SIGNAL(dataChanged()),
             this, SLOT(updateCutItems()));
 
-    m_urlNavigator = new UrlNavigator(DolphinSettings::instance().bookmarkManager(), url, this);
+    m_urlNavigator = new KUrlNavigator(new KFilePlacesModel(this), url, this);
+    m_urlNavigator->setUrlEditable(DolphinSettings::instance().generalSettings()->editableUrl());
+    m_urlNavigator->setHomeUrl(DolphinSettings::instance().generalSettings()->homeUrl());
     m_urlNavigator->setShowHiddenFiles(showHiddenFiles);
     connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)),
             this, SLOT(loadDirectory(const KUrl&)));
@@ -288,8 +296,8 @@ void DolphinView::renameSelectedItems()
                 name.replace(replaceIndex, 1, number);
 
                 if (oldUrl.fileName() != name) {
-                    KUrl newUrl(oldUrl.upUrl());
-                    newUrl.addPath(name);
+                    KUrl newUrl = oldUrl;
+                    newUrl.setFileName(name);
                     m_mainWindow->rename(oldUrl, newUrl);
                 }
                 ++it;
@@ -316,8 +324,8 @@ void DolphinView::renameSelectedItems()
         }
         else {
             const KUrl& oldUrl = urls.first();
-            KUrl newUrl = oldUrl.upUrl();
-            newUrl.addPath(newName);
+            KUrl newUrl = oldUrl;
+            newUrl.setFileName(newName);
             m_mainWindow->rename(oldUrl, newUrl);
         }
     }
@@ -340,7 +348,6 @@ DolphinStatusBar* DolphinView::statusBar() const
 
 int DolphinView::contentsX() const
 {
-
     return itemView()->horizontalScrollBar()->value();
 }
 
@@ -349,11 +356,6 @@ int DolphinView::contentsY() const
     return itemView()->verticalScrollBar()->value();
 }
 
-void DolphinView::refreshSettings()
-{
-    startDirLister(m_urlNavigator->url());
-}
-
 void DolphinView::emitRequestItemInfo(const KUrl& url)
 {
     emit requestItemInfo(url);
@@ -451,7 +453,7 @@ void DolphinView::goHome()
 
 void DolphinView::setUrlEditable(bool editable)
 {
-    m_urlNavigator->editUrl(editable);
+    m_urlNavigator->setUrlEditable(editable);
 }
 
 bool DolphinView::hasSelection() const
@@ -597,7 +599,16 @@ void DolphinView::loadDirectory(const KUrl& url)
     const ViewProperties props(url);
 
     const Mode mode = props.viewMode();
-    if (m_mode != mode) {
+    bool changeMode = (m_mode != mode);
+    if (changeMode && isColumnViewActive()) {
+        // The column view is active. Only change the
+        // mode if the current URL is no child of the column view.
+        if (m_dirLister->url().isParentOf(url)) {
+            changeMode = false;
+        }
+    }
+
+    if (changeMode) {
         m_mode = mode;
         createView();
         emit modeChanged();
@@ -766,12 +777,13 @@ void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap)
 
 void DolphinView::restoreContentsPos()
 {
-    UrlNavigator::HistoryElem historyItem = m_urlNavigator->currentHistoryItem();
-    if (!historyItem.url().isEmpty()) {
+    KUrl currentUrl = m_urlNavigator->url();
+    if (!currentUrl.isEmpty()) {
         QAbstractItemView* view = itemView();
-        // TODO: view->setCurrentItem(historyItem.currentFileName());
-        view->horizontalScrollBar()->setValue(historyItem.contentsX());
-        view->verticalScrollBar()->setValue(historyItem.contentsY());
+        // TODO: view->setCurrentItem(m_urlNavigator->currentFileName());
+        QPoint pos = m_urlNavigator->savedPosition();
+        view->horizontalScrollBar()->setValue(pos.x());
+        view->verticalScrollBar()->setValue(pos.y());
     }
 }
 
@@ -824,7 +836,43 @@ void DolphinView::startDirLister(const KUrl& url, bool reload)
     m_cutItemsCache.clear();
     m_blockContentsMovedSignal = true;
     m_dirLister->stop();
-    m_dirLister->openUrl(url, false, reload);
+
+    bool openDir = true;
+    bool keepOldDirs = isColumnViewActive();
+    if (keepOldDirs) {
+        if (reload) {
+            keepOldDirs = false;
+
+            const KUrl& dirListerUrl = m_dirLister->url();
+            if (dirListerUrl.isValid()) {
+                const KUrl::List dirs = m_dirLister->directories();
+                KUrl url;
+                foreach (url, dirs) {
+                    m_dirLister->updateDirectory(url);
+                }
+                openDir = false;
+            }
+        }
+        else if (m_dirLister->directories().contains(url)) {
+            // The dir lister contains the directory already, so
+            // KDirLister::openUrl() may not been invoked twice.
+            m_dirLister->updateDirectory(url);
+            openDir = false;
+        }
+        else {
+            const KUrl& dirListerUrl = m_dirLister->url();
+            if ((dirListerUrl == url) || !m_dirLister->url().isParentOf(url)) {
+                // The current URL is not a child of the dir lister
+                // URL. This may happen when e. g. a bookmark has been selected
+                // and hence the view must be reset.
+                keepOldDirs = false;
+            }
+        }
+    }
+
+    if (openDir) {
+        m_dirLister->openUrl(url, keepOldDirs, reload);
+    }
 }
 
 QString DolphinView::defaultStatusBarText() const
@@ -1072,11 +1120,13 @@ void DolphinView::createView()
         view = 0;
         m_iconsView = 0;
         m_detailsView = 0;
+        m_columnView = 0;
         m_fileItemDelegate = 0;
     }
 
     Q_ASSERT(m_iconsView == 0);
     Q_ASSERT(m_detailsView == 0);
+    Q_ASSERT(m_columnView == 0);
 
     // ... and recreate it representing the current mode
     switch (m_mode) {
@@ -1089,6 +1139,11 @@ void DolphinView::createView()
             m_detailsView = new DolphinDetailsView(this, m_controller);
             view = m_detailsView;
             break;
+
+        case ColumnView:
+            m_columnView = new DolphinColumnView(this, m_controller);
+            view = m_columnView;
+            break;
     }
 
     Q_ASSERT(view != 0);
@@ -1125,10 +1180,13 @@ void DolphinView::selectAll(QItemSelectionModel::SelectionFlags flags)
 
 QAbstractItemView* DolphinView::itemView() const
 {
-    Q_ASSERT((m_iconsView == 0) || (m_detailsView == 0));
     if (m_detailsView != 0) {
         return m_detailsView;
     }
+    else if (m_columnView != 0) {
+        return m_columnView;
+    }
+
     return m_iconsView;
 }