Allow changing displayed fields in DriverView
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
#include "gui/common/DataField.hpp"
|
||||
#include "texts/TextKeysAndLanguages.hpp"
|
||||
#include "touchgfx/Color.hpp"
|
||||
#include "touchgfx/Unicode.hpp"
|
||||
#include <gui/containers/DriverViewField.hpp>
|
||||
|
||||
@ -43,6 +44,12 @@ void DriverViewField::setValue(int boolValue) {
|
||||
updateValueBuffer();
|
||||
}
|
||||
|
||||
void DriverViewField::setSelected(int selected) {
|
||||
uint8_t v = selected ? 0x44 : 0x00;
|
||||
box.setColor(touchgfx::Color::getColorFromRGB(v, v, v));
|
||||
box.invalidate();
|
||||
}
|
||||
|
||||
void DriverViewField::updateValueBuffer() {
|
||||
switch (fieldKind) {
|
||||
case DataFieldKind::Numeric: {
|
||||
|
||||
17
TouchGFX/gui/src/containers/DriverViewFieldSelection.cpp
Normal file
17
TouchGFX/gui/src/containers/DriverViewFieldSelection.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include "touchgfx/Color.hpp"
|
||||
#include <gui/containers/DriverViewFieldSelection.hpp>
|
||||
|
||||
DriverViewFieldSelection::DriverViewFieldSelection() {}
|
||||
|
||||
void DriverViewFieldSelection::initialize() {
|
||||
DriverViewFieldSelectionBase::initialize();
|
||||
}
|
||||
|
||||
void DriverViewFieldSelection::setName(const touchgfx::TypedText &name) {
|
||||
this->name.setTypedText(name);
|
||||
}
|
||||
|
||||
void DriverViewFieldSelection::setSelected(int selected) {
|
||||
int val = selected ? 0x66 : 0x22;
|
||||
bg.setColor(touchgfx::Color::getColorFromRGB(val, val, val));
|
||||
}
|
||||
@ -21,17 +21,17 @@ void DriverViewPresenter::vehicleStateUpdated() {
|
||||
|
||||
for (size_t i = 0; i < 3; i++) {
|
||||
DataFieldType field = fields[i];
|
||||
void *val = dataFieldDescs[field].getValue();
|
||||
switch (dataFieldDescs[field].kind) {
|
||||
case DataFieldKind::Numeric:
|
||||
view.setFieldValue(i, *((float *)val));
|
||||
break;
|
||||
case DataFieldKind::Bool:
|
||||
view.setFieldValue(i, *((int *)val));
|
||||
break;
|
||||
case DataFieldKind::Text:
|
||||
view.setFieldValue(i, (const char *)val);
|
||||
break;
|
||||
}
|
||||
// void *val = dataFieldDescs[field].getValue();
|
||||
// switch (dataFieldDescs[field].kind) {
|
||||
// case DataFieldKind::Numeric:
|
||||
// view.setFieldValue(i, *((float *)val));
|
||||
// break;
|
||||
// case DataFieldKind::Bool:
|
||||
// view.setFieldValue(i, *((int *)val));
|
||||
// break;
|
||||
// case DataFieldKind::Text:
|
||||
// view.setFieldValue(i, (const char *)val);
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,18 +1,27 @@
|
||||
#include "gui/common/DataField.hpp"
|
||||
#include "gui/containers/DriverViewField.hpp"
|
||||
#include "texts/TextKeysAndLanguages.hpp"
|
||||
#include <gui/driverview_screen/DriverViewView.hpp>
|
||||
|
||||
DriverViewView::DriverViewView() {}
|
||||
DriverViewView::DriverViewView()
|
||||
: fieldTypes{DF_MinCellVolt, DF_Speed, DF_TSCurrent} {}
|
||||
|
||||
void DriverViewView::setupScreen() {
|
||||
DriverViewViewBase::setupScreen();
|
||||
field1.setType(dataFieldDescs[DF_MinCellVolt]);
|
||||
field2.setType(dataFieldDescs[DF_Speed]);
|
||||
field3.setType(dataFieldDescs[DF_TSCurrent]);
|
||||
for (size_t i = 0; i < NUM_FIELDS; i++) {
|
||||
getField(i).setType(dataFieldDescs[fieldTypes[i]]);
|
||||
}
|
||||
fieldTypeSelection.setNumberOfItems(DataFieldType_COUNT);
|
||||
}
|
||||
|
||||
void DriverViewView::tearDownScreen() { DriverViewViewBase::tearDownScreen(); }
|
||||
|
||||
void DriverViewView::fieldTypeSelectionUpdateItem(
|
||||
DriverViewFieldSelection &item, int16_t itemIndex) {
|
||||
item.setName(dataFieldDescs[itemIndex].title);
|
||||
item.setSelected(itemIndex == selectedFieldType);
|
||||
}
|
||||
|
||||
void DriverViewView::setFieldType(size_t i, const DataFieldDescription &desc) {
|
||||
getField(i).setType(desc);
|
||||
}
|
||||
@ -41,6 +50,59 @@ void DriverViewView::setTSSoC(uint8_t soc) {
|
||||
tsSoC.invalidate();
|
||||
}
|
||||
|
||||
void DriverViewView::selectNextField() {
|
||||
if (!fieldTypeSelection.isVisible()) {
|
||||
fieldTypeSelection.setVisible(true);
|
||||
updateSelectedField(0);
|
||||
} else {
|
||||
updateSelectedField((selectedField + 1) % NUM_FIELDS);
|
||||
}
|
||||
}
|
||||
|
||||
void DriverViewView::selectPrevField() {
|
||||
if (!fieldTypeSelection.isVisible()) {
|
||||
fieldTypeSelection.setVisible(true);
|
||||
updateSelectedField(NUM_FIELDS - 1);
|
||||
} else {
|
||||
if (selectedField == 0) {
|
||||
updateSelectedField(NUM_FIELDS - 1);
|
||||
} else {
|
||||
updateSelectedField(selectedField - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DriverViewView::selectNextFieldType() {
|
||||
if (!fieldTypeSelection.isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
updateSelectedFieldType((selectedFieldType + 1) % DataFieldType_COUNT);
|
||||
}
|
||||
|
||||
void DriverViewView::selectPrevFieldType() {
|
||||
if (!fieldTypeSelection.isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selectedFieldType == 0) {
|
||||
updateSelectedFieldType(DataFieldType_COUNT - 1);
|
||||
} else {
|
||||
updateSelectedFieldType(selectedFieldType - 1);
|
||||
}
|
||||
}
|
||||
|
||||
void DriverViewView::confirmFieldType() {
|
||||
if (!fieldTypeSelection.isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
DriverViewField &field = getField(selectedField);
|
||||
field.setType(dataFieldDescs[selectedFieldType]);
|
||||
field.setSelected(false);
|
||||
fieldTypeSelection.setVisible(false);
|
||||
}
|
||||
|
||||
DriverViewField &DriverViewView::getField(size_t i) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
@ -51,3 +113,29 @@ DriverViewField &DriverViewView::getField(size_t i) {
|
||||
return field3;
|
||||
}
|
||||
}
|
||||
|
||||
DriverViewFieldSelection *DriverViewView::getFieldType(size_t i) {
|
||||
return static_cast<DriverViewFieldSelection *>(
|
||||
fieldTypeSelectionListItems.getDrawable(i));
|
||||
}
|
||||
|
||||
void DriverViewView::updateSelectedField(size_t selected) {
|
||||
getField(selectedField).setSelected(false);
|
||||
DriverViewField &field = getField(selected);
|
||||
field.setSelected(true);
|
||||
fieldTypeSelection.moveTo(field.getX(), fieldTypeSelection.getY());
|
||||
fieldTypeSelection.invalidate();
|
||||
selectedField = selected;
|
||||
|
||||
updateSelectedFieldType(fieldTypes[selectedField]);
|
||||
}
|
||||
|
||||
void DriverViewView::updateSelectedFieldType(size_t selected) {
|
||||
size_t previousSelected = selectedFieldType;
|
||||
selectedFieldType = selected;
|
||||
// Trigger update of the background
|
||||
fieldTypeSelection.itemChanged(previousSelected);
|
||||
fieldTypeSelection.itemChanged(selectedFieldType);
|
||||
|
||||
fieldTypeSelection.animateToItem(selectedFieldType, 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user