1 /*
2    SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include "messageviewer_export.h"
10 #include <Akonadi/Item>
11 #include <KMime/Message>
12 #include <QObject>
13 
14 class QAction;
15 class KActionCollection;
16 namespace MessageViewer
17 {
18 class ViewerPluginInterfacePrivate;
19 /**
20  * @brief The ViewerPluginInterface class
21  * @author Laurent Montel <montel@kde.org>
22  */
23 class MESSAGEVIEWER_EXPORT ViewerPluginInterface : public QObject
24 {
25     Q_OBJECT
26 public:
27     explicit ViewerPluginInterface(QObject *parent = nullptr);
28     ~ViewerPluginInterface() override;
29     enum SpecificFeatureType { None = 0, NeedSelection = 2, NeedMessage = 4, NeedUrl = 8, All = 16 };
30     Q_FLAGS(SpecificFeatureTypes)
31     Q_DECLARE_FLAGS(SpecificFeatureTypes, SpecificFeatureType)
32 
33     virtual void execute();
34 
35     virtual void setText(const QString &text);
36     virtual QList<QAction *> actions() const;
37     virtual void setUrl(const QUrl &url);
38     virtual void setMessage(const KMime::Message::Ptr &value);
39     virtual void setMessageItem(const Akonadi::Item &item);
40     virtual void setCurrentCollection(const Akonadi::Collection &col);
41     virtual void closePlugin();
42     virtual ViewerPluginInterface::SpecificFeatureTypes featureTypes() const = 0;
43     virtual void updateAction(const Akonadi::Item &item);
44     virtual void refreshActionList(KActionCollection *ac);
45 
46 protected:
47     virtual void showWidget();
48     void addHelpTextAction(QAction *act, const QString &text);
49 
50 protected Q_SLOTS:
51     void slotActivatePlugin();
52 
53 Q_SIGNALS:
54     void activatePlugin(MessageViewer::ViewerPluginInterface *);
55 
56 private:
57     std::unique_ptr<ViewerPluginInterfacePrivate> const d;
58 };
59 }
60 
61