X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/175fe7ff47ccff39b0e77f80491a9701d025375e..78c312a0f33b15b34aed8ea7cf9e9c344dea1f87:/src/bookmarkselector.cpp diff --git a/src/bookmarkselector.cpp b/src/bookmarkselector.cpp index 44b705594..10ce0f2b3 100644 --- a/src/bookmarkselector.cpp +++ b/src/bookmarkselector.cpp @@ -19,90 +19,102 @@ #include "bookmarkselector.h" +#include "urlnavigator.h" + #include -#include -#include -#include #include #include -#include +#include +#include +#include -#include "dolphinsettings.h" -#include "urlnavigator.h" +#include +#include +#include -BookmarkSelector::BookmarkSelector(UrlNavigator* parent) : +BookmarkSelector::BookmarkSelector(UrlNavigator* parent, KFilePlacesModel* placesModel) : UrlButton(parent), - m_selectedIndex(0), - m_urlNavigator(parent) + m_selectedItem(-1), + m_urlNavigator(parent), + m_placesModel(placesModel) { setFocusPolicy(Qt::NoFocus); - m_bookmarksMenu = new Q3PopupMenu(this); - - KBookmarkGroup root = DolphinSettings::instance().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) { - QPixmap pixmap = SmallIcon(bookmark.icon()); - setIcon(QIcon(pixmap)); - setIconSize(pixmap.size()); - setMinimumWidth(pixmap.width() + 2); - } - bookmark = root.next(bookmark); - ++i; - } + m_placesMenu = new KMenu(this); - connect(m_bookmarksMenu, SIGNAL(activated(int)), - this, SLOT(slotBookmarkActivated(int))); + updateMenu(); - setMenu(m_bookmarksMenu); + connect(m_placesModel, SIGNAL(rowsInserted(const QModelIndex&, int, int)), + this, SLOT(updateMenu())); + connect(m_placesModel, SIGNAL(rowsRemoved(const QModelIndex&, int, int)), + this, SLOT(updateMenu())); + connect(m_placesMenu, SIGNAL(triggered(QAction*)), + this, SLOT(activatePlace(QAction*))); + + setMenu(m_placesMenu); } BookmarkSelector::~BookmarkSelector() { } -void BookmarkSelector::updateSelection(const KUrl& url) +void BookmarkSelector::updateMenu() { - 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; - } + m_placesMenu->clear(); + + for (int i=0; irowCount(); ++i) { + QModelIndex index = m_placesModel->index(i, 0); + QAction* action = new QAction(m_placesModel->icon(index), + m_placesModel->text(index), + m_placesMenu); + m_placesMenu->addAction(action); + + action->setData(i); + + if (i == m_selectedItem) { + //QPixmap pixmap = SmallIcon(bookmark.icon()); + setIcon(m_placesModel->icon(index)); + //setIconSize(pixmap.size()); + //setMinimumWidth(pixmap.width() + 2); } - bookmark = root.next(bookmark); - ++i; } +} + +void BookmarkSelector::updateSelection(const KUrl& url) +{ + QModelIndex index = m_placesModel->closestItem(url); - if (m_selectedIndex < 0) { + if (index.isValid()) { + m_selectedItem = index.row(); + setIcon(m_placesModel->icon(index)); + } + else { + m_selectedItem = -1; // No bookmark has been found which matches to the given Url. Show // a generic folder icon as pixmap for indication: - setIcon(SmallIcon("folder")); + setIcon(KIcon("folder")); } } -KBookmark BookmarkSelector::selectedBookmark() const +KUrl BookmarkSelector::selectedPlaceUrl() const +{ + QModelIndex index = m_placesModel->index(m_selectedItem, 0); + + if (index.isValid()) + return m_placesModel->url(index); + else + return KUrl(); +} + +QString BookmarkSelector::selectedPlaceText() const { - return DolphinSettings::instance().bookmark(m_selectedIndex); + QModelIndex index = m_placesModel->index(m_selectedItem, 0); + + if (index.isValid()) + return m_placesModel->text(index); + else + return QString(); } QSize BookmarkSelector::sizeHint() const @@ -159,13 +171,17 @@ void BookmarkSelector::paintEvent(QPaintEvent* /*event*/) painter.drawPixmap(x, y, pixmap); } -void BookmarkSelector::slotBookmarkActivated(int index) +void BookmarkSelector::activatePlace(QAction* action) { - m_selectedIndex = index; + assert(action != 0); + m_selectedItem = action->data().toInt(); - const KBookmark bookmark = selectedBookmark(); - setPixmap(SmallIcon(bookmark.icon())); - emit bookmarkActivated(bookmark.url()); + QModelIndex index = m_placesModel->index(m_selectedItem, 0); + + if (index.isValid()) { + setIcon(m_placesModel->icon(index)); + emit placeActivated(m_placesModel->url(index)); + } } #include "bookmarkselector.moc"