Skip to content

Commit c8b385e

Browse files
committed
Plugins::WebBrowser: modify paratmeters
1 parent 5bcf7fb commit c8b385e

File tree

10 files changed

+144
-67
lines changed

10 files changed

+144
-67
lines changed

App/Client/ParameterDlgSettings.cpp

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
#include "ParameterDlgSettings.h"
1010
#include "ui_ParameterDlgSettings.h"
11-
#include "mainwindow.h"
12-
#include "RabbitCommonDir.h"
1311

1412
#ifdef HAVE_ICE
1513
#include "Ice.h"
@@ -18,52 +16,13 @@
1816
static Q_LOGGING_CATEGORY(log, "App.MainWindow.Parameter")
1917

2018
CParameterDlgSettings::CParameterDlgSettings(CParameterApp *pPara,
21-
QList<QWidget *> wViewer,
2219
QWidget *parent) :
2320
QDialog(parent),
2421
ui(new Ui::CParameterDlgSettings),
2522
m_pParameters(pPara)
2623
{
2724
ui->setupUi(this);
2825

29-
int nWidth = 0;
30-
int nHeigth = 0;
31-
foreach(auto p, wViewer) {
32-
if(!p) continue;
33-
nWidth = qMax(nWidth, p->frameSize().width());
34-
nHeigth = qMax(nHeigth, p->frameSize().height());
35-
}
36-
bool bScroll = false;
37-
QScreen* pScreen = QApplication::primaryScreen();
38-
QSize size = this->size();
39-
if(nWidth > size.width() || nHeigth > size.height())
40-
bScroll = true;
41-
// [connect accepted to slotAccept of widget]
42-
foreach(auto p, wViewer)
43-
{
44-
QString szMsg;
45-
QWidget* pView = p;
46-
if(bScroll)
47-
{
48-
QScrollArea* pScroll = new QScrollArea(ui->tabWidget);
49-
if(!pScroll) continue;
50-
pScroll->setWidget(p);
51-
pView = pScroll;
52-
}
53-
ui->tabWidget->addTab(pView, p->windowIcon(), p->windowTitle());
54-
bool check = false;
55-
check = connect(this, SIGNAL(accepted()), p, SLOT(slotAccept()));
56-
if(!check)
57-
{
58-
szMsg = "Class" + QString(p->metaObject()->className())
59-
+ "must has slot slotAccept(), please add it. "
60-
+ "Or the class derived from CParameterUI";
61-
qCritical(log) << szMsg;
62-
}
63-
Q_ASSERT_X(check, "CParameterDlgSettings", szMsg.toStdString().c_str());
64-
}
65-
// [connect accepted to slotAccept of widget]
66-
6726
#ifdef HAVE_ICE
6827
QWidget* pWidget = CICE::Instance()->GetParameterWidget(this);
6928
if(pWidget)
@@ -135,6 +94,47 @@ CParameterDlgSettings::~CParameterDlgSettings()
13594
delete ui;
13695
}
13796

97+
void CParameterDlgSettings::SetViewers(const QList<QWidget *> &wViewer)
98+
{
99+
int nWidth = 0;
100+
int nHeigth = 0;
101+
foreach(auto p, wViewer) {
102+
if(!p) continue;
103+
nWidth = qMax(nWidth, p->frameSize().width());
104+
nHeigth = qMax(nHeigth, p->frameSize().height());
105+
}
106+
bool bScroll = false;
107+
QScreen* pScreen = QApplication::primaryScreen();
108+
QSize size = this->size();
109+
if(nWidth > size.width() || nHeigth > size.height())
110+
bScroll = true;
111+
// [connect accepted to slotAccept of widget]
112+
foreach(auto p, wViewer)
113+
{
114+
QString szMsg;
115+
QWidget* pView = p;
116+
if(bScroll)
117+
{
118+
QScrollArea* pScroll = new QScrollArea(ui->tabWidget);
119+
if(!pScroll) continue;
120+
pScroll->setWidget(p);
121+
pView = pScroll;
122+
}
123+
ui->tabWidget->addTab(pView, p->windowIcon(), p->windowTitle());
124+
bool check = false;
125+
check = connect(this, SIGNAL(accepted()), p, SLOT(slotAccept()));
126+
if(!check)
127+
{
128+
szMsg = "Class" + QString(p->metaObject()->className())
129+
+ "must has slot slotAccept(), please add it. "
130+
+ "Or the class derived from CParameterUI";
131+
qCritical(log) << szMsg;
132+
}
133+
Q_ASSERT_X(check, "CParameterDlgSettings", szMsg.toStdString().c_str());
134+
}
135+
// [connect accepted to slotAccept of widget]
136+
}
137+
138138
void CParameterDlgSettings::on_pbOk_clicked()
139139
{
140140
if(!m_pParameters) return;

App/Client/ParameterDlgSettings.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ class CParameterDlgSettings : public QDialog
1414

1515
public:
1616
explicit CParameterDlgSettings(CParameterApp* pPara,
17-
QList<QWidget*> wViewer,
1817
QWidget *parent = nullptr);
1918
virtual ~CParameterDlgSettings();
20-
19+
void SetViewers(const QList<QWidget*> &wViewer);
2120
private slots:
2221
void on_pbOk_clicked();
2322
void on_pbNo_clicked();

App/Client/mainwindow.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,17 +1425,22 @@ void MainWindow::on_actionStatus_bar_S_toggled(bool checked)
14251425
m_Parameter.SetStatusBar(checked);
14261426
}
14271427

