OMOTE/Platformio/OmoteUI/UIs/BasicRefactored/page/SettingsPage.cpp
Matthew Colvin 04fd9781ed Working on making a brightness slider that can be reused easily
piping around IDS to correct places
2023-10-12 15:25:23 -05:00

76 lines
No EOL
2.1 KiB
C++

#include "SettingsPage.hpp"
#include "BackgroundScreen.hpp"
#include "Button.hpp"
#include "Slider.hpp"
#include "Colors.hpp"
#include "DisplaySettings.hpp"
#include "PopUpScreen.hpp"
#include "ScreenManager.hpp"
using namespace UI::Page;
using namespace UI::Color;
SettingsPage::SettingsPage(std::shared_ptr<HardwareAbstract> aHardware)
: Base(ID::Pages::Settings), mHardware(aHardware) {
SetBgColor(RED);
auto button =
std::make_unique<UI::Widget::Button>([this] { PushDisplaySettings(); });
button->SetBorder(button->GetBorder().Color(BLUE).Width(2));
button->SetY(0);
button->SetHeight(lv_pct(10));
button->SetWidth(lv_pct(10));
mButton = AddElement<Widget::Button>(std::move(button));
}
void SettingsPage::OnShow() {}
void SettingsPage::PushDisplaySettings() {
UI::Screen::Manager::getInstance().pushPopUp(
std::make_unique<DisplaySettings>(mHardware->display()));
}
void SettingsPage::AddSlider() {
auto fakeSlider = std::make_unique<Widget::Slider>([](auto data){});
fakeSlider->SetHeight(lv_pct(10));
fakeSlider->SetWidth(GetContentWidth());
if (sliders.empty()) {
fakeSlider->SetY(mButton->GetBottom());
} else {
auto nextY = sliders.back()->GetY() + sliders.back()->GetHeight();
fakeSlider->SetY(nextY + 10);
}
sliders.push_back(AddElement(std::move(fakeSlider)));
}
bool SettingsPage::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) {
using id = KeyPressAbstract::KeyId;
using eventType = KeyPressAbstract::KeyEvent::Type;
bool used = true;
switch (aKeyEvent.mId) {
case id::Aux1:
if (aKeyEvent.mType == eventType::Press) {
AddSlider();
}
break;
case id::Aux2:
if (aKeyEvent.mType == eventType::Release) {
if (sliders.size() > 0) {
RemoveElement(sliders[0]);
sliders.erase(
sliders.begin()); // sliders is non owning so after removing delete
// it from non owning array
}
}
break;
case id::Aux3:
break;
case id::Aux4:
break;
default:
used = Page::Base::OnKeyEvent(aKeyEvent);
break;
}
return used;
}