Setup the user interface.
(self)
| 261 | self._load_models() |
| 262 | |
| 263 | def _setup_ui(self): |
| 264 | """Setup the user interface.""" |
| 265 | # Main box |
| 266 | self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) |
| 267 | self.set_content(self.main_box) |
| 268 | |
| 269 | # Header bar |
| 270 | header = Adw.HeaderBar() |
| 271 | self.main_box.append(header) |
| 272 | |
| 273 | # Status bar |
| 274 | self.status_bar = Adw.Banner() |
| 275 | self.status_bar.set_revealed(False) |
| 276 | self.main_box.append(self.status_bar) |
| 277 | |
| 278 | # Main content - ScrolledWindow |
| 279 | scrolled = Gtk.ScrolledWindow() |
| 280 | scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) |
| 281 | scrolled.set_vexpand(True) |
| 282 | self.main_box.append(scrolled) |
| 283 | |
| 284 | # Content box |
| 285 | content_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=12) |
| 286 | content_box.set_margin_top(12) |
| 287 | content_box.set_margin_bottom(12) |
| 288 | content_box.set_margin_start(12) |
| 289 | content_box.set_margin_end(12) |
| 290 | scrolled.set_child(content_box) |
| 291 | |
| 292 | # ===== Model Selection Section ===== |
| 293 | model_group = Adw.PreferencesGroup(title="Model Selection") |
| 294 | content_box.append(model_group) |
| 295 | |
| 296 | # Model folder row |
| 297 | self.folder_row = Adw.ActionRow( |
| 298 | title="Models Folder", |
| 299 | subtitle=self.launcher.models_dir |
| 300 | ) |
| 301 | self.folder_row.add_suffix(Gtk.Image.new_from_icon_name("folder-open-symbolic")) |
| 302 | self.folder_row.set_activatable(True) |
| 303 | self.folder_row.connect("activated", self._on_browse_folder) |
| 304 | model_group.add(self.folder_row) |
| 305 | |
| 306 | # Model dropdown |
| 307 | model_row = Adw.ComboRow( |
| 308 | title="Select Model", |
| 309 | subtitle="Choose a Live2D model to load" |
| 310 | ) |
| 311 | model_row.set_model(Gtk.StringList.new([])) |
| 312 | self.model_dropdown = model_row |
| 313 | model_group.add(model_row) |
| 314 | |
| 315 | # ===== Launch Parameters Section ===== |
| 316 | params_group = Adw.PreferencesGroup(title="Launch Parameters") |
| 317 | content_box.append(params_group) |
| 318 | |
| 319 | # Scale/Zoom |
| 320 | self.scale_row = Adw.SpinRow( |