玉兔远程控制
0.1.0-bate11
Toggle main menu visibility
载入中...
搜索中...
未找到
Src
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
10
static
Q_LOGGING_CATEGORY(log,
"Plugin"
)
11
12
CPlugin
::
CPlugin
(QObject *parent)
13
: QObject{parent}
14
{}
15
16
CPlugin::~CPlugin()
17
{
18
qDebug(log) << Q_FUNC_INFO;
19
if
(m_Translator)
20
RabbitCommon::CTools::Instance()->RemoveTranslator(m_Translator);
21
}
22
23
// 因为 Name() 是重载函数,需要子类化才有,所以此函数不能在构造函数中调用
24
int
CPlugin::InitTranslator
()
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
36
const
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::Server:
48
return
tr(
"Server"
);
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
71
const
QString
CPlugin::Id
()
const
72
{
73
return
QString::number((
int
)Type()) +
":"
+
Protocol
() +
":"
+
Name
();
74
}
75
76
const
QString
CPlugin::DisplayName
()
const
77
{
78
return
Name
();
79
}
80
82
COperate
*
CPlugin::CreateOperate
(
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->SetPluginParameters(para);
104
bRet = QMetaObject::invokeMethod(
105
p,
106
"SetPluginParameters"
,
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
}
122
123
124
int
CPlugin::DeleteOperate
(
COperate
*p)
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
146
QWidget*
CPlugin::GetSettingsWidget
(QWidget* parent)
147
{
148
return
nullptr
;
149
}
COperate
操作接口。
定义
Operate.h:51
CParameterPlugin
插件的全局参数。
定义
ParameterPlugin.h:36
CPlugin
插件接口
定义
Plugin.h:15
CPlugin::GetSettingsWidget
virtual Q_INVOKABLE QWidget * GetSettingsWidget(QWidget *parent)
得到设置此插件全局参数的窗口
定义
Plugin.cpp:146
CPlugin::DeleteOperate
virtual Q_INVOKABLE int DeleteOperate(COperate *p)
Delete COperate
定义
Plugin.cpp:124
CPlugin::InitTranslator
Q_INVOKABLE int InitTranslator()
初始化翻译资源,仅由 CManager 调用。 因为它调用了 Name() ,所以不能在此类的构造函数中直接调用。
定义
Plugin.cpp:24
CPlugin::Name
virtual const QString Name() const =0
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。
CPlugin::DisplayName
virtual const QString DisplayName() const
在界面上显示的名称
定义
Plugin.cpp:76
CPlugin::Protocol
virtual const QString Protocol() const =0
协议
CPlugin::Id
virtual const QString Id() const
标识。默认: Type() + ":" + Protocol() + ":" + Name()
定义
Plugin.cpp:71
CPlugin::CreateOperate
virtual Q_INVOKABLE COperate * CreateOperate(const QString &szId, CParameterPlugin *para)
新建 COperate 实例。仅由 CManager 调用
定义
Plugin.cpp:82
作者:康林 (kl222@126.com)
版权所有(c) 康林工作室 保留所有权力