玉兔远程控制 0.1.0-bate6
载入中...
搜索中...
未找到
Plugin.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QDir>
4#include <QMetaEnum>
5#include <QLoggingCategory>
6#include "RabbitCommonTools.h"
7
8#include "Plugin.h"
9
10static Q_LOGGING_CATEGORY(log, "Plugin")
11
12CPlugin::CPlugin(QObject *parent)
13 : QObject{parent}
14{}
15
16CPlugin::~CPlugin()
17{
18 qDebug(log) << Q_FUNC_INFO;
19 if(m_Translator)
20 RabbitCommon::CTools::Instance()->RemoveTranslator(m_Translator);
21}
22
23// 因为 Name() 是重载函数,需要子类化才有,所以此函数不能在构造函数中调用
25{
26 m_Translator = RabbitCommon::CTools::Instance()->InstallTranslator(
27 Name(),
28 RabbitCommon::CTools::TranslationType::Plugin,
29 "plugins");
30 if(m_Translator)
31 return 0;
32
33 return -1;
34}
35
36const QString CPlugin::TypeName(const TYPE t) const
37{
38 if(t >= TYPE::Custom) {
39 qWarning(log) << "Please override `const QString CPlugin::TypeName(const TYPE t) const` with "
40 + QString(metaObject()->className()) + "::TypeName(const Type t)" ;
41 return tr("Custom");
42 }
43 switch(t)
44 {
45 case TYPE::Client:
46 return tr("Client");
47 case TYPE::Service:
48 return tr("Service");
49 case TYPE::RemoteDesktop:
50 return tr("Remote Desktop");
51 case TYPE::Terminal:
52 return tr("Terminal");
53 case TYPE::Tools:
54 return tr("Tools");
55 case TYPE::FileTransfers:
56 return tr("File Transfer");
57 case TYPE::NetworkTools:
58 return tr("Network Tools");
59 case TYPE::Custom:
60 qWarning(log) << "Please override `const QString CPlugin::TypeName(const TYPE t) const` with "
61 + QString(metaObject()->className()) + "::TypeName(const Type t)" ;
62 return tr("Custom");
63 default:
64 qCritical(log) << "Don't support type:" << (int)t;
65 QMetaEnum me = QMetaEnum::fromType<CPlugin::TYPE>();
66 return me.valueToKey((quint64)t);
67 }
68 return QString();
69}
70
71const QString CPlugin::Id() const
72{
73 return QString::number((int)Type()) + ":" + Protocol() + ":" + Name();
74}
75
76const QString CPlugin::DisplayName() const
77{
78 return Name();
79}
80
81const QString CPlugin::Details() const
82{
83 return QString();
84}
85
88 const QString &szId, CParameterPlugin* para)
89{
90 COperate* p = OnCreateOperate(szId);
91 if(p) {
92 int nRet = 0;
93 //nRet = p->Initial();
94 bool bRet = QMetaObject::invokeMethod(
95 p,
96 "Initial",
97 Qt::DirectConnection,
98 Q_RETURN_ARG(int, nRet));
99 if(!bRet) {
100 qCritical(log) << "Call p->Initial() fail.";
101 return nullptr;
102 }
103 if(nRet) {
104 qCritical(log) << "Operate initial fail" << nRet;
105 DeleteOperate(p);
106 return nullptr;
107 }
108 //nRet = p->SetGlobalParameters(para);
109 bRet = QMetaObject::invokeMethod(
110 p,
111 "SetGlobalParameters",
112 Qt::DirectConnection,
113 Q_RETURN_ARG(int, nRet),
114 Q_ARG(CParameterPlugin*, para));
115 if(!bRet) {
116 qCritical(log) << "Call p->SetParameterClient(para) fail.";
117 return nullptr;
118 }
119 if(nRet) {
120 qCritical(log) << "SetParameterClient fail" << nRet;
121 DeleteOperate(p);
122 return nullptr;
123 }
124 }
125 return p;
126}
128
130{
131 qDebug(log) << Q_FUNC_INFO;
132 if(!p) return 0;
133 int nRet = 0;
134 bool bRet = false;
135 //nRet = p->Clean();
136 bRet = QMetaObject::invokeMethod(
137 p,
138 "Clean",
139 Qt::DirectConnection,
140 Q_RETURN_ARG(int, nRet));
141 if(!bRet) {
142 qCritical(log) << "Call p->Clean() fail.";
143 return -1;
144 }
145 if(nRet)
146 qWarning(log) << "Operate clean fail" << nRet;
147 p->deleteLater();
148 return 0;
149}
150
151QWidget* CPlugin::GetSettingsWidget(QWidget* parent)
152{
153 return nullptr;
154}
操作接口。
Definition Operate.h:51
插件的全局参数。
插件接口
Definition Plugin.h:15
virtual Q_INVOKABLE QWidget * GetSettingsWidget(QWidget *parent)
得到设置此插件全局参数的窗口
Definition Plugin.cpp:151
virtual const QString Details() const
显示更多细节。 例如: 在关于对话框或日志中显示。 包括插件的依赖库的版本信息和描述
Definition Plugin.cpp:81
virtual Q_INVOKABLE int DeleteOperate(COperate *p)
Delete COperate
Definition Plugin.cpp:129
Q_INVOKABLE int InitTranslator()
初始化翻译资源,仅由 CManager 调用。 因为它调用了 Name() ,所以不能在此类的构造函数中直接调用。
Definition Plugin.cpp:24
virtual const QString Name() const =0
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。
virtual const QString DisplayName() const
在界面上显示的名称
Definition Plugin.cpp:76
virtual const QString Protocol() const =0
协议
virtual const QString Id() const
标识。默认: Type() + ":" + Protocol() + ":" + Name()
Definition Plugin.cpp:71
virtual Q_INVOKABLE COperate * CreateOperate(const QString &szId, CParameterPlugin *para)
新建 COperate 实例。仅由 CManager 调用
Definition Plugin.cpp:87