ScreenManager v1.0.0
A lightweight C++ library for managing application screens, navigation, transitions and display timing.
ScreenEntry.h
1#pragma once
2
3#include "IManagedScreen.h"
4
5
6using ScreenId = uint8_t;
7
13 friend class ScreenManager;
14
15 public:
16
17 virtual ~ScreenEntry() = default;
18
19 protected:
20
23
25 ScreenId id = 0;
26
27
28 bool isManaged = true;
29 bool isOverlay = false;
30
36 virtual IManagedScreen* load() = 0;
37
42 virtual void unload() = 0;
43};
44
50template<typename T>
51class ScreenEntryExternal final : public ScreenEntry {
52 friend class ScreenManager;
53
54 public:
55
62 explicit ScreenEntryExternal(T* screen, ScreenId id) {
63 this->instance = screen;
64 this->id = id;
65 this->isManaged = false;
66 }
67
68 protected:
69 IManagedScreen* load() override {
70 return this->instance;
71 }
72
73 void unload() override {
74 }
75};
76
82template<typename T>
83class ScreenEntryManaged final : public ScreenEntry {
84 friend class ScreenManager;
85
86 public:
87
93 //explicit ScreenEntryManaged<T>(ScreenId id) {
94 explicit ScreenEntryManaged(ScreenId id) {
95 this->id = id;
96 this->isManaged = true;
97 }
98
99 ~ScreenEntryManaged() override {
100 this->unload();
101 }
102
103 protected:
104 IManagedScreen* load() override {
105 if (!this->instance) {
106 this->instance = new T;
107 this->instance->begin();
108 }
109 return this->instance;
110 }
111
112 void unload() override {
113 delete this->instance;
114 this->instance = nullptr;
115 }
116};
117
Interface for a screen that can be managed by ScreenManager. A 'Screen' is a combination of the 'View...
Definition: IManagedScreen.h:13
virtual void begin()=0
Called after a screen is created but before start()
A registration entry for an External IManagedScreen.
Definition: ScreenEntry.h:51
void unload() override
Delete an IManagedScren if required.
Definition: ScreenEntry.h:73
ScreenEntryExternal(T *screen, ScreenId id)
Construct a ScreenEntry for an External IManagedScreen.
Definition: ScreenEntry.h:62
IManagedScreen * load() override
Create an IManagedScreen if required and return it.
Definition: ScreenEntry.h:69
A registration entry for a Managed IManagedScreen.
Definition: ScreenEntry.h:83
void unload() override
Delete an IManagedScren if required.
Definition: ScreenEntry.h:112
ScreenEntryManaged(ScreenId id)
Construct a ScreenEntry for Managed IManagedScreen.
Definition: ScreenEntry.h:94
IManagedScreen * load() override
Create an IManagedScreen if required and return it.
Definition: ScreenEntry.h:104
A registered screen. Only ever accessed by ScreenManager.
Definition: ScreenEntry.h:12
bool isManaged
True = Managed, false = External.
Definition: ScreenEntry.h:28
ScreenEntry * prevScreenEntry
The previous screen in the intrusive list.
Definition: ScreenEntry.h:22
virtual IManagedScreen * load()=0
Create an IManagedScreen if required and return it.
virtual void unload()=0
Delete an IManagedScren if required.
bool isOverlay
Reserved for future use.
Definition: ScreenEntry.h:29
ScreenEntry * nextScreenEntry
The next screen in the intrusive list.
Definition: ScreenEntry.h:21
IManagedScreen * instance
The reference to an instance of an external or managed IManagedScreen -.
Definition: ScreenEntry.h:24
ScreenId id
The identified given during registration.
Definition: ScreenEntry.h:25
The core class that handles registration, transitions and of course, calling the screen's draw() meth...
Definition: ScreenManager.h:16