]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Assure that the root of the tree view always matchs to the bookmark shown in the...
authorPeter Penz <peter.penz19@gmail.com>
Sat, 3 Mar 2007 13:03:15 +0000 (13:03 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 3 Mar 2007 13:03:15 +0000 (13:03 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=638825

src/bookmarkselector.cpp
src/bookmarkselector.h
src/treeviewsidebarpage.cpp

index aefb30d749ed4c7345f4b9ad605a175f73937441..73950434d6717bdaad75651b0d47999ace0ac523 100644 (file)
@@ -73,31 +73,12 @@ BookmarkSelector::~BookmarkSelector()
 
 void BookmarkSelector::updateSelection(const KUrl& url)
 {
-    KBookmarkGroup root = DolphinSettings::instance().bookmarkManager()->root();
-    KBookmark bookmark = root.first();
-
-    int maxLength = 0;
-    m_selectedIndex = -1;
-
-    // Search the bookmark which is equal to the Url or at least is a parent Url.
-    // If there are more than one possible parent Url candidates, choose the bookmark
-    // which covers the bigger range of the Url.
-    int i = 0;
-    while (!bookmark.isNull()) {
-        const KUrl bookmarkUrl = bookmark.url();
-        if (bookmarkUrl.isParentOf(url)) {
-            const int length = bookmarkUrl.prettyUrl().length();
-            if (length > maxLength) {
-                m_selectedIndex = i;
-                setIcon(SmallIcon(bookmark.icon()));
-                maxLength = length;
-            }
-        }
-        bookmark = root.next(bookmark);
-        ++i;
+    m_selectedIndex = baseBookmarkIndex(url);
+    if (m_selectedIndex >= 0) {
+        KBookmark bookmark = DolphinSettings::instance().bookmark(m_selectedIndex);
+        setIcon(SmallIcon(bookmark.icon()));
     }
-
-    if (m_selectedIndex < 0) {
+    else {
         // No bookmark has been found which matches to the given Url. Show
         // a generic folder icon as pixmap for indication:
         setIcon(SmallIcon("folder"));
@@ -115,6 +96,12 @@ QSize BookmarkSelector::sizeHint() const
     return QSize(height, height);
 }
 
+KBookmark BookmarkSelector::baseBookmark(const KUrl& url)
+{
+    const int index = baseBookmarkIndex(url);
+    return DolphinSettings::instance().bookmark(index);
+}
+
 void BookmarkSelector::paintEvent(QPaintEvent* /*event*/)
 {
     QPainter painter(this);
@@ -173,5 +160,34 @@ void BookmarkSelector::activateBookmark(QAction* action)
     emit bookmarkActivated(bookmark.url());
 }
 
+int BookmarkSelector::baseBookmarkIndex(const KUrl& url)
+{
+    int index = -1;  // return value
+
+    KBookmarkGroup root = DolphinSettings::instance().bookmarkManager()->root();
+    KBookmark bookmark = root.first();
+
+    int maxLength = 0;
+
+    // Search the bookmark which is equal to the Url or at least is a parent Url.
+    // If there are more than one possible parent Url candidates, choose the bookmark
+    // which covers the bigger range of the Url.
+    int i = 0;
+    while (!bookmark.isNull()) {
+        const KUrl bookmarkUrl = bookmark.url();
+        if (bookmarkUrl.isParentOf(url)) {
+            const int length = bookmarkUrl.prettyUrl().length();
+            if (length > maxLength) {
+                index = i;
+                maxLength = length;
+            }
+        }
+        bookmark = root.next(bookmark);
+        ++i;
+    }
+
+    return index;
+}
+
 #include "bookmarkselector.moc"
 
index b904a0d57a63c44015c3457b6bf890ed00d45679..334f25ba379c0004c1ca18d3c3e69cbe522bcdb8 100644 (file)
@@ -49,11 +49,11 @@ public:
     virtual ~BookmarkSelector();
 
     /**
-     * Updates the selection dependent from the given Url \a url. The
-     * Url must not match exactly to one of the available bookmarks:
-     * The bookmark which is equal to the Url or at least is a parent Url
-     * is selected. If there are more than one possible parent Url candidates,
-     * the bookmark which covers the bigger range of the Url is selected.
+     * Updates the selection dependent from the given URL \a url. The
+     * URL must not match exactly to one of the available bookmarks:
+     * The bookmark which is equal to the URL or at least is a parent URL
+     * is selected. If there are more than one possible parent URL candidates,
+     * the bookmark which covers the bigger range of the URL is selected.
      */
     void updateSelection(const KUrl& url);
 
@@ -69,6 +69,22 @@ public:
     /** @see QWidget::sizeHint() */
     virtual QSize sizeHint() const;
 
+    /**
+     * Returns the base bookmark for the URL \a url.
+     * The base bookmark is defined as bookmark which is equal to
+     * the URL or at least is a parent URL. If there are more than
+     * one possible parent URL candidates, the bookmark which covers
+     * the bigger range of the URL is returned.
+     *
+     * Example: the url is '/home/peter/Documents/Music. Available
+     * bookmarks are:
+     * - /home/peter
+     * - /home/peter/Documents
+     *
+     * The base URL will be '/home/peter/Documents'.
+     */
+    static KBookmark baseBookmark(const KUrl& url);
+
 signals:
     /**
      * Is send when a bookmark has been activated by the user.
@@ -90,6 +106,9 @@ private slots:
      */
     void activateBookmark(QAction* action);
 
+private:
+    static int baseBookmarkIndex(const KUrl& url);
+
 private:
     int m_selectedIndex;
     UrlNavigator* m_urlNavigator;
index f57146684e9a62448241f6c1977725449b2e1535..32edef05e458e2d6e02e7b58e7dc89b3952070e4 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "treeviewsidebarpage.h"
 
+#include "bookmarkselector.h"
 #include "dolphinmainwindow.h"
 #include "dolphinview.h"
 
@@ -76,12 +77,20 @@ void TreeViewSidebarPage::activeViewChanged()
 
 void TreeViewSidebarPage::updatePosition(const KUrl& url)
 {
+    KUrl baseUrl = BookmarkSelector::baseBookmark(url).url();
+    if (m_dirLister->url() != baseUrl) {
+        m_dirLister->stop();
+        m_dirLister->openUrl(baseUrl);
+    }
+
+    // TODO: open sub folders to be synchronous to 'url'
 }
 
 void TreeViewSidebarPage::connectToActiveView()
 {
     DolphinView* view = mainWindow()->activeView();
-    m_dirLister->openUrl(view->url(), true);
+    m_dirLister->stop();
+    m_dirLister->openUrl(view->url());
     connect(view, SIGNAL(urlChanged(const KUrl&)),
             this, SLOT(updatePosition(const KUrl&)));
 }