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 @@
+
+
+
+
+
+
+
+
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,"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")