ScreenManager v1.1.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
49class ScreenEntryExternal final : public ScreenEntry {
50 friend class ScreenManager;
51
52 public:
53
60 explicit ScreenEntryExternal(IManagedScreen* screen, ScreenId id) {
61 this->instance = screen;
62 this->id = id;
63 this->isManaged = false;
64 }
65
66 protected:
67 IManagedScreen* load() override {
68 return this->instance;
69 }
70
71 void unload() override {
72 }
73};
74
80template<typename T>
81class ScreenEntryManaged final : public ScreenEntry {
82 friend class ScreenManager;
83
84 public:
85
91 explicit ScreenEntryManaged(ScreenId id) {
92 this->id = id;
93 this->isManaged = true;
94 }
95
96 ~ScreenEntryManaged() override {
97 this->unload();
98 }
99
100 protected:
101 IManagedScreen* load() override {
102 if (!this->instance) {
103 this->instance = new T;
104 this->instance->begin();
105 }
106 return this->instance;
107 }
108
109 void unload() override {
110 delete this->instance;
111 this->instance = nullptr;
112 }
113};
114
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:49
void unload() override
Delete an IManagedScren if required.
Definition: ScreenEntry.h:71
IManagedScreen * load() override
Create an IManagedScreen if required and return it.
Definition: ScreenEntry.h:67
ScreenEntryExternal(IManagedScreen *screen, ScreenId id)
Construct a ScreenEntry for an External IManagedScreen.
Definition: ScreenEntry.h:60
A registration entry for a Managed IManagedScreen.
Definition: ScreenEntry.h:81
void unload() override
Delete an IManagedScren if required.
Definition: ScreenEntry.h:109
ScreenEntryManaged(ScreenId id)
Construct a ScreenEntry for Managed IManagedScreen.
Definition: ScreenEntry.h:91
IManagedScreen * load() override
Create an IManagedScreen if required and return it.
Definition: ScreenEntry.h:101
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:17