#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());
++i;
}
- connect(m_bookmarksMenu, SIGNAL(activated(int)),
- this, SLOT(slotBookmarkActivated(int)));
+ connect(m_bookmarksMenu, SIGNAL(triggered(QAction*)),
+ this, SLOT(activateBookmark(QAction*)));
setMenu(m_bookmarksMenu);
}
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
if (bookmarkUrl.isParentOf(url)) {
const int length = bookmarkUrl.prettyUrl().length();
if (length > maxLength) {
- m_selectedIndex = i;
- setIcon(SmallIcon(bookmark.icon()));
+ foundBookmark = bookmark;
maxLength = length;
}
}
++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*/)
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()));