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"