]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/bookmarkselector.cpp
cleanups
[dolphin.git] / src / bookmarkselector.cpp
index 44b7055945d1a917d21144a16a8eae192ea0e33a..84ec0fc4ee5606519a8e9e691a8cdae7d2c59e50 100644 (file)
 
 #include "bookmarkselector.h"
 
+#include "urlnavigator.h"
+
 #include <assert.h>
-#include <q3popupmenu.h>
-#include <qpainter.h>
-#include <qpixmap.h>
 
 #include <kiconloader.h>
 #include <kglobalsettings.h>
 #include <kbookmarkmanager.h>
+#include <kmenu.h>
+#include <kdebug.h>
 
-#include "dolphinsettings.h"
-#include "urlnavigator.h"
+#include <QPainter>
+#include <QPixmap>
 
-BookmarkSelector::BookmarkSelector(UrlNavigator* parent) :
+BookmarkSelector::BookmarkSelector(UrlNavigator* parent, KBookmarkManager* bookmarkManager) :
     UrlButton(parent),
-    m_selectedIndex(0),
-    m_urlNavigator(parent)
+    m_selectedAddress(),
+    m_urlNavigator(parent),
+    m_bookmarkManager(bookmarkManager)
 {
     setFocusPolicy(Qt::NoFocus);
 
-    m_bookmarksMenu = new Q3PopupMenu(this);
+    m_bookmarksMenu = new KMenu(this);
 
-    KBookmarkGroup root = DolphinSettings::instance().bookmarkManager()->root();
+    KBookmarkGroup root = m_bookmarkManager->root();
     KBookmark bookmark = root.first();
     int i = 0;
     while (!bookmark.isNull()) {
-        m_bookmarksMenu->insertItem(MainBarIcon(bookmark.icon()),
-                                    bookmark.text(),
-                                    i);
-        if (i == m_selectedIndex) {
+        QAction* action = new QAction(MainBarIcon(bookmark.icon()),
+                                      bookmark.text(),
+                                      this);
+        m_bookmarksMenu->addAction(action);
+        QString address = QChar('/');
+        address += QString::number(i);
+        action->setData(address);
+        if (address == m_selectedAddress) {
             QPixmap pixmap = SmallIcon(bookmark.icon());
             setIcon(QIcon(pixmap));
             setIconSize(pixmap.size());
@@ -57,8 +63,8 @@ BookmarkSelector::BookmarkSelector(UrlNavigator* parent) :
         ++i;
     }
 
-    connect(m_bookmarksMenu, SIGNAL(activated(int)),
-            this, SLOT(slotBookmarkActivated(int)));
+    connect(m_bookmarksMenu, SIGNAL(triggered(QAction*)),
+            this, SLOT(activateBookmark(QAction*)));
 
     setMenu(m_bookmarksMenu);
 }
@@ -69,11 +75,37 @@ BookmarkSelector::~BookmarkSelector()
 
 void BookmarkSelector::updateSelection(const KUrl& url)
 {
-    KBookmarkGroup root = DolphinSettings::instance().bookmarkManager()->root();
+    KBookmark bookmark = baseBookmark(m_bookmarkManager, url);
+    if (!bookmark.isNull()) {
+        m_selectedAddress = bookmark.address();
+        setIcon(SmallIcon(bookmark.icon()));
+    }
+    else {
+        m_selectedAddress = QString();
+        // No bookmark has been found which matches to the given Url. Show
+        // a generic folder icon as pixmap for indication:
+        setIcon(SmallIcon("folder"));
+    }
+}
+
+KBookmark BookmarkSelector::selectedBookmark() const
+{
+    return m_bookmarkManager->findByAddress(m_selectedAddress);
+}
+
+QSize BookmarkSelector::sizeHint() const
+{
+    const int height = UrlButton::sizeHint().height();
+    return QSize(height, height);
+}
+
+KBookmark BookmarkSelector::baseBookmark(KBookmarkManager* bookmarkManager, const KUrl& url)
+{
+    const KBookmarkGroup root = bookmarkManager->root();
     KBookmark bookmark = root.first();
+    KBookmark foundBookmark;
 
     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
@@ -84,8 +116,7 @@ void BookmarkSelector::updateSelection(const KUrl& url)
         if (bookmarkUrl.isParentOf(url)) {
             const int length = bookmarkUrl.prettyUrl().length();
             if (length > maxLength) {
-                m_selectedIndex = i;
-                setIcon(SmallIcon(bookmark.icon()));
+                foundBookmark = bookmark;
                 maxLength = length;
             }
         }
@@ -93,22 +124,7 @@ void BookmarkSelector::updateSelection(const KUrl& url)
         ++i;
     }
 
-    if (m_selectedIndex < 0) {
-        // No bookmark has been found which matches to the given Url. Show
-        // a generic folder icon as pixmap for indication:
-        setIcon(SmallIcon("folder"));
-    }
-}
-
-KBookmark BookmarkSelector::selectedBookmark() const
-{
-    return DolphinSettings::instance().bookmark(m_selectedIndex);
-}
-
-QSize BookmarkSelector::sizeHint() const
-{
-    const int height = UrlButton::sizeHint().height();
-    return QSize(height, height);
+    return foundBookmark;
 }
 
 void BookmarkSelector::paintEvent(QPaintEvent* /*event*/)
@@ -159,9 +175,10 @@ void BookmarkSelector::paintEvent(QPaintEvent* /*event*/)
     painter.drawPixmap(x, y, pixmap);
 }
 
-void BookmarkSelector::slotBookmarkActivated(int index)
+void BookmarkSelector::activateBookmark(QAction* action)
 {
-    m_selectedIndex = index;
+    assert(action != 0);
+    m_selectedAddress = action->data().toString();
 
     const KBookmark bookmark = selectedBookmark();
     setPixmap(SmallIcon(bookmark.icon()));