X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/175fe7ff47ccff39b0e77f80491a9701d025375e..c6bc5511a8ba05d8f44217b404d615d4d56bb53f:/src/bookmarkselector.cpp diff --git a/src/bookmarkselector.cpp b/src/bookmarkselector.cpp index 44b705594..84ec0fc4e 100644 --- a/src/bookmarkselector.cpp +++ b/src/bookmarkselector.cpp @@ -19,35 +19,41 @@ #include "bookmarkselector.h" +#include "urlnavigator.h" + #include -#include -#include -#include #include #include #include +#include +#include -#include "dolphinsettings.h" -#include "urlnavigator.h" +#include +#include -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()));