GUI module example: 2 button dialog (#308)

* GUI: reusable module example
This commit is contained in:
あく
2021-01-20 19:51:01 +03:00
committed by GitHub
parent 8f9b2513ff
commit d0ed33e710
7 changed files with 305 additions and 3 deletions

View File

@@ -10,7 +10,7 @@
#include <gui/widget.h>
#include <gui/view.h>
#include <gui/view_dispatcher.h>
#include <gui/modules/dialog.h>
#include <assets_icons.h>
#include <cli/cli.h>
#include <stm32wbxx.h>
@@ -25,6 +25,8 @@ struct Power {
Icon* battery_icon;
Widget* battery_widget;
Dialog* dialog;
ValueMutex* menu_vm;
Cli* cli;
MenuItem* menu;
@@ -55,8 +57,24 @@ void power_menu_off_callback(void* context) {
api_hal_power_off();
}
void power_menu_reset_dialog_result(DialogResult result, void* context) {
if(result == DialogResultLeft) {
api_hal_boot_set_mode(ApiHalBootModeDFU);
NVIC_SystemReset();
} else if(result == DialogResultRight) {
api_hal_boot_set_mode(ApiHalBootModeNormal);
NVIC_SystemReset();
}
}
void power_menu_reset_callback(void* context) {
NVIC_SystemReset();
Power* power = context;
dialog_set_result_callback(power->dialog, power_menu_reset_dialog_result);
dialog_set_header_text(power->dialog, "Reset type");
dialog_set_text(power->dialog, "Reboot where?");
dialog_set_left_button_text(power->dialog, "DFU");
dialog_set_right_button_text(power->dialog, "OS");
view_dispatcher_switch_to_view(power->view_dispatcher, PowerViewDialog);
}
void power_menu_enable_otg_callback(void* context) {
@@ -100,6 +118,11 @@ Power* power_alloc() {
view_set_previous_callback(power->info_view, power_info_back_callback);
view_dispatcher_add_view(power->view_dispatcher, PowerViewInfo, power->info_view);
power->dialog = dialog_alloc();
dialog_set_context(power->dialog, power);
view_dispatcher_add_view(
power->view_dispatcher, PowerViewDialog, dialog_get_view(power->dialog));
power->usb_icon = assets_icons_get(I_USBConnected_15x8);
power->usb_widget = widget_alloc();
widget_set_width(power->usb_widget, icon_get_width(power->usb_icon));

View File

@@ -6,7 +6,7 @@
#include <gui/canvas.h>
#include <gui/view.h>
typedef enum { PowerViewInfo } PowerView;
typedef enum { PowerViewInfo, PowerViewDialog } PowerView;
typedef struct {
float current_charger;