Skip to content

Commit 76e4bc9

Browse files
authored
gui: improve settings dialog layout (#1041)
1 parent f5a1089 commit 76e4bc9

8 files changed

Lines changed: 60 additions & 13 deletions

File tree

feeluown/gui/ui.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,12 @@ def _setup_ui(self):
9494

9595
self._app.resize(960, 600)
9696

97-
def _open_settings_dialog(self):
97+
def create_settings_dialog(self):
9898
dialog = SettingsDialog(self._app, self._app)
99+
return dialog
100+
101+
def _open_settings_dialog(self):
102+
dialog = self.create_settings_dialog()
99103
dialog.exec()
100104

101105
def toggle_player_bar(self):

feeluown/gui/uimain/toolbar.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
SearchSwitchButton,
1010
SettingsButton,
1111
)
12-
from feeluown.gui.components import NetworkStatusButton
1312
from feeluown.gui.widgets.magicbox import MagicBox
14-
from feeluown.gui.widgets.statusline import StatusLine, StatusLineItem
1513
from feeluown.i18n import t
1614

1715
if TYPE_CHECKING:
@@ -44,11 +42,6 @@ def __init__(self, app: "GuiApp", parent=None):
4442
self._stacked_widget.addWidget(self.magicbox)
4543
self._stack_switch.hide()
4644

47-
self.status_line = StatusLine(self._app)
48-
self.network_status_button = NetworkStatusButton(length=ButtonSize[0])
49-
self.status_line.add_item(
50-
StatusLineItem("network-status", self.network_status_button)
51-
)
5245
self.settings_btn = SettingsButton(length=ButtonSize[0])
5346

5447
# initialize widgets
@@ -73,7 +66,6 @@ def _setup_ui(self):
7366
self._layout.addWidget(self._stacked_widget)
7467
self._layout.addWidget(self._stack_switch)
7568
self._layout.addSpacing(40)
76-
self._layout.addWidget(self.status_line)
7769
self._layout.addWidget(self.settings_btn)
7870

7971
# assume the magicbox height is about 30

feeluown/gui/widgets/settings.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from feeluown.i18n import t
1313
from feeluown.gui.widgets.magicbox import KeySourceIn
1414
from feeluown.gui.widgets.header import MidHeader
15-
from feeluown.gui.components import LyricButton, WatchButton
15+
from feeluown.gui.components import LyricButton, NetworkStatusButton, WatchButton
1616

1717

1818
class _ProviderCheckBox(QCheckBox):
@@ -73,6 +73,16 @@ def __init__(self, app, *args, **kwargs):
7373
self._layout.addStretch(0)
7474

7575

76+
class NetworkSettings(QWidget):
77+
def __init__(self, *args, **kwargs):
78+
super().__init__(*args, **kwargs)
79+
80+
self.network_status_button = NetworkStatusButton()
81+
self._layout = QHBoxLayout(self)
82+
self._layout.addWidget(self.network_status_button)
83+
self._layout.addStretch(0)
84+
85+
7686
class AISettings(QWidget):
7787
def __init__(self, app, *args, **kwargs):
7888
super().__init__(*args, **kwargs)
@@ -85,7 +95,7 @@ def __init__(self, app, *args, **kwargs):
8595
self._layout.addWidget(self._prompt_editor)
8696
self._layout.addWidget(self._save_btn)
8797
self._prompt_editor.setPlainText(self._app.config.AI_RADIO_PROMPT)
88-
self._prompt_editor.setMaximumHeight(200)
98+
self._prompt_editor.setMaximumHeight(96)
8999

90100
self._save_btn.clicked.connect(self.save_prompt)
91101

@@ -116,6 +126,10 @@ def render(self):
116126
self._layout.addWidget(toolbar)
117127
self._layout.addWidget(MidHeader(t("ai-radio-prompt")))
118128
self._layout.addWidget(AISettings(self._app))
129+
self._layout.addWidget(MidHeader(t("network")))
130+
network_settings = NetworkSettings()
131+
self.network_status_button = network_settings.network_status_button
132+
self._layout.addWidget(network_settings)
119133
self._layout.addWidget(MidHeader(t("player")))
120134
self._layout.addWidget(PlayerSettings(self._app))
121135
self._layout.addStretch(0)

feeluown/i18n/assets/en-US/app.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ app-config = App Configuration
324324
save-config = Save
325325
search-providers = Search { -provider(capitalization: "uppercase") }s
326326
ai-radio-prompt = AI Radio (Prompt)
327+
network = Network
327328
player = Player
328329
# feeluown.gui.widgets.login
329330
# ----------------------------------------

feeluown/i18n/assets/ja-JP/app.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ app-config = アプリ設定
299299
save-config = 保存
300300
search-providers = 検索ソース
301301
ai-radio-prompt = AI ラジオ(プロンプト)
302+
network = ネットワーク
302303
player = プレイヤー
303304
304305
# feeluown.gui.widgets.login

feeluown/i18n/assets/zh-CN/app.ftl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ app-config = 应用配置
299299
save-config = 保存
300300
search-providers = 搜索来源
301301
ai-radio-prompt = AI 电台 (提示词)
302+
network = 网络
302303
player = 播放器
303304
304305
# feeluown.gui.widgets.login

tests/app/test_gui_app.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def test_gui_app_initialize(qtbot, mocker, args, config, noharm):
1515
app.initialize()
1616

1717

18-
def test_gui_app_initialize_updates_network_status_button_tooltip(
18+
def test_gui_app_settings_dialog_network_status_button_detects_proxy(
1919
qtbot, mocker, args, config, noharm
2020
):
2121
mocker.patch('feeluown.app.app.TaskManager')
@@ -30,6 +30,9 @@ def test_gui_app_initialize_updates_network_status_button_tooltip(
3030
mocker.patch.object(app, 'about_to_exit')
3131
app.initialize()
3232

33-
assert app.ui.bottom_panel.network_status_button.toolTip() == t(
33+
dialog = app.ui.create_settings_dialog()
34+
qtbot.addWidget(dialog)
35+
36+
assert dialog.network_status_button.toolTip() == t(
3437
"proxy-detected", proxyInfo="http=http://127.0.0.1:7890"
3538
) + "\n\n" + t("proxy-click-to-refresh")

tests/gui/widgets/test_settings.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from feeluown.gui.components.network_status import NetworkStatusButton
2+
from feeluown.gui.widgets.settings import AISettings, SettingsDialog
3+
4+
5+
def test_settings_dialog_has_network_status_button(qtbot, app_mock):
6+
app_mock.browser.local_storage.get.return_value = None
7+
app_mock.library.list.return_value = []
8+
app_mock.config.AI_RADIO_PROMPT = ""
9+
10+
dialog = SettingsDialog(app_mock)
11+
qtbot.addWidget(dialog)
12+
13+
assert isinstance(dialog.network_status_button, NetworkStatusButton)
14+
15+
16+
def test_bottom_panel_does_not_show_network_status_button(qtbot, app_mock):
17+
from feeluown.gui.uimain.toolbar import BottomPanel
18+
19+
panel = BottomPanel(app_mock)
20+
qtbot.addWidget(panel)
21+
22+
assert not hasattr(panel, "network_status_button")
23+
24+
25+
def test_ai_settings_prompt_editor_is_compact(qtbot, app_mock):
26+
app_mock.config.AI_RADIO_PROMPT = ""
27+
28+
settings = AISettings(app_mock)
29+
qtbot.addWidget(settings)
30+
31+
assert settings._prompt_editor.maximumHeight() == 96

0 commit comments

Comments
 (0)