玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
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
83 const QString &szId, CParameterPlugin* para)
84{
85 COperate* p = OnCreateOperate(szId);
86 if(p) {
87 int nRet = 0;
88 //nRet = p->Initial();
89 bool bRet = QMetaObject::invokeMethod(
90 p,
91 "Initial",
92 Qt::DirectConnection,
93 Q_RETURN_ARG(int, nRet));
94 if(!bRet) {
95 qCritical(log) << "Call p->Initial() fail.";
96 return nullptr;
97 }
98 if(nRet) {
99 qCritical(log) << "Operate initial fail" << nRet;
100 DeleteOperate(p);
101 return nullptr;
102 }
103 //nRet = p->SetGlobalParameters(para);
104 bRet = QMetaObject::invokeMethod(
105 p,
106 "SetGlobalParameters",
107 Qt::DirectConnection,
108 Q_RETURN_ARG(int, nRet),
109 Q_ARG(CParameterPlugin*, para));
110 if(!bRet) {
111 qCritical(log) << "Call p->SetParameterClient(para) fail.";
112 return nullptr;
113 }
114 if(nRet) {
115 qCritical(log) << "SetParameterClient fail" << nRet;
116 DeleteOperate(p);
117 return nullptr;
118 }
119 }
120 return p;
121}
123
125{
126 qDebug(log) << Q_FUNC_INFO;
127 if(!p) return 0;
128 int nRet = 0;
129 bool bRet = false;
130 //nRet = p->Clean();
131 bRet = QMetaObject::invokeMethod(
132 p,
133 "Clean",
134 Qt::DirectConnection,
135 Q_RETURN_ARG(int, nRet));
136 if(!bRet) {
137 qCritical(log) << "Call p->Clean() fail.";
138 return -1;
139 }
140 if(nRet)
141 qWarning(log) << "Operate clean fail" << nRet;
142 p->deleteLater();
143 return 0;
144}
145
146QWidget* CPlugin::GetSettingsWidget(QWidget* parent)
147{
148 return nullptr;
149}
操作接口。
Definition Operate.h:51
插件的全局参数。
插件接口
Definition Plugin.h:15
virtual Q_INVOKABLE QWidget * GetSettingsWidget(QWidget *parent)
得到设置此插件全局参数的窗口
Definition Plugin.cpp:146
virtual Q_INVOKABLE int DeleteOperate(COperate *p)
Delete COperate
Definition Plugin.cpp:124
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:82