Skip to content

Commit 9ffd28f

Browse files
Riksu9000JF002
authored andcommitted
Style checkboxes as radio buttons
1 parent 589733d commit 9ffd28f

7 files changed

Lines changed: 63 additions & 100 deletions

File tree

src/displayapp/lv_pinetime_theme.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ static void basic_init(void) {
119119
lv_style_set_bg_color(&style_btn, LV_STATE_DISABLED | LV_STATE_CHECKED, lv_color_hex3(0x888));
120120
lv_style_set_border_color(&style_btn, LV_STATE_DEFAULT, theme.color_primary);
121121
lv_style_set_border_width(&style_btn, LV_STATE_DEFAULT, 0);
122-
lv_style_set_border_opa(&style_btn, LV_STATE_CHECKED, LV_OPA_TRANSP);
123122

124123
lv_style_set_text_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0xffffff));
125124
lv_style_set_text_color(&style_btn, LV_STATE_CHECKED, lv_color_hex(0xffffff));

src/displayapp/screens/settings/SettingDisplay.cpp

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -40,39 +40,24 @@ SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime
4040
lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER);
4141
lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0);
4242

43-
optionsTotal = 0;
44-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
45-
lv_checkbox_set_text_static(cbOption[optionsTotal], " 5 seconds");
46-
cbOption[optionsTotal]->user_data = this;
47-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
48-
if (settingsController.GetScreenTimeOut() == 5000) {
49-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
50-
}
51-
optionsTotal++;
52-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
53-
lv_checkbox_set_text_static(cbOption[optionsTotal], " 15 seconds");
54-
cbOption[optionsTotal]->user_data = this;
55-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
56-
if (settingsController.GetScreenTimeOut() == 15000) {
57-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
58-
}
59-
optionsTotal++;
60-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
61-
lv_checkbox_set_text_static(cbOption[optionsTotal], " 20 seconds");
62-
cbOption[optionsTotal]->user_data = this;
63-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
64-
if (settingsController.GetScreenTimeOut() == 20000) {
65-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
66-
}
67-
optionsTotal++;
68-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
69-
lv_checkbox_set_text_static(cbOption[optionsTotal], " 30 seconds");
70-
cbOption[optionsTotal]->user_data = this;
71-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
72-
if (settingsController.GetScreenTimeOut() == 30000) {
73-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
43+
char buffer[12];
44+
for (unsigned int i = 0; i < options.size(); i++) {
45+
cbOption[i] = lv_checkbox_create(container1, nullptr);
46+
sprintf(buffer, "%3d seconds", options[i] / 1000);
47+
lv_checkbox_set_text(cbOption[i], buffer);
48+
cbOption[i]->user_data = this;
49+
lv_obj_set_event_cb(cbOption[i], event_handler);
50+
51+
// radio button style
52+
lv_obj_set_style_local_radius(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE);
53+
lv_obj_set_style_local_border_width(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, 9);
54+
lv_obj_set_style_local_border_color(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_GREEN);
55+
lv_obj_set_style_local_bg_color(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_WHITE);
56+
57+
if (settingsController.GetScreenTimeOut() == options[i]) {
58+
lv_checkbox_set_checked(cbOption[i], true);
59+
}
7460
}
75-
optionsTotal++;
7661
}
7762

