Use min/max/step struct for value settings
This commit is contained in:
parent
75e0e5f243
commit
668743acc6
@ -27,7 +27,7 @@ const SettingInfo settingsList[settingsCount] = {
|
|||||||
{"Bookerly", "Noto Sans", "Open Dyslexic"}),
|
{"Bookerly", "Noto Sans", "Open Dyslexic"}),
|
||||||
SettingInfo::Enum("Reader Font Size", &CrossPointSettings::fontSize, {"Small", "Medium", "Large", "X Large"}),
|
SettingInfo::Enum("Reader Font Size", &CrossPointSettings::fontSize, {"Small", "Medium", "Large", "X Large"}),
|
||||||
SettingInfo::Enum("Reader Line Spacing", &CrossPointSettings::lineSpacing, {"Tight", "Normal", "Wide"}),
|
SettingInfo::Enum("Reader Line Spacing", &CrossPointSettings::lineSpacing, {"Tight", "Normal", "Wide"}),
|
||||||
SettingInfo::Value("Reader Screen Margin", &CrossPointSettings::screenMargin, 5, 50),
|
SettingInfo::Value("Reader Screen Margin", &CrossPointSettings::screenMargin, { 5, 50, 5 }),
|
||||||
SettingInfo::Enum("Reader Paragraph Alignment", &CrossPointSettings::paragraphAlignment,
|
SettingInfo::Enum("Reader Paragraph Alignment", &CrossPointSettings::paragraphAlignment,
|
||||||
{"Justify", "Left", "Center", "Right"}),
|
{"Justify", "Left", "Center", "Right"}),
|
||||||
SettingInfo::Enum("Time to Sleep", &CrossPointSettings::sleepTimeout,
|
SettingInfo::Enum("Time to Sleep", &CrossPointSettings::sleepTimeout,
|
||||||
@ -53,7 +53,7 @@ void SettingsActivity::onEnter() {
|
|||||||
updateRequired = true;
|
updateRequired = true;
|
||||||
|
|
||||||
xTaskCreate(&SettingsActivity::taskTrampoline, "SettingsActivityTask",
|
xTaskCreate(&SettingsActivity::taskTrampoline, "SettingsActivityTask",
|
||||||
2048, // Stack size
|
4096, // Stack size
|
||||||
this, // Parameters
|
this, // Parameters
|
||||||
1, // Priority
|
1, // Priority
|
||||||
&displayTaskHandle // Task handle
|
&displayTaskHandle // Task handle
|
||||||
@ -125,10 +125,10 @@ void SettingsActivity::toggleCurrentSetting() {
|
|||||||
// Decreasing would also be nice for large ranges I think but oh well can't have everything
|
// Decreasing would also be nice for large ranges I think but oh well can't have everything
|
||||||
const int8_t currentValue = SETTINGS.*(setting.valuePtr);
|
const int8_t currentValue = SETTINGS.*(setting.valuePtr);
|
||||||
// Wrap to minValue if exceeding setting value boundary
|
// Wrap to minValue if exceeding setting value boundary
|
||||||
if (currentValue == setting.maxValue) {
|
if (currentValue + setting.valueRange.step > setting.valueRange.max) {
|
||||||
SETTINGS.*(setting.valuePtr) = setting.minValue;
|
SETTINGS.*(setting.valuePtr) = setting.valueRange.min;
|
||||||
} else {
|
} else {
|
||||||
SETTINGS.*(setting.valuePtr) = currentValue + 1;
|
SETTINGS.*(setting.valuePtr) = currentValue + setting.valueRange.step;
|
||||||
}
|
}
|
||||||
} else if (setting.type == SettingType::ACTION) {
|
} else if (setting.type == SettingType::ACTION) {
|
||||||
if (std::string(setting.name) == "Check for updates") {
|
if (std::string(setting.name) == "Check for updates") {
|
||||||
|
|||||||
@ -20,23 +20,28 @@ struct SettingInfo {
|
|||||||
uint8_t CrossPointSettings::* valuePtr; // Pointer to member in CrossPointSettings (for TOGGLE/ENUM/VALUE)
|
uint8_t CrossPointSettings::* valuePtr; // Pointer to member in CrossPointSettings (for TOGGLE/ENUM/VALUE)
|
||||||
std::vector<std::string> enumValues;
|
std::vector<std::string> enumValues;
|
||||||
|
|
||||||
// Bounds for VALUE type settings
|
struct ValueRange {
|
||||||
int8_t minValue;
|
uint8_t min;
|
||||||
uint8_t maxValue;
|
uint8_t max;
|
||||||
|
uint8_t step;
|
||||||
|
};
|
||||||
|
// Bounds/step for VALUE type settings
|
||||||
|
ValueRange valueRange;
|
||||||
|
|
||||||
|
|
||||||
// Static constructors
|
// Static constructors
|
||||||
static SettingInfo Toggle(const char* name, uint8_t CrossPointSettings::* ptr) {
|
static SettingInfo Toggle(const char* name, uint8_t CrossPointSettings::* ptr) {
|
||||||
return {name, SettingType::TOGGLE, ptr, {}, 0, 0};
|
return {name, SettingType::TOGGLE, ptr};
|
||||||
}
|
}
|
||||||
|
|
||||||
static SettingInfo Enum(const char* name, uint8_t CrossPointSettings::* ptr, std::vector<std::string> values) {
|
static SettingInfo Enum(const char* name, uint8_t CrossPointSettings::* ptr, std::vector<std::string> values) {
|
||||||
return {name, SettingType::ENUM, ptr, std::move(values), 0, 0};
|
return {name, SettingType::ENUM, ptr, std::move(values)};
|
||||||
}
|
}
|
||||||
|
|
||||||
static SettingInfo Action(const char* name) { return {name, SettingType::ACTION, nullptr, {}, 0, 0}; }
|
static SettingInfo Action(const char* name) { return {name, SettingType::ACTION, nullptr}; }
|
||||||
|
|
||||||
static SettingInfo Value(const char* name, uint8_t CrossPointSettings::* ptr, int8_t minValue, uint8_t maxValue) {
|
static SettingInfo Value(const char* name, uint8_t CrossPointSettings::* ptr, const ValueRange valueRange) {
|
||||||
return {name, SettingType::VALUE, ptr, {}, minValue, maxValue};
|
return {name, SettingType::VALUE, ptr, {}, valueRange};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user