File indexing completed on 2024-04-21 04:58:13

0001 /* This file is part of the KDE project
0002 SPDX-FileCopyrightText: 1998, 1999 Torben Weis <weis@kde.org>
0003 SPDX-FileCopyrightText: 2006 Daniel Teske <teske@squorn.de>
0004 
0005 SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "konqbookmarkmenu.h"
0009 #include "kbookmarkowner.h"
0010 #include "kbookmarkaction.h"
0011 
0012 #include <QMenu>
0013 #include <QFile>
0014 
0015 #include <kconfig.h>
0016 #include <ksharedconfig.h>
0017 #include <kconfiggroup.h>
0018 #include <kactioncollection.h>
0019 #include <kstringhandler.h>
0020 
0021 #include "kbookmarkmanager.h"
0022 #include "konqpixmapprovider.h"
0023 #include "libkonq_utils.h"
0024 
0025 using namespace Konqueror;
0026 
0027 KonqBookmarkContextMenu::KonqBookmarkContextMenu(const KBookmark &bm, KBookmarkManager *mgr, KBookmarkOwner *owner)
0028 : KBookmarkContextMenu(bm, mgr, owner)
0029 {
0030 }
0031 
0032 KonqBookmarkContextMenu::~KonqBookmarkContextMenu()
0033 {
0034 }
0035 
0036 void KonqBookmarkContextMenu::addActions()
0037 {
0038 KConfigGroup config = KSharedConfig::openConfig(QStringLiteral("kbookmarkrc"), KConfig::NoGlobals)->group("Bookmarks");
0039 bool filteredToolbar = config.readEntry("FilteredToolbar", false);
0040 
0041 if (bookmark().isGroup()) {
0042     addOpenFolderInTabs();
0043     addBookmark();
0044 
0045     if (filteredToolbar) {
0046         QString text = bookmark().showInToolbar() ? tr("Hide in toolbar") : tr("Show in toolbar");
0047         addAction(text, this, &KonqBookmarkContextMenu::toggleShowInToolbar);
0048     }
0049 
0050     addFolderActions();
0051 } else {
0052     if (owner()) {
0053         addAction(QIcon::fromTheme(QStringLiteral("window-new")), tr("Open in New Window"), this, &KonqBookmarkContextMenu::openInNewWindow);
0054         addAction(QIcon::fromTheme(QStringLiteral("tab-new")), tr("Open in New Tab"), this, &KonqBookmarkContextMenu::openInNewTab);
0055     }
0056     addBookmark();
0057 
0058     if (filteredToolbar) {
0059         QString text = bookmark().showInToolbar() ? tr("Hide in toolbar") : tr("Show in toolbar");
0060         addAction(text, this, &KonqBookmarkContextMenu::toggleShowInToolbar);
0061     }
0062 
0063     addBookmarkActions();
0064 }
0065 }
0066 
0067 void KonqBookmarkContextMenu::toggleShowInToolbar()
0068 {
0069 bookmark().setShowInToolbar(!bookmark().showInToolbar());
0070 manager()->emitChanged(bookmark().parentGroup());
0071 }
0072 
0073 void KonqBookmarkContextMenu::openInNewTab()
0074 {
0075 owner()->openInNewTab(bookmark());
0076 }
0077 
0078 void KonqBookmarkContextMenu::openInNewWindow()
0079 {
0080 owner()->openInNewWindow(bookmark());
0081 }
0082 
0083 /******************************/
0084 /******************************/
0085 /******************************/
0086 
0087 void KonqBookmarkMenu::refill()
0088 {
0089     if (isRoot()) {
0090         addActions();
0091     }
0092     fillBookmarks();
0093     if (!isRoot()) {
0094         addActions();
0095     }
0096 }
0097 
0098 QAction *KonqBookmarkMenu::actionForBookmark(const KBookmark &_bm)
0099 {
0100     //We need a non-const copy of it
0101     KBookmark bm(_bm);
0102     if (bm.isGroup()) {
0103         // qCDebug(KBOOKMARKS_LOG) << "Creating Konq bookmark submenu named " << bm.text();
0104         KBookmarkActionMenu *actionMenu = new KBookmarkActionMenu(bm, this);
0105         m_actionCollection->addAction(QStringLiteral("kbookmarkmenu"), actionMenu);
0106         m_actions.append(actionMenu);
0107 
0108         KBookmarkMenu *subMenu = new KonqBookmarkMenu(manager(), owner(), actionMenu, bm.address(), m_actionCollection);
0109 
0110         m_lstSubMenus.append(subMenu);
0111         return actionMenu;
0112     } else if (bm.isSeparator()) {
0113         return KBookmarkMenu::actionForBookmark(bm);
0114     } else {
0115         // qCDebug(KBOOKMARKS_LOG) << "Creating Konq bookmark action named " << bm.text();
0116         QUrl host = bm.url().adjusted(QUrl::RemovePath | QUrl::RemoveQuery);
0117             bm.setIcon(KonqPixmapProvider::self()->iconNameFor(host));
0118         KBookmarkAction *action = new KBookmarkAction(bm, owner(), this);
0119             connect(KonqPixmapProvider::self(), &KonqPixmapProvider::changed, action, [host, action]() {
0120                 action->setIcon(KonqPixmapProvider::self()->iconForUrl(host));
0121             });
0122         KonqPixmapProvider::self()->downloadHostIcon(host);
0123         m_actionCollection->addAction(action->objectName(), action);
0124         m_actions.append(action);
0125         return action;
0126     }
0127 }
0128 
0129 QMenu *KonqBookmarkMenu::contextMenu(QAction *action)
0130 {
0131     KBookmarkActionInterface *act = dynamic_cast<KBookmarkActionInterface *>(action);
0132     if (!act) {
0133         return nullptr;
0134     }
0135     return new KonqBookmarkContextMenu(act->bookmark(), manager(), owner());
0136 }
0137 
0138 #include "moc_konqbookmarkmenu.cpp"