-
-
Notifications
You must be signed in to change notification settings - Fork 959
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Infineat external resources #1324
Changes from 35 commits
ae705f2
17d37d5
a89fca7
c2ecd4c
da2cf8e
b5fbcf0
8f54332
be16ef0
03790d4
a890f85
f1f7fb7
6eb5b99
fcdf6de
f9d2b78
b561e7f
a3bfbb5
8942791
b15f90a
f5e9055
dd0d2a4
a4c3558
f6f6f95
9122547
b5bf6c5
cb2131e
603af7c
20b31fd
4e9fe3f
2ad51e6
18cff28
ada2c09
4cf73fc
0cd1d6f
970d5b3
58bb0e7
56f315b
2400110
58586d0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,7 @@ | |
#include <FreeRTOS.h> | ||
#include <task.h> | ||
#include <libraries/log/nrf_log.h> | ||
#include <components/fs/FS.h> | ||
#include "components/rle/RleDecoder.h" | ||
#include "touchhandler/TouchHandler.h" | ||
#include "displayapp/icons/infinitime/infinitime-nb.c" | ||
|
@@ -24,7 +25,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, | |
Pinetime::Controllers::TimerController& timerController, | ||
Pinetime::Controllers::AlarmController& alarmController, | ||
Pinetime::Controllers::BrightnessController& brightnessController, | ||
Pinetime::Controllers::TouchHandler& touchHandler) | ||
Pinetime::Controllers::TouchHandler& touchHandler, | ||
Pinetime::Controllers::FS& filesystem) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we're using would you suggest to use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, I agree with you, |
||
: lcd {lcd}, bleController {bleController} { | ||
} | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
#include "displayapp/screens/CheckboxList.h" | ||
#include "displayapp/DisplayApp.h" | ||
#include "displayapp/screens/Styles.h" | ||
|
||
using namespace Pinetime::Applications::Screens; | ||
|
||
namespace { | ||
static void event_handler(lv_obj_t* obj, lv_event_t event) { | ||
CheckboxList* screen = static_cast<CheckboxList*>(obj->user_data); | ||
screen->UpdateSelected(obj, event); | ||
} | ||
|
||
} | ||
|
||
CheckboxList::CheckboxList(const uint8_t screenID, | ||
const uint8_t numScreens, | ||
DisplayApp* app, | ||
Controllers::Settings& settingsController, | ||
const char* optionsTitle, | ||
const char* optionsSymbol, | ||
void (Controllers::Settings::*SetOptionIndex)(uint8_t), | ||
uint8_t (Controllers::Settings::*GetOptionIndex)() const, | ||
std::array<const char*, MAXLISTITEMS> options) | ||
: Screen(app), | ||
screenID {screenID}, | ||
settingsController {settingsController}, | ||
SetOptionIndex {SetOptionIndex}, | ||
GetOptionIndex {GetOptionIndex}, | ||
options {options} { | ||
|
||
settingsController.SetWatchfacesMenu(screenID); | ||
|
||
// Set the background to Black | ||
lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); | ||
|
||
if (numScreens > 1) { | ||
pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; | ||
pageIndicatorBasePoints[0].y = 0; | ||
pageIndicatorBasePoints[1].x = LV_HOR_RES - 1; | ||
pageIndicatorBasePoints[1].y = LV_VER_RES; | ||
|
||
pageIndicatorBase = lv_line_create(lv_scr_act(), NULL); | ||
lv_obj_set_style_local_line_width(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); | ||
lv_obj_set_style_local_line_color(pageIndicatorBase, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); | ||
lv_line_set_points(pageIndicatorBase, pageIndicatorBasePoints, 2); | ||
|
||
const uint16_t indicatorSize = LV_VER_RES / numScreens; | ||
const uint16_t indicatorPos = indicatorSize * screenID; | ||
|
||
pageIndicatorPoints[0].x = LV_HOR_RES - 1; | ||
pageIndicatorPoints[0].y = indicatorPos; | ||
pageIndicatorPoints[1].x = LV_HOR_RES - 1; | ||
pageIndicatorPoints[1].y = indicatorPos + indicatorSize; | ||
|
||
pageIndicator = lv_line_create(lv_scr_act(), NULL); | ||
lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); | ||
lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); | ||
lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); | ||
} | ||
|
||
lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); | ||
|
||
lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); | ||
lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); | ||
lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); | ||
lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); | ||
|
||
lv_obj_set_pos(container1, 10, 60); | ||
lv_obj_set_width(container1, LV_HOR_RES - 20); | ||
lv_obj_set_height(container1, LV_VER_RES - 50); | ||
lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); | ||
|
||
lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); | ||
lv_label_set_text_static(title, optionsTitle); | ||
lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); | ||
lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 10, 15); | ||
|
||
lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); | ||
lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); | ||
lv_label_set_text_static(icon, optionsSymbol); | ||
lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); | ||
lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); | ||
|
||
for (unsigned int i = 0; i < options.size(); i++) { | ||
if (strcmp(options[i], "")) { | ||
cbOption[i] = lv_checkbox_create(container1, nullptr); | ||
lv_checkbox_set_text(cbOption[i], options[i]); | ||
cbOption[i]->user_data = this; | ||
lv_obj_set_event_cb(cbOption[i], event_handler); | ||
SetRadioButtonStyle(cbOption[i]); | ||
|
||
if (static_cast<unsigned int>((settingsController.*GetOptionIndex)() - MAXLISTITEMS * screenID) == i) { | ||
lv_checkbox_set_checked(cbOption[i], true); | ||
} | ||
} | ||
} | ||
} | ||
|
||
CheckboxList::~CheckboxList() { | ||
lv_obj_clean(lv_scr_act()); | ||
settingsController.SaveSettings(); | ||
} | ||
|
||
void CheckboxList::UpdateSelected(lv_obj_t* object, lv_event_t event) { | ||
if (event == LV_EVENT_VALUE_CHANGED) { | ||
for (unsigned int i = 0; i < options.size(); i++) { | ||
if (strcmp(options[i], "")) { | ||
if (object == cbOption[i]) { | ||
lv_checkbox_set_checked(cbOption[i], true); | ||
(settingsController.*SetOptionIndex)(MAXLISTITEMS * screenID + i); | ||
} else { | ||
lv_checkbox_set_checked(cbOption[i], false); | ||
} | ||
} | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,49 @@ | ||||||||||
#pragma once | ||||||||||
|
||||||||||
#include <lvgl/lvgl.h> | ||||||||||
#include <cstdint> | ||||||||||
#include <memory> | ||||||||||
#include "displayapp/screens/Screen.h" | ||||||||||
#include "displayapp/Apps.h" | ||||||||||
#include "components/settings/Settings.h" | ||||||||||
|
||||||||||
#define MAXLISTITEMS 4 | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we could make this define into a constexpr size_t and move it from the global namespace into the private CheckboxList one There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done! However, since this constant is also used in the ctor(), I added it as a public field of the class. |
||||||||||
|
||||||||||
namespace Pinetime { | ||||||||||
namespace Applications { | ||||||||||
namespace Screens { | ||||||||||
class CheckboxList : public Screen { | ||||||||||
public: | ||||||||||
CheckboxList(const uint8_t screenID, | ||||||||||
const uint8_t numScreens, | ||||||||||
DisplayApp* app, | ||||||||||
Controllers::Settings& settingsController, | ||||||||||
const char* optionsTitle, | ||||||||||
const char* optionsSymbol, | ||||||||||
void (Controllers::Settings::*SetOptionIndex)(uint8_t), | ||||||||||
uint8_t (Controllers::Settings::*GetOptionIndex)() const, | ||||||||||
std::array<const char*, MAXLISTITEMS> options); | ||||||||||
|
||||||||||
~CheckboxList() override; | ||||||||||
|
||||||||||
void UpdateSelected(lv_obj_t* object, lv_event_t event); | ||||||||||
|
||||||||||
private: | ||||||||||
const uint8_t screenID; | ||||||||||
Controllers::Settings& settingsController; | ||||||||||
const char* optionsTitle; | ||||||||||
const char* optionsSymbol; | ||||||||||
void (Controllers::Settings::*SetOptionIndex)(uint8_t); | ||||||||||
uint8_t (Controllers::Settings::*GetOptionIndex)() const; | ||||||||||
std::array<const char*, MAXLISTITEMS> options; | ||||||||||
|
||||||||||
lv_obj_t* cbOption[MAXLISTITEMS]; | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we could use a
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||||||||||
|
||||||||||
lv_point_t pageIndicatorBasePoints[2]; | ||||||||||
lv_point_t pageIndicatorPoints[2]; | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. although more to type I like
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||||||||||
lv_obj_t* pageIndicatorBase; | ||||||||||
lv_obj_t* pageIndicator; | ||||||||||
}; | ||||||||||
} | ||||||||||
} | ||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
including our headers should be done with
""
, excluding other libs (like lvgl, nrf, std-lib) should be done with<>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done