From c644e75cbd2a6bf0ee3a090e761108aa8783ecf1 Mon Sep 17 00:00:00 2001 From: vhaudiquet Date: Sun, 1 Oct 2023 13:21:37 +0200 Subject: [PATCH] UI wireless state support --- src/device/device.c | 6 ++++++ src/device/device.h | 1 + src/ui/panels/mouse-panel.c | 40 +++++++++++++++++++++++++++++++++++++ ui/panel-mouse.ui | 6 +++--- 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/device/device.c b/src/device/device.c index 9061b96..eb956c1 100644 --- a/src/device/device.c +++ b/src/device/device.c @@ -61,6 +61,12 @@ char* device_get_name(device_t* device) return getname_fn(device->handle); } +device_capacity_t device_get_capacity(device_t* device) +{ + device_capacity_t (*getcapacity_fn)(void*) = dlsym(device->driver, "driver_get_capacity"); + return getcapacity_fn(device->handle); +} + void* device_handle(device_t* device) { return device->handle; diff --git a/src/device/device.h b/src/device/device.h index a1922b9..fe1fd72 100644 --- a/src/device/device.h +++ b/src/device/device.h @@ -20,5 +20,6 @@ void* device_driver(device_t* device); device_t* device_register(void* driver, void* handle); char* device_get_image(device_t* device); char* device_get_name(device_t* device); +device_capacity_t device_get_capacity(device_t* device); #endif \ No newline at end of file diff --git a/src/ui/panels/mouse-panel.c b/src/ui/panels/mouse-panel.c index a86e60f..9d4c401 100644 --- a/src/ui/panels/mouse-panel.c +++ b/src/ui/panels/mouse-panel.c @@ -4,11 +4,22 @@ struct _MousePanel { Panel parent_instance; + // Mouse presentation GtkImage* mouse_image; GtkLabel* mouse_manufacturer; GtkLabel* mouse_name; + + // Wireless informations + AdwPreferencesGroup* wireless; + GtkLevelBar* battery_level; + GtkLabel* battery_level_label; + GtkLabel* charging_state; + + // DPI AdwPreferencesGroup* dpi_preference_group; AdwButtonContent* dpi_stage_add_button; + + // Features AdwSwitchRow* motion_sync_switchrow; AdwSwitchRow* angle_snap_switchrow; }; @@ -25,6 +36,10 @@ mouse_panel_class_init(MousePanelClass* klass) gtk_widget_class_bind_template_child(widget_class, MousePanel, mouse_image); gtk_widget_class_bind_template_child(widget_class, MousePanel, mouse_manufacturer); gtk_widget_class_bind_template_child(widget_class, MousePanel, mouse_name); + gtk_widget_class_bind_template_child(widget_class, MousePanel, wireless); + gtk_widget_class_bind_template_child(widget_class, MousePanel, battery_level); + gtk_widget_class_bind_template_child(widget_class, MousePanel, battery_level_label); + gtk_widget_class_bind_template_child(widget_class, MousePanel, charging_state); gtk_widget_class_bind_template_child(widget_class, MousePanel, dpi_preference_group); gtk_widget_class_bind_template_child(widget_class, MousePanel, dpi_stage_add_button); gtk_widget_class_bind_template_child(widget_class, MousePanel, motion_sync_switchrow); @@ -59,6 +74,31 @@ void mouse_panel_set_device(MousePanel* self, device_t* device) char* device_name = device_get_name(device); gtk_label_set_label(self->mouse_name, device_name); + // Set mouse wireless status + if(device_get_capacity(device) & DEVICE_CAPACITY_WIRELESS) + { + int (*driver_wireless_battery_state_get)(void*, int*, bool*) = dlsym(device_driver(device), "driver_wireless_battery_state_get"); + int battery_level; + bool charging; + int battery_res = driver_wireless_battery_state_get(device_handle(device), &battery_level, &charging); + + if(!battery_res) + { + // Set battery level + gtk_level_bar_set_value(self->battery_level, (double) battery_level); + char battery_level_str[10]; + sprintf(battery_level_str, "%u %%", battery_level); + gtk_label_set_label(self->battery_level_label, battery_level_str); + + // Set battery status + if(charging) + gtk_label_set_label(self->charging_state, "Charging"); + else + gtk_label_set_label(self->charging_state, "Not charging"); + } + } + else gtk_widget_set_visible(GTK_WIDGET(self->wireless), false); + // Set mouse dpi struct MOUSE_DPI_LEVELS dpi; int (*driver_mouse_dpi_get)(void*, void*) = dlsym(device_driver(device), "driver_mouse_dpi_get"); diff --git a/ui/panel-mouse.ui b/ui/panel-mouse.ui index f0d2816..189e93f 100644 --- a/ui/panel-mouse.ui +++ b/ui/panel-mouse.ui @@ -48,7 +48,7 @@ - + 20 20 20 @@ -82,7 +82,7 @@ 10 horizontal - + start Not charging 10 @@ -90,7 +90,7 @@ - + end 50% 120