4#include <QLoggingCategory>
6#include <QRegularExpression>
10#include "RabbitCommonTools.h"
11#include "RabbitCommonDir.h"
13static Q_LOGGING_CATEGORY(log,
"Operate")
17 , m_SecurityLevel(CSecurityLevel::Level::No)
19 , m_pActionSettings(
nullptr)
21 qDebug(log) << Q_FUNC_INFO;
23 if(QApplication::clipboard())
25 check = connect(QApplication::clipboard(), SIGNAL(dataChanged()),
26 this, SIGNAL(sigClipBoardChanged()));
33 qDebug(log) << Q_FUNC_INFO;
40 +
"_" + QString::number((
int)
GetPlugin()->Type());
41 static QRegularExpression exp(
"[-@:/#%!^&* \\.]");
42 szId = szId.replace(exp,
"_");
53 QString szDescription;
55 szDescription = tr(
"Name: ") +
Name() +
"\n";
58 szDescription += tr(
"Type:") +
GetTypeName() +
"\n";
61 szDescription += tr(
"Protocol: ") +
Protocol();
66 szDescription +=
"\n";
71 szDescription += tr(
"Security level: ");
72 if(!sl.GetUnicodeIcon().isEmpty())
73 szDescription += sl.GetUnicodeIcon() +
" ";
74 szDescription += sl.GetString() +
"\n";
99 int nRet = QDialog::Accepted;
107 p->setWindowIcon(this->
Icon());
108 p->setWindowTitle(tr(
"Set ") +
GetPlugin()->DisplayName());
109 p->setAttribute(Qt::WA_DeleteOnClose);
110 nRet = RC_SHOW_WINDOW(p);
112 qCritical(log) <<
"The Protocol [" <<
Protocol() <<
"] don't settings dialog";
119 if(m_Menu.actions().isEmpty())
131 return m_SecurityLevel;
134void COperate::slotSetSecurityLevel(CSecurityLevel::Levels level)
136 if(m_SecurityLevel == level)
138 m_SecurityLevel = level;
143QString COperate::GetSettingsFile()
145 if(m_szSettings.isEmpty())
148 static QRegularExpression exp(
"[-@:#%!^&* .]");
149 szId = szId.replace(exp,
"_");
150 m_szSettings = RabbitCommon::CDir::Instance()->GetDirUserData()
158int COperate::SetSettingsFile(
const QString &szFile)
160 m_szSettings = szFile;
166 Q_ASSERT(!szFile.isEmpty());
169 qCritical(log) <<
"The load file is empty";
172 qInfo(log) <<
"Load configure file:" << szFile;
173 QSettings set(szFile, QSettings::IniFormat);
179 Q_ASSERT(!szFile.isEmpty());
182 qCritical(log) <<
"The load file is empty";
185 qInfo(log) <<
"Save configure file:" << szFile;
186 QSettings set(szFile, QSettings::IniFormat);
192 m_Menu.setIcon(m_pPlugin->Icon());
197 m_pActionSettings =
new QAction(QIcon::fromTheme(
"system-settings"),
198 tr(
"Settings"), &m_Menu);
199 if(m_pActionSettings) {
200 bool check = connect(m_pActionSettings, SIGNAL(triggered()),
201 this, SLOT(slotSettings()));
212void COperate::slotSettings()
215 if(QDialog::Accepted == nRet)
226 QString szMsg =
"There is not parameters! "
227 "please first create parameters, "
228 "then call SetParameter() in the ";
229 szMsg += metaObject()->className() + QString(
"::")
230 + metaObject()->className();
231 szMsg += QString(
"() or ") + metaObject()->className()
232 + QString(
"::") +
"Initial()";
233 szMsg +=
" to set the parameters pointer. "
234 "Default set CParameterClient for the parameters of operate "
235 "(CParameterOperate or its derived classes) "
236 "See CManager::CreateOperate. "
237 "If you are sure the parameter of operate "
238 "does not need CParameterClient. "
239 "Please overload the SetGlobalParameters() in the ";
240 szMsg += QString(metaObject()->className()) +
" . don't set it";
241 qCritical(log) << szMsg.toStdString().c_str();
242 Q_ASSERT_X(
false, Q_FUNC_INFO, szMsg.toStdString().c_str());
247void COperate::slotUpdateName()
256#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
257 QMetaType::fromName(className.toStdString().c_str()).id();
259 QMetaType::type(className.toStdString().c_str());
261 if(QMetaType::UnknownType == type)
263 qCritical(log) << className <<
" is QMetaType::UnknownType";
267#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
268 (QObject*)QMetaType(type).create();
270 (QObject*)QMetaType::create(type);
274 qCritical(log) <<
"QMetaType::create fail: " << type;
286 Q_ASSERT_X(obj,
"Connecter", QString(
"Create object failed: " + className).toStdString().c_str());
294 if(-1 == obj->metaObject()->indexOfMethod(
"SetContext(void*)"))
297 szErr =
"The class " + className +
" is not method SetContext. It must be SetContext(void*) method.";
298 qCritical(log) << szErr;
299 Q_ASSERT_X(
false,
"Connecter", szErr.toStdString().c_str());
301 obj->metaObject()->invokeMethod(obj,
"SetContext", Q_ARG(
void*, pContext));
303 if(obj->inherits(
"QDialog"))
305 QDialog* pDlg = qobject_cast<QDialog*>(obj);
306 pDlg->setAttribute(Qt::WA_DeleteOnClose);
308 pDlg, SLOT(reject()));
310 nRet = RC_SHOW_WINDOW(pDlg);
311 }
else if(obj->inherits(
"QWidget")) {
312 QWidget* pWdg = qobject_cast<QWidget*>(obj);
313 pWdg->setAttribute(Qt::WA_DeleteOnClose);
315 pWdg, SLOT(close()));
317 nRet = RC_SHOW_WINDOW(pWdg);
322 QMessageBox::StandardButtons buttons,
323 QMessageBox::StandardButton &nRet,
325 QString szCheckBoxContext)
327 QCheckBox* pBox =
nullptr;
328 QMessageBox msg(QMessageBox::Information,
329 szTitle, szMessage, buttons,
GetViewer());
330 if(!szCheckBoxContext.isEmpty())
332 pBox =
new QCheckBox(szCheckBoxContext);
334 pBox->setCheckable(
true);
335 msg.setCheckBox(pBox);
337 nRet = (QMessageBox::StandardButton)RC_SHOW_WINDOW(&msg);
339 checkBox = pBox->isChecked();
343 const QString &szMessage,
347 QString t = QInputDialog::getText(
nullptr,
353 if(ok && !t.isEmpty())
359 QClipboard* pClipboard = QApplication::clipboard();
363 pClipboard->setMimeData(data);
virtual QDialog * OnOpenDialogSettings(QWidget *parent=nullptr)=0
得到设置对话框
virtual int OpenDialogSettings(QWidget *parent=nullptr)
打开设置对话框
virtual CSecurityLevel::Levels GetSecurityLevel() const
Get Security Level
void sigFinished()
断开连接成功信号。仅由插件触发
virtual const QIcon Icon() const
图标
virtual CStats * GetStats()
得到统计信息。如果有,其派生类则需要重载此函数提供统计信息。
static QObject * createObject(const QString &className, QObject *parent=NULL)
Create Object
virtual Q_INVOKABLE int Initial()
Initial parameters and resource
virtual QWidget * GetViewer()=0
得到显示视图
virtual void slotBlockShowWidget(const QString &className, int &nRet, void *pContext)
阻塞后台线程,并在前台线程中显示窗口。
virtual Q_INVOKABLE int Load(QSettings &set)=0
加载参数
virtual const QString Protocol() const
协议
virtual Q_INVOKABLE int SetGlobalParameters(CParameterPlugin *pPara)=0
应用插件全局参数
virtual Q_INVOKABLE int Clean()
Clean parameters and resource
virtual void slotSetClipboard(QMimeData *data)
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin
virtual void slotBlockInputDialog(const QString &szTitle, const QString &szLable, const QString &szMessage, QString &szText)
Block background threads and display input dialogs in foreground threads (QInputDialog)
virtual const QString Name()
名称
virtual void slotBlockShowMessageBox(const QString &szTitle, const QString &szMessage, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton &nRet, bool &checkBox, QString szCheckBoxContext=QString())
阻塞后台线程,并在前台线程中显示消息对话框(QMessageBox)
virtual const QString Description()
描述
void sigUpdateParameters(COperate *pOperate)
更新参数,通知应用程序保存或显示参数
virtual Q_INVOKABLE int Save(QSettings &set)=0
保存参数
virtual const QString Id()
标识
void sigUpdateName(const QString &szName)
void sigSecurityLevel()
当安全级别改变时触发。其派生类不要直接触发,需要使用 slotSetSecurityLevel 触发
virtual const QString GetTypeName() const
类型名
virtual QMenu * GetMenu(QWidget *parent=nullptr)
Get menu
virtual const QString Name() const =0
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。
virtual const QString DisplayName() const
在界面上显示的名称
virtual const QString Protocol() const =0
协议
virtual const QString Description() const =0
描述