|
10 | 10 | QLineEdit, |
11 | 11 | QPushButton, |
12 | 12 | QScrollArea, |
| 13 | + QTabWidget, |
13 | 14 | QToolButton, |
14 | 15 | QVBoxLayout, |
15 | 16 | QWidget, |
|
25 | 26 | from frontend_desktop.widgets.utils import build_h_line |
26 | 27 |
|
27 | 28 |
|
28 | | -class SettingsTab(QWidget): |
| 29 | +class GeneralSettingsTab(QWidget): |
| 30 | + """General settings tab with scrollable content.""" |
| 31 | + |
29 | 32 | def __init__(self, parent=None) -> None: |
30 | 33 | super().__init__(parent) |
31 | 34 |
|
32 | 35 | # create scroll area |
33 | 36 | scroll_area = QScrollArea(self, widgetResizable=True) |
34 | | - scroll_area.setFrameShape(QFrame.Shape.Box) |
35 | | - scroll_area.setFrameShadow(QFrame.Shadow.Sunken) |
| 37 | + scroll_area.setFrameShape(QFrame.Shape.NoFrame) |
36 | 38 |
|
37 | 39 | # create content widget |
38 | 40 | content_widget = QWidget() |
@@ -134,15 +136,12 @@ def __init__(self, parent=None) -> None: |
134 | 136 | self.save_btn = QPushButton("Save Settings", self) |
135 | 137 | self.save_btn.clicked.connect(self._save_settings) |
136 | 138 |
|
137 | | - save_layout = QHBoxLayout() |
138 | | - save_layout.addStretch() |
139 | | - save_layout.addWidget(self.save_btn) |
140 | | - |
141 | 139 | # main layout |
142 | 140 | self.main_layout = QVBoxLayout(self) |
143 | 141 | self.main_layout.setContentsMargins(0, 0, 0, 0) |
144 | 142 | self.main_layout.addWidget(scroll_area) |
145 | | - self.main_layout.addLayout(save_layout) |
| 143 | + self.main_layout.addWidget(self.save_btn, alignment=Qt.AlignmentFlag.AlignRight) |
| 144 | + self.main_layout.addSpacing(6) |
146 | 145 |
|
147 | 146 | @Slot(int) |
148 | 147 | def _change_theme(self, _: int | None = None) -> None: |
@@ -201,3 +200,67 @@ def _reload_preset_editors(self) -> None: |
201 | 200 | self.audio_titles_editor.set_titles(Conf.audio_preset_titles) |
202 | 201 | self.subtitle_titles_editor.set_titles(Conf.subtitle_preset_titles) |
203 | 202 | GSigs().main_window_update_status_tip.emit("Settings saved successfully", 2000) |
| 203 | + |
| 204 | + |
| 205 | +class AboutTab(QWidget): |
| 206 | + """About tab with scrollable content.""" |
| 207 | + |
| 208 | + def __init__(self, parent=None) -> None: |
| 209 | + super().__init__(parent) |
| 210 | + |
| 211 | + # create scroll area |
| 212 | + scroll_area = QScrollArea(self, widgetResizable=True) |
| 213 | + scroll_area.setFrameShape(QFrame.Shape.NoFrame) |
| 214 | + |
| 215 | + # create content widget |
| 216 | + content_widget = QWidget() |
| 217 | + |
| 218 | + ####### UI elements ####### |
| 219 | + app_info_lbl = QLabel( |
| 220 | + f"""<h2 style="text-align: center;">Mp4Forge</h2> |
| 221 | + <span style="font-weight: bold;">Version:</span> {Conf.version}<br> |
| 222 | + <span style="font-weight: bold;">Homepage:</span><a href="https://github.com/jessielw/MP4Forge"> |
| 223 | + https://github.com/jessielw/MP4Forge</a><br> |
| 224 | + <span style="font-weight: bold;">Help:</span> <a href="https://github.com/jessielw/MP4Forge/issues"> |
| 225 | + https://github.com/jessielw/MP4Forge/issues</a>""", |
| 226 | + content_widget, |
| 227 | + wordWrap=True, |
| 228 | + openExternalLinks=True, |
| 229 | + ) |
| 230 | + ####### UI elements ####### |
| 231 | + |
| 232 | + # content layout |
| 233 | + content_layout = QVBoxLayout(content_widget) |
| 234 | + content_layout.addWidget(app_info_lbl) |
| 235 | + content_layout.addStretch() |
| 236 | + |
| 237 | + # set content widget in scroll area |
| 238 | + scroll_area.setWidget(content_widget) |
| 239 | + |
| 240 | + # main layout |
| 241 | + self.main_layout = QVBoxLayout(self) |
| 242 | + self.main_layout.setContentsMargins(0, 0, 0, 0) |
| 243 | + self.main_layout.addWidget(scroll_area) |
| 244 | + |
| 245 | + |
| 246 | +class SettingsTab(QWidget): |
| 247 | + """Main settings tab with notebook interface.""" |
| 248 | + |
| 249 | + def __init__(self, parent=None) -> None: |
| 250 | + super().__init__(parent) |
| 251 | + |
| 252 | + # create tab widget |
| 253 | + self.tab_widget = QTabWidget(self) |
| 254 | + |
| 255 | + # create tabs |
| 256 | + self.general_settings_tab = GeneralSettingsTab(self) |
| 257 | + self.about_tab = AboutTab(self) |
| 258 | + |
| 259 | + # add tabs to widget |
| 260 | + self.tab_widget.addTab(self.general_settings_tab, "General") |
| 261 | + self.tab_widget.addTab(self.about_tab, "About") |
| 262 | + |
| 263 | + # main layout |
| 264 | + self.main_layout = QVBoxLayout(self) |
| 265 | + self.main_layout.setContentsMargins(0, 0, 0, 0) |
| 266 | + self.main_layout.addWidget(self.tab_widget) |
0 commit comments