]> cloud.milkyroute.net Git - dolphin.git/blob - src/dolphinbookmarkhandler.cpp
Add an option to use an UrlNavigator in the toolbar instead
[dolphin.git] / src / dolphinbookmarkhandler.cpp
1 /*
2 * SPDX-FileCopyrightText: 2019 David Hallas <david@davidhallas.dk>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "dolphinbookmarkhandler.h"
8 #include "dolphinmainwindow.h"
9 #include "dolphinviewcontainer.h"
10 #include "global.h"
11 #include <KActionCollection>
12 #include <KBookmarkMenu>
13 #include <KIO/Global>
14 #include <QDebug>
15 #include <QDir>
16 #include <QStandardPaths>
17
18 DolphinBookmarkHandler::DolphinBookmarkHandler(DolphinMainWindow *mainWindow,
19 KActionCollection* collection,
20 QMenu* menu,
21 QObject* parent) :
22 QObject(parent),
23 m_mainWindow(mainWindow)
24 {
25 QString bookmarksFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
26 QStringLiteral("kfile/bookmarks.xml"));
27 if (bookmarksFile.isEmpty()) {
28 QString genericDataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
29 if (genericDataLocation.isEmpty()) {
30 qWarning() << "GenericDataLocation is empty! Bookmarks will not be saved correctly.";
31 }
32 bookmarksFile = QStringLiteral("%1/dolphin").arg(genericDataLocation);
33 QDir().mkpath(bookmarksFile);
34 bookmarksFile += QLatin1String("/bookmarks.xml");
35 }
36 m_bookmarkManager = KBookmarkManager::managerForFile(bookmarksFile, QStringLiteral("dolphin"));
37 m_bookmarkManager->setUpdate(true);
38 m_bookmarkMenu.reset(new KBookmarkMenu(m_bookmarkManager, this, menu));
39
40 collection->addAction(QStringLiteral("add_bookmark"), m_bookmarkMenu->addBookmarkAction());
41 collection->addAction(QStringLiteral("edit_bookmarks"), m_bookmarkMenu->editBookmarksAction());
42 collection->addAction(QStringLiteral("add_bookmarks_list"), m_bookmarkMenu->bookmarkTabsAsFolderAction());
43 }
44
45 DolphinBookmarkHandler::~DolphinBookmarkHandler()
46 {
47 }
48
49 QString DolphinBookmarkHandler::currentTitle() const
50 {
51 return title(m_mainWindow->activeViewContainer());
52 }
53
54 QUrl DolphinBookmarkHandler::currentUrl() const
55 {
56 return url(m_mainWindow->activeViewContainer());
57 }
58
59 QString DolphinBookmarkHandler::currentIcon() const
60 {
61 return icon(m_mainWindow->activeViewContainer());
62 }
63
64 bool DolphinBookmarkHandler::supportsTabs() const
65 {
66 return true;
67 }
68
69 QList<KBookmarkOwner::FutureBookmark> DolphinBookmarkHandler::currentBookmarkList() const
70 {
71 const auto viewContainers = m_mainWindow->viewContainers(false);
72 QList<FutureBookmark> bookmarks;
73 bookmarks.reserve(viewContainers.size());
74 for (const auto viewContainer : viewContainers) {
75 bookmarks << FutureBookmark(title(viewContainer), url(viewContainer), icon(viewContainer));
76 }
77 return bookmarks;
78 }
79
80 bool DolphinBookmarkHandler::enableOption(KBookmarkOwner::BookmarkOption option) const
81 {
82 switch (option) {
83 case BookmarkOption::ShowAddBookmark: return true;
84 case BookmarkOption::ShowEditBookmark: return true;
85 }
86 return false;
87 }
88
89 void DolphinBookmarkHandler::openBookmark(const KBookmark& bookmark, Qt::MouseButtons, Qt::KeyboardModifiers)
90 {
91 m_mainWindow->changeUrl(bookmark.url());
92 }
93
94 void DolphinBookmarkHandler::openFolderinTabs(const KBookmarkGroup& bookmarkGroup)
95 {
96 m_mainWindow->openDirectories(bookmarkGroup.groupUrlList(), false);
97 }
98
99 void DolphinBookmarkHandler::openInNewTab(const KBookmark& bookmark)
100 {
101 m_mainWindow->openNewTabAfterCurrentTab(bookmark.url());
102 }
103
104 void DolphinBookmarkHandler::openInNewWindow(const KBookmark& bookmark)
105 {
106 Dolphin::openNewWindow({bookmark.url()}, m_mainWindow);
107 }
108
109 QString DolphinBookmarkHandler::title(DolphinViewContainer* viewContainer)
110 {
111 return viewContainer->caption();
112 }
113
114 QUrl DolphinBookmarkHandler::url(DolphinViewContainer* viewContainer)
115 {
116 return viewContainer->url();
117 }
118
119 QString DolphinBookmarkHandler::icon(DolphinViewContainer* viewContainer)
120 {
121 return KIO::iconNameForUrl(viewContainer->url());
122 }