File indexing completed on 2024-12-01 12:30:21
0001 /* 0002 This file is part of the KDE project 0003 SPDX-FileCopyrightText: 1998, 1999 Torben Weis <weis@kde.org> 0004 SPDX-FileCopyrightText: 2006 Daniel Teske <teske@squorn.de> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include "kbookmarkcontextmenu.h" 0010 #include "kbookmarkdialog.h" 0011 #include "kbookmarkmanager.h" 0012 #include "kbookmarkowner.h" 0013 0014 #include <QApplication> 0015 #include <QClipboard> 0016 #include <QMessageBox> 0017 #include <QMimeData> 0018 0019 KBookmarkContextMenu::KBookmarkContextMenu(const KBookmark &bk, KBookmarkManager *manager, KBookmarkOwner *owner, QWidget *parent) 0020 : QMenu(parent) 0021 , bm(bk) 0022 , m_pManager(manager) 0023 , m_pOwner(owner) 0024 { 0025 connect(this, &QMenu::aboutToShow, this, &KBookmarkContextMenu::slotAboutToShow); 0026 } 0027 0028 void KBookmarkContextMenu::slotAboutToShow() 0029 { 0030 addActions(); 0031 } 0032 0033 void KBookmarkContextMenu::addActions() 0034 { 0035 if (bm.isGroup()) { 0036 addOpenFolderInTabs(); 0037 addBookmark(); 0038 addFolderActions(); 0039 } else { 0040 addBookmark(); 0041 addBookmarkActions(); 0042 } 0043 } 0044 0045 KBookmarkContextMenu::~KBookmarkContextMenu() 0046 { 0047 } 0048 0049 void KBookmarkContextMenu::addBookmark() 0050 { 0051 if (m_pOwner && m_pOwner->enableOption(KBookmarkOwner::ShowAddBookmark)) { 0052 addAction(QIcon::fromTheme(QStringLiteral("bookmark-new")), tr("Add Bookmark Here", "@action:inmenu"), this, &KBookmarkContextMenu::slotInsert); 0053 } 0054 } 0055 0056 void KBookmarkContextMenu::addFolderActions() 0057 { 0058 addAction(tr("Open Folder in Bookmark Editor", "@action:inmenu"), this, &KBookmarkContextMenu::slotEditAt); 0059 addProperties(); 0060 addSeparator(); 0061 addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete Folder", "@action:inmenu"), this, &KBookmarkContextMenu::slotRemove); 0062 } 0063 0064 void KBookmarkContextMenu::addProperties() 0065 { 0066 addAction(tr("Properties", "@action:inmenu"), this, &KBookmarkContextMenu::slotProperties); 0067 } 0068 0069 void KBookmarkContextMenu::addBookmarkActions() 0070 { 0071 addAction(tr("Copy Link Address", "@action:inmenu"), this, &KBookmarkContextMenu::slotCopyLocation); 0072 addProperties(); 0073 addSeparator(); 0074 addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete Bookmark", "@action:inmenu"), this, &KBookmarkContextMenu::slotRemove); 0075 } 0076 0077 void KBookmarkContextMenu::addOpenFolderInTabs() 0078 { 0079 if (m_pOwner->supportsTabs()) { 0080 addAction(QIcon::fromTheme(QStringLiteral("tab-new")), tr("Open Folder in Tabs", "@action:inmenu"), this, &KBookmarkContextMenu::slotOpenFolderInTabs); 0081 } 0082 } 0083 0084 void KBookmarkContextMenu::slotEditAt() 0085 { 0086 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotEditAt" << m_highlightedAddress; 0087 m_pManager->slotEditBookmarksAtAddress(bm.address()); 0088 } 0089 0090 void KBookmarkContextMenu::slotProperties() 0091 { 0092 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotProperties" << m_highlightedAddress; 0093 0094 KBookmarkDialog *dlg = m_pOwner->bookmarkDialog(m_pManager, QApplication::activeWindow()); 0095 dlg->editBookmark(bm); 0096 delete dlg; 0097 } 0098 0099 void KBookmarkContextMenu::slotInsert() 0100 { 0101 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotInsert" << m_highlightedAddress; 0102 0103 QUrl url = m_pOwner->currentUrl(); 0104 if (url.isEmpty()) { 0105 QMessageBox::critical(QApplication::activeWindow(), QApplication::applicationName(), tr("Cannot add bookmark with empty URL.", "@info")); 0106 return; 0107 } 0108 QString title = m_pOwner->currentTitle(); 0109 if (title.isEmpty()) { 0110 title = url.toDisplayString(); 0111 } 0112 0113 if (bm.isGroup()) { 0114 KBookmarkGroup parentBookmark = bm.toGroup(); 0115 Q_ASSERT(!parentBookmark.isNull()); 0116 parentBookmark.addBookmark(title, url, m_pOwner->currentIcon()); 0117 m_pManager->emitChanged(parentBookmark); 0118 } else { 0119 KBookmarkGroup parentBookmark = bm.parentGroup(); 0120 Q_ASSERT(!parentBookmark.isNull()); 0121 KBookmark newBookmark = parentBookmark.addBookmark(title, m_pOwner->currentUrl(), m_pOwner->currentIcon()); 0122 parentBookmark.moveBookmark(newBookmark, parentBookmark.previous(bm)); 0123 m_pManager->emitChanged(parentBookmark); 0124 } 0125 } 0126 0127 void KBookmarkContextMenu::slotRemove() 0128 { 0129 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotRemove" << m_highlightedAddress; 0130 0131 bool folder = bm.isGroup(); 0132 0133 if (QMessageBox::warning(QApplication::activeWindow(), 0134 folder ? tr("Bookmark Folder Deletion", "@title:window") : tr("Bookmark Deletion", "@title:window"), 0135 folder ? tr("Are you sure you wish to remove the bookmark folder\n\"%1\"?").arg(bm.text()) 0136 : tr("Are you sure you wish to remove the bookmark\n\"%1\"?").arg(bm.text()), 0137 QMessageBox::Yes | QMessageBox::Cancel) 0138 != QMessageBox::Yes) { 0139 return; 0140 } 0141 0142 KBookmarkGroup parentBookmark = bm.parentGroup(); 0143 parentBookmark.deleteBookmark(bm); 0144 m_pManager->emitChanged(parentBookmark); 0145 } 0146 0147 void KBookmarkContextMenu::slotCopyLocation() 0148 { 0149 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotCopyLocation" << m_highlightedAddress; 0150 0151 if (!bm.isGroup()) { 0152 QMimeData *mimeData = new QMimeData; 0153 bm.populateMimeData(mimeData); 0154 QApplication::clipboard()->setMimeData(mimeData, QClipboard::Selection); 0155 mimeData = new QMimeData; 0156 bm.populateMimeData(mimeData); 0157 QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); 0158 } 0159 } 0160 0161 void KBookmarkContextMenu::slotOpenFolderInTabs() 0162 { 0163 owner()->openFolderinTabs(bookmark().toGroup()); 0164 } 0165 0166 KBookmarkManager *KBookmarkContextMenu::manager() const 0167 { 0168 return m_pManager; 0169 } 0170 0171 KBookmarkOwner *KBookmarkContextMenu::owner() const 0172 { 0173 return m_pOwner; 0174 } 0175 0176 KBookmark KBookmarkContextMenu::bookmark() const 0177 { 0178 return bm; 0179 } 0180 0181 #include "moc_kbookmarkcontextmenu.cpp"