123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /*
- * widgets.h
- *
- * Created on: Jan 12, 2021
- * Author: David Original work by Jose (PTDreamer), 2017
- */
- #ifndef GRAPHICS_GUI_WIDGETS_H_
- #define GRAPHICS_GUI_WIDGETS_H_
- #include "rotary_encoder.h"
- #define default_font u8g2_font_t0_16_tr
- // Just some fonts I tried and wanted to remember
- //u8g2_font_helvR10_tr // ok
- //u8g2_font_t0_16_tr // meh
- //u8g2_font_DigitalDisco_tr
- //u8g2_font_timB10_tr
- //u8g2_font_timB12_tr
- typedef enum widgetStateType {widget_idle, widget_selected, widget_edit, widget_error}widgetStateType;
- typedef enum widgetFieldType {field_int32, field_bmp, field_string}widgetFieldType;
- typedef enum AlignType { align_disabled, align_left, align_center, align_right }AlignType;
- typedef enum widgetFrameType {frame_auto, frame_solid, frame_outline, frame_disabled, frame_combo}widgetFrameType;
- typedef enum widgetType {widget_combo, widget_label, widget_display, widget_editable, widget_bmp, widget_multi_option, widget_button, widget_bmp_button}widgetType;
- typedef enum comboType {combo_Screen, combo_Editable, combo_MultiOption, combo_Action}comboType;
- typedef enum widgetRefreshType {refresh_idle, refresh_triggered, refresh_always}widgetRefreshType;
- typedef struct widget_t widget_t;
- typedef struct comboWidget_t comboWidget_t;
- typedef struct comboBox_item_t comboBox_item_t;
- typedef struct selectable_widget_t selectable_widget_t;
- typedef struct editable_widget_t editable_widget_t;
- typedef struct button_widget_t button_widget_t;
- typedef struct displayOnly_widget_t displayOnly_widget_t;
- typedef struct comboBox_widget_t comboBox_widget_t;
- typedef struct bmp_widget_t bmp_widget_t;
- struct selectable_widget_t {
- widgetStateType state;
- widgetStateType previous_state;
- uint8_t tab;
- int (*processInput)(widget_t*, RE_Rotation_t, RE_State_t *);
- int (*longPressAction)(widget_t*);
- };
- struct displayOnly_widget_t {
- widgetFieldType type;
- AlignType dispAlign;
- AlignType textAlign;
- int32_t last_value;
- uint8_t number_of_dec;
- uint8_t reservedChars;
- uint8_t stringStart;
- const uint8_t *font;
- char* displayString;
- char* endString;
- void * (*getData)();
- };
- struct editable_widget_t {
- int8_t current_edit;
- uint8_t numberOfOptions;
- int16_t step;
- int16_t big_step;
- int32_t min_value;
- int32_t max_value;
- char **options;
- void (*setData)(void *);
- selectable_widget_t selectable;
- displayOnly_widget_t inputData;
- };
- struct button_widget_t {
- union{
- struct{
- char* displayString;
- const uint8_t* font;
- int32_t last_value;
- uint8_t stringStart;
- };
- struct{
- const uint8_t* xbm;
- const uint8_t* last_xbm;
- };
- };
- int (*action)(widget_t*);
- selectable_widget_t selectable;
- };
- struct bmp_widget_t {
- const uint8_t* xbm;
- const uint8_t* last_xbm;
- };
- struct comboBox_widget_t {
- const uint8_t* font;
- selectable_widget_t selectable;
- comboBox_item_t *first;
- uint8_t currentScroll;
- comboBox_item_t *currentItem;
- } ;
- struct comboBox_item_t {
- comboBox_item_t *next_item;
- comboType type;
- uint8_t enabled;
- AlignType dispAlign;
- union{
- uint8_t action_screen;
- int (*action)();
- editable_widget_t *widget;
- };
- char *text;
- };
- struct widget_t
- {
- widgetType type;
- widget_t *next_widget;
- widgetRefreshType refresh;
- widgetFrameType frameType;
- uint8_t posX;
- uint8_t posY;
- uint8_t width;
- uint8_t enabled;
- int8_t radius;
- struct screen_t *parent;
- void (*draw)(widget_t*);
- void (*update)(widget_t*);
- void* content;
- };
- displayOnly_widget_t * extractDisplayPartFromWidget(widget_t *w);
- editable_widget_t * extractEditablePartFromWidget(widget_t *);
- selectable_widget_t * extractSelectablePartFromWidget(widget_t *w);
- void widgetAlign(widget_t* w);
- void widgetDefaultsInit(widget_t *w, widgetType t, void* content);
- void editableDefaultsInit(editable_widget_t* editable, widgetType type);
- void default_widgetDraw(widget_t* w);
- void default_widgetUpdate(widget_t *w);
- void widgetDetectChange(widget_t* w, int32_t val);
- void widgetClearField(widget_t* w);
- void widgetPrintVal(widget_t* w, int32_t val_ui);
- int32_t widgetGetVal(widget_t* w);
- void widgetEnable(widget_t* w);
- void widgetDisable(widget_t* w);
- int default_widgetProcessInput(widget_t* w, RE_Rotation_t, RE_State_t *);
- int comboBoxProcessInput(widget_t* w, RE_Rotation_t, RE_State_t *);
- void comboBoxDraw(widget_t *w);
- void comboAddScreen(comboBox_item_t* item, widget_t *combo, char *label, uint8_t actionScreen);
- //void comboAddEditable(comboBox_item_t* item, widget_t *combo, char *label, widget_t* w);
- void comboAddEditable(comboBox_item_t* item, widget_t *combo, char *label, editable_widget_t *editable);
- void comboAddMultiOption(comboBox_item_t* item, widget_t *combo, char *label, editable_widget_t *editable);
- void comboAddAction(comboBox_item_t* item, widget_t *combo, char *label, int (*action)());
- void comboResetIndex(widget_t *combo);
- int32_t strsum(char* str);
- #endif /* GRAPHICS_GUI_WIDGETS_H_ */
|