Better - force selection, gray out button

This commit is contained in:
2026-02-02 15:08:03 +01:00
parent 7c899b8e86
commit 658040c138
2 changed files with 21 additions and 12 deletions

View File

@@ -6,10 +6,14 @@ import gi
gi.require_version("Gtk", "4.0") gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1") gi.require_version("Adw", "1")
from gi.repository import Adw, Gtk from gi.repository import Adw, GObject, Gtk
class StoragePage(Adw.Bin): class StoragePage(Adw.Bin):
__gsignals__ = {
"disk-selected": (GObject.SignalFlags.RUN_FIRST, None, (str,)),
}
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@@ -86,6 +90,7 @@ class StoragePage(Adw.Bin):
def on_disk_toggled(self, button, device_name): def on_disk_toggled(self, button, device_name):
if button.get_active(): if button.get_active():
self.selected_disk = device_name self.selected_disk = device_name
self.emit("disk-selected", device_name)
def get_selected_disk(self): def get_selected_disk(self):
return self.selected_disk return self.selected_disk

View File

@@ -65,6 +65,7 @@ class InstallerWindow(Adw.ApplicationWindow):
# Initialize Pages # Initialize Pages
self.welcome_page = WelcomePage() self.welcome_page = WelcomePage()
self.storage_page = StoragePage() self.storage_page = StoragePage()
self.storage_page.connect("disk-selected", self.on_disk_selected)
self.install_mode_page = InstallModePage() self.install_mode_page = InstallModePage()
self.partitioning_page = PartitioningPage() self.partitioning_page = PartitioningPage()
self.modules_page = ModulesPage() self.modules_page = ModulesPage()
@@ -81,16 +82,29 @@ class InstallerWindow(Adw.ApplicationWindow):
# Initialize view # Initialize view
if self.page_ids: if self.page_ids:
self.stack.set_visible_child_name(self.page_ids[0]) self.stack.set_visible_child_name(self.page_ids[0])
self.update_buttons()
def add_page(self, widget, name): def add_page(self, widget, name):
self.stack.add_named(widget, name) self.stack.add_named(widget, name)
self.page_ids.append(name) self.page_ids.append(name)
def on_disk_selected(self, page, device_name):
self.update_buttons()
def update_buttons(self): def update_buttons(self):
# Back button state # Back button state
self.back_button.set_sensitive(self.current_page_index > 0) self.back_button.set_sensitive(self.current_page_index > 0)
# Next button label/state # 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: if self.current_page_index == len(self.page_ids) - 1:
self.next_button.set_label("Install") self.next_button.set_label("Install")
self.next_button.add_css_class("destructive-action") self.next_button.add_css_class("destructive-action")
@@ -123,16 +137,6 @@ class InstallerWindow(Adw.ApplicationWindow):
if current_page_name == "storage": if current_page_name == "storage":
selected_disk = self.storage_page.get_selected_disk() 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) self.partitioning_page.load_partitions(selected_disk)
next_index = self.current_page_index + 1 next_index = self.current_page_index + 1