diff --git a/yafi/ui/battery.ui b/yafi/ui/battery.ui index 22a830e..6bff601 100644 --- a/yafi/ui/battery.ui +++ b/yafi/ui/battery.ui @@ -3,7 +3,7 @@ - + vertical @@ -18,13 +18,19 @@ - + + Enable Charge Limiter + + + + + False Limit the maximum charge Charge Limit - + 10.0 @@ -41,6 +47,49 @@ + + + False + Limit the minimum charge + Discharge Limit + + + + + + + 10.0 + 1.0 + 100.0 + + + True + 0 + + + + + + + + + False + Disables the limiter for one charge cycle + Override Charge Limiter + + + end + True + center + + + Override + + + + + + Preserve the battery lifespan by gradually lowering battery charge voltage automatically if the system is connected to AC for more than the set day limit. @@ -55,23 +104,43 @@ - + False False - 0 Current Stage (0 to 2) + + + False + False + Time Until Trigger + + + + + + False + False + Time Until Reset + + + + 1.0 5.0 1.0 - 65535.0 + 99.0 5.0 @@ -84,9 +153,10 @@ + 1.0 5.0 1.0 - 65535.0 + 9999.0 30.0 @@ -97,68 +167,6 @@ - - - False - These options break normal functionality - Advanced Options - - - These options will conflict with the framework options. - 5 - 5 - 5 - 5 - ChromeOS Battery Limiter - - - Maximum Limit - - - - - - - 16.0 - 1.0 - 255.0 - 255.0 - - - True - 0 - - - - - - - - - Minimum Limit - - - - - - - 16.0 - 1.0 - 255.0 - - - True - 0 - - - - - - - - - - diff --git a/yafi/ui/leds.ui b/yafi/ui/leds.ui index a87950b..550e99f 100644 --- a/yafi/ui/leds.ui +++ b/yafi/ui/leds.ui @@ -26,11 +26,10 @@ - 1.0 1.0 1.0 - 3.0 - 3.0 + 2.0 + 2.0 True @@ -50,10 +49,10 @@ - 16.0 + 10.0 1.0 - 255.0 - 255.0 + 100.0 + 100.0 True @@ -82,43 +81,14 @@ - Red - Green - Blue - Yellow - White - Amber + Auto + Off - 4 - Not all devices support colours. Colour - - - Brightness - - - - - - - 16.0 - 1.0 - 255.0 - 255.0 - - - True - 0 - - - - - - @@ -134,41 +104,14 @@ - Red - Green - Blue - Yellow - White - Amber + Auto + Off Colour - - - Brightness - - - - - - - 16.0 - 1.0 - 255.0 - 255.0 - - - True - 0 - - - - - - diff --git a/yafi/ui/yafi.cmb b/yafi/ui/yafi.cmb index d8d2953..a802d06 100644 --- a/yafi/ui/yafi.cmb +++ b/yafi/ui/yafi.cmb @@ -49,44 +49,36 @@ (3,16,"GtkScale","led-kbd-scale",15,None,None,None,0,None,None), (3,17,"GtkAdjustment",None,16,None,None,None,0,None,None), (3,18,"AdwExpanderRow",None,5,None,None,None,3,None,None), - (3,19,"AdwActionRow","led-pwr-255",31,None,None,None,1,None,None), - (3,20,"GtkBox",None,19,None,None,None,0,None,None), - (3,21,"GtkScale","led-pwr-255-scale",20,None,None,None,0,None,None), - (3,22,"GtkAdjustment",None,21,None,None,None,0,None,None), (3,23,"AdwComboRow","led-pwr-colour",31,None,None,None,0,None,None), (3,24,"GtkStringList",None,23,None,None,None,0,None,None), (3,25,"AdwComboRow","led-chg-colour",32,None,None,None,0,None,None), (3,26,"GtkStringList",None,25,None,None,None,0,None,None), - (3,27,"AdwActionRow","led-chg-255",32,None,None,None,1,None,None), - (3,28,"GtkBox",None,27,None,None,None,0,None,None), - (3,29,"GtkScale","led-chg-255-scale",28,None,None,None,0,None,None), - (3,30,"GtkAdjustment",None,29,None,None,None,0,None,None), (3,31,"AdwPreferencesGroup",None,18,None,None,None,0,None,None), (3,32,"AdwPreferencesGroup",None,18,None,None,None,1,None,None), (4,1,"GtkBox","battery-root",None,None,None,None,0,None,None), (4,2,"GtkListBox",None,1,None,None,None,0,None,None), (4,3,"AdwActionRow",None,2,None,None,None,0,None,None), - (4,4,"AdwActionRow","bat-limit",2,None,None,None,1,None,None), + (4,4,"AdwActionRow","chg-limit",2,None,None,None,2,None,None), (4,5,"GtkBox",None,4,None,None,None,0,None,None), - (4,6,"GtkScale","bat-limit-scale",5,None,None,None,0,None,None), + (4,6,"GtkScale","chg-limit-scale",5,None,None,None,0,None,None), (4,7,"GtkAdjustment",None,6,None,None,None,0,None,None), - (4,12,"AdwExpanderRow",None,2,None,None,None,3,None,None), - (4,13,"AdwPreferencesGroup",None,2,None,None,None,2,None,None), - (4,20,"AdwPreferencesGroup",None,12,None,None,None,0,None,None), - (4,23,"AdwActionRow","bat-cros-max",20,None,None,None,0,None,None), - (4,24,"GtkBox",None,23,None,None,None,0,None,None), - (4,25,"GtkScale","led-chg-255-scale",24,None,None,None,0,None,None), - (4,26,"GtkAdjustment",None,25,None,None,None,0,None,None), - (4,27,"AdwSpinRow","bat-ext-trigger",13,None,None,None,3,None,None), + (4,13,"AdwPreferencesGroup",None,2,None,None,None,5,None,None), + (4,27,"AdwSpinRow","bat-ext-trigger",13,None,None,None,5,None,None), (4,28,"GtkAdjustment",None,27,None,None,None,0,None,None), - (4,29,"AdwSpinRow","bat-ext-reset",13,None,None,None,4,None,None), + (4,29,"AdwSpinRow","bat-ext-reset",13,None,None,None,6,None,None), (4,30,"GtkAdjustment",None,29,None,None,None,0,None,None), - (4,31,"AdwActionRow",None,13,None,None,None,2,None,None), + (4,31,"AdwActionRow","bat-ext-stage",13,None,None,None,2,None,None), (4,32,"AdwSwitchRow",None,13,None,None,None,1,None,None), - (4,33,"AdwActionRow","bat-cros-min",20,None,None,None,1,None,None), + (4,33,"AdwActionRow","bat-limit",2,None,None,None,3,None,None), (4,34,"GtkBox",None,33,None,None,None,0,None,None), - (4,35,"GtkScale","led-chg-255-scale_2",34,None,None,None,0,None,None), + (4,35,"GtkScale","bat-limit-scale",34,None,None,None,0,None,None), (4,36,"GtkAdjustment",None,35,None,None,None,0,None,None), + (4,37,"AdwActionRow","chg-limit-override",2,None,None,None,4,None,None), + (4,38,"GtkBox",None,37,None,None,None,0,None,None), + (4,39,"GtkButton","chg-limit-override-btn",38,None,None,None,0,None,None), + (4,40,"AdwSwitchRow","chg-limit-enable",2,None,None,None,1,None,None), + (4,41,"AdwActionRow","bat-ext-trigger-time",13,None,None,None,3,None,None), + (4,42,"AdwActionRow","bat-ext-reset-time",13,None,None,None,4,None,None), (5,1,"GtkBox","hardware-root",None,None,None,None,0,None,None), (5,2,"GtkListBox",None,1,None,None,None,0,None,None), (5,3,"AdwActionRow",None,2,None,None,None,0,None,None), @@ -146,44 +138,25 @@ (3,12,"GtkRange","adjustment",None,0,None,None,None,13,None,None,None,None), (3,12,"GtkRange","round-digits","0",0,None,None,None,None,None,None,None,None), (3,12,"GtkWidget","hexpand","True",0,None,None,None,None,None,None,None,None), - (3,13,"GtkAdjustment","lower","1.0",None,None,None,None,None,None,None,None,None), (3,13,"GtkAdjustment","page-increment","1.0",0,None,None,None,None,None,None,None,None), (3,13,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (3,13,"GtkAdjustment","upper","3.0",0,None,None,None,None,None,None,None,None), - (3,13,"GtkAdjustment","value","3.0",0,None,None,None,None,None,None,None,None), + (3,13,"GtkAdjustment","upper","2.0",0,None,None,None,None,None,None,None,None), + (3,13,"GtkAdjustment","value","2.0",0,None,None,None,None,None,None,None,None), (3,14,"AdwPreferencesRow","title","Keyboard Backlight",0,None,None,None,None,None,None,None,None), (3,16,"GtkRange","adjustment",None,0,None,None,None,17,None,None,None,None), (3,16,"GtkRange","round-digits","0",0,None,None,None,None,None,None,None,None), (3,16,"GtkWidget","hexpand","True",0,None,None,None,None,None,None,None,None), - (3,17,"GtkAdjustment","page-increment","16.0",0,None,None,None,None,None,None,None,None), + (3,17,"GtkAdjustment","page-increment","10.0",0,None,None,None,None,None,None,None,None), (3,17,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (3,17,"GtkAdjustment","upper","255.0",0,None,None,None,None,None,None,None,None), - (3,17,"GtkAdjustment","value","255.0",0,None,None,None,None,None,None,None,None), + (3,17,"GtkAdjustment","upper","100.0",0,None,None,None,None,None,None,None,None), + (3,17,"GtkAdjustment","value","100.0",0,None,None,None,None,None,None,None,None), (3,18,"AdwExpanderRow","subtitle","These options break normal functionality",None,None,None,None,None,None,None,None,None), (3,18,"AdwPreferencesRow","title","Advanced Options",None,None,None,None,None,None,None,None,None), (3,18,"GtkListBoxRow","selectable","False",None,None,None,None,None,None,None,None,None), - (3,19,"AdwPreferencesRow","title","Brightness",0,None,None,None,None,None,None,None,None), - (3,21,"GtkRange","adjustment",None,0,None,None,None,22,None,None,None,None), - (3,21,"GtkRange","round-digits","0",0,None,None,None,None,None,None,None,None), - (3,21,"GtkWidget","hexpand","True",0,None,None,None,None,None,None,None,None), - (3,22,"GtkAdjustment","page-increment","16.0",0,None,None,None,None,None,None,None,None), - (3,22,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (3,22,"GtkAdjustment","upper","255.0",0,None,None,None,None,None,None,None,None), - (3,22,"GtkAdjustment","value","255.0",0,None,None,None,None,None,None,None,None), - (3,23,"AdwActionRow","subtitle","Not all devices support colours.",None,None,None,None,None,None,None,None,None), (3,23,"AdwComboRow","model",None,0,None,None,None,24,None,None,None,None), - (3,23,"AdwComboRow","selected","4",None,None,None,None,None,None,None,None,None), (3,23,"AdwPreferencesRow","title","Colour",0,None,None,None,None,None,None,None,None), (3,25,"AdwComboRow","model",None,0,None,None,None,26,None,None,None,None), (3,25,"AdwPreferencesRow","title","Colour",0,None,None,None,None,None,None,None,None), - (3,27,"AdwPreferencesRow","title","Brightness",0,None,None,None,None,None,None,None,None), - (3,29,"GtkRange","adjustment",None,0,None,None,None,30,None,None,None,None), - (3,29,"GtkRange","round-digits","0",0,None,None,None,None,None,None,None,None), - (3,29,"GtkWidget","hexpand","True",0,None,None,None,None,None,None,None,None), - (3,30,"GtkAdjustment","page-increment","16.0",0,None,None,None,None,None,None,None,None), - (3,30,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (3,30,"GtkAdjustment","upper","255.0",0,None,None,None,None,None,None,None,None), - (3,30,"GtkAdjustment","value","255.0",0,None,None,None,None,None,None,None,None), (3,31,"AdwPreferencesGroup","description","When using these options, the power LED may not turn off with the computer.",None,None,None,None,None,None,None,None,None), (3,31,"AdwPreferencesGroup","title","Power Button LED",None,None,None,None,None,None,None,None,None), (3,31,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None), @@ -203,6 +176,7 @@ (4,3,"GtkListBoxRow","selectable","False",0,None,None,None,None,None,None,None,None), (4,4,"AdwActionRow","subtitle","Limit the maximum charge",None,None,None,None,None,None,None,None,None), (4,4,"AdwPreferencesRow","title","Charge Limit",0,None,None,None,None,None,None,None,None), + (4,4,"GtkWidget","sensitive","False",None,None,None,None,None,None,None,None,None), (4,6,"GtkRange","adjustment",None,0,None,None,None,7,None,None,None,None), (4,6,"GtkRange","round-digits","0",0,None,None,None,None,None,None,None,None), (4,6,"GtkWidget","hexpand","True",0,None,None,None,None,None,None,None,None), @@ -210,57 +184,57 @@ (4,7,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), (4,7,"GtkAdjustment","upper","100.0",0,None,None,None,None,None,None,None,None), (4,7,"GtkAdjustment","value","100.0",0,None,None,None,None,None,None,None,None), - (4,12,"AdwExpanderRow","subtitle","These options break normal functionality",0,None,None,None,None,None,None,None,None), - (4,12,"AdwPreferencesRow","title","Advanced Options",0,None,None,None,None,None,None,None,None), - (4,12,"GtkListBoxRow","selectable","False",0,None,None,None,None,None,None,None,None), (4,13,"AdwPreferencesGroup","description","Preserve the battery lifespan by gradually lowering battery charge voltage automatically if the system is connected to AC for more than the set day limit.",0,None,None,None,None,None,None,None,None), (4,13,"AdwPreferencesGroup","title","Battery Extender",0,None,None,None,None,None,None,None,None), (4,13,"GtkWidget","margin-bottom","5",0,None,None,None,None,None,None,None,None), (4,13,"GtkWidget","margin-end","5",0,None,None,None,None,None,None,None,None), (4,13,"GtkWidget","margin-start","5",0,None,None,None,None,None,None,None,None), (4,13,"GtkWidget","margin-top","5",0,None,None,None,None,None,None,None,None), - (4,20,"AdwPreferencesGroup","description","These options will conflict with the framework options.",0,None,None,None,None,None,None,None,None), - (4,20,"AdwPreferencesGroup","title","ChromeOS Battery Limiter",0,None,None,None,None,None,None,None,None), - (4,20,"GtkWidget","margin-bottom","5",0,None,None,None,None,None,None,None,None), - (4,20,"GtkWidget","margin-end","5",0,None,None,None,None,None,None,None,None), - (4,20,"GtkWidget","margin-start","5",0,None,None,None,None,None,None,None,None), - (4,20,"GtkWidget","margin-top","5",0,None,None,None,None,None,None,None,None), - (4,23,"AdwPreferencesRow","title","Maximum Limit",0,None,None,None,None,None,None,None,None), - (4,25,"GtkRange","adjustment",None,0,None,None,None,26,None,None,None,None), - (4,25,"GtkRange","round-digits","0",0,None,None,None,None,None,None,None,None), - (4,25,"GtkWidget","hexpand","True",0,None,None,None,None,None,None,None,None), - (4,26,"GtkAdjustment","page-increment","16.0",0,None,None,None,None,None,None,None,None), - (4,26,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (4,26,"GtkAdjustment","upper","255.0",0,None,None,None,None,None,None,None,None), - (4,26,"GtkAdjustment","value","255.0",0,None,None,None,None,None,None,None,None), (4,27,"AdwActionRow","subtitle","Number of days on charge before reducing charge limit",None,None,None,None,None,None,None,None,None), (4,27,"AdwPreferencesRow","title","Trigger Days",0,None,None,None,None,None,None,None,None), (4,27,"AdwSpinRow","adjustment",None,0,None,None,None,28,None,None,None,None), (4,27,"GtkWidget","sensitive","False",None,None,None,None,None,None,None,None,None), + (4,28,"GtkAdjustment","lower","1.0",None,None,None,None,None,None,None,None,None), (4,28,"GtkAdjustment","page-increment","5.0",0,None,None,None,None,None,None,None,None), (4,28,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (4,28,"GtkAdjustment","upper","65535.0",0,None,None,None,None,None,None,None,None), + (4,28,"GtkAdjustment","upper","99.0",0,None,None,None,None,None,None,None,None), (4,28,"GtkAdjustment","value","5.0",None,None,None,None,None,None,None,None,None), (4,29,"AdwActionRow","subtitle","Number of minutes off charge before resetting charge limit",0,None,None,None,None,None,None,None,None), (4,29,"AdwPreferencesRow","title","Reset Minutes",0,None,None,None,None,None,None,None,None), (4,29,"AdwSpinRow","adjustment",None,0,None,None,None,30,None,None,None,None), (4,29,"GtkWidget","sensitive","False",None,None,None,None,None,None,None,None,None), + (4,30,"GtkAdjustment","lower","1.0",None,None,None,None,None,None,None,None,None), (4,30,"GtkAdjustment","page-increment","5.0",0,None,None,None,None,None,None,None,None), (4,30,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (4,30,"GtkAdjustment","upper","65535.0",0,None,None,None,None,None,None,None,None), + (4,30,"GtkAdjustment","upper","9999.0",0,None,None,None,None,None,None,None,None), (4,30,"GtkAdjustment","value","30.0",None,None,None,None,None,None,None,None,None), - (4,31,"AdwActionRow","subtitle","0",None,None,None,None,None,None,None,None,None), (4,31,"AdwPreferencesRow","title","Current Stage (0 to 2)",0,None,None,None,None,None,None,None,None), (4,31,"GtkListBoxRow","selectable","False",0,None,None,None,None,None,None,None,None), (4,31,"GtkWidget","sensitive","False",None,None,None,None,None,None,None,None,None), (4,32,"AdwPreferencesRow","title","Enable",None,None,None,None,None,None,None,None,None), - (4,33,"AdwPreferencesRow","title","Minimum Limit",0,None,None,None,None,None,None,None,None), + (4,33,"AdwActionRow","subtitle","Limit the minimum charge",0,None,None,None,None,None,None,None,None), + (4,33,"AdwPreferencesRow","title","Discharge Limit",0,None,None,None,None,None,None,None,None), + (4,33,"GtkWidget","sensitive","False",None,None,None,None,None,None,None,None,None), (4,35,"GtkRange","adjustment",None,0,None,None,None,36,None,None,None,None), (4,35,"GtkRange","round-digits","0",0,None,None,None,None,None,None,None,None), (4,35,"GtkWidget","hexpand","True",0,None,None,None,None,None,None,None,None), - (4,36,"GtkAdjustment","page-increment","16.0",0,None,None,None,None,None,None,None,None), + (4,36,"GtkAdjustment","page-increment","10.0",0,None,None,None,None,None,None,None,None), (4,36,"GtkAdjustment","step-increment","1.0",0,None,None,None,None,None,None,None,None), - (4,36,"GtkAdjustment","upper","255.0",0,None,None,None,None,None,None,None,None), + (4,36,"GtkAdjustment","upper","100.0",0,None,None,None,None,None,None,None,None), + (4,37,"AdwActionRow","subtitle","Disables the limiter for one charge cycle",0,None,None,None,None,None,None,None,None), + (4,37,"AdwPreferencesRow","title","Override Charge Limiter",0,None,None,None,None,None,None,None,None), + (4,37,"GtkWidget","sensitive","False",None,None,None,None,None,None,None,None,None), + (4,38,"GtkBox","homogeneous","True",None,None,None,None,None,None,None,None,None), + (4,38,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None), + (4,38,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), + (4,39,"GtkButton","label","Override",None,None,None,None,None,None,None,None,None), + (4,40,"AdwPreferencesRow","title","Enable Charge Limiter",None,None,None,None,None,None,None,None,None), + (4,41,"AdwPreferencesRow","title","Time Until Trigger",0,None,None,None,None,None,None,None,None), + (4,41,"GtkListBoxRow","selectable","False",0,None,None,None,None,None,None,None,None), + (4,41,"GtkWidget","sensitive","False",0,None,None,None,None,None,None,None,None), + (4,42,"AdwPreferencesRow","title","Time Until Reset",0,None,None,None,None,None,None,None,None), + (4,42,"GtkListBoxRow","selectable","False",0,None,None,None,None,None,None,None,None), + (4,42,"GtkWidget","sensitive","False",0,None,None,None,None,None,None,None,None), (5,1,"GtkOrientable","orientation","vertical",0,None,None,None,None,None,None,None,None), (5,2,"GtkWidget","margin-end","10",0,None,None,None,None,None,None,None,None), (5,2,"GtkWidget","margin-start","10",0,None,None,None,None,None,None,None,None), @@ -312,26 +286,22 @@ (3,5,"GtkWidget",1,1,None,None,None,None,None,None), (3,5,"GtkWidget",2,2,None,1,None,None,None,None), (3,24,"GtkStringList",1,1,None,None,None,None,None,None), - (3,24,"GtkStringList",2,2,"Red",1,None,0,None,None), - (3,24,"GtkStringList",2,3,"Green",1,None,0,None,None), - (3,24,"GtkStringList",2,4,"Blue",1,None,0,None,None), + (3,24,"GtkStringList",2,2,"Auto",1,None,0,None,None), + (3,24,"GtkStringList",2,3,"Off",1,None,0,None,None), (3,26,"GtkStringList",1,1,None,None,None,None,None,None), - (3,26,"GtkStringList",2,2,"Red",1,None,0,None,None), - (3,26,"GtkStringList",2,3,"Green",1,None,0,None,None), - (3,26,"GtkStringList",2,4,"Blue",1,None,0,None,None), + (3,26,"GtkStringList",2,2,"Auto",1,None,0,None,None), + (3,26,"GtkStringList",2,3,"Off",1,None,0,None,None), (3,18,"GtkWidget",2,2,None,1,None,None,None,None), - (3,24,"GtkStringList",2,5,"Yellow",1,None,None,None,None), - (3,24,"GtkStringList",2,6,"White",1,None,None,None,None), - (3,24,"GtkStringList",2,7,"Amber",1,None,None,None,None), - (3,26,"GtkStringList",2,5,"Yellow",1,None,None,None,None), - (3,26,"GtkStringList",2,6,"White",1,None,None,None,None), - (3,26,"GtkStringList",2,7,"Amber",1,None,None,None,None), (4,2,"GtkWidget",1,1,None,None,None,None,None,None), (4,2,"GtkWidget",2,2,None,1,None,None,None,None), (4,31,"GtkWidget",1,1,None,None,None,None,None,None), (4,31,"GtkWidget",2,2,None,1,None,None,None,None), (5,2,"GtkWidget",1,1,None,None,None,None,None,None), - (5,2,"GtkWidget",2,2,None,1,None,None,None,None) + (5,2,"GtkWidget",2,2,None,1,None,None,None,None), + (4,41,"GtkWidget",1,1,None,None,None,None,None,None), + (4,41,"GtkWidget",2,2,None,1,None,None,None,None), + (4,42,"GtkWidget",1,1,None,None,None,None,None,None), + (4,42,"GtkWidget",2,2,None,1,None,None,None,None) (1,17,"GtkWidget",2,2,"name","navigation-sidebar"), @@ -341,6 +311,8 @@ (3,18,"GtkWidget",2,2,"name","destructive-action"), (4,2,"GtkWidget",2,2,"name","boxed-list"), (4,31,"GtkWidget",2,2,"name","property"), - (5,2,"GtkWidget",2,2,"name","boxed-list") + (5,2,"GtkWidget",2,2,"name","boxed-list"), + (4,41,"GtkWidget",2,2,"name","property"), + (4,42,"GtkWidget",2,2,"name","property") diff --git a/yafi/yafi.py b/yafi/yafi.py index 94009d1..22623b8 100644 --- a/yafi/yafi.py +++ b/yafi/yafi.py @@ -1,17 +1,19 @@ import sys import os import gi -gi.require_version('Gtk', '4.0') -gi.require_version('Adw', '1') + +gi.require_version("Gtk", "4.0") +gi.require_version("Adw", "1") from gi.repository import Gtk, Adw, GLib from cros_ec_python import get_cros_ec import cros_ec_python.commands as ec_commands + class YAFI(Adw.Application): def __init__(self, **kwargs): super().__init__(**kwargs) - self.connect('activate', self.on_activate) + self.connect("activate", self.on_activate) self.script_dir = os.path.dirname(os.path.abspath(__file__)) self.cros_ec = get_cros_ec() @@ -57,14 +59,16 @@ class YAFI(Adw.Application): fan_set_rpm.set_visible(False) fan_set_percent.set_visible(False) ec_commands.thermal.thermal_auto_fan_ctrl(self.cros_ec) - case 1: # Percent + case 1: # Percent fan_set_rpm.set_visible(False) fan_set_percent.set_visible(True) - case 2: # RPM + case 2: # RPM fan_set_rpm.set_visible(True) fan_set_percent.set_visible(False) - fan_mode.connect("notify::selected", lambda combo, _: handle_fan_mode(combo.get_selected())) + fan_mode.connect( + "notify::selected", lambda combo, _: handle_fan_mode(combo.get_selected()) + ) def handle_fan_percent(scale): percent = int(scale.get_value()) @@ -92,7 +96,9 @@ class YAFI(Adw.Application): self._update_thermals(fan_rpm, temp_items, fan_set_rpm) # Schedule _update_thermals to run every second - GLib.timeout_add_seconds(1, self._update_thermals, fan_rpm, temp_items, fan_set_rpm) + GLib.timeout_add_seconds( + 1, self._update_thermals, fan_rpm, temp_items, fan_set_rpm + ) def _leds_page(self, builder): # Load the leds.ui file @@ -104,6 +110,97 @@ class YAFI(Adw.Application): self._change_page(builder, leds_root) + # Power LED + led_pwr = leds_builder.get_object("led-pwr") + led_pwr_scale = leds_builder.get_object("led-pwr-scale") + + def handle_led_pwr(scale): + value = int(abs(scale.get_value() - 2)) + ec_commands.framework_laptop.set_fp_led_level(self.cros_ec, value) + led_pwr.set_subtitle(["High", "Medium", "Low"][value]) + + current_fp_level = ec_commands.framework_laptop.get_fp_led_level( + self.cros_ec + ).value + led_pwr_scale.set_value(abs(current_fp_level - 2)) + led_pwr.set_subtitle(["High", "Medium", "Low"][current_fp_level]) + led_pwr_scale.connect("value-changed", handle_led_pwr) + + # Keyboard backlight + led_kbd = leds_builder.get_object("led-kbd") + led_kbd_scale = leds_builder.get_object("led-kbd-scale") + + def handle_led_kbd(scale): + value = int(scale.get_value()) + ec_commands.pwm.pwm_set_keyboard_backlight(self.cros_ec, value) + led_kbd.set_subtitle(f"{value} %") + + current_kb_level = ec_commands.pwm.pwm_get_keyboard_backlight(self.cros_ec)[ + "percent" + ] + led_kbd_scale.set_value(current_kb_level) + led_kbd.set_subtitle(f"{current_kb_level} %") + led_kbd_scale.connect("value-changed", handle_led_kbd) + + # Advanced: Power LED + led_pwr_colour = leds_builder.get_object("led-pwr-colour") + led_pwr_colour_strings = led_pwr_colour.get_model() + + all_colours = ["Red", "Green", "Blue", "Yellow", "White", "Amber"] + + def add_colours(strings, led_id): + supported_colours = ec_commands.leds.led_control_get_max_values( + self.cros_ec, led_id + ) + for i, colour in enumerate(all_colours): + if supported_colours[i]: + strings.append(colour) + + add_colours(led_pwr_colour_strings, ec_commands.leds.EcLedId.EC_LED_ID_POWER_LED) + + def handle_led_colour(combobox, led_id): + colour = combobox.get_selected() - 2 + match colour: + case -2: # Auto + ec_commands.leds.led_control_set_auto(self.cros_ec, led_id) + case -1: # Off + ec_commands.leds.led_control( + self.cros_ec, + led_id, + 0, + [0] * ec_commands.leds.EcLedColors.EC_LED_COLOR_COUNT.value, + ) + case _: # Colour + colour_idx = all_colours.index( + combobox.get_selected_item().get_string() + ) + ec_commands.leds.led_control_set_color( + self.cros_ec, + led_id, + 100, + ec_commands.leds.EcLedColors(colour_idx), + ) + + led_pwr_colour.connect( + "notify::selected", + lambda combo, _: handle_led_colour( + combo, ec_commands.leds.EcLedId.EC_LED_ID_POWER_LED + ), + ) + + # Advanced: Charging LED + led_charge_colour = leds_builder.get_object("led-chg-colour") + led_charge_colour_strings = led_charge_colour.get_model() + + add_colours(led_charge_colour_strings, ec_commands.leds.EcLedId.EC_LED_ID_BATTERY_LED) + + led_charge_colour.connect( + "notify::selected", + lambda combo, _: handle_led_colour( + combo, ec_commands.leds.EcLedId.EC_LED_ID_BATTERY_LED + ), + ) + def _battery_page(self, builder): # Load the battery.ui file battery_builder = Gtk.Builder() @@ -135,8 +232,11 @@ class YAFI(Adw.Application): # 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.connect( + "close-request", + lambda _: navbar.select_row(navbar.get_row_at_index(self.current_page)), + ) + about.present() def on_activate(self, app): @@ -147,7 +247,13 @@ class YAFI(Adw.Application): 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._about_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") @@ -161,7 +267,7 @@ class YAFI(Adw.Application): if page != len(pages) - 1: self.current_page = page pages[page][1](builder) - + navbar.connect("row-activated", lambda box, row: switch_page(row.get_index())) # Obtain and show the main window @@ -169,5 +275,6 @@ class YAFI(Adw.Application): self.win.set_application(self) self.win.present() + app = YAFI(application_id="au.stevetech.yafi") app.run(sys.argv)