1428-
// [Get the widget that settings client parameters]
1428+
// [Get the widget that settings plugin parameters]
14291429
void MainWindow::on_actionSettings_triggered()
14301430
{
1431-
CParameterDlgSettings set(&m_Parameter, m_Manager.GetSettingsWidgets(this), this);
1431+
CParameterDlgSettings set(&m_Parameter, this);
1432+
auto viewers = m_Manager.GetSettingsWidgets(&set);
1433+
set.SetViewers(viewers);
14321434
if(CParameterDlgSettings::Accepted == RC_SHOW_WINDOW(&set))
14331435
{
14341436
m_Manager.SaveSettings();
14351437
m_Parameter.Save();
14361438
}
1439+
foreach(auto v, viewers) {
1440+
v->deleteLater();
1441+
}
14371442
}
1438-
// [Get the widget that settings client parameters]
1443+
// [Get the widget that settings plugin parameters]
14391444

14401445
void MainWindow::slotShortCut()
14411446
{

Plugins/WebBrowser/ParameterWebBrowser.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,17 @@ CParameterWebBrowser::CParameterWebBrowser(QObject *parent, const QString &szPre
1919
, m_bPromptPrintFinished(true)
2020
, m_bAutoFillUserAndPassword(false)
2121
{
22+
SetHomeUrl("https://github.com/KangLin");
23+
SetTabUrl("https://github.com/KangLin/RabbitRemoteControl");
2224
//m_szDownloadFolder = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
2325
SetDownloadFolder(QWebEngineProfile::defaultProfile()->downloadPath());
2426
qDebug(log) << "Download folder:" << GetDownloadFolder();
2527
SetSearchEngine("https://cn.bing.com/search?q=%s");
2628
SetSearchRelaceString("%s");
2729
QStringList searchEngines;
28-
searchEngines << "https://cn.bing.com/search?q=%s";
29-
searchEngines << "https://www.google.com/search?q=%s";
30+
searchEngines << "https://www.bing.com/search?q=%s"
31+
<< "https://www.google.com/search?q=%s"
32+
<< "https://www.baidu.com/s?wd=%s";
3033
SetSearchEngineList(searchEngines);
3134
}
3235

Plugins/WebBrowser/PluginWebBrowser.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,12 @@ const QString CPluginWebBrowser::Details() const
7676
#endif
7777
return szDetails;
7878
}
79+
80+
QWidget* CPluginWebBrowser::GetSettingsWidget(QWidget* parent)
81+
{
82+
//TODO: Add set global parameters
83+
QWidget* pSetting = new QWidget(parent);
84+
if(pSetting)
85+
pSetting->setWindowTitle(tr("Set Web Wrowser"));
86+
return pSetting;
87+
}

Plugins/WebBrowser/PluginWebBrowser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class CPluginWebBrowser: public CPlugin
3030

3131
protected:
3232
virtual COperate *OnCreateOperate(const QString &szId) override;
33+
Q_INVOKABLE virtual QWidget* GetSettingsWidget(QWidget *parent) override;
3334
};
3435

3536

