Skip to content

Commit 68f7620

Browse files
committed
fix: handle proxy page
Log: use dcc widget not widget manually
1 parent e92220c commit 68f7620

2 files changed

Lines changed: 98 additions & 118 deletions

File tree

dcc-network-plugin/window/sysproxymodule.cpp

Lines changed: 82 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
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

144205
void 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

233210
void SysProxyModule::applySettings()
@@ -251,29 +228,18 @@ void SysProxyModule::applySettings()
251228

252229
void 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

279245
void SysProxyModule::resetData(ProxyMethod uiMethod)

dcc-network-plugin/window/sysproxymodule.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
#ifndef SYSPROXYMODULE_H
66
#define SYSPROXYMODULE_H
77
#include "interface/pagemodule.h"
8+
#include "widgets/widgetmodule.h"
89

910
#include <dtkwidget_global.h>
11+
#include <QPointer>
1012

1113
DWIDGET_BEGIN_NAMESPACE
1214
class DTextEdit;
@@ -18,6 +20,10 @@ class LineEditWidget;
1820
class ButtonTuple;
1921
class SwitchWidget;
2022
class ComboxWidget;
23+
class SettingsGroup;
24+
class SettingsGroupModule;
25+
class ItemModule;
26+
class ComboxWidget;
2127
}
2228

2329
namespace dde {
@@ -37,7 +43,6 @@ class SysProxyModule : public DCC_NAMESPACE::PageModule
3743
virtual void deactive() override;
3844

3945
private Q_SLOTS:
40-
void initManualView(QWidget *w);
4146
void applySettings();
4247
void uiMethodChanged(dde::network::ProxyMethod uiMethod);
4348
void resetData(dde::network::ProxyMethod uiMethod);
@@ -52,6 +57,15 @@ private Q_SLOTS:
5257
DCC_NAMESPACE::SwitchWidget *m_proxySwitch;
5358
DCC_NAMESPACE::ComboxWidget *m_proxyTypeBox;
5459

60+
WidgetModule<DCC_NAMESPACE::ComboxWidget> *m_systemProxyTypeModule;
61+
WidgetModule<DCC_NAMESPACE::SettingsGroup> *m_urlConfigureModule;
62+
63+
DCC_NAMESPACE::SettingsGroupModule *m_httpProxyModule;
64+
DCC_NAMESPACE::SettingsGroupModule *m_httpsProxyModule;
65+
DCC_NAMESPACE::SettingsGroupModule *m_ftpProxyModule;
66+
DCC_NAMESPACE::SettingsGroupModule *m_socketsModule;
67+
DCC_NAMESPACE::ItemModule *m_editLineModule;
68+
5569
DCC_NAMESPACE::LineEditWidget *m_autoUrl;
5670

5771
DCC_NAMESPACE::LineEditWidget *m_httpAddr;
@@ -63,7 +77,7 @@ private Q_SLOTS:
6377
DCC_NAMESPACE::LineEditWidget *m_socksAddr;
6478
DCC_NAMESPACE::LineEditWidget *m_socksPort;
6579
DTK_WIDGET_NAMESPACE::DTextEdit *m_ignoreList;
66-
DCC_NAMESPACE::ButtonTuple *m_buttonTuple;
80+
QPointer<DCC_NAMESPACE::ButtonTuple> m_buttonTuple;
6781

6882
dde::network::ProxyMethod m_uiMethod; // ui修改的ProxyMethod
6983
};

0 commit comments

Comments
 (0)