Add AMI screen

This commit is contained in:
2023-03-07 22:35:12 +01:00
parent d26339e265
commit 81b7a23a34
43 changed files with 1447 additions and 45 deletions

View File

@ -0,0 +1,36 @@
#ifndef AMIPRESENTER_HPP
#define AMIPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class AMIView;
class AMIPresenter : public touchgfx::Presenter, public ModelListener
{
public:
AMIPresenter(AMIView& v);
/**
* The activate function is called automatically when this screen is "switched in"
* (ie. made active). Initialization logic can be placed here.
*/
virtual void activate();
/**
* The deactivate function is called automatically when this screen is "switched out"
* (ie. made inactive). Teardown functionality can be placed here.
*/
virtual void deactivate();
virtual ~AMIPresenter() {};
private:
AMIPresenter();
AMIView& view;
};
#endif // AMIPRESENTER_HPP

View File

@ -0,0 +1,21 @@
#ifndef AMIVIEW_HPP
#define AMIVIEW_HPP
#include "stw_defines.h"
#include <gui/ami_screen/AMIPresenter.hpp>
#include <gui_generated/ami_screen/AMIViewBase.hpp>
class AMIView : public AMIViewBase {
public:
AMIView();
virtual ~AMIView() {}
virtual void setupScreen();
virtual void tearDownScreen();
void setMission(Mission mission);
protected:
};
#endif // AMIVIEW_HPP

View File

@ -28,6 +28,8 @@ public:
virtual ~MissionSelectPresenter(){};
void confirmMission(Mission mission);
private:
MissionSelectPresenter();

View File

@ -9,13 +9,14 @@ class MissionSelectView : public MissionSelectViewBase {
public:
MissionSelectView();
virtual ~MissionSelectView() {}
virtual void setupScreen();
virtual void tearDownScreen();
virtual void setupScreen() override;
virtual void tearDownScreen() override;
void setSelectedMission(Mission mission);
virtual void incMission();
virtual void decMission();
virtual void incMission() override;
virtual void decMission() override;
virtual void confirmMission() override;
protected:
private:

View File

@ -12,8 +12,14 @@ public:
void tick();
void setMission(Mission mission) { this->mission = mission; }
Mission getMission() { return mission; }
protected:
ModelListener *modelListener;
private:
Mission mission;
};
#endif // MODEL_HPP

View File

@ -0,0 +1,10 @@
#include <gui/ami_screen/AMIPresenter.hpp>
#include <gui/ami_screen/AMIView.hpp>
#include "main.h"
AMIPresenter::AMIPresenter(AMIView &v) : view(v) {}
void AMIPresenter::activate() { view.setMission(model->getMission()); }
void AMIPresenter::deactivate() {}

View File

@ -0,0 +1,40 @@
#include "stw_defines.h"
#include "texts/TextKeysAndLanguages.hpp"
#include "touchgfx/Color.hpp"
#include "touchgfx/TypedText.hpp"
#include <gui/ami_screen/AMIView.hpp>
AMIView::AMIView() {}
void AMIView::setupScreen() { AMIViewBase::setupScreen(); }
void AMIView::tearDownScreen() { AMIViewBase::tearDownScreen(); }
void AMIView::setMission(Mission mission) {
switch (mission) {
case MISSION_ACCEL:
currentMission.setTypedText(TypedText(T_ACCEL_HUGE));
break;
case MISSION_SKIDPAD:
currentMission.setTypedText(TypedText(T_SKIDPAD_HUGE));
break;
case MISSION_AUTOX:
currentMission.setTypedText(TypedText(T_AUTOX_HUGE));
break;
case MISSION_TRACKDRIVE:
currentMission.setTypedText(TypedText(T_TRACKDRIVE_HUGE));
break;
case MISSION_EBS:
currentMission.setTypedText(TypedText(T_EBS_HUGE));
break;
case MISSION_INSPECTION:
currentMission.setTypedText(TypedText(T_INSPECTION_HUGE));
break;
case MISSION_MANUAL:
case MISSION_NONE:
default:
currentMission.setTypedText(TypedText(T_INVALID_HUGE));
currentMission.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0, 0));
break;
}
}

View File

@ -7,3 +7,7 @@ MissionSelectPresenter::MissionSelectPresenter(MissionSelectView &v)
void MissionSelectPresenter::activate() {}
void MissionSelectPresenter::deactivate() {}
void MissionSelectPresenter::confirmMission(Mission mission) {
model->setMission(mission);
}

View File

@ -1,3 +1,4 @@
#include "gui/missionselect_screen/MissionSelectPresenter.hpp"
#include "stw_defines.h"
#include "texts/TextKeysAndLanguages.hpp"
#include <gui/missionselect_screen/MissionSelectView.hpp>
@ -44,6 +45,15 @@ void MissionSelectView::decMission() {
setSelectedMission(static_cast<Mission>(mission_int));
}
void MissionSelectView::confirmMission() {
if (selectedMission == MISSION_NONE) {
// Can't confirm if we haven't selected a mission yet
return;
}
presenter->confirmMission(selectedMission);
application().gotoAMIScreenNoTransition();
}
void MissionSelectView::setSelectedMission(Mission mission) {
if (selected != nullptr) {
selected->setSelected(false);