Src/Manager.cpp

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,16 +501,18 @@ QList<QWidget*> CManager::GetSettingsWidgets(QWidget* parent)
501501
{
502502
QList<QWidget*> lstWidget;
503503

504-
CParameterPluginUI* pClient = new CParameterPluginUI(parent);
505-
if(pClient) {
506-
pClient->SetParameter(m_pParameter);
507-
lstWidget.push_back(pClient);
508-
}
509504
CFrmManagePlugins* pManagePlugins = new CFrmManagePlugins(parent);
510505
if(pManagePlugins) {
511506
pManagePlugins->SetParameter(m_pParameter);
512507
lstWidget.push_back(pManagePlugins);
513508
}
509+
510+
CParameterPluginUI* pClient = new CParameterPluginUI(parent);
511+
if(pClient) {
512+
pClient->SetParameter(m_pParameter);
513+
lstWidget.push_back(pClient);
514+
}
515+
514516
#if defined(HAVE_QTERMWIDGET)
515517
CParameterTerminalUI* pTermina = new CParameterTerminalUI(parent);
516518
if(pTermina) {
@@ -530,6 +532,26 @@ QList<QWidget*> CManager::GetSettingsWidgets(QWidget* parent)
530532
pMediaDevices->SetParameter(&m_pParameter->m_MediaDevices.m_Para);
531533
lstWidget.push_back(pMediaDevices);
532534
}
535+
536+
//! [Get the widget to set global parameters for the plugin]
537+
foreach(auto plugin, m_Plugins) {
538+
if(!plugin) continue;
539+
QWidget* pSettings = nullptr;
540+
bool bRet = QMetaObject::invokeMethod(
541+
plugin,
542+
"GetSettingsWidget",
543+
Qt::DirectConnection,
544+
Q_RETURN_ARG(QWidget*, pSettings),
545+
Q_ARG(QWidget*, parent));
546+
if(!bRet) {
547+
qCritical(log) << "Call CPlugin::GetSettingsWidget() fail.";
548+
continue;
549+
}
550+
if(!pSettings) continue;
551+
lstWidget.push_back(pSettings);
552+
}
553+
//! [Get the widget to set global parameters for the plugin]
554+
533555
return lstWidget;
534556
}
535557

Src/Manager.h

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,28 +97,35 @@ class PLUGIN_EXPORT CManager : public QObject
9797
/*!
9898
* \~chinese 得到设置参数窗口
9999
* \return 设置参数窗口。此窗口的所有者为调用者。
100-
* \note 此窗口必须从 CParameterUI 派生。
100+
* \note 此窗口一般从 CParameterUI 派生。
101101
* 例如: CParameterPluginUI
102+
* 如果不是从 CParameterUI 派生,则需要实现接口:
103+
* - virtual int SetParameter(CParameter* pParameter);
104+
* - virtual int Accept();
105+
*
102106
* 用法示例:
103-
* \snippet App/Client/mainwindow.cpp Get the widget that settings client parameters
107+
* \snippet App/Client/mainwindow.cpp Get the widget that settings plugin parameters
104108
*
105109
* 在 CParameterDlgSettings 的构造函数中连接信号和槽
106110
* \snippet App/Client/ParameterDlgSettings.cpp connect accepted to slotAccept of widget
107111
*
108112
* \~english Get parameter settings widget
109113
* \return Parameter widget. The QWidget owner is caller.
110-
* \note The widget must be a derivative of CParameterUI.
111-
* Eg: CParameterPluginUI
114+
* \note This window is generally derived from CParameterUI.
115+
* For example: CParameterPluginUI
116+
* If it is not derived from CParameterUI, then you need to implement the following interfaces:
117+
* - virtual int SetParameter(CParameter* pParameter);
118+
* - virtual int Accept();
112119
*
113120
* \snippet Src/ParameterPluginUI.h Accept parameters
114121
* Usage:
115-
* \snippet App/Client/mainwindow.cpp Get the widget that settings client parameters
122+
* \snippet App/Client/mainwindow.cpp Get the widget that settings plugin parameters
116123
* Connect the signal(accepted) to the slot(slotAccept) in CParameterDlgSettings
117124
* \snippet App/Client/ParameterDlgSettings.cpp connect accepted to slotAccept of widget
118125
*
119126
* \~
120127
* \see CParameterPluginUI CParameterDlgSettings
121-
*/
128+
*/
122129
virtual QList<QWidget*> GetSettingsWidgets(QWidget *parent);
123130
/*!
124131
* \~chinese
@@ -183,6 +190,11 @@ class PLUGIN_EXPORT CManager : public QObject
183190
*/
184191
int LoadPlugin(const QString& szPath);
185192
int FindPlugins(QDir dir, QStringList filters);
193+
/*!
194+
* \brief Append Plugin
195+
* \param plugin
196+
* \return
197+
*/
186198
int AppendPlugin(CPlugin* plugin);
187199

