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