3#include <QLoggingCategory> 
    6#include <QRegularExpression> 
   10#include <QCoreApplication> 
   12#include <QApplication> 
   13#include "RabbitCommonTools.h" 
   16#include "ParameterWakeOnLanUI.h" 
   17#include "OperateWakeOnLan.h" 
   19static Q_LOGGING_CATEGORY(log, 
"WakeOnLan")
 
   24    , m_pParameterPlugin(
nullptr)
 
   26    qDebug(log) << Q_FUNC_INFO;
 
   29COperateWakeOnLan::~COperateWakeOnLan()
 
   31    qDebug(log) << Q_FUNC_INFO;
 
   43    qDebug(log) << Q_FUNC_INFO;
 
   50    if(!m_pView) 
return -2;
 
   51    m_pView->setWindowTitle(plugin->
Name());
 
   55    check = connect(m_pView, &CFrmWakeOnLan::customContextMenuRequested,
 
   56                    this, [&](
const QPoint &pos){
 
   57                        m_Menu.exec(m_pView->mapToGlobal(pos));
 
   61    m_Menu.addAction(QIcon::fromTheme(
"edit-copy"), tr(
"Copy ip address to clipbord"),
 
   63                         if(!m_pModel || !m_pView)
 
   65                         foreach(
auto index, m_pView->GetSelect()) {
 
   66                             QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
 
   68                             QString szIp = p->m_Net.GetHost();
 
   69                             if(szIp.isEmpty()) continue;
 
   70                             QApplication::clipboard()->setText(szIp);
 
   73    m_Menu.addSeparator();
 
   75    m_Menu.addAction(QIcon::fromTheme(
"view-refresh"), tr(
"Refresh"),
 
   77                         foreach(
auto p, m_pModel->m_Data)
 
   81        QIcon::fromTheme(
"mac"), tr(
"Get mac address"),
 
   83            if(!m_pModel || !m_pView)
 
   85            foreach(
auto index, m_pView->GetSelect()) {
 
   86                QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
 
   89                    p->SetHostState(CParameterWakeOnLan::HostState::GetMac);
 
   93        QIcon::fromTheme(
"lan"), tr(
"Wake on lan"),
 
   95            if(!m_pModel || !m_pView)
 
   97            foreach(
auto index, m_pView->GetSelect()) {
 
   98                QSharedPointer<CParameterWakeOnLan> p = m_pModel->GetData(index);
 
  100                if(!m_Arp.WakeOnLan(p))
 
  101                    p->SetHostState(CParameterWakeOnLan::HostState::WakeOnLan);
 
  104    m_Menu.addSeparator();
 
  106    m_Menu.addAction(QIcon::fromTheme(
"list-add"), tr(
"Add"),
 
  107                     this, SLOT(slotAdd()));
 
  108    m_Menu.addAction(QIcon::fromTheme(
"document-edit"), tr(
"Edit"),
 
  110                         QSharedPointer<CParameterWakeOnLan> para
 
  111                             = m_pModel->GetData(m_pView->GetCurrentIndex());
 
  113                             QMessageBox::information(
 
  116                                 tr(
"Please select a item"));
 
  121                         RC_SHOW_WINDOW(&dlg);
 
  123    m_Menu.addAction(QIcon::fromTheme(
"list-remove"), tr(
"Remove"),
 
  124                     m_pView, SLOT(slotRemoveRow()));
 
 
  131    qDebug(log) << Q_FUNC_INFO;
 
 
  158    if(m_pParameterPlugin && m_pParameterPlugin->GetShowProtocolPrefix())
 
 
  164int COperateWakeOnLan::Start()
 
  166#if defined(Q_OS_UNIX) 
  167    if(!RabbitCommon::CTools::HasAdministratorPrivilege()
 
  168        && m_pParameterPlugin->GetPromptAdministratorPrivilege())
 
  170        static bool bShow = 
false;
 
  175                QMessageBox::Warning, tr(
"Warning"),
 
  176                tr(
"There are no administrator privileges, " 
  177                   "and some functions(Get mac address) are restricted. " 
  178                   "Please restart the program with administrative privileges."),
 
  179                QMessageBox::Yes | QMessageBox::No);
 
  180            msg.setCheckBox(
new QCheckBox(tr(
"Always shown"), &msg));
 
  181            msg.checkBox()->setChecked(
 
  182                m_pParameterPlugin->GetPromptAdministratorPrivilege());
 
  184            if(QMessageBox::Yes == nRet) {
 
  185                RabbitCommon::CTools::Instance()->StartWithAdministratorPrivilege(
true);
 
  187            if(m_pParameterPlugin->GetPromptAdministratorPrivilege()
 
  188                != msg.checkBox()->isChecked()) {
 
  189                m_pParameterPlugin->SetPromptAdministratorPrivilege(
 
  190                    msg.checkBox()->isChecked());
 
  201int COperateWakeOnLan::Stop()
 
  209    m_pParameterPlugin = pPara;
 
 
  215    if(!m_pModel) 
return -1;
 
  216    return m_pModel->Load(set, m_pParameterPlugin);
 
 
  221    if(!m_pModel) 
return -1;
 
  222    return m_pModel->Save(set);
 
 
  225void COperateWakeOnLan::slotAdd()
 
  228    para->SetGlobalParameters(m_pParameterPlugin);
 
  231    int nRet = RC_SHOW_WINDOW(&dlg);
 
  232    if(QDialog::Accepted == nRet)
 
  233        m_pModel->AddItem(para);
 
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
Identity
 
virtual const qint16 Version() const override
Version
 
virtual QWidget * GetViewer() override
得到显示视图
 
virtual const QString Name() override
Name
 
virtual int Save(QSettings &set) override
保存参数
 
virtual int Initial() override
Initial parameters and resource
 
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
 
void sigFinished()
断开连接成功信号。仅由插件触发
 
void sigRunning()
开始成功信号。仅由插件触发。
 
virtual Q_INVOKABLE int Initial()
Initial parameters and resource
 
virtual const QString Protocol() const
Protocol
 
void sigViewerFocusIn(QWidget *pView)
视图获得焦点
 
Q_INVOKABLE CPlugin * GetPlugin() const
Get plugin
 
The wake on lan parameters UI
 
int SetParameter(CParameter *pParameter)
设置参数,并初始化界面
 
The wake on lan parameters.
 
virtual const QString Name() const =0
插件名,这个名一定要与工程名(${PROJECT_NAME})相同。 翻译文件(${PROJECT_NAME}_*.ts))名与其相关。
 
virtual const QString DisplayName() const
在界面上显示的名称