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"