From f5328ec9eb9d55423b4e511910721d839cacadd8 Mon Sep 17 00:00:00 2001 From: JF Date: Fri, 14 Aug 2020 09:46:37 +0200 Subject: Refactor ScreenList to make it more generic : it can now contain any Screen type. Integrate this new ScreenList in SystemInfo. Add ApplicationList, which is a ScreenList of Tile. This allows to display a menu of more than 6 applications. --- src/DisplayApp/Screens/ApplicationList.cpp | 80 +++++++++++++++++ src/DisplayApp/Screens/ApplicationList.h | 32 +++++++ src/DisplayApp/Screens/Label.h | 21 +++++ src/DisplayApp/Screens/ScreenList.cpp | 139 ----------------------------- src/DisplayApp/Screens/ScreenList.h | 70 ++++++++++----- src/DisplayApp/Screens/Symbols.h | 4 + src/DisplayApp/Screens/SystemInfo.cpp | 114 +++++++++++++++++++++++ src/DisplayApp/Screens/SystemInfo.h | 47 ++++++++++ src/DisplayApp/Screens/Tile.cpp | 65 +++----------- src/DisplayApp/Screens/Tile.h | 41 +++------ 10 files changed, 368 insertions(+), 245 deletions(-) create mode 100644 src/DisplayApp/Screens/ApplicationList.cpp create mode 100644 src/DisplayApp/Screens/ApplicationList.h delete mode 100644 src/DisplayApp/Screens/ScreenList.cpp create mode 100644 src/DisplayApp/Screens/SystemInfo.cpp create mode 100644 src/DisplayApp/Screens/SystemInfo.h (limited to 'src/DisplayApp/Screens') diff --git a/src/DisplayApp/Screens/ApplicationList.cpp b/src/DisplayApp/Screens/ApplicationList.cpp new file mode 100644 index 00000000..c7c096f4 --- /dev/null +++ b/src/DisplayApp/Screens/ApplicationList.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include "ApplicationList.h" +#include "Tile.h" +#include "Symbols.h" + +using namespace Pinetime::Applications::Screens; + +ApplicationList::ApplicationList(Pinetime::Applications::DisplayApp *app) : + Screen(app), + screens{app, { + [this]() -> std::unique_ptr { return CreateScreen1(); }, + //[this]() -> std::unique_ptr { return CreateScreen2(); }, + //[this]() -> std::unique_ptr { return CreateScreen3(); } + } + } {} + + +ApplicationList::~ApplicationList() { + lv_obj_clean(lv_scr_act()); +} + +bool ApplicationList::Refresh() { + if(running) + running = screens.Refresh(); + return running; +} + +bool ApplicationList::OnButtonPushed() { + running = false; + app->StartApp(Apps::Clock); + return true; +} + +bool ApplicationList::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + return screens.OnTouchEvent(event); +} + +std::unique_ptr ApplicationList::CreateScreen1() { + std::array applications { + {{Symbols::asterisk, Apps::Meter}, + {Symbols::tachometer, Apps::Gauge}, + {Symbols::clock, Apps::Clock}, + {Symbols::music, Apps::Music}, + {Symbols::list, Apps::SysInfo}, + {Symbols::sun, Apps::Brightness} + } + }; + + return std::unique_ptr(new Screens::Tile(app, applications)); +} + +std::unique_ptr ApplicationList::CreateScreen2() { + std::array applications { + {{"0", Apps::Meter}, + {"1", Apps::Gauge}, + {"2", Apps::Clock}, + {"3", Apps::Music}, + {"4", Apps::SysInfo}, + {"5", Apps::Brightness} + } + }; + + return std::unique_ptr(new Screens::Tile(app, applications)); +} + +std::unique_ptr ApplicationList::CreateScreen3() { + std::array applications { + {{"A", Apps::Meter}, + {"B", Apps::Gauge}, + {"C", Apps::Clock}, + {"D", Apps::Music}, + {"E", Apps::SysInfo}, + {"F", Apps::Brightness} + } + }; + + return std::unique_ptr(new Screens::Tile(app, applications)); +} diff --git a/src/DisplayApp/Screens/ApplicationList.h b/src/DisplayApp/Screens/ApplicationList.h new file mode 100644 index 00000000..372cbb7a --- /dev/null +++ b/src/DisplayApp/Screens/ApplicationList.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include "Screen.h" +#include "Label.h" +#include "ScreenList.h" +#include "Gauge.h" +#include "Meter.h" +#include + +namespace Pinetime { + namespace Applications { + namespace Screens { + class ApplicationList : public Screen { + public: + explicit ApplicationList(DisplayApp* app); + ~ApplicationList() override; + bool Refresh() override; + bool OnButtonPushed() override; + bool OnTouchEvent(TouchEvents event) override; + private: + bool running = true; + + ScreenList<1> screens; + std::unique_ptr CreateScreen1(); + std::unique_ptr CreateScreen2(); + std::unique_ptr CreateScreen3(); + }; + } + } +} \ No newline at end of file diff --git a/src/DisplayApp/Screens/Label.h b/src/DisplayApp/Screens/Label.h index b73540f4..9d91974d 100644 --- a/src/DisplayApp/Screens/Label.h +++ b/src/DisplayApp/Screens/Label.h @@ -2,6 +2,7 @@ #include #include "Screen.h" +#include namespace Pinetime { namespace Applications { @@ -19,6 +20,26 @@ namespace Pinetime { lv_obj_t * label = nullptr; const char* text = nullptr; }; + + class Label2 : public Screen { + public: + Label2(DisplayApp* app, const char* text) : Screen(app), text{text} { + label = lv_label_create(lv_scr_act(), NULL); + lv_label_set_align(label, LV_LABEL_ALIGN_LEFT); + lv_obj_set_size(label, 240, 240); + lv_label_set_text(label, text); + } + + ~Label2() override { + lv_obj_clean(lv_scr_act()); + } + + bool Refresh() override {return false;} + + private: + lv_obj_t * label = nullptr; + const char* text = nullptr; + }; } } } \ No newline at end of file diff --git a/src/DisplayApp/Screens/ScreenList.cpp b/src/DisplayApp/Screens/ScreenList.cpp deleted file mode 100644 index 754d5f7e..00000000 --- a/src/DisplayApp/Screens/ScreenList.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include -#include -#include "ScreenList.h" -#include "../../Version.h" - -using namespace Pinetime::Applications::Screens; - -// TODO this class must be improved to receive the list of "sub screens" via pointer or -// move operation. -// It should accept many type of "sub screen" (it only supports Label for now). -// The number of sub screen it supports must be dynamic. -ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, - Pinetime::Controllers::DateTime &dateTimeController, - Pinetime::Controllers::Battery& batteryController, - Pinetime::Controllers::BrightnessController& brightnessController, - Pinetime::Controllers::Ble& bleController, - Pinetime::Drivers::WatchdogView& watchdog) : - Screen(app), - dateTimeController{dateTimeController}, batteryController{batteryController}, - brightnessController{brightnessController}, bleController{bleController}, watchdog{watchdog} { - screens.reserve(3); - - // TODO all of this is far too heavy (string processing). This should be improved. - // TODO the info (battery, time,...) should be updated in the Refresh method. - - - auto batteryPercent = static_cast(batteryController.PercentRemaining()); - if(batteryPercent > 100) batteryPercent = 100; - else if(batteryPercent < 0) batteryPercent = 0; - - uint8_t brightness = 0; - switch(brightnessController.Level()) { - case Controllers::BrightnessController::Levels::Low: brightness = 1; break; - case Controllers::BrightnessController::Levels::Medium: brightness = 2; break; - case Controllers::BrightnessController::Levels::High: brightness = 3; break; - } - auto resetReason = [&watchdog]() { - switch (watchdog.ResetReason()) { - case Drivers::Watchdog::ResetReasons::Watchdog: return "wtdg"; - case Drivers::Watchdog::ResetReasons::HardReset: return "hardr"; - case Drivers::Watchdog::ResetReasons::NFC: return "nfc"; - case Drivers::Watchdog::ResetReasons::SoftReset: return "softr"; - case Drivers::Watchdog::ResetReasons::CpuLockup: return "cpulock"; - case Drivers::Watchdog::ResetReasons::SystemOff: return "off"; - case Drivers::Watchdog::ResetReasons::LpComp: return "lpcomp"; - case Drivers::Watchdog::ResetReasons::DebugInterface: return "dbg"; - case Drivers::Watchdog::ResetReasons::ResetPin: return "rst"; - default: return "?"; - } - }(); - - // uptime - static constexpr uint32_t secondsInADay = 60*60*24; - static constexpr uint32_t secondsInAnHour = 60*60; - static constexpr uint32_t secondsInAMinute = 60; - uint32_t uptimeSeconds = dateTimeController.Uptime().count(); - uint32_t uptimeDays = (uptimeSeconds / secondsInADay); - uptimeSeconds = uptimeSeconds % secondsInADay; - uint32_t uptimeHours = uptimeSeconds / secondsInAnHour; - uptimeSeconds = uptimeSeconds % secondsInAnHour; - uint32_t uptimeMinutes = uptimeSeconds / secondsInAMinute; - uptimeSeconds = uptimeSeconds % secondsInAMinute; - // TODO handle more than 100 days of uptime - - sprintf(t1, "Pinetime\n" - "Version:%d.%d.%d\n" - "Build: %s\n" - " %s\n" - "Date: %02d/%02d/%04d\n" - "Time: %02d:%02d:%02d\n" - "Uptime: %02lud %02lu:%02lu:%02lu\n" - "Battery: %d%%\n" - "Backlight: %d/3\n" - "Last reset: %s\n", - Version::Major(), Version::Minor(), Version::Patch(), - __DATE__, __TIME__, - dateTimeController.Day(), dateTimeController.Month(), dateTimeController.Year(), - dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(), - uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds, - batteryPercent, brightness, resetReason); - - screens.emplace_back(t1); - - auto& bleAddr = bleController.Address(); - sprintf(t2, "BLE MAC: \n %2x:%2x:%2x:%2x:%2x:%2x", - bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]); - screens.emplace_back(t2); - - strncpy(t3, "Hello from\nthe developper!", 27); - - screens.emplace_back(t3); - - auto &screen = screens[screenIndex]; - screen.Show(); -} - -ScreenList::~ScreenList() { - lv_obj_clean(lv_scr_act()); -} - -bool ScreenList::Refresh() { - auto &screen = screens[screenIndex]; - screen.Refresh(); - - return running; -} - -bool ScreenList::OnButtonPushed() { - running = false; - return true; -} - -bool ScreenList::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - switch (event) { - case TouchEvents::SwipeDown: - if (screenIndex > 0) { - app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down); - auto &oldScreen = screens[screenIndex]; - oldScreen.Hide(); - screenIndex--; - auto &newScreen = screens[screenIndex]; - newScreen.Show(); - } - return true; - case TouchEvents::SwipeUp: - app->SetFullRefresh(DisplayApp::FullRefreshDirections::Up); - if (screenIndex < screens.size() - 1) { - auto &oldScreen = screens[screenIndex]; - oldScreen.Hide(); - screenIndex++; - auto &newScreen = screens[screenIndex]; - newScreen.Show(); - } - return true; - default: - return false; - } - return false; -} diff --git a/src/DisplayApp/Screens/ScreenList.h b/src/DisplayApp/Screens/ScreenList.h index b0ee016b..d873336d 100644 --- a/src/DisplayApp/Screens/ScreenList.h +++ b/src/DisplayApp/Screens/ScreenList.h @@ -2,40 +2,64 @@ #include #include +#include #include "Screen.h" #include "Label.h" namespace Pinetime { namespace Applications { namespace Screens { + template class ScreenList : public Screen { public: - explicit ScreenList(DisplayApp* app, - Pinetime::Controllers::DateTime& dateTimeController, - Pinetime::Controllers::Battery& batteryController, - Pinetime::Controllers::BrightnessController& brightnessController, - Pinetime::Controllers::Ble& bleController, - Pinetime::Drivers::WatchdogView& watchdog); - ~ScreenList() override; - bool Refresh() override; - bool OnButtonPushed() override; - bool OnTouchEvent(TouchEvents event) override; - private: - bool running = true; - uint8_t screenIndex = 0; + ScreenList(DisplayApp* app, std::array()>, N>&& screens) + : Screen(app), screens{std::move(screens)}, current{this->screens[0]()} { + + } + + ~ScreenList() override { - // TODO choose another container without dynamic alloc - std::vector screens; - Pinetime::Controllers::DateTime& dateTimeController; - Pinetime::Controllers::Battery& batteryController; - Pinetime::Controllers::BrightnessController& brightnessController; - Pinetime::Controllers::Ble& bleController; - Pinetime::Drivers::WatchdogView& watchdog; + } + bool Refresh() override { + running = current->Refresh(); + return running; + } - char t1[200]; - char t2[200]; - char t3[30]; + bool OnButtonPushed() override { + running = false; + return true; + } + + bool OnTouchEvent(TouchEvents event) override { + switch (event) { + case TouchEvents::SwipeDown: + if (screenIndex > 0) { + current.reset(nullptr); + app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down); + screenIndex--; + current = screens[screenIndex](); + } + return true; + case TouchEvents::SwipeUp: + if (screenIndex < screens.size() - 1) { + current.reset(nullptr); + app->SetFullRefresh(DisplayApp::FullRefreshDirections::Up); + screenIndex++; + current = screens[screenIndex](); + } + return true; + default: + return false; + } + return false; + } + + private: + bool running = true; + uint8_t screenIndex = 0; + std::array()>, N> screens; + std::unique_ptr current; }; } } diff --git a/src/DisplayApp/Screens/Symbols.h b/src/DisplayApp/Screens/Symbols.h index 3104db87..940006d5 100644 --- a/src/DisplayApp/Screens/Symbols.h +++ b/src/DisplayApp/Screens/Symbols.h @@ -18,6 +18,10 @@ namespace Pinetime { static constexpr char* info = "\xEF\x84\xA9"; static constexpr char* list = "\xEF\x80\xBA"; static constexpr char* sun = "\xEF\x86\x85"; + static constexpr char* check = "\xEF\x95\xA0"; + static constexpr char* music = "\xEF\x80\x81"; + static constexpr char* tachometer = "\xEF\x8F\xBD"; + static constexpr char* asterisk = "\xEF\x81\xA9"; } } } diff --git a/src/DisplayApp/Screens/SystemInfo.cpp b/src/DisplayApp/Screens/SystemInfo.cpp new file mode 100644 index 00000000..e146e2e6 --- /dev/null +++ b/src/DisplayApp/Screens/SystemInfo.cpp @@ -0,0 +1,114 @@ +#include +#include +#include +#include "SystemInfo.h" +#include "../../Version.h" +#include "Tile.h" + +using namespace Pinetime::Applications::Screens; + +SystemInfo::SystemInfo(Pinetime::Applications::DisplayApp *app, + Pinetime::Controllers::DateTime &dateTimeController, + Pinetime::Controllers::Battery& batteryController, + Pinetime::Controllers::BrightnessController& brightnessController, + Pinetime::Controllers::Ble& bleController, + Pinetime::Drivers::WatchdogView& watchdog) : + Screen(app), + dateTimeController{dateTimeController}, batteryController{batteryController}, + brightnessController{brightnessController}, bleController{bleController}, watchdog{watchdog}, + screens{app, { + [this]() -> std::unique_ptr { return CreateScreen1(); }, + [this]() -> std::unique_ptr { return CreateScreen2(); }, + [this]() -> std::unique_ptr { return CreateScreen3(); } + } + } {} + + +SystemInfo::~SystemInfo() { + lv_obj_clean(lv_scr_act()); +} + +bool SystemInfo::Refresh() { + screens.Refresh(); + return running; +} + +bool SystemInfo::OnButtonPushed() { + running = false; + return true; +} + +bool SystemInfo::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + return screens.OnTouchEvent(event); +} + +std::unique_ptr SystemInfo::CreateScreen1() { + auto batteryPercent = static_cast(batteryController.PercentRemaining()); + if(batteryPercent > 100) batteryPercent = 100; + else if(batteryPercent < 0) batteryPercent = 0; + + uint8_t brightness = 0; + switch(brightnessController.Level()) { + case Controllers::BrightnessController::Levels::Low: brightness = 1; break; + case Controllers::BrightnessController::Levels::Medium: brightness = 2; break; + case Controllers::BrightnessController::Levels::High: brightness = 3; break; + } + auto resetReason = [this]() { + switch (watchdog.ResetReason()) { + case Drivers::Watchdog::ResetReasons::Watchdog: return "wtdg"; + case Drivers::Watchdog::ResetReasons::HardReset: return "hardr"; + case Drivers::Watchdog::ResetReasons::NFC: return "nfc"; + case Drivers::Watchdog::ResetReasons::SoftReset: return "softr"; + case Drivers::Watchdog::ResetReasons::CpuLockup: return "cpulock"; + case Drivers::Watchdog::ResetReasons::SystemOff: return "off"; + case Drivers::Watchdog::ResetReasons::LpComp: return "lpcomp"; + case Drivers::Watchdog::ResetReasons::DebugInterface: return "dbg"; + case Drivers::Watchdog::ResetReasons::ResetPin: return "rst"; + default: return "?"; + } + }(); + + // uptime + static constexpr uint32_t secondsInADay = 60*60*24; + static constexpr uint32_t secondsInAnHour = 60*60; + static constexpr uint32_t secondsInAMinute = 60; + uint32_t uptimeSeconds = dateTimeController.Uptime().count(); + uint32_t uptimeDays = (uptimeSeconds / secondsInADay); + uptimeSeconds = uptimeSeconds % secondsInADay; + uint32_t uptimeHours = uptimeSeconds / secondsInAnHour; + uptimeSeconds = uptimeSeconds % secondsInAnHour; + uint32_t uptimeMinutes = uptimeSeconds / secondsInAMinute; + uptimeSeconds = uptimeSeconds % secondsInAMinute; + // TODO handle more than 100 days of uptime + + sprintf(t1, "Pinetime\n" + "Version:%d.%d.%d\n" + "Build: %s\n" + " %s\n" + "Date: %02d/%02d/%04d\n" + "Time: %02d:%02d:%02d\n" + "Uptime: %02lud %02lu:%02lu:%02lu\n" + "Battery: %d%%\n" + "Backlight: %d/3\n" + "Last reset: %s\n", + Version::Major(), Version::Minor(), Version::Patch(), + __DATE__, __TIME__, + dateTimeController.Day(), dateTimeController.Month(), dateTimeController.Year(), + dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(), + uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds, + batteryPercent, brightness, resetReason); + + return std::unique_ptr(new Screens::Label2(app, t1)); +} + +std::unique_ptr SystemInfo::CreateScreen2() { + auto& bleAddr = bleController.Address(); + sprintf(t2, "BLE MAC: \n %2x:%2x:%2x:%2x:%2x:%2x", + bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]); + return std::unique_ptr(new Screens::Label2(app, t2)); +} + +std::unique_ptr SystemInfo::CreateScreen3() { + strncpy(t3, "Hello from\nthe developper!", 27); + return std::unique_ptr(new Screens::Label2(app, t3)); +} diff --git a/src/DisplayApp/Screens/SystemInfo.h b/src/DisplayApp/Screens/SystemInfo.h new file mode 100644 index 00000000..ac8abae5 --- /dev/null +++ b/src/DisplayApp/Screens/SystemInfo.h @@ -0,0 +1,47 @@ +#pragma once + +#include +#include +#include "Screen.h" +#include "Label.h" +#include "ScreenList.h" +#include "Gauge.h" +#include "Meter.h" +#include + +namespace Pinetime { + namespace Applications { + namespace Screens { + class SystemInfo : public Screen { + public: + explicit SystemInfo(DisplayApp* app, + Pinetime::Controllers::DateTime& dateTimeController, + Pinetime::Controllers::Battery& batteryController, + Pinetime::Controllers::BrightnessController& brightnessController, + Pinetime::Controllers::Ble& bleController, + Pinetime::Drivers::WatchdogView& watchdog); + ~SystemInfo() override; + bool Refresh() override; + bool OnButtonPushed() override; + bool OnTouchEvent(TouchEvents event) override; + private: + bool running = true; + + Pinetime::Controllers::DateTime& dateTimeController; + Pinetime::Controllers::Battery& batteryController; + Pinetime::Controllers::BrightnessController& brightnessController; + Pinetime::Controllers::Ble& bleController; + Pinetime::Drivers::WatchdogView& watchdog; + + char t1[200]; + char t2[200]; + char t3[30]; + + ScreenList<3> screens; + std::unique_ptr CreateScreen1(); + std::unique_ptr CreateScreen2(); + std::unique_ptr CreateScreen3(); + }; + } + } +} \ No newline at end of file diff --git a/src/DisplayApp/Screens/Tile.cpp b/src/DisplayApp/Screens/Tile.cpp index c3a9d380..5d4da2cf 100644 --- a/src/DisplayApp/Screens/Tile.cpp +++ b/src/DisplayApp/Screens/Tile.cpp @@ -17,9 +17,16 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { screen->OnObjectEvent(obj, event, eventData); } -static const char * btnm_map1[] = {Symbols::heartBeat, Symbols::shoe, Symbols::clock, "\n", Symbols::info, Symbols::list, Symbols::sun, ""}; - -Tile::Tile(DisplayApp* app) : Screen(app) { +Tile::Tile(DisplayApp* app, std::array& applications) : Screen(app) { + for(int i = 0, appIndex = 0; i < 8; i++) { + if(i == 3) btnm_map1[i] = "\n"; + else if(i == 7) btnm_map1[i] = ""; + else { + btnm_map1[i] = applications[appIndex].icon; + apps[appIndex] = applications[appIndex].application; + appIndex++; + } + } modal.reset(new Modal(app)); btnm1 = lv_btnm_create(lv_scr_act(), NULL); @@ -41,61 +48,15 @@ bool Tile::Refresh() { void Tile::OnObjectEvent(lv_obj_t *obj, lv_event_t event, uint32_t buttonId) { auto* tile = static_cast(obj->user_data); if(event == LV_EVENT_VALUE_CHANGED) { - switch(buttonId) { - case 0: - tile->StartMeterApp(); - break; - case 1: - tile->StartGaugeApp(); - break; - case 2: - tile->StartClockApp(); - break; - case 3: - char versionStr[20]; - sprintf(versionStr, "VERSION: %d.%d.%d", Version::Major(), Version::Minor(), Version::Patch()); - modal->Show(versionStr); - break; - case 4: - tile->StartSysInfoApp(); - break; - case 5: - tile->StartBrightnessApp(); - - break; - } - clickCount++; + app->StartApp(apps[buttonId]); + running = false; } } bool Tile::OnButtonPushed() { - app->StartApp(DisplayApp::Apps::Clock); + app->StartApp(Apps::Clock); running = false; return true; } -void Tile::StartClockApp() { - app->StartApp(DisplayApp::Apps::Clock); - running = false; -} - -void Tile::StartSysInfoApp() { - app->StartApp(DisplayApp::Apps::SysInfo); - running = false; -} - -void Tile::StartBrightnessApp() { - app->StartApp(DisplayApp::Apps::Brightness); - running = false; -} - -void Tile::StartMeterApp() { - app->StartApp(DisplayApp::Apps::Meter); - running = false; -} - -void Tile::StartGaugeApp() { - app->StartApp(DisplayApp::Apps::Music); - running = false; -} diff --git a/src/DisplayApp/Screens/Tile.h b/src/DisplayApp/Screens/Tile.h index a04b58a8..3136d892 100644 --- a/src/DisplayApp/Screens/Tile.h +++ b/src/DisplayApp/Screens/Tile.h @@ -5,13 +5,19 @@ #include #include "Modal.h" #include +#include namespace Pinetime { namespace Applications { namespace Screens { class Tile : public Screen { public: - explicit Tile(DisplayApp* app); + struct Applications { + const char* icon; + Pinetime::Applications::Apps application; + }; + + explicit Tile(DisplayApp* app, std::array& applications); ~Tile() override; bool Refresh() override; @@ -20,40 +26,13 @@ namespace Pinetime { void OnObjectEvent(lv_obj_t* obj, lv_event_t event, uint32_t buttonId); private: - - lv_style_t* labelRelStyle; - lv_style_t* labelPrStyle; - lv_obj_t * label1; - lv_obj_t * label2; - lv_obj_t * label3; - - lv_obj_t* backgroundLabel; - lv_obj_t * button; - lv_obj_t * labelClick; - - lv_obj_t *tileview; - lv_obj_t * tile1; - lv_obj_t * tile2; - lv_obj_t * list; - lv_obj_t * list_btn; - lv_obj_t * tile3; - lv_obj_t * btn1; - lv_obj_t * btn2; - lv_obj_t * btn3; - lv_obj_t * btnm1; - lv_obj_t * btnm2; - - uint32_t clickCount = 0 ; - uint32_t previousClickCount = 0; - void StartClockApp(); - void StartSysInfoApp(); - void StartMeterApp(); - void StartGaugeApp(); bool running = true; std::unique_ptr modal; - void StartBrightnessApp(); + + const char* btnm_map1[8]; + Pinetime::Applications::Apps apps[6]; }; } } -- cgit v1.2.3 From 6c678e872d51247f5e47730218598209e96bdd0a Mon Sep 17 00:00:00 2001 From: JF Date: Fri, 14 Aug 2020 10:05:44 +0200 Subject: Screens::Label is now a subclass of Screen. --- src/DisplayApp/Screens/Label.cpp | 17 ++--------------- src/DisplayApp/Screens/Label.h | 28 +++------------------------- src/DisplayApp/Screens/SystemInfo.cpp | 6 +++--- 3 files changed, 8 insertions(+), 43 deletions(-) (limited to 'src/DisplayApp/Screens') diff --git a/src/DisplayApp/Screens/Label.cpp b/src/DisplayApp/Screens/Label.cpp index ba35279d..780ee88e 100644 --- a/src/DisplayApp/Screens/Label.cpp +++ b/src/DisplayApp/Screens/Label.cpp @@ -3,26 +3,13 @@ using namespace Pinetime::Applications::Screens; - -Label::Label(const char* text) : text{text} { - -} - -Label::~Label() { - -} - -void Label::Refresh() { - -} - -void Label::Show() { +Label::Label(Pinetime::Applications::DisplayApp *app, const char *text) : Screen(app), text{text} { label = lv_label_create(lv_scr_act(), NULL); lv_label_set_align(label, LV_LABEL_ALIGN_LEFT); lv_obj_set_size(label, 240, 240); lv_label_set_text(label, text); } -void Label::Hide() { +Label::~Label() { lv_obj_clean(lv_scr_act()); } diff --git a/src/DisplayApp/Screens/Label.h b/src/DisplayApp/Screens/Label.h index 9d91974d..3e7b3797 100644 --- a/src/DisplayApp/Screens/Label.h +++ b/src/DisplayApp/Screens/Label.h @@ -7,33 +7,11 @@ namespace Pinetime { namespace Applications { namespace Screens { - class Label { - public: - Label() = default; - explicit Label(const char* text); - ~Label(); - void Refresh(); - - void Hide(); - void Show(); - private: - lv_obj_t * label = nullptr; - const char* text = nullptr; - }; - class Label2 : public Screen { + class Label : public Screen { public: - Label2(DisplayApp* app, const char* text) : Screen(app), text{text} { - label = lv_label_create(lv_scr_act(), NULL); - lv_label_set_align(label, LV_LABEL_ALIGN_LEFT); - lv_obj_set_size(label, 240, 240); - lv_label_set_text(label, text); - } - - ~Label2() override { - lv_obj_clean(lv_scr_act()); - } - + Label(DisplayApp* app, const char* text); + ~Label() override; bool Refresh() override {return false;} private: diff --git a/src/DisplayApp/Screens/SystemInfo.cpp b/src/DisplayApp/Screens/SystemInfo.cpp index e146e2e6..b355f419 100644 --- a/src/DisplayApp/Screens/SystemInfo.cpp +++ b/src/DisplayApp/Screens/SystemInfo.cpp @@ -98,17 +98,17 @@ std::unique_ptr SystemInfo::CreateScreen1() { uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds, batteryPercent, brightness, resetReason); - return std::unique_ptr(new Screens::Label2(app, t1)); + return std::unique_ptr(new Screens::Label(app, t1)); } std::unique_ptr SystemInfo::CreateScreen2() { auto& bleAddr = bleController.Address(); sprintf(t2, "BLE MAC: \n %2x:%2x:%2x:%2x:%2x:%2x", bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]); - return std::unique_ptr(new Screens::Label2(app, t2)); + return std::unique_ptr(new Screens::Label(app, t2)); } std::unique_ptr SystemInfo::CreateScreen3() { strncpy(t3, "Hello from\nthe developper!", 27); - return std::unique_ptr(new Screens::Label2(app, t3)); + return std::unique_ptr(new Screens::Label(app, t3)); } -- cgit v1.2.3