summaryrefslogtreecommitdiff
path: root/src/bookmarks
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks')
-rw-r--r--src/bookmarks/CMakeLists.txt3
-rw-r--r--src/bookmarks/bookmarksmenu.cpp148
-rw-r--r--src/bookmarks/bookmarksmenu.h64
-rw-r--r--src/bookmarks/bookmarksmenu.hpp41
4 files changed, 72 insertions, 184 deletions
diff --git a/src/bookmarks/CMakeLists.txt b/src/bookmarks/CMakeLists.txt
index 38a14204..2ff32c80 100644
--- a/src/bookmarks/CMakeLists.txt
+++ b/src/bookmarks/CMakeLists.txt
@@ -1,7 +1,6 @@
add_library(bookmarks STATIC
# bookmarkmanager.cpp bookmarkmanager.h
# bookmarkowner.cpp bookmarkowner.h
-# bookmarksmenu.cpp bookmarksmenu.h
# bookmarkstoolbar.cpp bookmarkstoolbar.h
# Bookmarks Model
bookmark.cpp bookmark.hpp
@@ -11,6 +10,8 @@ add_library(bookmarks STATIC
bookmarkstreeformat_xbel_read.cpp bookmarkstreeformat_xbel_write.cpp
# Bookmark Manager
bookmarkmanager.cpp bookmarkmanager.hpp
+ # UI
+ bookmarksmenu.cpp bookmarksmenu.hpp
)
target_include_directories(bookmarks PUBLIC ${CMAKE_SOURCE_DIR}/src)
target_link_libraries(bookmarks PUBLIC Qt6::Core Qt6::Widgets)
diff --git a/src/bookmarks/bookmarksmenu.cpp b/src/bookmarks/bookmarksmenu.cpp
index 445b81b7..761a0026 100644
--- a/src/bookmarks/bookmarksmenu.cpp
+++ b/src/bookmarks/bookmarksmenu.cpp
@@ -1,133 +1,43 @@
/* ============================================================
- *
- * This file is a part of the rekonq project
- *
+ * The rekonq project
+ * ============================================================
+ * SPDX-License-Identifier: GPL-2.0-or-later
* Copyright (C) 2008-2013 by Andrea Diamantini <adjam7 at gmail dot com>
* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-License-Identifier: GPL-3.0-only
+ * Copyright (C) 2022 aqua <aqua@iserlohn-fortress.net>
+ * ============================================================
+ * Description: rekonq bookmarks menu
* ============================================================ */
-// Self Includes
-#include "bookmarksmenu.h"
-#include "bookmarksmenu.moc"
+#include "bookmarksmenu.hpp"
+#include "bookmarkstreemodel.hpp"
-// Local Includes
-#include "bookmarkmanager.h"
-#include "bookmarkowner.h"
-#include "bookmarkscontextmenu.h"
-
-#include "iconmanager.h"
-#include "webwindow.h"
-
-// Qt Includes
-#include <QActionEvent>
-#include <QApplication>
-#include <QFrame>
-
-BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, KBookmarkOwner *owner, KMenu *menu,
- KActionCollection *actionCollection)
- : KBookmarkMenu(manager, owner, menu, actionCollection)
-{
-}
-
-BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, KBookmarkOwner *owner, KMenu *parentMenu,
- const QString &parentAddress)
- : KBookmarkMenu(manager, owner, parentMenu, parentAddress)
-{
-}
-
-BookmarkMenu::~BookmarkMenu()
-{
- kDebug() << "Deleting BookmarkMenu.. See http://svn.reviewboard.kde.org/r/5606/ about.";
-}
-
-KMenu *BookmarkMenu::contextMenu(QAction *act)
+BookmarksMenu::BookmarksMenu(QWidget *parent) : QMenu(parent)
{
- KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(act);
- if (!action) return 0;
- return new BookmarksContextMenu(action->bookmark(), manager(), static_cast<BookmarkOwner *>(owner()));
-}
-
-QAction *BookmarkMenu::actionForBookmark(const KBookmark &bookmark)
-{
- if (bookmark.isGroup()) {
- KBookmarkActionMenu *actionMenu = new KBookmarkActionMenu(bookmark, this);
- BookmarkMenu *menu = new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address());
- // An hack to get rid of bug 219274
- connect(actionMenu, SIGNAL(hovered()), menu, SLOT(slotAboutToShow()));
- return actionMenu;
- }
- else if (bookmark.isSeparator()) {
- return KBookmarkMenu::actionForBookmark(bookmark);
- }
- else {
- KBookmarkAction *action = new KBookmarkAction(bookmark, owner(), this);
- action->setIcon(IconManager::self()->iconForUrl(KUrl(bookmark.url())));
- return action;
- }
+ connect(this, &QMenu::aboutToShow, this, &BookmarksMenu::refill);
}
-void BookmarkMenu::refill()
+void BookmarksMenu::refill()
{
- clear();
-
- if (isRoot()) {
- addAddBookmark();
- addAddBookmarksList();
-
- if (parentMenu()->actions().count() > 0) parentMenu()->addSeparator();
-
- WebWindow *w = qobject_cast<WebWindow *>(parentMenu()->parent());
- QAction *a;
- // bk page
- a = w->actionByName(QL1S("open_bookmarks_page"));
- parentMenu()->addAction(a);
- a = w->actionByName(QL1S("show_bookmarks_toolbar"));
- parentMenu()->addAction(a);
-
- addEditBookmarks();
-
- if (parentMenu()->actions().count() > 0) parentMenu()->addSeparator();
- }
+ Q_CHECK_PTR(model);
- fillBookmarks();
-
- if (!isRoot()) {
- if (parentMenu()->actions().count() > 0) parentMenu()->addSeparator();
-
- addOpenFolderInTabs();
- addAddBookmarksList();
+ for (auto *a : actions) {
+ removeAction(a);
+ delete a;
}
-}
-
-void BookmarkMenu::addOpenFolderInTabs()
-{
- KBookmarkGroup group = manager()->findByAddress(parentAddress()).toGroup();
-
- if (!group.first().isNull()) {
- KBookmark bookmark = group.first();
-
- while (bookmark.isGroup() || bookmark.isSeparator()) { bookmark = group.next(bookmark); }
-
- if (!bookmark.isNull()) {
- parentMenu()->addAction(BookmarkManager::self()->owner()->createAction(group, BookmarkOwner::OPEN_FOLDER));
- }
+ actions.clear();
+
+ actions.append(addSeparator());
+
+ const auto *root = model->item();
+ Q_CHECK_PTR(root);
+ for (int i = 0; i < root->childCount(); ++i) {
+ const auto *child = root->child(i);
+ if (child->type() != BookmarksTreeItem::Bookmark) continue;
+ auto *action = addAction(child->data(BookmarksTreeItem::Title).toString(), this, [this, child]() {
+ emit loadUrl(child->data(BookmarksTreeItem::Href).toUrl(), rekonq::CurrentTab);
+ });
+ actions.append(action);
}
}
diff --git a/src/bookmarks/bookmarksmenu.h b/src/bookmarks/bookmarksmenu.h
deleted file mode 100644
index 2b690d91..00000000
--- a/src/bookmarks/bookmarksmenu.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ============================================================
-*
-* This file is a part of the rekonq project
-*
-* Copyright (C) 2008-2013 by Andrea Diamantini <adjam7 at gmail dot com>
-* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
-*
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License as
-* published by the Free Software Foundation; either version 2 of
-* the License or (at your option) version 3 or any later version
-* accepted by the membership of KDE e.V. (or its successor approved
-* by the membership of KDE e.V.), which shall act as a proxy
-* defined in Section 14 of version 3 of the license.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see <http://www.gnu.org/licenses/>.
-*
-* ============================================================ */
-
-
-#ifndef BOOKMARKS_MENU_H
-#define BOOKMARKS_MENU_H
-
-#include "rekonq.hpp"
-
-/**
- * This class represent the rekonq bookmarks menu.
- * It's just a simple class inherited from KBookmarkMenu
- *
- */
-class BookmarkMenu : public KBookmarkMenu
-{
- Q_OBJECT
-
-public:
- BookmarkMenu(KBookmarkManager* manager,
- KBookmarkOwner* owner,
- KMenu* menu,
- KActionCollection* actionCollection);
-
- BookmarkMenu(KBookmarkManager *manager,
- KBookmarkOwner *owner,
- KMenu *parentMenu,
- const QString &parentAddress);
-
- ~BookmarkMenu();
-
-protected:
- virtual KMenu * contextMenu(QAction * act);
- virtual void refill();
- virtual QAction* actionForBookmark(const KBookmark &bookmark);
-
-private:
- void addOpenFolderInTabs();
-};
-
-#endif // BOOKMARKS_MENU_H
diff --git a/src/bookmarks/bookmarksmenu.hpp b/src/bookmarks/bookmarksmenu.hpp
new file mode 100644
index 00000000..6199708f
--- /dev/null
+++ b/src/bookmarks/bookmarksmenu.hpp
@@ -0,0 +1,41 @@
+/* ============================================================
+ * The rekonq project
+ * ============================================================
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright (C) 2008-2013 by Andrea Diamantini <adjam7 at gmail dot com>
+ * Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
+ * SPDX-License-Identifier: GPL-3.0-only
+ * Copyright (C) 2022 aqua <aqua@iserlohn-fortress.net>
+ * ============================================================
+ * Description: rekonq bookmarks menu
+ * ============================================================ */
+
+#pragma once
+
+#include "rekonq.hpp"
+#include <QMenu>
+
+class BookmarkModel;
+class BookmarksMenu : public QMenu {
+ Q_OBJECT
+
+public:
+ explicit BookmarksMenu(QWidget *parent = nullptr);
+ ~BookmarksMenu() override = default;
+
+ void setModel(const BookmarkModel *ptr)
+ {
+ Q_CHECK_PTR(ptr);
+ model = ptr;
+ }
+
+signals:
+ void loadUrl(const QUrl &url, rekonq::OpenType type);
+
+private slots:
+ void refill();
+
+private:
+ const BookmarkModel *model = nullptr;
+ QList<QAction *> actions;
+};