feat(lite): add tray settings and reset controls
This commit is contained in:
+105
-4
@@ -9,6 +9,7 @@ from PyQt5.QtCore import Qt, QTimer, pyqtSignal
|
||||
from PyQt5.QtWidgets import (
|
||||
QApplication, QComboBox, QDialog, QFileDialog, QHBoxLayout, QLabel, QLineEdit,
|
||||
QListWidget, QListWidgetItem, QPushButton, QVBoxLayout, QWidget, QTextEdit,
|
||||
QButtonGroup, QMessageBox,
|
||||
)
|
||||
|
||||
from .theme import C_BG, C_BORDER, C_CARD, C_GREEN, C_RED, C_SUBTEXT, C_TEXT, C_TITLE
|
||||
@@ -933,11 +934,16 @@ class SettingsServices:
|
||||
get_builtin_pac: object
|
||||
get_update_via_proxy: object
|
||||
get_skip_update_check: object
|
||||
get_node_display_mode: object
|
||||
get_close_behavior: object
|
||||
parse_port: object
|
||||
set_port: object
|
||||
set_builtin_pac: object
|
||||
set_update_via_proxy: object
|
||||
set_skip_update_check: object
|
||||
set_node_display_mode: object
|
||||
set_close_behavior: object
|
||||
reset_user_config: object
|
||||
open_whitelist: object
|
||||
open_jump: object
|
||||
open_third_party: object
|
||||
@@ -955,7 +961,7 @@ class SettingsDialog(QDialog):
|
||||
self._services = services
|
||||
self.setWindowTitle("设置")
|
||||
self.setWindowIcon(services.load_icon())
|
||||
self.setFixedSize(300, 380)
|
||||
self.setFixedSize(300, 470)
|
||||
self.setStyleSheet(f"""
|
||||
QDialog {{ background-color: {C_BG}; }}
|
||||
QLabel {{ color: {C_TEXT}; font-family: "Microsoft YaHei", "Segoe UI", sans-serif; font-size: 12px; }}
|
||||
@@ -963,8 +969,8 @@ class SettingsDialog(QDialog):
|
||||
padding: 2px 8px; color: {C_TEXT}; font-size: 12px; }}
|
||||
""")
|
||||
layout = QVBoxLayout(self)
|
||||
layout.setSpacing(10)
|
||||
layout.setContentsMargins(20, 10, 20, 10)
|
||||
layout.setSpacing(7)
|
||||
layout.setContentsMargins(20, 8, 20, 8)
|
||||
title = QLabel("设置")
|
||||
title.setStyleSheet(f"color: {C_TITLE}; font-size: 15px; font-weight: bold;")
|
||||
title.setAlignment(Qt.AlignCenter)
|
||||
@@ -991,7 +997,7 @@ class SettingsDialog(QDialog):
|
||||
self.lb_hint.setFixedHeight(14)
|
||||
self.lb_hint.setAlignment(Qt.AlignCenter)
|
||||
layout.addWidget(self.lb_hint)
|
||||
layout.addStretch()
|
||||
layout.addSpacing(2)
|
||||
|
||||
whitelist_row = QHBoxLayout()
|
||||
whitelist_label = QLabel("域名路由")
|
||||
@@ -1092,6 +1098,74 @@ class SettingsDialog(QDialog):
|
||||
self.cb_skip_update.setToolTip("跳过 PAC 数据与程序版本检查(节点更新与登录不受影响),被跳过的检查不输出日志")
|
||||
skip_row.addWidget(self.cb_skip_update)
|
||||
layout.addLayout(skip_row)
|
||||
|
||||
option_style = f"""
|
||||
QPushButton {{ background-color: {C_CARD}; color: {C_SUBTEXT}; border: 1px solid {C_BORDER};
|
||||
border-radius: 6px; padding: 2px 8px; font-size: 11px; min-width: 32px; }}
|
||||
QPushButton:hover {{ background-color: #e3e8ee; color: {C_TEXT}; }}
|
||||
QPushButton:checked {{ background-color: {C_TITLE}; color: #ffffff; border-color: {C_TITLE}; }}
|
||||
"""
|
||||
|
||||
node_display_row = QHBoxLayout()
|
||||
node_display_label = QLabel("节点信息显示")
|
||||
node_display_label.setStyleSheet(f"color: {C_SUBTEXT}; font-size: 12px;")
|
||||
node_display_label.setToolTip("控制主页面节点副标题显示域名还是节点备注")
|
||||
node_display_row.addWidget(node_display_label)
|
||||
node_display_row.addStretch()
|
||||
self.btn_node_domain = QPushButton("域名")
|
||||
self.btn_node_remark = QPushButton("备注")
|
||||
for button in (self.btn_node_domain, self.btn_node_remark):
|
||||
button.setCheckable(True)
|
||||
button.setCursor(Qt.PointingHandCursor)
|
||||
button.setStyleSheet(option_style)
|
||||
node_display_row.addWidget(button)
|
||||
self.node_display_group = QButtonGroup(self)
|
||||
self.node_display_group.setExclusive(True)
|
||||
self.node_display_group.addButton(self.btn_node_domain)
|
||||
self.node_display_group.addButton(self.btn_node_remark)
|
||||
if services.get_node_display_mode() == "remark":
|
||||
self.btn_node_remark.setChecked(True)
|
||||
else:
|
||||
self.btn_node_domain.setChecked(True)
|
||||
layout.addLayout(node_display_row)
|
||||
|
||||
close_behavior_row = QHBoxLayout()
|
||||
close_behavior_label = QLabel("默认关闭行为")
|
||||
close_behavior_label.setStyleSheet(f"color: {C_SUBTEXT}; font-size: 12px;")
|
||||
close_behavior_label.setToolTip("点击主窗口关闭按钮时退出程序,或隐藏到系统托盘")
|
||||
close_behavior_row.addWidget(close_behavior_label)
|
||||
close_behavior_row.addStretch()
|
||||
self.btn_close_exit = QPushButton("退出")
|
||||
self.btn_close_tray = QPushButton("托盘")
|
||||
for button in (self.btn_close_exit, self.btn_close_tray):
|
||||
button.setCheckable(True)
|
||||
button.setCursor(Qt.PointingHandCursor)
|
||||
button.setStyleSheet(option_style)
|
||||
close_behavior_row.addWidget(button)
|
||||
self.close_behavior_group = QButtonGroup(self)
|
||||
self.close_behavior_group.setExclusive(True)
|
||||
self.close_behavior_group.addButton(self.btn_close_exit)
|
||||
self.close_behavior_group.addButton(self.btn_close_tray)
|
||||
if services.get_close_behavior() == "tray":
|
||||
self.btn_close_tray.setChecked(True)
|
||||
else:
|
||||
self.btn_close_exit.setChecked(True)
|
||||
layout.addLayout(close_behavior_row)
|
||||
|
||||
reset_row = QHBoxLayout()
|
||||
reset_label = QLabel("重置用户配置")
|
||||
reset_label.setStyleSheet(f"color: {C_SUBTEXT}; font-size: 12px;")
|
||||
reset_label.setToolTip("重置本地偏好、域名路由、跳板和当前节点选择;不会删除登录和订阅")
|
||||
reset_row.addWidget(reset_label)
|
||||
reset_row.addStretch()
|
||||
self.btn_reset = QPushButton("重置")
|
||||
self.btn_reset.setCursor(Qt.PointingHandCursor)
|
||||
self.btn_reset.setStyleSheet(option_style)
|
||||
self.btn_reset.setEnabled(not port_locked)
|
||||
self.btn_reset.clicked.connect(self._reset_user_config)
|
||||
reset_row.addWidget(self.btn_reset)
|
||||
layout.addLayout(reset_row)
|
||||
|
||||
layout.addLayout(log_row)
|
||||
layout.addStretch()
|
||||
|
||||
@@ -1148,6 +1222,27 @@ class SettingsDialog(QDialog):
|
||||
def _open_logs(self):
|
||||
self._services.open_logs(self)
|
||||
|
||||
def _reset_user_config(self):
|
||||
reply = QMessageBox.question(
|
||||
self,
|
||||
"重置用户配置",
|
||||
"确定要恢复本地偏好、域名路由、跳板和当前节点选择的默认值吗?\n\n"
|
||||
"登录凭据、节点缓存、第三方订阅和 PAC 数据不会被删除。",
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No,
|
||||
)
|
||||
if reply != QMessageBox.Yes:
|
||||
return
|
||||
self._services.reset_user_config()
|
||||
self.ed_port.setText(str(self._services.get_port()))
|
||||
self.cb_builtin_pac.setChecked(self._services.get_builtin_pac())
|
||||
self.cb_update_proxy.setChecked(self._services.get_update_via_proxy())
|
||||
self.cb_skip_update.setChecked(self._services.get_skip_update_check())
|
||||
self.btn_node_domain.setChecked(True)
|
||||
self.btn_close_exit.setChecked(True)
|
||||
self.lb_hint.setText("用户配置已重置")
|
||||
self.lb_hint.setStyleSheet(f"color: {C_GREEN}; font-size: 11px;")
|
||||
|
||||
def _save_settings(self):
|
||||
port = self._services.parse_port(self.ed_port.text())
|
||||
if port is None:
|
||||
@@ -1158,6 +1253,12 @@ class SettingsDialog(QDialog):
|
||||
self._services.set_builtin_pac(bool(self.cb_builtin_pac.isChecked()))
|
||||
self._services.set_update_via_proxy(bool(self.cb_update_proxy.isChecked()))
|
||||
self._services.set_skip_update_check(bool(self.cb_skip_update.isChecked()))
|
||||
self._services.set_node_display_mode(
|
||||
"remark" if self.btn_node_remark.isChecked() else "domain"
|
||||
)
|
||||
self._services.set_close_behavior(
|
||||
"tray" if self.btn_close_tray.isChecked() else "exit"
|
||||
)
|
||||
self.ed_port.setText(str(port))
|
||||
self.lb_hint.setText("已保存,下次开启代理生效")
|
||||
self.lb_hint.setStyleSheet(f"color: {C_GREEN}; font-size: 11px;")
|
||||
|
||||
Reference in New Issue
Block a user