Rabbit Remote Control 0.1.0-bate8
Loading...
Searching...
No Matches
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
159const QString COperateWakeOnLan::Id()
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}
Wake on lan operate interface.
virtual int SetGlobalParameters(CParameterPlugin *pPara) override
Apply the global parameters of the plug-in.
virtual int Load(QSettings &set) override
Load parameters.
virtual int Clean() override
Clean parameters and resource.
virtual QWidget * GetViewer() override
Get Viewer.
virtual const QString Name() override
Name.
virtual int Save(QSettings &set) override
Save parameters.
virtual int Initial() override
Initial parameters and resource.
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
Open settgins dialog.
Operate interface.
Definition Operate.h:51
void sigFinished()
Successful disconnection signal.
void sigRunning()
Start success signal.
virtual Q_INVOKABLE int Initial()
Initial parameters and resource.
Definition Operate.cpp:190
void sigViewerFocusIn(QWidget *pView)
The view is focus.
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin.
Definition Operate.cpp:219
Global parameters of plugins.
The wake on lan parameters UI.
int SetParameter(CParameter *pParameter)
Set the parameters and initialize the user interface.
The wake on lan parameters.
Plugin interface.
Definition Plugin.h:15
virtual const QString Name() const =0
This name must be the same as the project name (${PROJECT_NAME}). The translation file (${PROJECT_NAM...
virtual const QString DisplayName() const
The plugin display name.
Definition Plugin.cpp:76