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 <cstdint>
4
5namespace cdc::ui {
6
10enum class InputResult : uint8_t {
11 CONSUMED, // Input was handled, may need re-render
12 IGNORED, // Input was not handled
13 REQUEST_POP, // View wants to be popped (back/cancel)
14 REQUEST_PUSH // View wants to push a child view
15};
16
25class IView {
26public:
27 virtual ~IView() = default;
28
29 // === Lifecycle ===
30
35 virtual void onEnter(void* context = nullptr) = 0;
36
40 virtual void onExit() = 0;
41
45 virtual void onResume() = 0;
46
51 virtual void onPause() {}
52
53 // === Rendering ===
54
59 virtual void render(bool partial) = 0;
60
64 virtual bool needsRender() const = 0;
65
69 virtual void markDirty() = 0;
70
76 virtual void clearDirty() = 0;
77
85 virtual bool prefersLightRefresh() const { return false; }
86
87 // === Input ===
88
94 virtual InputResult onKey(char key) = 0;
95
101 virtual InputResult onLongPress(char key) { (void)key; return InputResult::IGNORED; }
102
103 // === Periodic ===
104
109 virtual void onTick(uint32_t nowMs) { (void)nowMs; }
110
111 // === Footer ===
112
117 virtual const char* getFooterHint() const { return nullptr; }
118
126 virtual void setFooterHint(const char* hint) { (void)hint; }
127
137 virtual void setLifecycleHooks(void (*onHide)(void*), void (*onShow)(void*), void* userData) {
138 (void)onHide; (void)onShow; (void)userData;
139 }
140
141 // === Identity ===
142
146 virtual const char* getName() const = 0;
147};
148
157class ViewBase : public IView {
158public:
159 virtual ~ViewBase() = default;
160
161 // Lifecycle with default implementations
162 void onEnter(void* context) override {
163 (void)context;
164 dirty_ = true;
165 }
166
167 void onExit() override { }
168
169 void onResume() override {
170 dirty_ = true;
172 }
173
174 void onPause() override {
176 }
177
178 void setLifecycleHooks(void (*onHide)(void*), void (*onShow)(void*), void* userData) override {
179 onHide_ = onHide;
180 onShow_ = onShow;
181 lifecycleUserData_ = userData;
182 }
183
184 // Dirty flag management
185 bool needsRender() const override { return dirty_; }
186 void markDirty() override { dirty_ = true; }
187 void clearDirty() override { dirty_ = false; }
188
189 // Footer override (universal). Subclasses that wire their own
190 // getFooterHint() can still consult customFooter_ first.
191 void setFooterHint(const char* hint) override {
192 customFooter_ = hint;
193 dirty_ = true;
194 }
195 const char* getFooterHint() const override { return customFooter_; }
196
197protected:
198 void setTitle(const char* title) { title_ = title; }
199 const char* getTitle() const { return title_; }
200
201 bool dirty_ = true;
202 const char* title_ = nullptr;
203 const char* customFooter_ = nullptr;
204
205 void (*onHide_)(void*) = nullptr;
206 void (*onShow_)(void*) = nullptr;
207 void* lifecycleUserData_ = nullptr;
208};
209
210} // namespace cdc::ui
virtual InputResult onLongPress(char key)
Definition IView.h:101
virtual void clearDirty()=0
virtual void setLifecycleHooks(void(*onHide)(void *), void(*onShow)(void *), void *userData)
Definition IView.h:137
virtual const char * getName() const =0
virtual void setFooterHint(const char *hint)
Definition IView.h:126
virtual InputResult onKey(char key)=0
virtual void onResume()=0
virtual void onTick(uint32_t nowMs)
Definition IView.h:109
virtual void onExit()=0
virtual void onEnter(void *context=nullptr)=0
virtual void onPause()
Definition IView.h:51
virtual void render(bool partial)=0
virtual bool needsRender() const =0
virtual ~IView()=default
virtual const char * getFooterHint() const
Definition IView.h:117
virtual void markDirty()=0
virtual bool prefersLightRefresh() const
Definition IView.h:85
void setFooterHint(const char *hint) override
Definition IView.h:191
void clearDirty() override
Definition IView.h:187
void setTitle(const char *title)
Definition IView.h:198
void onResume() override
Definition IView.h:169
const char * getTitle() const
Definition IView.h:199
void markDirty() override
Definition IView.h:186
void * lifecycleUserData_
Definition IView.h:207
void onPause() override
Definition IView.h:174
bool needsRender() const override
Definition IView.h:185
virtual ~ViewBase()=default
const char * title_
Definition IView.h:202
void onExit() override
Definition IView.h:167
void onEnter(void *context) override
Definition IView.h:162
void setLifecycleHooks(void(*onHide)(void *), void(*onShow)(void *), void *userData) override
Definition IView.h:178
const char * getFooterHint() const override
Definition IView.h:195
void(* onShow_)(void *)
Definition IView.h:206
void(* onHide_)(void *)
Definition IView.h:205
const char * customFooter_
Definition IView.h:203
Centralized key-code constants for cdc_views.
Definition IModule.h:8
InputResult
Definition IView.h:10