File indexing completed on 2024-05-19 03:55:15
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 #include "keditbookmarks_p.h" 0014 0015 #include <QApplication> 0016 #include <QClipboard> 0017 #include <QMessageBox> 0018 #include <QMimeData> 0019 0020 KBookmarkContextMenu::KBookmarkContextMenu(const KBookmark &bk, KBookmarkManager *manager, KBookmarkOwner *owner, QWidget *parent) 0021 : QMenu(parent) 0022 , bm(bk) 0023 , m_pManager(manager) 0024 , m_pOwner(owner) 0025 { 0026 connect(this, &QMenu::aboutToShow, this, &KBookmarkContextMenu::slotAboutToShow); 0027 } 0028 0029 void KBookmarkContextMenu::slotAboutToShow() 0030 { 0031 addActions(); 0032 } 0033 0034 void KBookmarkContextMenu::addActions() 0035 { 0036 if (bm.isGroup()) { 0037 addOpenFolderInTabs(); 0038 addBookmark(); 0039 addFolderActions(); 0040 } else { 0041 addBookmark(); 0042 addBookmarkActions(); 0043 } 0044 } 0045 0046 KBookmarkContextMenu::~KBookmarkContextMenu() 0047 { 0048 } 0049 0050 void KBookmarkContextMenu::addBookmark() 0051 { 0052 if (m_pOwner && m_pOwner->enableOption(KBookmarkOwner::ShowAddBookmark)) { 0053 addAction(QIcon::fromTheme(QStringLiteral("bookmark-new")), tr("Add Bookmark Here", "@action:inmenu"), this, &KBookmarkContextMenu::slotInsert); 0054 } 0055 } 0056 0057 void KBookmarkContextMenu::addFolderActions() 0058 { 0059 addAction(tr("Open Folder in Bookmark Editor", "@action:inmenu"), this, &KBookmarkContextMenu::slotEditAt); 0060 addProperties(); 0061 addSeparator(); 0062 addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete Folder", "@action:inmenu"), this, &KBookmarkContextMenu::slotRemove); 0063 } 0064 0065 void KBookmarkContextMenu::addProperties() 0066 { 0067 addAction(tr("Properties", "@action:inmenu"), this, &KBookmarkContextMenu::slotProperties); 0068 } 0069 0070 void KBookmarkContextMenu::addBookmarkActions() 0071 { 0072 addAction(tr("Copy Link Address", "@action:inmenu"), this, &KBookmarkContextMenu::slotCopyLocation); 0073 addProperties(); 0074 addSeparator(); 0075 addAction(QIcon::fromTheme(QStringLiteral("edit-delete")), tr("Delete Bookmark", "@action:inmenu"), this, &KBookmarkContextMenu::slotRemove); 0076 } 0077 0078 void KBookmarkContextMenu::addOpenFolderInTabs() 0079 { 0080 if (m_pOwner->supportsTabs()) { 0081 addAction(QIcon::fromTheme(QStringLiteral("tab-new")), tr("Open Folder in Tabs", "@action:inmenu"), this, &KBookmarkContextMenu::slotOpenFolderInTabs); 0082 } 0083 } 0084 0085 void KBookmarkContextMenu::slotEditAt() 0086 { 0087 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotEditAt" << m_highlightedAddress; 0088 KEditBookmarks editBookmarks; 0089 editBookmarks.setBrowserMode(m_browserMode); 0090 auto result = editBookmarks.openForFileAtAddress(m_pManager->path(), bm.address()); 0091 0092 if (!result.sucess()) { 0093 QMessageBox::critical(QApplication::activeWindow(), QApplication::applicationDisplayName(), result.errorMessage()); 0094 } 0095 } 0096 0097 void KBookmarkContextMenu::slotProperties() 0098 { 0099 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotProperties" << m_highlightedAddress; 0100 0101 KBookmarkDialog *dlg = new KBookmarkDialog(m_pManager, QApplication::activeWindow()); 0102 dlg->editBookmark(bm); 0103 delete dlg; 0104 } 0105 0106 void KBookmarkContextMenu::slotInsert() 0107 { 0108 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotInsert" << m_highlightedAddress; 0109 0110 QUrl url = m_pOwner->currentUrl(); 0111 if (url.isEmpty()) { 0112 QMessageBox::critical(QApplication::activeWindow(), QApplication::applicationName(), tr("Cannot add bookmark with empty URL.", "@info")); 0113 return; 0114 } 0115 QString title = m_pOwner->currentTitle(); 0116 if (title.isEmpty()) { 0117 title = url.toDisplayString(); 0118 } 0119 0120 if (bm.isGroup()) { 0121 KBookmarkGroup parentBookmark = bm.toGroup(); 0122 Q_ASSERT(!parentBookmark.isNull()); 0123 parentBookmark.addBookmark(title, url, m_pOwner->currentIcon()); 0124 m_pManager->emitChanged(parentBookmark); 0125 } else { 0126 KBookmarkGroup parentBookmark = bm.parentGroup(); 0127 Q_ASSERT(!parentBookmark.isNull()); 0128 KBookmark newBookmark = parentBookmark.addBookmark(title, m_pOwner->currentUrl(), m_pOwner->currentIcon()); 0129 parentBookmark.moveBookmark(newBookmark, parentBookmark.previous(bm)); 0130 m_pManager->emitChanged(parentBookmark); 0131 } 0132 } 0133 0134 void KBookmarkContextMenu::slotRemove() 0135 { 0136 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotRemove" << m_highlightedAddress; 0137 0138 bool folder = bm.isGroup(); 0139 0140 if (QMessageBox::warning(QApplication::activeWindow(), 0141 folder ? tr("Bookmark Folder Deletion", "@title:window") : tr("Bookmark Deletion", "@title:window"), 0142 folder ? tr("Are you sure you wish to remove the bookmark folder\n\"%1\"?").arg(bm.text()) 0143 : tr("Are you sure you wish to remove the bookmark\n\"%1\"?").arg(bm.text()), 0144 QMessageBox::Yes | QMessageBox::Cancel) 0145 != QMessageBox::Yes) { 0146 return; 0147 } 0148 0149 KBookmarkGroup parentBookmark = bm.parentGroup(); 0150 parentBookmark.deleteBookmark(bm); 0151 m_pManager->emitChanged(parentBookmark); 0152 } 0153 0154 void KBookmarkContextMenu::slotCopyLocation() 0155 { 0156 // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::slotCopyLocation" << m_highlightedAddress; 0157 0158 if (!bm.isGroup()) { 0159 QMimeData *mimeData = new QMimeData; 0160 bm.populateMimeData(mimeData); 0161 QApplication::clipboard()->setMimeData(mimeData, QClipboard::Selection); 0162 mimeData = new QMimeData; 0163 bm.populateMimeData(mimeData); 0164 QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); 0165 } 0166 } 0167 0168 void KBookmarkContextMenu::slotOpenFolderInTabs() 0169 { 0170 owner()->openFolderinTabs(bookmark().toGroup()); 0171 } 0172 0173 KBookmarkManager *KBookmarkContextMenu::manager() const 0174 { 0175 return m_pManager; 0176 } 0177 0178 KBookmarkOwner *KBookmarkContextMenu::owner() const 0179 { 0180 return m_pOwner; 0181 } 0182 0183 KBookmark KBookmarkContextMenu::bookmark() const 0184 { 0185 return bm; 0186 } 0187 0188 void KBookmarkContextMenu::setBrowserMode(bool browserMode) 0189 { 0190 m_browserMode = browserMode; 0191 } 0192 0193 bool KBookmarkContextMenu::browserMode() const 0194 { 0195 return m_browserMode; 0196 } 0197 0198 #include "moc_kbookmarkcontextmenu.cpp"