188200
private Q_SLOTS:

Src/Plugin.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,8 @@ int CPlugin::DeleteOperate(COperate *p)
147147
p->deleteLater();
148148
return 0;
149149
}
150+
151+
QWidget* CPlugin::GetSettingsWidget(QWidget* parent)
152+
{
153+
return nullptr;
154+
}

Src/Plugin.h

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,23 +65,23 @@ class PLUGIN_EXPORT CPlugin : public QObject
6565
protected:
6666
/*!
6767
* \~chinese
68-
* \brief 新建 COperate 实例。仅由 CClient 调用
69-
* \snippet Client/Client.cpp CClient CreateOperate
68+
* \brief 新建 COperate 实例。仅由 CManager 调用
69+
* \snippet Src/Manager.cpp CManager CreateOperate
7070
* \return 返回 COperate 指针, 它的所有者是调用者。
7171
* \note 此函数新建一个对象指针,
7272
* <b>调用者必须负责在用完后释放指针</b>。
7373
* \param szId 连接 ID
7474
*
7575
* \~english
76-
* \brief New COperate instance. Only is called by CClient
77-
* \snippet Client/Client.cpp CClient CreateOperate
76+
* \brief New COperate instance. Only is called by CManager
77+
* \snippet Src/Manager.cpp CManager CreateOperate
7878
* \return Return COperate pointer, the owner is caller
7979
* \note The function new object pointer,
8080
* <b>the caller must delete it when don't use it</b>.
8181
* \param szId
8282
*
8383
* \~
84-
* \see CClient::CreateOperate CClient::LoadOperate
84+
* \see CManager::CreateOperate CManager::LoadOperate
8585
*
8686
*/
8787
Q_INVOKABLE virtual COperate* CreateOperate(
@@ -91,19 +91,40 @@ class PLUGIN_EXPORT CPlugin : public QObject
9191
* Delete COperate
9292
*/
9393
Q_INVOKABLE virtual int DeleteOperate(COperate* p);
94+
/*!
95+
* \~chinese 得到设置此插件全局参数的窗口
96+
* \return 设置参数窗口。如果不需要,则返回 nullptr。此窗口的所有者为调用者。
97+
* \note 此窗口必须从 CParameterUI 派生。
98+
* 用法示例:
99+
* \snippet Src/Manager.cpp Get the widget to set global parameters for the plugin
100+
*
101+
* \~english Get the widget to set global parameters for the plugin
102+
* \return Sets the parameters widget.
103+
* Returns nullptr if no parameters are needed.
104+
* This widget belongs to the caller.
105+
* \note The widget must be a derivative of CParameterUI.
106+
* Eg: CParameterPluginUI
107+
*
108+
* \snippet Src/ParameterPluginUI.h Accept parameters
109+
* Usage:
110+
* \snippet Src/Manager.cpp Get the widget to set global parameters for the plugin
111+
* \~
112+
* \see CManager::GetSettingsWidgets
113+
*/
114+
Q_INVOKABLE virtual QWidget* GetSettingsWidget(QWidget *parent);
94115

95116
private:
96117
QSharedPointer<QTranslator> m_Translator;
97118
/*!
98-
* \~chinese 初始化翻译资源,仅由 CClient 调用。
119+
* \~chinese 初始化翻译资源,仅由 CManager 调用。
99120
* 因为它调用了 Name() ,所以不能在此类的构造函数中直接调用。
100121
*
101122
* \~english Initialize the translation resource,
102-
* which is only called by CClient.
123+
* which is only called by CManager.
103124
* Because it calls Name(),
104125
* So it can't be called directly in the constructor of this class.
105126
*
106-
* \see CClient::AppendPlugin
127+
* \see CManager::AppendPlugin
107128
*/
108129
Q_INVOKABLE int InitTranslator();
109130
};

0 commit comments

Comments
 (0)