File indexing completed on 2025-03-09 04:54:44

0001 /*
0002    SPDX-FileCopyrightText: 2015-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "viewerplugintoolmanager.h"
0008 #include "viewerplugin.h"
0009 #include "viewerpluginmanager.h"
0010 
0011 #include <QList>
0012 
0013 using namespace MessageViewer;
0014 
0015 class MessageViewer::ViewerPluginToolManagerPrivate
0016 {
0017 public:
0018     ViewerPluginToolManagerPrivate(ViewerPluginToolManager *qq, QWidget *parentWidget)
0019         : mParentWidget(parentWidget)
0020         , q(qq)
0021     {
0022     }
0023 
0024     void setPluginName(const QString &pluginName);
0025     [[nodiscard]] QString pluginDirectory() const;
0026     [[nodiscard]] QString pluginName() const;
0027     void createView();
0028     void refreshActionList();
0029     void closeAllTools();
0030     void setActionCollection(KActionCollection *ac);
0031     void updateActions(const Akonadi::Item &messageItem);
0032     [[nodiscard]] QList<QAction *> actionList(ViewerPluginInterface::SpecificFeatureTypes features) const;
0033     QList<MessageViewer::ViewerPluginInterface *> mListInterface;
0034     KActionCollection *mActionCollection = nullptr;
0035     QWidget *mParentWidget = nullptr;
0036     ViewerPluginToolManager *const q;
0037     void setPluginDirectory(const QString &directory);
0038 };
0039 
0040 void ViewerPluginToolManagerPrivate::setPluginDirectory(const QString &directory)
0041 {
0042     MessageViewer::ViewerPluginManager::self()->setPluginDirectory(directory);
0043 }
0044 
0045 QString ViewerPluginToolManagerPrivate::pluginDirectory() const
0046 {
0047     return MessageViewer::ViewerPluginManager::self()->pluginDirectory();
0048 }
0049 
0050 void ViewerPluginToolManagerPrivate::setPluginName(const QString &pluginName)
0051 {
0052     MessageViewer::ViewerPluginManager::self()->setPluginName(pluginName);
0053 }
0054 
0055 QString ViewerPluginToolManagerPrivate::pluginName() const
0056 {
0057     return MessageViewer::ViewerPluginManager::self()->pluginName();
0058 }
0059 
0060 void ViewerPluginToolManagerPrivate::refreshActionList()
0061 {
0062     for (MessageViewer::ViewerPluginInterface *interface : std::as_const(mListInterface)) {
0063         interface->refreshActionList(mActionCollection);
0064     }
0065 }
0066 
0067 void ViewerPluginToolManagerPrivate::createView()
0068 {
0069     const QList<MessageViewer::ViewerPlugin *> listPlugin = MessageViewer::ViewerPluginManager::self()->pluginsList();
0070     for (MessageViewer::ViewerPlugin *plugin : listPlugin) {
0071         if (plugin->isEnabled()) {
0072             MessageViewer::ViewerPluginInterface *interface = plugin->createView(mParentWidget, mActionCollection);
0073             q->connect(interface, &MessageViewer::ViewerPluginInterface::activatePlugin, q, &ViewerPluginToolManager::activatePlugin);
0074             q->connect(plugin, &ViewerPlugin::configChanged, q, &ViewerPluginToolManager::refreshActionList);
0075             mListInterface.append(interface);
0076         }
0077     }
0078 }
0079 
0080 void ViewerPluginToolManagerPrivate::closeAllTools()
0081 {
0082     for (MessageViewer::ViewerPluginInterface *interface : std::as_const(mListInterface)) {
0083         interface->closePlugin();
0084     }
0085 }
0086 
0087 void ViewerPluginToolManagerPrivate::setActionCollection(KActionCollection *ac)
0088 {
0089     mActionCollection = ac;
0090 }
0091 
0092 QList<QAction *> ViewerPluginToolManagerPrivate::actionList(ViewerPluginInterface::SpecificFeatureTypes features) const
0093 {
0094     QList<QAction *> lstAction;
0095     for (MessageViewer::ViewerPluginInterface *interface : std::as_const(mListInterface)) {
0096         if (features & ViewerPluginInterface::All) {
0097             lstAction.append(interface->actions());
0098         } else {
0099             if (interface->featureTypes() & features) {
0100                 lstAction.append(interface->actions());
0101             }
0102         }
0103     }
0104     return lstAction;
0105 }
0106 
0107 void ViewerPluginToolManagerPrivate::updateActions(const Akonadi::Item &messageItem)
0108 {
0109     for (MessageViewer::ViewerPluginInterface *interface : std::as_const(mListInterface)) {
0110         interface->updateAction(messageItem);
0111     }
0112 }
0113 
0114 ViewerPluginToolManager::ViewerPluginToolManager(QWidget *parentWidget, QObject *parent)
0115     : QObject(parent)
0116     , d(new MessageViewer::ViewerPluginToolManagerPrivate(this, parentWidget))
0117 {
0118 }
0119 
0120 ViewerPluginToolManager::~ViewerPluginToolManager() = default;
0121 
0122 void ViewerPluginToolManager::closeAllTools()
0123 {
0124     d->closeAllTools();
0125 }
0126 
0127 void ViewerPluginToolManager::refreshActionList()
0128 {
0129     d->refreshActionList();
0130 }
0131 
0132 void ViewerPluginToolManager::createView()
0133 {
0134     d->createView();
0135 }
0136 
0137 void ViewerPluginToolManager::setActionCollection(KActionCollection *ac)
0138 {
0139     d->setActionCollection(ac);
0140 }
0141 
0142 void ViewerPluginToolManager::setPluginDirectory(const QString &directory)
0143 {
0144     d->setPluginDirectory(directory);
0145 }
0146 
0147 QString ViewerPluginToolManager::pluginDirectory() const
0148 {
0149     return d->pluginDirectory();
0150 }
0151 
0152 void ViewerPluginToolManager::setPluginName(const QString &pluginName)
0153 {
0154     d->setPluginName(pluginName);
0155 }
0156 
0157 QString ViewerPluginToolManager::pluginName() const
0158 {
0159     return d->pluginName();
0160 }
0161 
0162 bool ViewerPluginToolManager::initializePluginList()
0163 {
0164     return MessageViewer::ViewerPluginManager::self()->initializePluginList();
0165 }
0166 
0167 QList<QAction *> ViewerPluginToolManager::viewerPluginActionList(ViewerPluginInterface::SpecificFeatureTypes features) const
0168 {
0169     return d->actionList(features);
0170 }
0171 
0172 void ViewerPluginToolManager::updateActions(const Akonadi::Item &messageItem)
0173 {
0174     d->updateActions(messageItem);
0175 }
0176 
0177 #include "moc_viewerplugintoolmanager.cpp"