Better - force selection, gray out button
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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")
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user