Falkon Develop
Cross-platform Qt-based web browser
bookmarksmenu.cpp
Go to the documentation of this file.
1/* ============================================================
2* Falkon - Qt web browser
3* Copyright (C) 2014 David Rosca <nowrep@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
18#include "bookmarksmenu.h"
19#include "bookmarkstools.h"
20#include "bookmarkitem.h"
21#include "bookmarks.h"
22#include "mainapplication.h"
23#include "browsinglibrary.h"
24#include "browserwindow.h"
25#include "qzsettings.h"
26#include "tabwidget.h"
27#include "iconprovider.h"
28
30 : Menu(parent)
31 , m_window(nullptr)
32 , m_changed(true)
33{
34 init();
35
36 connect(mApp->bookmarks(), &Bookmarks::bookmarkAdded, this, &BookmarksMenu::bookmarksChanged);
37 connect(mApp->bookmarks(), &Bookmarks::bookmarkRemoved, this, &BookmarksMenu::bookmarksChanged);
38 connect(mApp->bookmarks(), &Bookmarks::bookmarkChanged, this, &BookmarksMenu::bookmarksChanged);
39}
40
42{
43 Q_ASSERT(window);
44
45 m_window = window;
46}
47
48void BookmarksMenu::bookmarkPage()
49{
50 if (m_window) {
51 m_window->bookmarkPage();
52 }
53}
54
55void BookmarksMenu::bookmarkAllTabs()
56{
57 if (m_window) {
58 BookmarksTools::bookmarkAllTabsDialog(m_window, m_window->tabWidget());
59 }
60}
61
62void BookmarksMenu::showBookmarksManager()
63{
64 if (m_window) {
65 mApp->browsingLibrary()->showBookmarks(m_window);
66 }
67}
68
69void BookmarksMenu::bookmarksChanged()
70{
71 m_changed = true;
72}
73
74void BookmarksMenu::aboutToShow()
75{
76 if (m_changed) {
77 refresh();
78 m_changed = false;
79 }
80}
81
82void BookmarksMenu::menuAboutToShow()
83{
84 Q_ASSERT(qobject_cast<Menu*>(sender()));
85 Menu *menu = static_cast<Menu*>(sender());
86
87 const auto menuActions = menu->actions();
88 for (QAction *action : menuActions) {
89 BookmarkItem *item = static_cast<BookmarkItem*>(action->data().value<void*>());
90 if (item && item->type() == BookmarkItem::Url && action->icon().isNull()) {
91 action->setIcon(item->icon());
92 }
93 }
94}
95
96void BookmarksMenu::menuMiddleClicked(Menu* menu)
97{
98 BookmarkItem* item = static_cast<BookmarkItem*>(menu->menuAction()->data().value<void*>());
99 Q_ASSERT(item);
100 openFolder(item);
101}
102
103void BookmarksMenu::bookmarkActivated()
104{
105 if (auto* action = qobject_cast<QAction*>(sender())) {
106 BookmarkItem* item = static_cast<BookmarkItem*>(action->data().value<void*>());
107 Q_ASSERT(item);
108 openBookmark(item);
109 }
110}
111
112void BookmarksMenu::bookmarkCtrlActivated()
113{
114 if (auto* action = qobject_cast<QAction*>(sender())) {
115 BookmarkItem* item = static_cast<BookmarkItem*>(action->data().value<void*>());
116 Q_ASSERT(item);
117 openBookmarkInNewTab(item);
118 }
119}
120
121void BookmarksMenu::bookmarkShiftActivated()
122{
123 if (auto* action = qobject_cast<QAction*>(sender())) {
124 BookmarkItem* item = static_cast<BookmarkItem*>(action->data().value<void*>());
125 Q_ASSERT(item);
126 openBookmarkInNewWindow(item);
127 }
128}
129
130void BookmarksMenu::openFolder(BookmarkItem* item)
131{
132 Q_ASSERT(item->isFolder());
133
134 if (m_window) {
135 BookmarksTools::openFolderInTabs(m_window, item);
136 }
137}
138
139void BookmarksMenu::openBookmark(BookmarkItem* item)
140{
141 Q_ASSERT(item->isUrl());
142
143 if (m_window) {
144 BookmarksTools::openBookmark(m_window, item);
145 }
146}
147
148void BookmarksMenu::openBookmarkInNewTab(BookmarkItem* item)
149{
150 Q_ASSERT(item->isUrl());
151
152 if (m_window) {
154 }
155}
156
157void BookmarksMenu::openBookmarkInNewWindow(BookmarkItem* item)
158{
159 Q_ASSERT(item->isUrl());
160
162}
163
164void BookmarksMenu::init()
165{
166 setTitle(tr("&Bookmarks"));
167
168 addAction(tr("Bookmark &This Page"), this, &BookmarksMenu::bookmarkPage)->setShortcut(QKeySequence(QSL("Ctrl+D")));
169 addAction(tr("Bookmark &All Tabs"), this, &BookmarksMenu::bookmarkAllTabs);
170 addAction(QIcon::fromTheme(QSL("bookmarks-organize")), tr("Organize &Bookmarks"), this, &BookmarksMenu::showBookmarksManager)->setShortcut(QKeySequence(QSL("Ctrl+Shift+O")));
171 addSeparator();
172
173 connect(this, SIGNAL(aboutToShow()), this, SLOT(aboutToShow()));
174 connect(this, SIGNAL(aboutToShow()), this, SLOT(menuAboutToShow()));
175 connect(this, SIGNAL(menuMiddleClicked(Menu*)), this, SLOT(menuMiddleClicked(Menu*)));
176}
177
178void BookmarksMenu::refresh()
179{
180 while (actions().count() != 4) {
181 QAction* act = actions().at(4);
182 if (act->menu()) {
183 act->menu()->clear();
184 }
185 removeAction(act);
186 delete act;
187 }
188
189 BookmarksTools::addActionToMenu(this, this, mApp->bookmarks()->toolbarFolder());
190 addSeparator();
191
192 const auto children = mApp->bookmarks()->menuFolder()->children();
193 for (BookmarkItem* child : children) {
194 BookmarksTools::addActionToMenu(this, this, child);
195 }
196
197 addSeparator();
198 BookmarksTools::addActionToMenu(this, this, mApp->bookmarks()->unsortedFolder());
199}
bool isFolder() const
void setIcon(const QIcon &icon)
bool isUrl() const
Type type() const
void bookmarkRemoved(BookmarkItem *item)
void bookmarkAdded(BookmarkItem *item)
void bookmarkChanged(BookmarkItem *item)
BookmarksMenu(QWidget *parent=nullptr)
void setMainWindow(BrowserWindow *window)
static bool bookmarkAllTabsDialog(QWidget *parent, TabWidget *tabWidget, BookmarkItem *folder=nullptr)
static void openBookmarkInNewTab(BrowserWindow *window, BookmarkItem *item)
static void openBookmark(BrowserWindow *window, BookmarkItem *item)
static void openFolderInTabs(BrowserWindow *window, BookmarkItem *folder)
static void openBookmarkInNewWindow(BookmarkItem *item)
static void addActionToMenu(QObject *receiver, Menu *menu, BookmarkItem *item)
#define mApp
#define QSL(x)
Definition: qzcommon.h:40