3#include <QLoggingCategory>
6#include <QRegularExpression>
10#include <QCoreApplication>
11#include "RabbitCommonTools.h"
12#include "PluginClient.h"
14#include "ParameterWakeOnLanUI.h"
15#include "ConnecterWakeOnLan.h"
17static Q_LOGGING_CATEGORY(log,
"WakeOnLan.Connecter")
22 , m_pParameterClient(
nullptr)
24 qDebug(log) << Q_FUNC_INFO;
27CConnecterWakeOnLan::~CConnecterWakeOnLan()
29 qDebug(log) << Q_FUNC_INFO;
41 qDebug(log) << Q_FUNC_INFO;
48 if(!m_pView)
return -2;
49 m_pView->setWindowTitle(plugin->
Name());
50 check = connect(m_pView, &CFrmWakeOnLan::customContextMenuRequested,
51 this, [&](
const QPoint &pos){
52 m_Menu.exec(m_pView->mapToGlobal(pos));
56 m_Menu.addAction(QIcon::fromTheme(
"list-add"), tr(
"Add"),
57 this, SLOT(slotAdd()));
58 m_Menu.addAction(QIcon::fromTheme(
"document-edit"), tr(
"Edit"),
60 QSharedPointer<CParameterWakeOnLan> para
61 = m_pModel->GetData(m_pView->GetCurrentIndex());
63 QMessageBox::information(
66 tr(
"Please select a item"));
73 m_Menu.addAction(QIcon::fromTheme(
"list-remove"), tr(
"Remove"),
74 m_pView, SLOT(slotRemoveRow()));
76 if(RabbitCommon::CTools::HasAdministratorPrivilege())
78 m_Menu.addAction(QIcon::fromTheme(
"view-refresh"), tr(
"Refresh"),
80 foreach(
auto p, m_pModel->m_Data)
84 QIcon::fromTheme(
"mac"), tr(
"Get mac address"),
86 if(!m_pModel || !m_pView)
88 foreach(
auto index, m_pView->GetSelect()) {
89 QSharedPointer<CParameterWakeOnLan> p
90 = m_pModel->GetData(index);
93 p->SetHostState(CParameterWakeOnLan::HostState::GetMac);
98 m_Menu.addAction(QIcon::fromTheme(
"view-refresh"), tr(
"Refresh"),
100 foreach(
auto p, m_pModel->m_Data)
104 QIcon::fromTheme(
"mac"), tr(
"Get mac address"),
106 if(!m_pModel || !m_pView)
108 foreach(
auto index, m_pView->GetSelect()) {
109 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
112 p->SetHostState(CParameterWakeOnLan::HostState::GetMac);
117 QIcon::fromTheme(
"lan"), tr(
"Wake on lan"),
119 if(!m_pModel || !m_pView)
121 foreach(
auto index, m_pView->GetSelect()) {
122 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
124 if(!m_Arp.WakeOnLan(p))
125 p->SetHostState(CParameterWakeOnLan::HostState::WakeOnLan);
134 qDebug(log) << Q_FUNC_INFO;
154 QString szId =
Protocol() +
"_" + GetPlugClient()->
Name();
162 &&
GetParameter()->GetParameterClient()->GetShowProtocolPrefix())
164 szName += GetPlugClient()->
Name();
168int CConnecterWakeOnLan::Connect()
170#if defined(Q_OS_UNIX)
171 if(!RabbitCommon::CTools::HasAdministratorPrivilege())
173 static bool bShow =
false;
178 QMessageBox::Warning, tr(
"Warning"),
179 tr(
"There are no administrator privileges, "
180 "and some functions(Get mac address) are restricted. "
181 "Please restart the program with administrative privileges."),
182 QMessageBox::Yes | QMessageBox::No);
183 msg.setCheckBox(
new QCheckBox(tr(
"Exit the program"), &msg));
184 msg.checkBox()->setCheckable(
true);
186 if(QMessageBox::Yes == nRet) {
187 bool bRet = RabbitCommon::CTools::executeByRoot(
188 QCoreApplication::applicationFilePath());
189 qDebug(log) <<
"Execute:" << bRet << QCoreApplication::applicationFilePath();
190 if(bRet && msg.checkBox()->isChecked()) {
191 QCoreApplication::quit();
201int CConnecterWakeOnLan::DisConnect()
214 m_pParameterClient = pPara;
220 if(!m_pModel)
return -1;
221 return m_pModel->Load(set, m_pParameterClient);
226 if(!m_pModel)
return -1;
227 return m_pModel->Save(set);
230void CConnecterWakeOnLan::slotAdd()
233 para->SetParameterClient(m_pParameterClient);
236 int nRet = RC_SHOW_WINDOW(&dlg);
237 if(QDialog::Accepted == nRet)
238 m_pModel->AddItem(para);
连接接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Connect()、 slotTimeOut()、 OnProcess() 。 当然,它仍...
插件的连接者接口,此接口仅由插件使用。 所有的需要 CConnect 的插件连接者均需要从此接口派生。
virtual CParameterBase * GetParameter()
Get parameter
virtual CConnect * InstanceConnect() override
新建 CConnect 对象。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
virtual int Clean() override
Clean parameters and resource
virtual const QString Name() override
显示顺序:
virtual int Save(QSettings &set) override
保存参数
virtual int Load(QSettings &set) override
加载参数
virtual QWidget * GetViewer() override
得到显示视图
virtual int Initial() override
Initial parameters and resource
virtual const QString Id() override
Identity
virtual int SetParameterClient(CParameterClient *pPara) override
Set CParameterClient
virtual qint16 Version() override
Version
void sigConnected()
连接成功信号。仅由插件触发。 应用程序需要在此时设置视图属性 Enabled 为 true 。允许接收键盘和鼠标事件
void sigDisconnected()
断开连接成功信号。仅由插件触发
virtual const QString Protocol() const
Protocol
virtual int Initial()
Initial parameters and resource
客户端库 (CClient) 参数。仅在客户端库 (CClient) 和插件中使用。
The wake on lan parameters UI
int SetParameter(CParameter *pParameter)
设置参数,并初始化界面
The wake on lan parameters.
客户端插件接口。用于建立 CConnecter 实例,它由协议插件实现。
virtual const QString Name() const =0
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。