From 658040c1380b739c6bdc5f610889604ff4a5c39a Mon Sep 17 00:00:00 2001 From: N0VA Date: Mon, 2 Feb 2026 15:08:03 +0100 Subject: [PATCH] Better - force selection, gray out button --- iridium_installer/ui/pages/storage.py | 7 ++++++- iridium_installer/ui/window.py | 26 +++++++++++++++----------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/iridium_installer/ui/pages/storage.py b/iridium_installer/ui/pages/storage.py index 65ef59c..8aacc5e 100644 --- a/iridium_installer/ui/pages/storage.py +++ b/iridium_installer/ui/pages/storage.py @@ -6,10 +6,14 @@ import gi gi.require_version("Gtk", "4.0") gi.require_version("Adw", "1") -from gi.repository import Adw, Gtk +from gi.repository import Adw, GObject, Gtk class StoragePage(Adw.Bin): + __gsignals__ = { + "disk-selected": (GObject.SignalFlags.RUN_FIRST, None, (str,)), + } + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -86,6 +90,7 @@ class StoragePage(Adw.Bin): def on_disk_toggled(self, button, device_name): if button.get_active(): self.selected_disk = device_name + self.emit("disk-selected", device_name) def get_selected_disk(self): return self.selected_disk diff --git a/iridium_installer/ui/window.py b/iridium_installer/ui/window.py index dc23e6d..0b10eee 100644 --- a/iridium_installer/ui/window.py +++ b/iridium_installer/ui/window.py @@ -65,6 +65,7 @@ class InstallerWindow(Adw.ApplicationWindow): # Initialize Pages self.welcome_page = WelcomePage() self.storage_page = StoragePage() + self.storage_page.connect("disk-selected", self.on_disk_selected) self.install_mode_page = InstallModePage() self.partitioning_page = PartitioningPage() self.modules_page = ModulesPage() @@ -81,16 +82,29 @@ class InstallerWindow(Adw.ApplicationWindow): # Initialize view if self.page_ids: self.stack.set_visible_child_name(self.page_ids[0]) + self.update_buttons() def add_page(self, widget, name): self.stack.add_named(widget, name) self.page_ids.append(name) + def on_disk_selected(self, page, device_name): + self.update_buttons() + def update_buttons(self): # Back button state self.back_button.set_sensitive(self.current_page_index > 0) # Next button label/state + current_page_name = self.page_ids[self.current_page_index] + + # Forced selection logic + forced_selection = True + if current_page_name == "storage": + forced_selection = self.storage_page.get_selected_disk() is not None + + self.next_button.set_sensitive(forced_selection) + if self.current_page_index == len(self.page_ids) - 1: self.next_button.set_label("Install") self.next_button.add_css_class("destructive-action") @@ -102,7 +116,7 @@ class InstallerWindow(Adw.ApplicationWindow): def on_back_clicked(self, button): current_page = self.page_ids[self.current_page_index] - + # Default: go back one page next_prev_index = self.current_page_index - 1 @@ -123,16 +137,6 @@ class InstallerWindow(Adw.ApplicationWindow): if current_page_name == "storage": selected_disk = self.storage_page.get_selected_disk() - if not selected_disk: - dialog = Adw.MessageDialog( - transient_for=self, - heading="No Disk Selected", - body="Please select a storage device to proceed." - ) - dialog.add_response("ok", "OK") - dialog.present() - return - self.partitioning_page.load_partitions(selected_disk) next_index = self.current_page_index + 1