Handle buttons & encoders in View, not Model

This commit is contained in:
2023-03-07 21:58:28 +01:00
parent 38d3d765ad
commit d26339e265
19 changed files with 257 additions and 165 deletions

View File

@ -11,9 +11,9 @@ void MissionSelectElement::initialize() {
void MissionSelectElement::setUp(uint32_t i, TEXTS label) {
uint8_t val;
if (i % 2 == 0) {
val = 0b10000;
val = 0x22;
} else {
val = 0b11000;
val = 0x11;
}
bgColor = touchgfx::Color::getColorFromRGB(val, val, val);
bg.setColor(bgColor);

View File

@ -7,7 +7,3 @@ MissionSelectPresenter::MissionSelectPresenter(MissionSelectView &v)
void MissionSelectPresenter::activate() {}
void MissionSelectPresenter::deactivate() {}
void MissionSelectPresenter::notifyMissionChanged(Mission mission) {
view.setSelectedMission(mission);
}

View File

@ -1,7 +1,9 @@
#include "stw_defines.h"
#include "texts/TextKeysAndLanguages.hpp"
#include <gui/missionselect_screen/MissionSelectView.hpp>
MissionSelectView::MissionSelectView() : selected{nullptr} {}
MissionSelectView::MissionSelectView()
: selected{nullptr}, selectedMission{MISSION_NONE} {}
void MissionSelectView::setupScreen() {
MissionSelectViewBase::setupScreen();
@ -10,14 +12,38 @@ void MissionSelectView::setupScreen() {
autox.setUp(2, T_AUTOX);
trackdrive.setUp(3, T_TRACKDRIVE);
ebs.setUp(4, T_EBS);
inspection.setUp(6, T_INSPECTION);
manual.setUp(7, T_MANUAL);
inspection.setUp(5, T_INSPECTION);
manual.setUp(6, T_MANUAL);
}
void MissionSelectView::tearDownScreen() {
MissionSelectViewBase::tearDownScreen();
}
void MissionSelectView::incMission() {
int mission_int = static_cast<int>(selectedMission);
mission_int++;
// mission_int = 0 is MISSION_NONE, which we don't want to select.
// NUM_MISSIONS is equal to the last mission, so check for strictly
// greater.
if (mission_int > NUM_MISSIONS) {
mission_int = 1;
}
setSelectedMission(static_cast<Mission>(mission_int));
}
void MissionSelectView::decMission() {
int mission_int = static_cast<int>(selectedMission);
mission_int--;
// mission_int = 0 is MISSION_NONE, which we don't want to select.
// NUM_MISSIONS is equal to the last mission, so check for strictly
// greater.
if (mission_int <= 0) {
mission_int = NUM_MISSIONS;
}
setSelectedMission(static_cast<Mission>(mission_int));
}
void MissionSelectView::setSelectedMission(Mission mission) {
if (selected != nullptr) {
selected->setSelected(false);
@ -49,4 +75,5 @@ void MissionSelectView::setSelectedMission(Mission mission) {
break;
}
selected->setSelected(true);
selectedMission = mission;
}

View File

@ -6,38 +6,6 @@
#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>
Model::Model() : modelListener(0), mission{MISSION_NONE} {}
Model::Model() : modelListener(0) {}
void Model::tick() {
UIMessage msg;
while (tx_queue_receive(&ui_queue, &msg, TX_NO_WAIT) == TX_SUCCESS) {
switch (msg.kind) {
case UMK_BTN_RELEASED:
// TODO: What do we do with this?
break;
case UMK_ENC_CW: {
int mission_int = static_cast<int>(mission);
mission_int++;
// mission_int = 0 is MISSION_NONE, which we don't want to select.
// NUM_MISSIONS is equal to the last mission, so check for strictly
// greater.
if (mission_int > NUM_MISSIONS) {
mission_int = 1;
}
mission = static_cast<Mission>(mission_int);
modelListener->notifyMissionChanged(mission);
break;
}
case UMK_ENC_CCW:
int mission_int = static_cast<int>(mission);
mission_int--;
if (mission_int <= 0) {
mission_int = NUM_MISSIONS;
}
mission = static_cast<Mission>(mission_int);
modelListener->notifyMissionChanged(mission);
break;
}
HAL_GPIO_TogglePin(STATUS2_GPIO_Port, STATUS2_Pin);
}
}
void Model::tick() {}