Control Surface
main
MIDI Control Surface library for Arduino
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Selectors
Selector.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
Selectable.hpp
"
4
#include <
AH/Containers/Updatable.hpp
>
5
#include <
AH/Debug/Debug.hpp
>
6
#include <
Def/Def.hpp
>
7
8
BEGIN_CS_NAMESPACE
9
14
enum class
Wrap
:
bool
{
15
Clamp
=
false
,
17
Wrap
=
true
,
19
NoWrap
=
false
,
20
};
21
23
struct
EmptySelectorCallback
{
25
void
begin
() {}
27
void
update
() {}
29
void
update
(
setting_t
oldSetting,
setting_t
newSetting) {
30
(void)oldSetting, (
void
)newSetting;
31
}
32
};
33
39
class
SelectorBase
{
40
protected
:
42
SelectorBase
() =
default
;
43
44
public
:
46
setting_t
get
()
const
{
return
setting
; }
47
48
protected
:
52
setting_t
setting
= 0;
53
};
54
55
template
<setting_t N,
class
Callback = EmptySelectorCallback>
56
class
GenericSelector
:
public
SelectorBase
,
public
AH::Updatable
<> {
57
public
:
69
GenericSelector
(
Selectable<N>
&
selectable
,
const
Callback &
callback
)
70
:
selectable
(
selectable
),
callback
(
callback
) {}
71
72
void
begin
()
override
{
73
callback
.begin();
74
reset
();
75
}
76
77
void
update
()
override
{
callback
.update(); }
78
80
void
reset
() {
81
setting_t
initialSelection =
selectable
.getInitialSelection();
82
selectable
.select(initialSelection);
83
callback
.update(initialSelection, initialSelection);
84
this->
setting
= initialSelection;
85
}
86
93
void
set
(
setting_t
newSetting) {
94
newSetting =
selectable
.validateSetting(newSetting);
95
selectable
.select(newSetting);
96
if
(
get
() != newSetting) {
97
callback
.update(
get
(), newSetting);
98
this->
setting
= newSetting;
99
}
100
}
101
109
void
increment
(
Wrap
wrap) {
110
setting_t
setting
= this->
get
();
111
setting++;
112
if
(
setting
== N) {
113
if
(wrap ==
Wrap::Wrap
)
114
setting
= 0;
115
else
116
return
;
117
}
118
this->
set
(setting);
119
}
120
128
void
decrement
(
Wrap
wrap) {
129
setting_t
setting
= this->
get
();
130
if
(setting == 0) {
131
if
(wrap ==
Wrap::Wrap
)
132
setting
= N;
133
else
134
return
;
135
}
136
setting
--;
137
this->
set
(setting);
138
}
139
140
private
:
141
Selectable<N>
&
selectable
;
142
143
public
:
144
Callback
callback
;
145
};
146
153
template
<setting_t N>
154
class
Selector
:
public
GenericSelector
<N> {
155
public
:
157
Selector
(
Selectable<N>
&
selectable
) :
GenericSelector
<N> {
selectable
, {}} {}
158
};
159
160
END_CS_NAMESPACE
Debug.hpp
Def.hpp
setting_t
uint8_t setting_t
The type used for Selectors.
Definition
Def.hpp:53
Selectable.hpp
Wrap
Wrap
An enumeration to set the behavior of selectors that are incremented (decremented) beyond their maxim...
Definition
Selector.hpp:14
Wrap::Clamp
@ Clamp
When the maximum (minimum) setting is reached, clamp to the maximum (minimum) setting.
Definition
Selector.hpp:15
Wrap::NoWrap
@ NoWrap
Definition
Selector.hpp:19
Wrap::Wrap
@ Wrap
When the maximum (minimum) setting is reached, wrap around to the minimum (maximum) setting.
Definition
Selector.hpp:17
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:14
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:11
Updatable.hpp
AH::Updatable
A super class for object that have to be updated regularly.
Definition
Updatable.hpp:169
GenericSelector::increment
void increment(Wrap wrap)
Add one to the setting, wrap around or clamp, depending on the parameter, if the new setting would be...
Definition
Selector.hpp:109
GenericSelector::set
void set(setting_t newSetting)
Select the given selection.
Definition
Selector.hpp:93
GenericSelector::decrement
void decrement(Wrap wrap)
Subtract one from the setting, wrap around or clamp, depending on the parameter, if the new setting w...
Definition
Selector.hpp:128
GenericSelector< N, Callback >::callback
Callback callback
Definition
Selector.hpp:144
GenericSelector::update
void update() override
Update this updatable.
Definition
Selector.hpp:77
GenericSelector< N, Callback >::selectable
Selectable< N > & selectable
Definition
Selector.hpp:141
GenericSelector::begin
void begin() override
Initialize this updatable.
Definition
Selector.hpp:72
GenericSelector::reset
void reset()
Reset the selection to the initial selection.
Definition
Selector.hpp:80
GenericSelector::GenericSelector
GenericSelector(Selectable< N > &selectable, const Callback &callback)
Constructor.
Definition
Selector.hpp:69
Selectable
Definition
Selectable.hpp:11
SelectorBase::SelectorBase
SelectorBase()=default
Constructor.
SelectorBase::setting
setting_t setting
The selection of the selector.
Definition
Selector.hpp:52
SelectorBase::get
setting_t get() const
Get the current selection/setting.
Definition
Selector.hpp:46
Selector::Selector
Selector(Selectable< N > &selectable)
Constructor.
Definition
Selector.hpp:157
EmptySelectorCallback
A callback for the GenericSelector class that does nothing.
Definition
Selector.hpp:23
EmptySelectorCallback::update
void update(setting_t oldSetting, setting_t newSetting)
Called when the setting changes.
Definition
Selector.hpp:29
EmptySelectorCallback::begin
void begin()
Initialize.
Definition
Selector.hpp:25
EmptySelectorCallback::update
void update()
Refresh, called periodically.
Definition
Selector.hpp:27
Generated by
1.17.0