Allow changing displayed fields in DriverView
This commit is contained in:
@ -19,6 +19,8 @@ public:
|
||||
void setValue(const char *str);
|
||||
void setValue(int boolValue);
|
||||
|
||||
void setSelected(int selected);
|
||||
|
||||
protected:
|
||||
private:
|
||||
Unicode::UnicodeChar valueBuffer[16];
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
#ifndef DRIVERVIEWFIELDSELECTION_HPP
|
||||
#define DRIVERVIEWFIELDSELECTION_HPP
|
||||
|
||||
#include "touchgfx/TypedText.hpp"
|
||||
#include <gui_generated/containers/DriverViewFieldSelectionBase.hpp>
|
||||
|
||||
class DriverViewFieldSelection : public DriverViewFieldSelectionBase {
|
||||
public:
|
||||
DriverViewFieldSelection();
|
||||
virtual ~DriverViewFieldSelection() {}
|
||||
|
||||
virtual void initialize();
|
||||
|
||||
void setName(const touchgfx::TypedText &name);
|
||||
void setSelected(int selected);
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
#endif // DRIVERVIEWFIELDSELECTION_HPP
|
||||
@ -2,6 +2,8 @@
|
||||
#define DRIVERVIEWVIEW_HPP
|
||||
|
||||
#include "gui/common/DataField.hpp"
|
||||
#include "gui/containers/DriverViewFieldSelection.hpp"
|
||||
#include "touchgfx/containers/scrollers/DrawableList.hpp"
|
||||
#include "vehicle.h"
|
||||
#include <gui/driverview_screen/DriverViewPresenter.hpp>
|
||||
#include <gui_generated/driverview_screen/DriverViewViewBase.hpp>
|
||||
@ -13,6 +15,9 @@ public:
|
||||
virtual void setupScreen();
|
||||
virtual void tearDownScreen();
|
||||
|
||||
void fieldTypeSelectionUpdateItem(DriverViewFieldSelection &item,
|
||||
int16_t itemIndex) override;
|
||||
|
||||
void setFieldType(size_t i, const DataFieldDescription &desc);
|
||||
void setFieldValue(size_t i, float value);
|
||||
void setFieldValue(size_t i, const char *value);
|
||||
@ -21,9 +26,25 @@ public:
|
||||
void setTireTemps(const TireTemps &temps);
|
||||
void setTSSoC(uint8_t soc);
|
||||
|
||||
void selectPrevField() override;
|
||||
void selectNextField() override;
|
||||
void selectPrevFieldType() override;
|
||||
void selectNextFieldType() override;
|
||||
void confirmFieldType() override;
|
||||
|
||||
static constexpr size_t NUM_FIELDS = 3;
|
||||
|
||||
protected:
|
||||
private:
|
||||
DriverViewField &getField(size_t i);
|
||||
DriverViewFieldSelection *getFieldType(size_t i);
|
||||
|
||||
void updateSelectedField(size_t select);
|
||||
void updateSelectedFieldType(size_t select);
|
||||
|
||||
size_t selectedField;
|
||||
size_t selectedFieldType;
|
||||
DataFieldType fieldTypes[NUM_FIELDS];
|
||||
};
|
||||
|
||||
#endif // DRIVERVIEWVIEW_HPP
|
||||
|
||||
@ -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