Latest libopenui updates

This commit is contained in:
Bertrand Songis
2019-10-11 18:30:24 +02:00
parent 887616091b
commit 078cf3ba86
4 changed files with 59 additions and 41 deletions
+45 -35
View File
@@ -22,27 +22,23 @@
#include "model_gvars.h"
#include "libopenui.h"
#define SET_DIRTY() storageDirty(EE_MODEL)
#define TEXT_OFFSET_TOP 2
#define LINE_HEIGHT 20
#define TEXT_LEFT_MARGIN 2
#define GVAR_NAME_SIZE 50
GVarButton::GVarButton(Window * parent, const rect_t & rect, uint8_t gvar):
GVarButton::GVarButton(Window * parent, const rect_t &rect, uint8_t gvar) :
Button(parent, rect),
gvar(gvar)
{
int perRow = (width() - GVAR_NAME_SIZE + TEXT_LEFT_MARGIN * 2) / GVAR_NAME_SIZE;
lines = MAX_FLIGHT_MODES / perRow;
if (MAX_FLIGHT_MODES % perRow != 0) lines++;
setHeight(LINE_HEIGHT * (lines << 1) + TEXT_OFFSET_TOP * 2);
setHeight(PAGE_LINE_HEIGHT * (lines << 1) + FIELD_PADDING_TOP * 2);
}
void GVarButton::checkEvents() {
void GVarButton::checkEvents()
{
Button::checkEvents();
if (currentFlightMode != getFlightMode()) {
invalidate();
@@ -57,18 +53,19 @@ void GVarButton::checkEvents() {
}
}
void GVarButton::paint(BitmapBuffer * dc) {
void GVarButton::paint(BitmapBuffer * dc)
{
GVarData * gvariable = &g_model.gvars[gvar];
// The bounding rect
int nameRectW = TEXT_LEFT_MARGIN + GVAR_NAME_SIZE;
coord_t x = TEXT_LEFT_MARGIN;
coord_t y = TEXT_OFFSET_TOP;
y += LINE_HEIGHT;
coord_t y = FIELD_PADDING_TOP;
y += PAGE_LINE_HEIGHT;
currentFlightMode = getFlightMode();
gvarSum = 0;
dc->drawSolidFilledRect(0, 0, nameRectW, rect.h, CURVE_AXIS_COLOR);
dc->drawText(2, TEXT_OFFSET_TOP, getGVarString(gvar), 0);
dc->drawText(2, FIELD_PADDING_TOP, getGVarString(gvar), 0);
dc->drawSizedText(x, y, gvariable->name, LEN_GVAR_NAME, 0);
//values are right aligned
x += GVAR_NAME_SIZE;
@@ -88,21 +85,21 @@ void GVarButton::paint(BitmapBuffer * dc) {
if (x > width()) {
bgFilled = false;
x = nameRectW + GVAR_NAME_SIZE;
y += LINE_HEIGHT * 2;
y += PAGE_LINE_HEIGHT * 2;
startX = nameRectW;
line += 2;
}
y = TEXT_OFFSET_TOP + line * LINE_HEIGHT;
y = FIELD_PADDING_TOP + line * PAGE_LINE_HEIGHT;
if (!bgFilled) {
dc->drawSolidFilledRect(startX, y, width() - startX, LINE_HEIGHT, CURVE_AXIS_COLOR);
dc->drawSolidFilledRect(startX, y, width() - startX, PAGE_LINE_HEIGHT, CURVE_AXIS_COLOR);
bgFilled = true;
}
//Flight mode
// Flight mode
drawFlightMode(dc, x, y, flightMode, attr);
coord_t yval = TEXT_OFFSET_TOP + (line + 1) * LINE_HEIGHT;
coord_t yval = FIELD_PADDING_TOP + (line + 1) * PAGE_LINE_HEIGHT;
if (v <= GVAR_MAX && (gvariable->prec > 0 || abs(v) >= 1000 || (abs(v) >= 100 && gvariable->unit > 0))) {
attr |= SMLSIZE;
@@ -122,30 +119,33 @@ void GVarButton::paint(BitmapBuffer * dc) {
dc->drawSolidRect(0, 0, rect.w, rect.h, 2, hasFocus() ? SCROLLBOX_COLOR : CURVE_AXIS_COLOR);
}
void GVarButton::drawFlightMode(BitmapBuffer * dc, coord_t x, coord_t y, int fm, LcdFlags attr) {
void GVarButton::drawFlightMode(BitmapBuffer * dc, coord_t x, coord_t y, int fm, LcdFlags attr)
{
char label[16];
getFlightModeString(label, fm + 1);
dc->drawSizedText(x, y, label, strlen(label), attr);
}
void GVarRenderer::paint(BitmapBuffer * dc) {
void GVarRenderer::paint(BitmapBuffer * dc)
{
lastFlightMode = getFlightMode();
FlightModeData * fmData = &g_model.flightModeData[lastFlightMode];
lastGVar = fmData->gvars[index];
drawStringWithIndex(0, TEXT_OFFSET_TOP, TR_GV, index + 1, MENU_COLOR);
drawStringWithIndex(0, FIELD_PADDING_TOP, TR_GV, index + 1, MENU_COLOR);
if (lastGVar > GVAR_MAX) {
uint8_t fm = lastGVar - GVAR_MAX - 1;
if (fm >= lastFlightMode) fm++;
char label[16];
getFlightModeString(label, fm + 1);
dc->drawSizedText(GVAR_NAME_SIZE, TEXT_OFFSET_TOP, label, strlen(label), MENU_COLOR);
dc->drawSizedText(GVAR_NAME_SIZE, FIELD_PADDING_TOP, label, strlen(label), MENU_COLOR);
}
else {
drawGVarValue(dc, GVAR_NAME_SIZE, TEXT_OFFSET_TOP, index, lastGVar, MENU_COLOR);
drawGVarValue(dc, GVAR_NAME_SIZE, FIELD_PADDING_TOP, index, lastGVar, MENU_COLOR);
}
}
void GVarRenderer::checkEvents() {
void GVarRenderer::checkEvents()
{
if (lastFlightMode != getFlightMode()) {
invalidate();
updated = true;
@@ -155,8 +155,11 @@ void GVarRenderer::checkEvents() {
updated = true;
}
}
bool GVarRenderer::isUpdated() {
if (!updated) return false;
bool GVarRenderer::isUpdated()
{
if (!updated)
return false;
updated = false;
return true;
}
@@ -165,10 +168,12 @@ const std::string GVarEditWindow::unitPercent = "%";
void GVarEditWindow::buildHeader(Window * window)
{
new StaticText(window, {70, 4, window->width() - 70, 20}, STR_GLOBAL_VAR, MENU_COLOR);
gVarInHeader = new GVarRenderer(window, {70, 28, window->width() - 70, 20}, index);
new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_GLOBAL_VAR, MENU_COLOR);
gVarInHeader = new GVarRenderer(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, index);
}
void GVarEditWindow::checkEvents() {
void GVarEditWindow::checkEvents()
{
Page::checkEvents();
if (gVarInHeader && gVarInHeader->isUpdated()) {
for (int fm = 0; fm < MAX_FLIGHT_MODES; fm++) {
@@ -178,7 +183,8 @@ void GVarEditWindow::checkEvents() {
}
}
void GVarEditWindow::setProperties(int onlyForFlightMode) {
void GVarEditWindow::setProperties(int onlyForFlightMode)
{
GVarData * gvar = &g_model.gvars[index];
int32_t minValue = GVAR_MIN + gvar->min;
int32_t maxValue = GVAR_MAX - gvar->max;
@@ -192,8 +198,8 @@ void GVarEditWindow::setProperties(int onlyForFlightMode) {
min->setSuffix(suffix);
max->setSuffix(suffix);
//TODO min->setLcdFlags(prec);
//TODO max->setLcdFlags(prec);
// TODO min->setLcdFlags(prec);
// TODO max->setLcdFlags(prec);
min->invalidate();
max->invalidate();
@@ -204,7 +210,7 @@ void GVarEditWindow::setProperties(int onlyForFlightMode) {
if (!values[fm]) continue;
fmData = &g_model.flightModeData[fm];
//custom value
// custom value
if (fmData->gvars[index] <= GVAR_MAX || fm == 0) {
values[fm]->setMin(GVAR_MIN + gvar->min);
values[fm]->setMax(GVAR_MAX - gvar->max);
@@ -229,7 +235,8 @@ void GVarEditWindow::setProperties(int onlyForFlightMode) {
if (gVarInHeader) gVarInHeader->invalidate();
}
void GVarEditWindow::buildBody(Window * window) {
void GVarEditWindow::buildBody(FormWindow * window)
{
GVarData * gvar = &g_model.gvars[index];
FormGridLayout grid;
@@ -311,17 +318,20 @@ void GVarEditWindow::buildBody(Window * window) {
}
setProperties();
window->setLastField();
window->setInnerHeight(grid.getWindowHeight());
}
void ModelGVarsPage::rebuild(FormWindow * window) {
void ModelGVarsPage::rebuild(FormWindow * window)
{
coord_t scrollPosition = window->getScrollPositionY();
window->clear();
build(window);
window->setScrollPositionY(scrollPosition);
}
void ModelGVarsPage::build(FormWindow * window) {
void ModelGVarsPage::build(FormWindow * window)
{
FormGridLayout grid;
grid.spacer(8);
grid.setLabelWidth(70);
+9 -4
View File
@@ -30,6 +30,7 @@ class GVarButton : public Button {
GVarButton(Window * parent, const rect_t & rect, uint8_t gvar);
void checkEvents() override;
void paint(BitmapBuffer * dc) override;
protected:
void drawFlightMode(BitmapBuffer * dc, coord_t x, coord_t y, int fm, LcdFlags attr);
uint8_t gvar;
@@ -38,7 +39,6 @@ class GVarButton : public Button {
uint8_t currentFlightMode; //used for invalidation
};
class ModelGVarsPage : public PageTab {
public:
ModelGVarsPage() : PageTab(STR_GLOBAL_VARS, ICON_MODEL_GVARS) {}
@@ -52,11 +52,12 @@ class GVarRenderer : public Window {
Window(window, rect),
index(gvarIndex)
{
}
void paint(BitmapBuffer * dc) override;
void checkEvents() override;
bool isUpdated();
protected:
uint8_t index;
gvar_t lastGVar;
@@ -75,14 +76,18 @@ class GVarEditWindow : public Page {
buildHeader(&header);
buildBody(&body);
}
~GVarEditWindow() {
~GVarEditWindow()
{
delete[] values;
}
void checkEvents() override;
protected:
uint8_t index;
void buildHeader(Window * window);
void buildBody(Window * window);
void buildBody(FormWindow * window);
void setProperties(int onlyForFlightMode = -1);
NumberEdit* min;
NumberEdit* max;
+4 -1
View File
@@ -55,7 +55,10 @@ set(HARDWARE_TOUCH YES)
set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} ${BITMAPS_TARGET})
add_definitions(-DSTM32F429_439xx -DSDRAM -DCOLORLCD -DLIBOPENUI -DHARDWARE_TOUCH)
set(HARDWARE_TOUCH ON)
set(SOFTWARE_KEYBOARD ON)
add_definitions(-DSTM32F429_439xx -DSDRAM -DCOLORLCD -DLIBOPENUI -DHARDWARE_TOUCH -DSOFTWARE_KEYBOARD)
add_definitions(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK)
add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE})
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})