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("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
|
||||||
|
|||||||
@@ -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")
|
||||||
@@ -102,7 +116,7 @@ class InstallerWindow(Adw.ApplicationWindow):
|
|||||||
|
|
||||||
def on_back_clicked(self, button):
|
def on_back_clicked(self, button):
|
||||||
current_page = self.page_ids[self.current_page_index]
|
current_page = self.page_ids[self.current_page_index]
|
||||||
|
|
||||||
# Default: go back one page
|
# Default: go back one page
|
||||||
next_prev_index = self.current_page_index - 1
|
next_prev_index = self.current_page_index - 1
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user