1010#include < widgets/settingsgroup.h>
1111#include < widgets/switchwidget.h>
1212#include < widgets/widgetmodule.h>
13-
13+ #include < widgets/settingsgroupmodule.h>
14+ #include < widgets/itemmodule.h>
1415#include < DFloatingButton>
1516#include < DFontSizeManager>
1617#include < DListView>
@@ -35,8 +36,33 @@ SysProxyModule::SysProxyModule(QObject *parent)
3536 , m_ProxyMethodList({ tr (" Manual" ), tr (" Auto" ) })
3637 , m_uiMethod(dde::network::ProxyMethod::Init)
3738{
38- deactive ();
39- m_modules.append (new WidgetModule<SwitchWidget>(" system_proxy" , tr (" System Proxy" ), [this ](SwitchWidget *proxySwitch) {
39+ auto initProxyGroup = [this ] (LineEditWidget *&proxyEdit, LineEditWidget *&portEdit, const QString &proxyTitle) -> SettingsGroupModule* {
40+ SettingsGroupModule *module = new SettingsGroupModule (" " ," " );
41+ module ->appendChild (new ItemModule (" " ," " , [&proxyEdit, this , proxyTitle](ModuleObject *module ) {
42+ proxyEdit = new LineEditWidget;
43+ proxyEdit->setPlaceholderText (tr (" Optional" ));
44+ proxyEdit->setTitle (proxyTitle);
45+ proxyEdit->textEdit ()->installEventFilter (this );
46+ return proxyEdit;
47+ },false ));
48+ module ->appendChild (new ItemModule (" " ," " , [&portEdit, this ](ModuleObject *module ) {
49+ portEdit = new LineEditWidget;
50+ portEdit->setPlaceholderText (tr (" Optional" ));
51+ portEdit->setTitle (tr (" Port" ));
52+ portEdit->textEdit ()->installEventFilter (this );
53+ connect (portEdit->textEdit (), &QLineEdit::textChanged, this , [=](const QString &str) {
54+ if (str.toInt () < 0 ) {
55+ portEdit->setText (" 0" );
56+ } else if (str.toInt () > 65535 ) {
57+ portEdit->setText (" 65535" );
58+ }
59+ });
60+ return portEdit;
61+ },false ));
62+
63+ return module ;
64+ };
65+ appendChild (new WidgetModule<SwitchWidget>(" system_proxy" , tr (" System Proxy" ), [this ](SwitchWidget *proxySwitch) {
4066 m_proxySwitch = proxySwitch;
4167 QLabel *lblTitle = new QLabel (tr (" System Proxy" ));
4268 DFontSizeManager::instance ()->bind (lblTitle, DFontSizeManager::T5, QFont::DemiBold);
@@ -65,7 +91,7 @@ SysProxyModule::SysProxyModule(QObject *parent)
6591 }
6692 });
6793 }));
68- m_modules. append ( new WidgetModule<ComboxWidget>(" system_proxy_box" , tr (" System Proxy" ), [this ](ComboxWidget *proxyTypeBox) {
94+ m_systemProxyTypeModule = new WidgetModule<ComboxWidget>(" system_proxy_box" , tr (" System Proxy" ), [this ](ComboxWidget *proxyTypeBox) {
6995 m_proxyTypeBox = proxyTypeBox;
7096 proxyTypeBox->setTitle (tr (" Proxy Type" ));
7197 proxyTypeBox->addBackground ();
@@ -98,8 +124,9 @@ SysProxyModule::SysProxyModule(QObject *parent)
98124 }
99125 m_buttonTuple->setEnabled (true );
100126 });
101- }));
102- m_modules.append (new WidgetModule<SettingsGroup>(" system_proxy_auto_group" , QString (), [this ](SettingsGroup *autoGroup) {
127+ });
128+ appendChild (m_systemProxyTypeModule);
129+ m_urlConfigureModule = new WidgetModule<SettingsGroup>(" system_proxy_auto_group" , QString (), [this ](SettingsGroup *autoGroup) {
103130 m_autoUrl = new LineEditWidget;
104131 m_autoUrl->setPlaceholderText (tr (" Optional" ));
105132 m_autoUrl->setTitle (tr (" Configuration URL" ));
@@ -108,9 +135,43 @@ SysProxyModule::SysProxyModule(QObject *parent)
108135 connect (proxyController, &ProxyController::autoProxyChanged, m_autoUrl, &LineEditWidget::setText);
109136 autoGroup->appendItem (m_autoUrl);
110137 resetData (ProxyMethod::Auto);
111- }));
112- m_modules.append (new WidgetModule<QWidget>(" system_proxy_manual_group" , QString (), this , &SysProxyModule::initManualView));
113- m_modules.append (new WidgetModule<QWidget>); // 加个空的保证下面有弹簧
138+ });
139+ appendChild (m_urlConfigureModule);
140+
141+ m_httpProxyModule = initProxyGroup (m_httpAddr, m_httpPort, tr (" HTTP Proxy" )) ;
142+ appendChild (m_httpProxyModule);
143+
144+ m_httpsProxyModule = initProxyGroup (m_httpsAddr, m_httpsPort, tr (" HTTPS Proxy" ));
145+ appendChild (m_httpsProxyModule);
146+ m_ftpProxyModule = initProxyGroup (m_ftpAddr, m_ftpPort, tr (" FTP Proxy" ));
147+ appendChild (m_ftpProxyModule);
148+ m_socketsModule = initProxyGroup (m_socksAddr, m_socksPort, tr (" SOCKS Proxy" ));
149+ appendChild (m_socketsModule);
150+ m_editLineModule = new ItemModule (" " , " " , [ this ](ModuleObject *module ) {
151+ m_ignoreList = new DTextEdit;
152+ m_ignoreList->setAccessibleName (" ProxyPage_ignoreList" );
153+ m_ignoreList->installEventFilter (this );
154+ QLabel *ignoreTips = new QLabel;
155+ ignoreTips->setWordWrap (true );
156+ ignoreTips->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding);
157+ ignoreTips->setAlignment (Qt::AlignTop | Qt::AlignLeft);
158+ ignoreTips->setText (tr (" Ignore the proxy configurations for the above hosts and domains" ));
159+ resetData (ProxyMethod::Manual);
160+ ProxyController *proxyController = NetworkController::instance ()->proxyController ();
161+ connect (proxyController, &ProxyController::proxyIgnoreHostsChanged, m_ignoreList, [this ](const QString &hosts) {
162+ const QTextCursor cursor = m_ignoreList->textCursor ();
163+ m_ignoreList->blockSignals (true );
164+ m_ignoreList->setPlainText (hosts);
165+ m_ignoreList->setTextCursor (cursor);
166+ m_ignoreList->blockSignals (false );
167+ });
168+ connect (proxyController, &ProxyController::proxyChanged, m_httpAddr, [this ]() {
169+ resetData (ProxyMethod::Manual);
170+ });
171+ return m_ignoreList;
172+ },false );
173+ appendChild (m_editLineModule);
174+
114175 ModuleObject *extra = new WidgetModule<ButtonTuple>(" save" , tr (" Save" , " button" ), [this ](ButtonTuple *buttonTuple) {
115176 m_buttonTuple = buttonTuple;
116177 m_buttonTuple->leftButton ()->setText (tr (" Cancel" , " button" ));
@@ -128,7 +189,7 @@ SysProxyModule::SysProxyModule(QObject *parent)
128189 });
129190 });
130191 extra->setExtra ();
131- m_modules. append (extra);
192+ appendChild (extra);
132193 NetworkController::instance ()->proxyController ()->querySysProxyData ();
133194 uiMethodChanged (NetworkController::instance ()->proxyController ()->proxyMethod ());
134195}
@@ -143,91 +204,7 @@ void SysProxyModule::active()
143204
144205void SysProxyModule::deactive ()
145206{
146- m_proxySwitch = nullptr ;
147- m_proxyTypeBox = nullptr ;
148- m_autoUrl = nullptr ;
149- m_httpAddr = nullptr ;
150- m_httpPort = nullptr ;
151- m_httpsAddr = nullptr ;
152- m_httpsPort = nullptr ;
153- m_ftpAddr = nullptr ;
154- m_ftpPort = nullptr ;
155- m_socksAddr = nullptr ;
156- m_socksPort = nullptr ;
157- m_ignoreList = nullptr ;
158- m_buttonTuple = nullptr ;
159- }
160-
161- void SysProxyModule::initManualView (QWidget *w)
162- {
163- // 手动代理编辑界面处理逻辑提取
164- auto initProxyGroup = [this ](LineEditWidget *&proxyEdit, LineEditWidget *&portEdit, const QString &proxyTitle, SettingsGroup *&group) {
165- proxyEdit = new LineEditWidget (group);
166- proxyEdit->setPlaceholderText (tr (" Optional" ));
167- proxyEdit->setTitle (proxyTitle);
168- proxyEdit->textEdit ()->installEventFilter (this );
169- portEdit = new LineEditWidget;
170- portEdit->setPlaceholderText (tr (" Optional" ));
171- portEdit->setTitle (tr (" Port" ));
172- portEdit->textEdit ()->installEventFilter (this );
173- group->appendItem (proxyEdit);
174- group->appendItem (portEdit);
175- connect (portEdit->textEdit (), &QLineEdit::textChanged, this , [=](const QString &str) {
176- if (str.toInt () < 0 ) {
177- portEdit->setText (" 0" );
178- } else if (str.toInt () > 65535 ) {
179- portEdit->setText (" 65535" );
180- }
181- });
182- };
183207
184- // 手动代理编辑界面控件初始化
185- SettingsGroup *httpGroup = new SettingsGroup ();
186- initProxyGroup (m_httpAddr, m_httpPort, tr (" HTTP Proxy" ), httpGroup);
187-
188- SettingsGroup *httpsGroup = new SettingsGroup ();
189- initProxyGroup (m_httpsAddr, m_httpsPort, tr (" HTTPS Proxy" ), httpsGroup);
190-
191- SettingsGroup *ftpGroup = new SettingsGroup ();
192- initProxyGroup (m_ftpAddr, m_ftpPort, tr (" FTP Proxy" ), ftpGroup);
193-
194- SettingsGroup *socksGroup = new SettingsGroup ();
195- initProxyGroup (m_socksAddr, m_socksPort, tr (" SOCKS Proxy" ), socksGroup);
196-
197- // 手动代理界面忽略主机编辑框初始化
198- m_ignoreList = new DTextEdit (w);
199- m_ignoreList->setAccessibleName (" ProxyPage_ignoreList" );
200- m_ignoreList->installEventFilter (this );
201- QLabel *ignoreTips = new QLabel (w);
202- ignoreTips->setWordWrap (true );
203- ignoreTips->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Expanding);
204- ignoreTips->setAlignment (Qt::AlignTop | Qt::AlignLeft);
205- ignoreTips->setText (tr (" Ignore the proxy configurations for the above hosts and domains" ));
206-
207- // 手动代理界面布局
208- QVBoxLayout *manualLayout = new QVBoxLayout (w);
209- manualLayout->addWidget (httpGroup);
210- manualLayout->addWidget (httpsGroup);
211- manualLayout->addWidget (ftpGroup);
212- manualLayout->addWidget (socksGroup);
213- manualLayout->addWidget (m_ignoreList);
214- manualLayout->addWidget (ignoreTips);
215- manualLayout->setMargin (0 );
216- manualLayout->setSpacing (10 );
217-
218- resetData (ProxyMethod::Manual);
219- ProxyController *proxyController = NetworkController::instance ()->proxyController ();
220- connect (proxyController, &ProxyController::proxyIgnoreHostsChanged, m_ignoreList, [this ](const QString &hosts) {
221- const QTextCursor cursor = m_ignoreList->textCursor ();
222- m_ignoreList->blockSignals (true );
223- m_ignoreList->setPlainText (hosts);
224- m_ignoreList->setTextCursor (cursor);
225- m_ignoreList->blockSignals (false );
226- });
227-
228- connect (proxyController, &ProxyController::proxyChanged, m_httpAddr, [this ]() {
229- resetData (ProxyMethod::Manual);
230- });
231208}
232209
233210void SysProxyModule::applySettings ()
@@ -251,29 +228,18 @@ void SysProxyModule::applySettings()
251228
252229void SysProxyModule::uiMethodChanged (ProxyMethod uiMethod)
253230{
254- int i = 0 ;
255- for (ModuleObject *module : m_modules) {
256- if (module ->name () == " system_proxy_box" ) {
257- if (uiMethod != ProxyMethod::None)
258- insertChild (i++, module );
259- else
260- removeChild (module );
261- } else if (module ->name () == " system_proxy_auto_group" ) {
262- if (uiMethod == ProxyMethod::Auto)
263- insertChild (i++, module );
264- else
265- removeChild (module );
266- } else if (module ->name () == " system_proxy_manual_group" ) {
267- if (uiMethod == ProxyMethod::Manual)
268- insertChild (i++, module );
269- else
270- removeChild (module );
271- } else {
272- insertChild (i++, module );
273- }
274- }
275- if (m_buttonTuple)
231+ if (!m_buttonTuple.isNull ()) {
232+ m_urlConfigureModule->setVisible (uiMethod == ProxyMethod::Auto);
233+
234+ m_httpProxyModule->setVisible (uiMethod == ProxyMethod::Manual);
235+ m_httpsProxyModule->setVisible (uiMethod == ProxyMethod::Manual);
236+ m_ftpProxyModule->setVisible (uiMethod == ProxyMethod::Manual);
237+ m_socketsModule->setVisible (uiMethod == ProxyMethod::Manual);
238+ m_editLineModule->setVisible (uiMethod == ProxyMethod::Manual);
239+
240+ m_systemProxyTypeModule->setVisible (uiMethod != ProxyMethod::None);
276241 m_buttonTuple->setVisible (uiMethod != ProxyMethod::None);
242+ }
277243}
278244
279245void SysProxyModule::resetData (ProxyMethod uiMethod)
0 commit comments