CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
IView.h
Go to the documentation of this file.
1#pragma once
2
3#include "cdc_hal/IDisplay.h"
4#include <cstdint>
5
6namespace cdc::ui {
7
11enum class InputResult : uint8_t {
12 CONSUMED, // Input was handled, may need re-render
13 IGNORED, // Input was not handled
14 REQUEST_POP, // View wants to be popped (back/cancel)
15 REQUEST_PUSH // View wants to push a child view
16};
17
26class IView {
27public:
28 virtual ~IView() = default;
29
30 // === Lifecycle ===
31
36 virtual void onEnter(void* context = nullptr) = 0;
37
41 virtual void onExit() = 0;
42
46 virtual void onResume() = 0;
47
52 virtual void onPause() {}
53
54 // === Rendering ===
55
60 virtual void render(bool partial) = 0;
61
65 virtual bool needsRender() const = 0;
66
70 virtual void markDirty() = 0;
71
77 virtual void clearDirty() = 0;
78
86 virtual bool prefersLightRefresh() const { return false; }
87
97
98 // === Input ===
99
105 virtual InputResult onKey(char key) = 0;
106
112 virtual InputResult onLongPress(char key) { (void)key; return InputResult::IGNORED; }
113
114 // === Periodic ===
115
120 virtual void onTick(uint32_t nowMs) { (void)nowMs; }
121
122 // === Footer ===
123
128 virtual const char* getFooterHint() const { return nullptr; }
129
137 virtual void setFooterHint(const char* hint) { (void)hint; }
138
148 virtual void setLifecycleHooks(void (*onHide)(void*), void (*onShow)(void*), void* userData) {
149 (void)onHide; (void)onShow; (void)userData;
150 }
151
152 // === Identity ===
153
157 virtual const char* getName() const = 0;
158};
159
168class ViewBase : public IView {
169public:
170 virtual ~ViewBase() = default;
171
172 // Lifecycle with default implementations
173 void onEnter(void* context) override {
174 (void)context;
175 dirty_ = true;
176 }
177
178 void onExit() override { }
179
180 void onResume() override {
181 dirty_ = true;
183 }
184
185 void onPause() override {
187 }
188
189 void setLifecycleHooks(void (*onHide)(void*), void (*onShow)(void*), void* userData) override {
190 onHide_ = onHide;
191 onShow_ = onShow;
192 lifecycleUserData_ = userData;
193 }
194
195 // Dirty flag management
196 bool needsRender() const override { return dirty_; }
197 void markDirty() override { dirty_ = true; }
198 void clearDirty() override { dirty_ = false; }
199
200 // Footer override (universal). Subclasses that wire their own
201 // getFooterHint() can still consult customFooter_ first.
202 void setFooterHint(const char* hint) override {
203 customFooter_ = hint;
204 dirty_ = true;
205 }
206 const char* getFooterHint() const override { return customFooter_; }
207
208protected:
209 void setTitle(const char* title) { title_ = title; }
210 const char* getTitle() const { return title_; }
211
212 bool dirty_ = true;
213 const char* title_ = nullptr;
214 const char* customFooter_ = nullptr;
215
216 void (*onHide_)(void*) = nullptr;
217 void (*onShow_)(void*) = nullptr;
218 void* lifecycleUserData_ = nullptr;
219};
220
221} // namespace cdc::ui
virtual InputResult onLongPress(char key)
Definition IView.h:112
virtual hal::RefreshMode preferredEnterRefresh() const
Definition IView.h:96
virtual void clearDirty()=0
virtual void setLifecycleHooks(void(*onHide)(void *), void(*onShow)(void *), void *userData)
Definition IView.h:148
virtual const char * getName() const =0
virtual void setFooterHint(const char *hint)
Definition IView.h:137
virtual InputResult onKey(char key)=0
virtual void onResume()=0
virtual void onTick(uint32_t nowMs)
Definition IView.h:120
virtual void onExit()=0
virtual void onEnter(void *context=nullptr)=0
virtual void onPause()
Definition IView.h:52
virtual void render(bool partial)=0
virtual bool needsRender() const =0
virtual ~IView()=default
virtual const char * getFooterHint() const
Definition IView.h:128
virtual void markDirty()=0
virtual bool prefersLightRefresh() const
Definition IView.h:86
void setFooterHint(const char *hint) override
Definition IView.h:202
void clearDirty() override
Definition IView.h:198
void setTitle(const char *title)
Definition IView.h:209
void onResume() override
Definition IView.h:180
const char * getTitle() const
Definition IView.h:210
void markDirty() override
Definition IView.h:197
void * lifecycleUserData_
Definition IView.h:218
void onPause() override
Definition IView.h:185
bool needsRender() const override
Definition IView.h:196
virtual ~ViewBase()=default
const char * title_
Definition IView.h:213
void onExit() override
Definition IView.h:178
void onEnter(void *context) override
Definition IView.h:173
void setLifecycleHooks(void(*onHide)(void *), void(*onShow)(void *), void *userData) override
Definition IView.h:189
const char * getFooterHint() const override
Definition IView.h:206
void(* onShow_)(void *)
Definition IView.h:217
void(* onHide_)(void *)
Definition IView.h:216
const char * customFooter_
Definition IView.h:214
Centralized key-code constants for cdc_views.
Definition IModule.h:8
InputResult
Definition IView.h:11