38 [[nodiscard]]
static PluginUiState&
instance()
noexcept;
44 [[nodiscard]]
int pushList (
const char* title,
const ui_item_t* items, uint16_t count,
45 uint32_t select_action_id, uint32_t menu_action_id,
46 bool replace_top =
false);
54 uint32_t select_action_id);
55 [[nodiscard]]
int pushConfirm(
const char* text, uint8_t icon, uint32_t action_id);
56 [[nodiscard]]
int pushT9 (
const char* title,
const char* initial,
57 uint16_t max_len, uint32_t action_id);
58 [[nodiscard]]
int pushPin (
const char* title, uint8_t max_len, uint8_t max_attempts,
60 [[nodiscard]]
int pushSlider (
const char* title, int32_t min, int32_t max, int32_t init,
61 int32_t step,
const char* unit, uint32_t action_id);
62 [[nodiscard]]
int pushDate (
const char* title, uint8_t d, uint8_t m, uint16_t y,
64 [[nodiscard]]
int pushTime (
const char* title, uint8_t h, uint8_t m, uint32_t action_id);
65 [[nodiscard]]
int pushColorPicker(uint8_t r, uint8_t g, uint8_t b, uint32_t action_id);
67 [[nodiscard]]
int pushCanvas (
const char* title, uint32_t key_action_id,
68 uint32_t widget_action_id);
74 [[nodiscard]]
int setInactivity(uint32_t timeout_ms, uint32_t action_id);
82 [[nodiscard]]
int setViewLifecycle(uint32_t hide_action_id, uint32_t show_action_id);
91 PluginUiState() =
default;
92 ~PluginUiState() =
default;
93 PluginUiState(
const PluginUiState&) =
delete;
94 PluginUiState& operator=(
const PluginUiState&) =
delete;
97 std::unique_ptr<cdc::ui::ListView> view;
106 std::vector<PsramUniquePtr<char>> labels;
107 uint32_t select_action_id = 0;
108 uint32_t menu_action_id = 0;
110 uint16_t capacity = 0;
112 struct ContextMenuState {
113 std::unique_ptr<cdc::ui::ContextMenuView> view;
118 uint32_t select_action_id = 0;
121 struct ConfirmState {
122 std::unique_ptr<cdc::ui::ConfirmView> view;
124 uint32_t action_id = 0;
127 std::unique_ptr<cdc::ui::T9InputView> t9_view;
128 std::unique_ptr<cdc::ui::PinEntryView> pin_view;
129 std::unique_ptr<cdc::ui::SliderView> slider_view;
130 std::unique_ptr<cdc::ui::DateInputView> date_view;
131 std::unique_ptr<cdc::ui::TimeInputView> time_view;
132 std::unique_ptr<cdc::ui::ColorPickerView> color_view;
136 uint32_t action_id = 0;
137 std::string last_text;
138 int32_t last_int = 0;
139 bool has_int =
false;
140 uint32_t last_date = 0;
141 uint16_t last_time = 0;
144 std::unique_ptr<cdc::ui::CanvasView> view;
147 uint32_t key_action_id = 0;
148 uint32_t widget_action_id = 0;
149 uint32_t long_press_action_id = 0;
154 static void onListSelect(uint16_t index,
void* userData);
155 static void onListMenu (uint16_t index,
void* userData);
156 static void onConfirmYes(
void* userData);
157 static void onConfirmNo (
void* userData);
158 static void onT9Save (
const char* text);
159 static bool onPinVerify (
const char* pin);
160 static void onSliderSave(uint16_t value);
161 static void onDateSave (uint8_t day, uint8_t month, uint16_t year);
162 static void onTimeSave (uint8_t hour, uint8_t minute);
163 static void onColorSave (uint8_t r, uint8_t g, uint8_t b);
166 static void onInputCancel();
167 static void onPinCancel ();
168 static void onInactivity();
169 static void onViewHide(
void* userData);
170 static void onViewShow(
void* userData);
171 static void onCanvasKey (
char key, uint32_t focused_widget);
172 static void onCanvasLongPress(
char key);
177 bool growList(uint16_t need);
184 std::unique_ptr<ListState> list_;
185 ContextMenuState ctxmenu_{};
186 ConfirmState confirm_{};
188 CanvasState canvas_{};
192 std::vector<std::unique_ptr<ListState>> list_graveyard_;
193 const void* exclusive_token_ =
nullptr;
194 uint32_t inactivity_action_ = 0;
195 uint32_t lifecycle_hide_action_ = 0;
196 uint32_t lifecycle_show_action_ = 0;