File indexing completed on 2024-04-28 04:58:24
0001 /* 0002 SPDX-FileCopyrightText: 2019 Raphael Rosch <kde-dev@insaner.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 0008 #include "bookmarks_module.h" 0009 #include <konq_events.h> 0010 0011 #include <KParts/PartActivateEvent> 0012 #include <KLocalizedString> 0013 #include <KPluginFactory> 0014 #include <QAction> 0015 #include <QIcon> 0016 #include <QStandardItemModel> 0017 #include <QTreeView> 0018 0019 0020 KonqSideBarBookmarksModule::KonqSideBarBookmarksModule(QWidget *parent, 0021 const KConfigGroup &configGroup) 0022 : KonqSidebarModule(parent, configGroup) 0023 { 0024 treeView = new QTreeView(parent); 0025 treeView->setHeaderHidden(true); 0026 model = new QStandardItemModel(this); 0027 0028 QStandardItem* item = new QStandardItem(QIcon::fromTheme(configGroup.readEntry("Icon", QString())), configGroup.readEntry("Name", QString())); 0029 m_initURL = QUrl(configGroup.readPathEntry("URL", QString())); 0030 item->setData(m_initURL); 0031 item->setEditable(false); 0032 0033 model->appendRow(item); 0034 treeView->setModel(model); 0035 0036 QItemSelectionModel *selectionModel = treeView->selectionModel(); 0037 connect(selectionModel, &QItemSelectionModel::selectionChanged, 0038 this, &KonqSideBarBookmarksModule::slotSelectionChanged); 0039 } 0040 0041 KonqSideBarBookmarksModule::~KonqSideBarBookmarksModule() 0042 { 0043 } 0044 0045 QWidget *KonqSideBarBookmarksModule::getWidget() 0046 { 0047 return treeView; 0048 } 0049 0050 void KonqSideBarBookmarksModule::slotSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) 0051 { 0052 QModelIndex index = treeView->selectionModel()->currentIndex(); 0053 QUrl urlFromIndex = model->itemFromIndex(index)->data().toUrl(); 0054 0055 if (urlFromIndex != m_lastURL && urlFromIndex == m_initURL) { 0056 emit openUrlRequest(m_initURL); 0057 } 0058 m_lastURL = urlFromIndex; 0059 } 0060 0061 void KonqSideBarBookmarksModule::customEvent(QEvent *ev) // active view has changed 0062 { 0063 if (KParts::PartActivateEvent::test(ev)) { 0064 KParts::ReadOnlyPart* rpart = static_cast<KParts::ReadOnlyPart *>( static_cast<KParts::PartActivateEvent *>(ev)->part() ); 0065 if (!rpart->url().isEmpty()) { 0066 handleURL(rpart->url()); 0067 } 0068 } 0069 } 0070 0071 void KonqSideBarBookmarksModule::handleURL(const QUrl &thisURL) 0072 { 0073 if (thisURL != m_lastURL) { 0074 if (thisURL == m_initURL) { 0075 treeView->setCurrentIndex(model->index(0, 0)); 0076 } else { 0077 treeView->selectionModel()->clearSelection(); 0078 } 0079 m_lastURL = thisURL; 0080 } 0081 } 0082 0083 0084 0085 class KonqSidebarBookmarksPlugin : public KonqSidebarPlugin 0086 { 0087 public: 0088 KonqSidebarBookmarksPlugin(QObject *parent, const QVariantList &args) 0089 : KonqSidebarPlugin(parent, args) {} 0090 ~KonqSidebarBookmarksPlugin() override {} 0091 0092 KonqSidebarModule *createModule(QWidget *parent, 0093 const KConfigGroup &configGroup, 0094 const QString &desktopname, 0095 const QVariant &unused) override 0096 { 0097 Q_UNUSED(desktopname); 0098 Q_UNUSED(unused); 0099 0100 return new KonqSideBarBookmarksModule(parent, configGroup); 0101 } 0102 0103 QList<QAction *> addNewActions(QObject *parent, 0104 const QList<KConfigGroup> &existingModules, 0105 const QVariant &unused) override 0106 { 0107 Q_UNUSED(existingModules); 0108 Q_UNUSED(unused); 0109 QAction *action = new QAction(parent); 0110 action->setText(i18nc("@action:inmenu Add", "Bookmarks Sidebar Module")); 0111 action->setIcon(QIcon::fromTheme("bookmarks")); 0112 return QList<QAction *>() << action; 0113 } 0114 0115 QString templateNameForNewModule(const QVariant &actionData, 0116 const QVariant &unused) const override 0117 { 0118 Q_UNUSED(actionData); 0119 Q_UNUSED(unused); 0120 return QString::fromLatin1("treesidebarplugin%1.desktop"); 0121 } 0122 0123 bool createNewModule(const QVariant &actionData, 0124 KConfigGroup &configGroup, 0125 QWidget *parentWidget, 0126 const QVariant &unused) override 0127 { 0128 Q_UNUSED(actionData); 0129 Q_UNUSED(parentWidget); 0130 Q_UNUSED(unused); 0131 configGroup.writeEntry("Type", "Link"); 0132 configGroup.writeEntry("Icon", "bookmarks"); 0133 configGroup.writeEntry("Name", i18nc("@title:tab", "Bookmarks")); 0134 configGroup.writeEntry("X-KDE-KonqSidebarModule", "konqsidebar_bookmarks"); 0135 return true; 0136 } 0137 }; 0138 0139 K_PLUGIN_FACTORY_WITH_JSON(KonqSidebarBookmarksPluginFactory, "konqsidebar_bookmarks.json", registerPlugin<KonqSidebarBookmarksPlugin>();) 0140 0141 #include "bookmarks_module.moc" 0142