玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
OperateWakeOnLan.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include <QHBoxLayout>
5#include <QVBoxLayout>
6#include <QRegularExpression>
7#include <QPushButton>
8#include <QCheckBox>
9#include <QtGlobal>
10#include <QCoreApplication>
11#include <QClipboard>
12#include <QApplication>
13#include "RabbitCommonTools.h"
14#include "Plugin.h"
15
16#include "ParameterWakeOnLanUI.h"
17#include "OperateWakeOnLan.h"
18
19static Q_LOGGING_CATEGORY(log, "WakeOnLan")
21 : COperate(plugin)
22 , m_pView(nullptr)
23 , m_pModel(nullptr)
24 , m_pParameterPlugin(nullptr)
25{
26 qDebug(log) << Q_FUNC_INFO;
27}
28
29COperateWakeOnLan::~COperateWakeOnLan()
30{
31 qDebug(log) << Q_FUNC_INFO;
32}
33
34const qint16 COperateWakeOnLan::Version() const
35{
36 return 0;
37}
38
40{
41 int nRet = COperate::Initial();
42 if(nRet) return nRet;
43 qDebug(log) << Q_FUNC_INFO;
44 bool check = false;
45 CPlugin* plugin = GetPlugin();
46 m_pModel = new CWakeOnLanModel(this);
47 if(!m_pModel)
48 return -1;
49 m_pView = new CFrmWakeOnLan(m_pModel);
50 if(!m_pView) return -1;
51 QToolBar* pToolBar = m_pView->GetToolBar();
52 if(!pToolBar) return -1;
53 m_pView->setWindowTitle(plugin->Name());
54
55 check = connect(m_pView, SIGNAL(sigViewerFocusIn(QWidget*)),
56 this, SIGNAL(sigViewerFocusIn(QWidget*)));
57 Q_ASSERT(check);
58 check = connect(m_pView, &CFrmWakeOnLan::customContextMenuRequested,
59 this, [&](const QPoint &pos){
60 m_Menu.exec(m_pView->mapToGlobal(pos));
61 });
62 Q_ASSERT(check);
63
64 m_Menu.addAction(QIcon::fromTheme("edit-copy"), tr("Copy ip address to clipbord"),
65 this, [&](){
66 if(!m_pModel || !m_pView)
67 return;
68 foreach(auto index, m_pView->GetSelect()) {
69 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
70 if(!p) continue;
71 QString szIp = p->m_Net.GetHost();
72 if(szIp.isEmpty()) continue;
73 QApplication::clipboard()->setText(szIp);
74 }
75 });
76 m_Menu.addSeparator();
77
78 QAction* pRefresh = m_Menu.addAction(QIcon::fromTheme("view-refresh"), tr("Refresh"),
79 this, [&](){
80 foreach(auto p, m_pModel->m_Data)
81 m_Arp.GetMac(p);
82 });
83 pToolBar->addAction(pRefresh);
84 QAction* pMac = m_Menu.addAction(
85 QIcon::fromTheme("mac"), tr("Get mac address"),
86 this, [&](){
87 if(!m_pModel || !m_pView)
88 return;
89 foreach(auto index, m_pView->GetSelect()) {
90 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
91 if(!p) continue;
92 if(m_Arp.GetMac(p))
93 p->SetHostState(CParameterWakeOnLan::HostState::GetMac);
94 }
95 });
96 pToolBar->addAction(pMac);
97 QAction* pWal = m_Menu.addAction(
98 QIcon::fromTheme("lan"), tr("Wake on lan"),
99 this, [&](){
100 if(!m_pModel || !m_pView)
101 return;
102 foreach(auto index, m_pView->GetSelect()) {
103 QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
104 if(!p) continue;
105 if(!m_Arp.WakeOnLan(p))
106 p->SetHostState(CParameterWakeOnLan::HostState::WakeOnLan);
107 }
108 });
109 pToolBar->addAction(pWal);
110 pToolBar->addSeparator();
111 m_Menu.addSeparator();
112
113 QAction* pAdd = m_Menu.addAction(QIcon::fromTheme("list-add"), tr("Add"),
114 this, SLOT(slotAdd()));
115 pToolBar->addAction(pAdd);
116 QAction* pEdit = m_Menu.addAction(QIcon::fromTheme("document-edit"), tr("Edit"),
117 this, [&](){
118 QSharedPointer<CParameterWakeOnLan> para
119 = m_pModel->GetData(m_pView->GetCurrentIndex());
120 if(!para) {
121 QMessageBox::information(
122 nullptr,
123 tr("Information"),
124 tr("Please select a item"));
125 return;
126 }
128 dlg.SetParameter(para.data());
129 RC_SHOW_WINDOW(&dlg);
130 });
131 pToolBar->addAction(pEdit);
132 QAction* pRemove = m_Menu.addAction(QIcon::fromTheme("list-remove"), tr("Remove"),
133 m_pView, SLOT(slotRemoveRow()));
134 pToolBar->addAction(pRemove);
135
136 return 0;
137}
138
140{
141 qDebug(log) << Q_FUNC_INFO;
142 if(m_pView)
143 delete m_pView;
144 if(m_pModel)
145 delete m_pModel;
146 return 0;
147}
148
150{
151 return m_pView;
152}
153
155{
156 return nullptr;
157}
158
160{
161 QString szId = Protocol() + "_" + GetPlugin()->Name();
162 return szId;
163}
164
166{
167 QString szName;
168 if(m_pParameterPlugin
169 && (m_pParameterPlugin->GetNameStyles()
170 & CParameterPlugin::NameStyle::Protocol)
171 && !Protocol().isEmpty())
172 szName = Protocol() + ":";
173 szName += GetPlugin()->DisplayName();
174 return szName;
175}
176
177int COperateWakeOnLan::Start()
178{
179 emit sigRunning();
180 return 0;
181}
182
183int COperateWakeOnLan::Stop()
184{
185 emit sigFinished();
186 return 0;
187}
188
190{
191 m_pParameterPlugin = pPara;
192 if(pPara)
193 {
194 bool check = connect(pPara, SIGNAL(sigNameStylesChanged()),
195 this, SLOT(slotUpdateName()));
196 Q_ASSERT(check);
197 }
198 return 0;
199}
200
201int COperateWakeOnLan::Load(QSettings &set)
202{
203 if(!m_pModel) return -1;
204 return m_pModel->Load(set, m_pParameterPlugin);
205}
206
207int COperateWakeOnLan::Save(QSettings &set)
208{
209 if(!m_pModel) return -1;
210 return m_pModel->Save(set);
211}
212
213void COperateWakeOnLan::slotAdd()
214{
215 QSharedPointer<CParameterWakeOnLan> para(new CParameterWakeOnLan());
216 para->SetGlobalParameters(m_pParameterPlugin);
218 dlg.SetParameter(para.data());
219 int nRet = RC_SHOW_WINDOW(&dlg);
220 if(QDialog::Accepted == nRet)
221 m_pModel->AddItem(para);
222}
局域网唤醒操作接口
virtual int SetGlobalParameters(CParameterPlugin *pPara) override
应用插件全局参数
virtual int Load(QSettings &set) override
加载参数
virtual int Clean() override
Clean parameters and resource
virtual const QString Id() override
标识
virtual const qint16 Version() const override
版本
virtual QWidget * GetViewer() override
得到显示视图
virtual const QString Name() override
名称
virtual int Save(QSettings &set) override
保存参数
virtual int Initial() override
Initial parameters and resource
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
操作接口。
Definition Operate.h:51
void sigFinished()
断开连接成功信号。仅由插件触发
void sigRunning()
开始成功信号。仅由插件触发。
virtual Q_INVOKABLE int Initial()
Initial parameters and resource
Definition Operate.cpp:190
virtual const QString Protocol() const
协议
Definition Operate.cpp:81
void sigViewerFocusIn(QWidget *pView)
视图获得焦点
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin
Definition Operate.cpp:219
插件的全局参数。
The wake on lan parameters UI
int SetParameter(CParameter *pParameter)
设置参数,并初始化界面
The wake on lan parameters.
插件接口
Definition Plugin.h:15
virtual const QString Name() const =0
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。
virtual const QString DisplayName() const
在界面上显示的名称
Definition Plugin.cpp:76