From 6483e82eaed9c9b53cb0fc82eee1f08f4f59c87b Mon Sep 17 00:00:00 2001 From: Stephen Horvath Date: Tue, 18 Mar 2025 17:08:48 +1000 Subject: [PATCH] Refactor workspace and add about page --- yafi/ui/about.ui | 19 ++++++++++++++++ battery.ui => yafi/ui/battery.ui | 0 hardware.ui => yafi/ui/hardware.ui | 0 leds.ui => yafi/ui/leds.ui | 0 thermals.ui => yafi/ui/thermals.ui | 0 yafi.cmb => yafi/ui/yafi.cmb | 17 +++++++++++--- yafi.ui => yafi/ui/yafi.ui | 0 yafi.py => yafi/yafi.py | 36 ++++++++++++++++++++++++------ 8 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 yafi/ui/about.ui rename battery.ui => yafi/ui/battery.ui (100%) rename hardware.ui => yafi/ui/hardware.ui (100%) rename leds.ui => yafi/ui/leds.ui (100%) rename thermals.ui => yafi/ui/thermals.ui (100%) rename yafi.cmb => yafi/ui/yafi.cmb (94%) rename yafi.ui => yafi/ui/yafi.ui (100%) rename yafi.py => yafi/yafi.py (77%) diff --git a/yafi/ui/about.ui b/yafi/ui/about.ui new file mode 100644 index 0000000..b3a4f03 --- /dev/null +++ b/yafi/ui/about.ui @@ -0,0 +1,19 @@ + + + + + + + + application-default-icon + Yet Another Framework Interface + YAFI is another GUI for the Framework Laptop Embedded Controller. +It is written in Python with a GTK3 theme, and uses the `CrOS_EC_Python` library to communicate with the EC. + Copyright © 2025 Stephen Horvath + Stephen Horvath (Steve-Tech) + https://github.com/Steve-Tech/YAFI/issues + gpl-2-0 + 0.1 + https://github.com/Steve-Tech/YAFI + + diff --git a/battery.ui b/yafi/ui/battery.ui similarity index 100% rename from battery.ui rename to yafi/ui/battery.ui diff --git a/hardware.ui b/yafi/ui/hardware.ui similarity index 100% rename from hardware.ui rename to yafi/ui/hardware.ui diff --git a/leds.ui b/yafi/ui/leds.ui similarity index 100% rename from leds.ui rename to yafi/ui/leds.ui diff --git a/thermals.ui b/yafi/ui/thermals.ui similarity index 100% rename from thermals.ui rename to yafi/ui/thermals.ui diff --git a/yafi.cmb b/yafi/ui/yafi.cmb similarity index 94% rename from yafi.cmb rename to yafi/ui/yafi.cmb index c1765eb..d8d2953 100644 --- a/yafi.cmb +++ b/yafi/ui/yafi.cmb @@ -6,7 +6,8 @@ (2,None,None,"thermals.ui","The Thermals page for YAFI",None,"Steve-Tech",None,None,None,None), (3,None,None,"leds.ui","The LEDs page for YAFI",None,"Steve-Tech",None,None,None,None), (4,None,None,"battery.ui","The Battery page for YAFI",None,"Steve-Tech",None,None,None,None), - (5,None,None,"hardware.ui","The Hardware page for YAFI","Steve-Tech",None,None,None,None,None) + (5,None,None,"hardware.ui","The Hardware page for YAFI","Steve-Tech",None,None,None,None,None), + (6,None,None,"about.ui","The About page for YAFI","Steve-Tech",None,None,None,None,None) (1,1,"AdwApplicationWindow","root",None,None,None,None,0,None,None), @@ -97,7 +98,8 @@ (5,12,"AdwSwitchRow",None,2,None,None,None,4,None,None), (5,13,"GtkBox",None,9,None,None,None,0,None,None), (5,14,"GtkBox",None,6,None,None,None,0,None,None), - (5,15,"GtkSwitch",None,14,None,None,None,0,None,None) + (5,15,"GtkSwitch",None,14,None,None,None,0,None,None), + (6,1,"AdwAboutWindow","about-root",None,None,None,None,0,None,None) (1,1,"GtkWindow","default-height","500",None,None,None,None,None,None,None,None,None), @@ -285,7 +287,16 @@ (5,14,"GtkWidget","halign","end",0,None,None,None,None,None,None,None,None), (5,14,"GtkWidget","valign","center",0,None,None,None,None,None,None,None,None), (5,15,"GtkSwitch","active","True",0,None,None,None,None,None,None,None,None), - (5,15,"GtkWidget","sensitive","False",0,None,None,None,None,None,None,None,None) + (5,15,"GtkWidget","sensitive","False",0,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","application-icon","application-default-icon",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","application-name","Yet Another Framework Interface",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","comments","YAFI is another GUI for the Framework Laptop Embedded Controller.\nIt is written in Python with a GTK3 theme, and uses the `CrOS_EC_Python` library to communicate with the EC.",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","copyright","Copyright © 2025 Stephen Horvath",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","developers","Stephen Horvath (Steve-Tech)",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","issue-url","https://github.com/Steve-Tech/YAFI/issues",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","license-type","gpl-2-0",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","version","0.1",None,None,None,None,None,None,None,None,None), + (6,1,"AdwAboutWindow","website","https://github.com/Steve-Tech/YAFI",None,None,None,None,None,None,None,None,None) (1,17,"GtkWidget",1,1,None,None,None,None,None,None), diff --git a/yafi.ui b/yafi/ui/yafi.ui similarity index 100% rename from yafi.ui rename to yafi/ui/yafi.ui diff --git a/yafi.py b/yafi/yafi.py similarity index 77% rename from yafi.py rename to yafi/yafi.py index 3b88d9e..563cd0b 100644 --- a/yafi.py +++ b/yafi/yafi.py @@ -18,7 +18,7 @@ class YAFI(Adw.Application): def _thermals_page(self, builder): # Load the thermals.ui file thermals_builder = Gtk.Builder() - thermals_builder.add_from_file("thermals.ui") + thermals_builder.add_from_file("ui/thermals.ui") # Get the root widget from the thermals.ui file thermals_root = thermals_builder.get_object("thermals-root") @@ -62,7 +62,7 @@ class YAFI(Adw.Application): def _leds_page(self, builder): # Load the leds.ui file leds_builder = Gtk.Builder() - leds_builder.add_from_file("leds.ui") + leds_builder.add_from_file("ui/leds.ui") # Get the root widget from the leds.ui file leds_root = leds_builder.get_object("leds-root") @@ -72,7 +72,7 @@ class YAFI(Adw.Application): def _battery_page(self, builder): # Load the battery.ui file battery_builder = Gtk.Builder() - battery_builder.add_from_file("battery.ui") + battery_builder.add_from_file("ui/battery.ui") # Get the root widget from the battery.ui file battery_root = battery_builder.get_object("battery-root") @@ -82,21 +82,37 @@ class YAFI(Adw.Application): def _hardware_page(self, builder): # Load the hardware.ui file hardware_builder = Gtk.Builder() - hardware_builder.add_from_file("hardware.ui") + hardware_builder.add_from_file("ui/hardware.ui") # Get the root widget from the hardware.ui file hardware_root = hardware_builder.get_object("hardware-root") self._change_page(builder, hardware_root) + def _about_page(self, app_builder): + # Open About dialog + builder = Gtk.Builder() + builder.add_from_file("ui/about.ui") + + about = builder.get_object("about-root") + about.set_modal(True) + about.set_transient_for(self.win) + + # Reset the selection in the navbar + navbar = app_builder.get_object("navbar") + about.connect("close-request", lambda _: navbar.select_row(navbar.get_row_at_index(self.current_page))) + + about.present() + def on_activate(self, app): # Create a Builder builder = Gtk.Builder() - builder.add_from_file("yafi.ui") + builder.add_from_file("ui/yafi.ui") + self.current_page = 0 self._thermals_page(builder) - pages = (("Thermals", self._thermals_page), ("LEDs", self._leds_page), ("Battery", self._battery_page), ("Hardware", self._hardware_page), ("About", self._leds_page)) + pages = (("Thermals", self._thermals_page), ("LEDs", self._leds_page), ("Battery", self._battery_page), ("Hardware", self._hardware_page), ("About", self._about_page)) # Build the navbar navbar = builder.get_object("navbar") @@ -104,8 +120,14 @@ class YAFI(Adw.Application): row = Gtk.ListBoxRow() row.set_child(Gtk.Label(label=page[0])) navbar.append(row) + + def switch_page(page): + # About page is a special case + if page != len(pages) - 1: + self.current_page = page + pages[page][1](builder) - navbar.connect("row-activated", lambda box, row: pages[row.get_index()][1](builder)) + navbar.connect("row-activated", lambda box, row: switch_page(row.get_index())) # Obtain and show the main window self.win = builder.get_object("root")