modifications to make no numberEdit() do their own painting. They all return strings to the numberEdit().

This commit is contained in:
kkoenig1@optonline.com
2022-06-11 15:38:08 +02:00
committed by Raphael Coeffic
parent d6d7713000
commit 702a89d952
11 changed files with 121 additions and 68 deletions
+5 -2
View File
@@ -225,6 +225,9 @@ void GVarEditWindow::setProperties(int onlyForFlightMode)
}
FlightModeData * fmData;
for (int fm = 0; fm < MAX_FLIGHT_MODES; fm++) {
if (values[fm] == nullptr) // KLK: the order of calls has changed and this might not be initialized yet.
continue;
if (onlyForFlightMode >= 0 && fm != onlyForFlightMode)
continue;
fmData = &g_model.flightModeData[fm];
@@ -238,13 +241,13 @@ void GVarEditWindow::setProperties(int onlyForFlightMode)
else {
values[fm]->setMin(GVAR_MAX + 1);
values[fm]->setMax(GVAR_MAX + MAX_FLIGHT_MODES - 1);
values[fm]->setDisplayHandler([=](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
values[fm]->setDisplayHandler([=](int32_t value) {
uint8_t targetFlightMode = value - GVAR_MAX - 1;
if (targetFlightMode >= fm)
targetFlightMode++;
char label[16];
getFlightModeString(label, targetFlightMode + 1);
dc->drawSizedText(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, label, strlen(label), flags);
return std::string(label);
});
}
@@ -121,16 +121,25 @@ class LogicalSwitchEditPage: public Page
edit2->setMax(222 - cs->v2);
edit2->invalidate();
});
edit1->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(value), flags | PREC1);
edit1->setDisplayHandler([](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, lswTimerValue(value), PREC1);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(value), flags | PREC1);
});
edit2->setDisplayHandler([cs](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
edit2->setDisplayHandler([cs](int32_t value) {
if (value < 0)
dc->drawText(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, "<<", flags);
return std::string("<<");
//dc->drawText(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, "<<", flags);
else if (value == 0)
dc->drawText(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, "--", flags);
else
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(cs->v2 + value), flags | PREC1);
return std::string("--");
// dc->drawText(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, "--", flags);
else {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, lswTimerValue(value), PREC1);
return std::string(s);
}
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(cs->v2 + value), flags | PREC1);
});
grid.nextLine();
}
@@ -146,15 +155,19 @@ class LogicalSwitchEditPage: public Page
else if (cstate == LS_FAMILY_TIMER) {
new StaticText(logicalSwitchOneWindow, grid.getLabelSlot(), STR_V1, 0, COLOR_THEME_PRIMARY1);
auto timer = new NumberEdit(logicalSwitchOneWindow, grid.getFieldSlot(), -128, 122, GET_SET_DEFAULT(cs->v1));
timer->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(value), flags | PREC1);
timer->setDisplayHandler([](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, lswTimerValue(value), PREC1);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(value), flags | PREC1);
});
grid.nextLine();
new StaticText(logicalSwitchOneWindow, grid.getLabelSlot(), STR_V2, 0, COLOR_THEME_PRIMARY1);
timer = new NumberEdit(logicalSwitchOneWindow, grid.getFieldSlot(), -128, 122, GET_SET_DEFAULT(cs->v2));
timer->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(value), flags | PREC1);
timer->setDisplayHandler([](int32_t value) {
return std::to_string(lswTimerValue(value));
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, lswTimerValue(value), flags | PREC1);
});
grid.nextLine();
}
@@ -179,8 +192,10 @@ class LogicalSwitchEditPage: public Page
int16_t v2_min = 0, v2_max = 0;
getMixSrcRange(cs->v1, v2_min, v2_max);
v2Edit = new NumberEdit(logicalSwitchOneWindow, grid.getFieldSlot(), v2_min, v2_max, GET_SET_DEFAULT(cs->v2));
v2Edit->setDisplayHandler([=](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
drawSourceCustomValue(dc, FIELD_PADDING_LEFT, FIELD_PADDING_TOP, cs->v1, (cs->v1 <= MIXSRC_LAST_CH ? calc100toRESX(value) : value), flags);
v2Edit->setDisplayHandler(
[=](int value) {
// drawSourceCustomValue(dc, FIELD_PADDING_LEFT, FIELD_PADDING_TOP, cs->v1, (cs->v1 <= MIXSRC_LAST_CH ? calc100toRESX(value) : value), flags);
return "ddd"; // ToDo This is not good
});
grid.nextLine();
}
+2 -2
View File
@@ -170,8 +170,8 @@ class OutputEditWindow : public Page
auto edit = new NumberEdit(window, grid.getFieldSlot(), -MAX_CURVES,
+MAX_CURVES, GET_SET_DEFAULT(output->curve));
edit->setDisplayHandler(
[](BitmapBuffer *dc, LcdFlags flags, int32_t value) {
dc->drawText(2, 2, getCurveString(value));
[](int32_t value) {
return getCurveString(value);
});
grid.nextLine();
+13 -6
View File
@@ -19,6 +19,8 @@
* GNU General Public License for more details.
*/
#include <iostream>
#include <sstream>
#include "model_telemetry.h"
#include "opentx.h"
#include "libopenui.h"
@@ -225,8 +227,11 @@ class SensorEditWindow : public Page {
else {
new StaticText(sensorParametersWindow, grid.getLabelSlot(), STR_ID, 0, COLOR_THEME_PRIMARY1);
auto hex = new NumberEdit(sensorParametersWindow, grid.getFieldSlot(2, 0), 0, 0xFFFF, GET_SET_DEFAULT(sensor->id));
hex->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
drawHexNumber(dc, FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags);
hex->setDisplayHandler([](int32_t value) {
std::stringstream stream;
stream << std::hex << value;
return stream.str();
// drawHexNumber(dc, FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags);
});
new NumberEdit(sensorParametersWindow, grid.getFieldSlot(2, 1), 0, 0xff, GET_SET_DEFAULT(sensor->instance));
grid.nextLine();
@@ -462,16 +467,18 @@ void ModelTelemetryPage::build(FormWindow * window, int8_t focusSensorIndex)
new StaticText(window, grid.getLabelSlot(true), STR_LOWALARM, 0, COLOR_THEME_PRIMARY1);
auto edit = new NumberEdit(window, grid.getFieldSlot(), -30, 30, GET_SET_DEFAULT(g_model.rssiAlarms.warning));
edit->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, g_model.rssiAlarms.getWarningRssi(), flags);
edit->setDisplayHandler([](int32_t value) {
return std::to_string(g_model.rssiAlarms.getWarningRssi());
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, g_model.rssiAlarms.getWarningRssi(), flags);
});
// window->setFirstField(edit);
grid.nextLine();
new StaticText(window, grid.getLabelSlot(true), STR_CRITICALALARM, 0, COLOR_THEME_PRIMARY1);
edit = new NumberEdit(window, grid.getFieldSlot(), -30, 30, GET_SET_DEFAULT(g_model.rssiAlarms.critical));
edit->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, g_model.rssiAlarms.getCriticalRssi(), flags);
edit->setDisplayHandler([](int32_t value) {
return std::to_string(g_model.rssiAlarms.getCriticalRssi());
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, g_model.rssiAlarms.getCriticalRssi(), flags);
});
grid.nextLine();
+5 -2
View File
@@ -448,8 +448,11 @@ void RadioHardwarePage::build(FormWindow * window)
// Bat calibration
new StaticText(window, grid.getLabelSlot(), STR_BATT_CALIB, 0, COLOR_THEME_PRIMARY1);
auto batCal = new NumberEdit(window, grid.getFieldSlot(1,0), -127, 127, GET_SET_DEFAULT(g_eeGeneral.txVoltageCalibration));
batCal->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, getBatteryVoltage(), flags | PREC2, 0, nullptr, "V");
batCal->setDisplayHandler([](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, getBatteryVoltage(), PREC2, 0, nullptr, "V");
return std::string(s);
//dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, getBatteryVoltage(), flags | PREC2, 0, nullptr, "V");
});
batCal->setWindowFlags(REFRESH_ALWAYS);
grid.nextLine();
+22 -10
View File
@@ -78,8 +78,11 @@ class DateTimeWindow : public FormGroup {
t.tm_mon = newValue - 1;
SET_LOAD_DATETIME(&t);
});
month->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
month->setDisplayHandler([](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, value, LEADING0);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
});
/* TODO dynamic max instead of 31 ...
@@ -100,8 +103,11 @@ class DateTimeWindow : public FormGroup {
t.tm_mday = newValue;
SET_LOAD_DATETIME(&t);
});
day->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
day->setDisplayHandler([](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, value, LEADING0, 2);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
});
grid.nextLine();
@@ -119,8 +125,11 @@ class DateTimeWindow : public FormGroup {
t.tm_hour = newValue;
SET_LOAD_DATETIME(&t);
});
hour->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
hour->setDisplayHandler([](int32_t value) {
static char s[50];
BitmapBuffer::formatNumberAsString(s, 49, value, LEADING0, 2);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
});
auto minutes = new NumberEdit(this, grid.getFieldSlot(3, 1), 0, 59,
@@ -135,8 +144,11 @@ class DateTimeWindow : public FormGroup {
t.tm_min = newValue;
SET_LOAD_DATETIME(&t);
});
minutes->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
minutes->setDisplayHandler([](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, value, LEADING0, 2);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
});
auto seconds = new NumberEdit(this, grid.getFieldSlot(3, 2), 0, 59,
@@ -151,8 +163,8 @@ class DateTimeWindow : public FormGroup {
t.tm_sec = newValue;
SET_LOAD_DATETIME(&t);
});
seconds->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value, flags | LEADING0, 2);
seconds->setDisplayHandler([](int value) {
return std::to_string(value);
});
}
};
+5 -2
View File
@@ -82,8 +82,11 @@ void RadioTrainerPage::build(FormWindow * window)
// Trainer multiplier
new StaticText(window, grid.getLabelSlot(), STR_MULTIPLIER, 0, COLOR_THEME_PRIMARY1);
auto multiplier = new NumberEdit(window, grid.getFieldSlot(3, 0), -10, 40, GET_SET_DEFAULT(g_eeGeneral.PPM_Multiplier));
multiplier->setDisplayHandler([](BitmapBuffer * dc, LcdFlags flags, int32_t value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value+10, flags | PREC1, 0);
multiplier->setDisplayHandler([](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, value+10, PREC1);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, value+10, flags | PREC1, 0);
});
grid.nextLine();
grid.nextLine();
+20 -12
View File
@@ -235,9 +235,12 @@ class SpecialFunctionEditPage : public Page
new NumberEdit(specialFunctionOneWindow, grid.getFieldSlot(), 0,
255, GET_SET_DEFAULT(CFN_PARAM(cfn)));
edit->setDisplayHandler(
[=](BitmapBuffer *dc, LcdFlags flags, int32_t value) {
dc->drawNumber(2, 2, CFN_PARAM(cfn), PREC1,
sizeof(CFN_PARAM(cfn)), nullptr, "s");
[=](int32_t value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, CFN_PARAM(cfn), PREC1, sizeof(CFN_PARAM(cfn)), nullptr, "s");
return (std::string(s));
// dc->drawNumber(2, 2, CFN_PARAM(cfn), PREC1,
// sizeof(CFN_PARAM(cfn)), nullptr, "s");
});
break;
}
@@ -318,9 +321,12 @@ class SpecialFunctionEditPage : public Page
grid.getFieldSlot(), val_min, val_max,
GET_SET_DEFAULT(CFN_PARAM(cfn)));
numedit->setDisplayHandler(
[](BitmapBuffer *dc, LcdFlags flags, int value) {
dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, abs(value),
flags, 0, value >= 0 ? "+= " : "-= ", nullptr);
[](int value) {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, abs(value), 0, 0, value >= 0 ? "+=" : "--", nullptr);
return std::string(s);
// dc->drawNumber(FIELD_PADDING_LEFT, FIELD_PADDING_TOP, abs(value),
// flags, 0, value >= 0 ? "+= " : "-= ", nullptr);
});
break;
}
@@ -342,14 +348,16 @@ class SpecialFunctionEditPage : public Page
60 / CFN_PLAY_REPEAT_MUL, GET_DEFAULT((int8_t)CFN_PLAY_REPEAT(cfn)),
SET_DEFAULT(CFN_PLAY_REPEAT(cfn)));
repeat->setDisplayHandler(
[](BitmapBuffer *dc, LcdFlags flags, int32_t value) {
[](int32_t value) {
if (value == 0)
dc->drawText(3, 0, "1x", flags);
return "1x";
else if (value == (int8_t)CFN_PLAY_REPEAT_NOSTART)
dc->drawText(3, 0, "!1x", flags);
else
dc->drawNumber(3, 0, value * CFN_PLAY_REPEAT_MUL, flags, 0,
nullptr, "s");
return "!1x";
else {
char s[50];
BitmapBuffer::formatNumberAsString(s, 49, value * CFN_PLAY_REPEAT_MUL, 0, 0, nullptr, "s");
return (const char *)s;
}
});
grid.nextLine();
}
+20 -15
View File
@@ -27,22 +27,27 @@
TimeEdit::TimeEdit(Window * parent, const rect_t & rect, int32_t vmin, int32_t vmax, std::function<int32_t()> getValue, std::function<void(int32_t)> setValue):
NumberEdit(parent, rect, vmin, vmax, std::move(getValue), std::move(setValue))
{
setDisplayHandler([=] (int value) {
TimerOptions timerOptions;
timerOptions.options = (textFlags & TIMEHOUR) != 0 ? SHOW_TIME : SHOW_TIMER;
return std::string(getTimerString(this->getValue(), timerOptions));
});
}
void TimeEdit::paint(BitmapBuffer * dc)
{
FormField::paint(dc);
// void TimeEdit::paint(BitmapBuffer * dc)
// {
// FormField::paint(dc);
LcdFlags textColor;
if (editMode)
textColor = COLOR_THEME_PRIMARY2;
else if (hasFocus())
textColor = COLOR_THEME_PRIMARY2;
else
textColor = COLOR_THEME_SECONDARY1;
// LcdFlags textColor;
// if (editMode)
// textColor = COLOR_THEME_PRIMARY2;
// else if (hasFocus())
// textColor = COLOR_THEME_PRIMARY2;
// else
// textColor = COLOR_THEME_SECONDARY1;
TimerOptions timerOptions;
timerOptions.options = (textFlags & TIMEHOUR) != 0 ? SHOW_TIME : SHOW_TIMER;
dc->drawText(FIELD_PADDING_LEFT, FIELD_PADDING_TOP,
getTimerString(getValue(), timerOptions), textColor);
}
// TimerOptions timerOptions;
// timerOptions.options = (textFlags & TIMEHOUR) != 0 ? SHOW_TIME : SHOW_TIMER;
// dc->drawText(FIELD_PADDING_LEFT, FIELD_PADDING_TOP,
// getTimerString(getValue(), timerOptions), textColor);
// }
-3
View File
@@ -34,9 +34,6 @@ class TimeEdit : public NumberEdit {
return "TimeEdit";
}
#endif
void paint(BitmapBuffer * dc) override;
};
#endif // _TIMEEDIT_H_