7863
SettingDisplay::~SettingDisplay() {
@@ -82,25 +67,11 @@ SettingDisplay::~SettingDisplay() {
8267

8368
void SettingDisplay::UpdateSelected(lv_obj_t* object, lv_event_t event) {
8469
if (event == LV_EVENT_CLICKED) {
85-
for (int i = 0; i < optionsTotal; i++) {
70+
for (unsigned int i = 0; i < options.size(); i++) {
8671
if (object == cbOption[i]) {
8772
lv_checkbox_set_checked(cbOption[i], true);
88-
89-
if (i == 0) {
90-
settingsController.SetScreenTimeOut(5000);
91-
};
92-
if (i == 1) {
93-
settingsController.SetScreenTimeOut(15000);
94-
};
95-
if (i == 2) {
96-
settingsController.SetScreenTimeOut(20000);
97-
};
98-
if (i == 3) {
99-
settingsController.SetScreenTimeOut(30000);
100-
};
101-
73+
settingsController.SetScreenTimeOut(options[i]);
10274
app->PushMessage(Applications::Display::Messages::UpdateTimeOut);
103-
10475
} else {
10576
lv_checkbox_set_checked(cbOption[i], false);
10677
}

src/displayapp/screens/settings/SettingDisplay.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#pragma once
22

3-
#include <cstdint>
4-
#include <lvgl/lvgl.h>
53
#include "components/settings/Settings.h"
64
#include "displayapp/screens/Screen.h"
5+
#include <array>
6+
#include <cstdint>
7+
#include <lvgl/lvgl.h>
78

89
namespace Pinetime {
910

@@ -18,8 +19,8 @@ namespace Pinetime {
1819
void UpdateSelected(lv_obj_t* object, lv_event_t event);
1920

2021
private:
22+
const std::array<uint16_t, 4> options = {5000, 15000, 20000, 30000};
2123
Controllers::Settings& settingsController;
22-
uint8_t optionsTotal;
2324
lv_obj_t* cbOption[4];
2425
};
2526
}

src/displayapp/screens/settings/SettingTimeFormat.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,24 +39,24 @@ SettingTimeFormat::SettingTimeFormat(Pinetime::Applications::DisplayApp* app, Pi
3939
lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER);
4040
lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0);
4141

42-
optionsTotal = 0;
43-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
44-
lv_checkbox_set_text_static(cbOption[optionsTotal], " 12-hour");
45-
cbOption[optionsTotal]->user_data = this;
46-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
47-
if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) {
48-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
42+
for (unsigned int i = 0; i < options.size(); i++) {
43+
cbOption[i] = lv_checkbox_create(container1, nullptr);
44+
lv_checkbox_set_text(cbOption[i], options[i].c_str());
45+
cbOption[i]->user_data = this;
46+
lv_obj_set_event_cb(cbOption[i], event_handler);
47+
48+
// radio button style
49+
lv_obj_set_style_local_radius(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE);
50+
lv_obj_set_style_local_border_width(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, 9);
51+
lv_obj_set_style_local_border_color(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_GREEN);
52+
lv_obj_set_style_local_bg_color(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_WHITE);
4953
}
5054

51-
optionsTotal++;
52-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
53-
lv_checkbox_set_text_static(cbOption[optionsTotal], " 24-hour");
54-
cbOption[optionsTotal]->user_data = this;
55-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
56-
if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) {
57-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
55+
if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) {
56+
lv_checkbox_set_checked(cbOption[0], true);
57+
} else if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) {
58+
lv_checkbox_set_checked(cbOption[1], true);
5859
}
59-
optionsTotal++;
6060
}
6161

6262
SettingTimeFormat::~SettingTimeFormat() {
@@ -66,7 +66,7 @@ SettingTimeFormat::~SettingTimeFormat() {
6666

6767
void SettingTimeFormat::UpdateSelected(lv_obj_t* object, lv_event_t event) {
6868
if (event == LV_EVENT_VALUE_CHANGED) {
69-
for (int i = 0; i < optionsTotal; i++) {
69+
for (unsigned int i = 0; i < options.size(); i++) {
7070
if (object == cbOption[i]) {
7171
lv_checkbox_set_checked(cbOption[i], true);
7272

src/displayapp/screens/settings/SettingTimeFormat.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#pragma once
22

3-
#include <cstdint>
4-
#include <lvgl/lvgl.h>
53
#include "components/settings/Settings.h"
64
#include "displayapp/screens/Screen.h"
5+
#include <array>
6+
#include <cstdint>
7+
#include <lvgl/lvgl.h>
78

89
namespace Pinetime {
910

@@ -18,8 +19,9 @@ namespace Pinetime {
1819
void UpdateSelected(lv_obj_t* object, lv_event_t event);
1920

2021
private:
22+
const std::array<std::string, 2> options = {" 12-hour", " 24-hour"};
23+
2124
Controllers::Settings& settingsController;
22-
uint8_t optionsTotal;
2325
lv_obj_t* cbOption[2];
2426
};
2527
}

src/displayapp/screens/settings/SettingWatchFace.cpp

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -40,34 +40,22 @@ SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app, Pine
4040
lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER);
4141
lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0);
4242

43-
optionsTotal = 0;
44-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
45-
lv_checkbox_set_text_static(cbOption[optionsTotal], " Digital face");
46-
cbOption[optionsTotal]->user_data = this;
47-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
48-
if (settingsController.GetClockFace() == 0) {
49-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
50-
}
43+
for (unsigned int i = 0; i < options.size(); i++) {
44+
cbOption[i] = lv_checkbox_create(container1, nullptr);
45+
lv_checkbox_set_text(cbOption[i], options[i].c_str());
46+
cbOption[i]->user_data = this;
47+
lv_obj_set_event_cb(cbOption[i], event_handler);
5148

52-
optionsTotal++;
53-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
54-
lv_checkbox_set_text_static(cbOption[optionsTotal], " Analog face");
55-
cbOption[optionsTotal]->user_data = this;
56-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
57-
if (settingsController.GetClockFace() == 1) {
58-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
59-
}
49+
// radio button style
50+
lv_obj_set_style_local_radius(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE);
51+
lv_obj_set_style_local_border_width(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, 9);
52+
lv_obj_set_style_local_border_color(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_GREEN);
53+
lv_obj_set_style_local_bg_color(cbOption[i], LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_WHITE);
6054

61-
optionsTotal++;
62-
cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr);
63-
lv_checkbox_set_text_static(cbOption[optionsTotal], " PineTimeStyle");
64-
cbOption[optionsTotal]->user_data = this;
65-
lv_obj_set_event_cb(cbOption[optionsTotal], event_handler);
66-
if (settingsController.GetClockFace() == 2) {
67-
lv_checkbox_set_checked(cbOption[optionsTotal], true);
55+
if (settingsController.GetClockFace() == i) {
56+
lv_checkbox_set_checked(cbOption[i], true);
57+
}
6858
}
69-
70-
optionsTotal++;
7159
}
7260

7361
SettingWatchFace::~SettingWatchFace() {
@@ -77,7 +65,7 @@ SettingWatchFace::~SettingWatchFace() {
7765

7866
void SettingWatchFace::UpdateSelected(lv_obj_t* object, lv_event_t event) {
7967
if (event == LV_EVENT_VALUE_CHANGED) {
80-
for (uint8_t i = 0; i < optionsTotal; i++) {
68+
for (unsigned int i = 0; i < options.size(); i++) {
8169
if (object == cbOption[i]) {
8270
lv_checkbox_set_checked(cbOption[i], true);
8371
settingsController.SetClockFace(i);

src/displayapp/screens/settings/SettingWatchFace.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
#pragma once
22

3-
#include <cstdint>
4-
#include <lvgl/lvgl.h>
53
#include "components/settings/Settings.h"
64
#include "displayapp/screens/Screen.h"
5+
#include <array>
6+
#include <cstdint>
7+
#include <lvgl/lvgl.h>
78

89
namespace Pinetime {
910

@@ -18,8 +19,9 @@ namespace Pinetime {
1819
void UpdateSelected(lv_obj_t* object, lv_event_t event);
1920

2021
private:
22+
const std::array<std::string, 3> options = {" Digital face", " Analog face", " PineTimeStyle"};
2123
Controllers::Settings& settingsController;
22-
uint8_t optionsTotal;
24+
2325
lv_obj_t* cbOption[2];
2426
};
2527
}

0 commit comments

Comments
 (0)