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"));
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);
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"
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);
/** @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.
*/
void activateBookmark(QAction* action);
+private:
+ static int baseBookmarkIndex(const KUrl& url);
+
private:
int m_selectedIndex;
UrlNavigator* m_urlNavigator;
#include "treeviewsidebarpage.h"
+#include "bookmarkselector.h"
#include "dolphinmainwindow.h"
#include "dolphinview.h"
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&)));
}