2 * @Author: luozheng 1732036298@qq.com
3 * @Date: 2024-09-29 15:57:59
4 * @LastEditors: luozheng 1732036298@qq.com
5 * @LastEditTime: 2024-11-05 14:40:12
6 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingDurationSelectionView.cpp
8 #include "respiratorytraining/include/RespiratoryTrainingDurationSelectionView.h"
9 #include "respiratorytraining/include/RespiratoryTrainingPresenter.h"
10 #include "respiratorytraining/include/RespiratoryTrainingModel.h"
11 #include "wearable_log.h"
13 #include "dock/focus_manager.h"
14 #include "ui_resource_string.h"
15 #include "common/screen.h"
19 static RespiratoryTrainingDurationSelectionView *g_pRespiratoryTrainingDurationSelectionView{nullptr};
20 RespiratoryTrainingDurationSelectionView::RespiratoryTrainingDurationSelectionView(/* args */)
22 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingDurationSelectionView::RespiratoryTrainingDurationSelectionView");
23 g_pRespiratoryTrainingDurationSelectionView = this;
26 RespiratoryTrainingDurationSelectionView::~RespiratoryTrainingDurationSelectionView()
28 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingDurationSelectionView::~RespiratoryTrainingDurationSelectionView");
30 g_pRespiratoryTrainingDurationSelectionView = nullptr;
33 RespiratoryTrainingDurationSelectionView *RespiratoryTrainingDurationSelectionView::GetInstance(void)
35 return g_pRespiratoryTrainingDurationSelectionView;
38 void RespiratoryTrainingDurationSelectionView::ClearAll(void)
42 scrollView->RemoveAll();
45 for (int i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
47 delete DurationLabel[i];
48 DurationLabel[i] = nullptr;
49 delete DurationButton[i];
50 DurationButton[i] = nullptr;
59 UILabelExt *RespiratoryTrainingDurationSelectionView::LabelViewinit(LabelConfig &labelconfig)
61 UILabelExt *label = new UILabelExt();
66 label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height);
67 label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);
68 label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);
69 label->SetTextId(labelconfig.textId);
70 // label->SetText(labelconfig.text);
71 label->SetLineBreakMode(labelconfig.lineBreakMode);
72 label->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
73 label->SetRollSpeed(23);
74 label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);
78 UILabelButtonExt *RespiratoryTrainingDurationSelectionView::LabelButtonViewInit(LabelButtonConfig &labelbuttonconfig)
80 UILabelButtonExt *labelButton = new UILabelButtonExt();
81 if (labelButton == nullptr)
85 labelButton->SetPosition(labelbuttonconfig.left, labelbuttonconfig.top);
86 labelButton->Resize(labelbuttonconfig.width, labelbuttonconfig.height);
87 labelButton->SetViewId(labelbuttonconfig.viewId);
88 labelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
89 labelButton->SetImagePosition(300, 30);
90 labelButton->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
91 // labelButton->SetTextId(labelbuttonconfig.textId);
92 // labelButton->SetAlign(TEXT_ALIGNMENT_LEFT);
93 // labelButton->SetLabelPosition(100, 0);
94 // labelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelbuttonconfig.fontSize);
95 // labelButton->SetStyle(STYLE_LINE_HEIGHT, labelbuttonconfig.lineHeigh);
96 labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
100 UIScrollView *RespiratoryTrainingDurationSelectionView::RespiratoryTrainingDurationSelectionViewInit(void)
102 if (scrollView == nullptr)
104 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::InitThemeStyleScrollView");
105 scrollView = new UIScrollView();
106 if (scrollView == nullptr)
108 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail!");
111 scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
112 scrollView->SetViewId(RESPIRATORYTRAINING_DURATIONSELECTION_VIEW);
113 scrollView->SetScrollBlankSize(30);
114 scrollView->SetReboundSize(30);
115 scrollView->SetDirection(1);
116 scrollView->SetTouchable(true);
117 scrollView->SetDraggable(true);
118 scrollView->SetThrowDrag(true); // 设置手指抬起屏幕后是否继续滚动。
119 scrollView->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。
120 scrollView->SetSwipeACCLevel(200); /*设置手指抬起屏幕后的补偿距离。*/
121 scrollView->SetRotateFactor(1.0);
122 FocusManager::GetInstance()->RequestFocus(scrollView);
123 FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP);
124 UIView::OnDragListener *dragListener = static_cast<UIView::OnDragListener *>(RespiratoryTrainingPresenter::GetInstance());
125 if (dragListener == nullptr)
127 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dragListener is nullptr!");
130 scrollView->SetOnDragListener(dragListener);
131 /* -------------------------------------------------------------------------- */
132 TitleLabel = new UILabelExt();
133 if (TitleLabel == nullptr)
135 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TitleLabel new fail!");
138 TitleLabel->SetPosition(83, 50, 300, 35);
139 TitleLabel->SetTextId(STR_DURATION_SETTINGS); // 时长设置
140 TitleLabel->SetStyle(STYLE_TEXT_FONT, 30);
141 TitleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
142 TitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
143 TitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
144 TitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
145 scrollView->Add(TitleLabel);
146 /* -------------------------------------------------------------------------- */
147 UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(RespiratoryTrainingPresenter::GetInstance());
148 if (clickListener == nullptr)
150 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener is nullptr!");
153 LabelButtonConfig labelbuttonconfig;
154 const char *viewId[MAX_NUM_TRAINING_DURATION] = {TRAINING_DURATION_ONE_MIN, TRAINING_DURATION_TWO_MIN, TRAINING_DURATION_THREE_MIN, TRAINING_DURATION_FOUR_MIN, TRAINING_DURATION_FIVE_MIN};
155 for (int i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
157 labelbuttonconfig.left = 43;
158 labelbuttonconfig.top = 120 + 120 * i;
159 labelbuttonconfig.width = 380;
160 labelbuttonconfig.height = 100;
161 labelbuttonconfig.viewId = viewId[i];
162 DurationButton[i] = LabelButtonViewInit(labelbuttonconfig);
163 if (DurationButton[i] == nullptr)
165 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DurationButton[%d] is nullptr", i);
168 DurationButton[i]->SetOnClickListener(clickListener);
169 scrollView->Add(DurationButton[i]);
171 /* -------------------------------------------------------------------------- */
172 int16_t textId[MAX_NUM_TRAINING_DURATION] = {STR_1_MIN, STR_2_MIN,STR_3_MIN,STR_4_MIN, STR_5_MIN};
173 // const char *text[MAX_NUM_TRAINING_DURATION] = {"1分钟", "2分钟", "3分钟", "4分钟", "5分钟"};
174 LabelConfig labelConfig = {
182 .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,
184 for (int16_t i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
186 labelConfig.top = 153 + 120 * i;
187 labelConfig.textId = textId[i];
188 // labelConfig.text = text[i];
189 DurationLabel[i] = LabelViewinit(labelConfig);
190 if (DurationLabel[i] == nullptr)
192 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DurationLabel[%d] is nullptr", i);
195 scrollView->Add(DurationLabel[i]);
197 /* -------------------------------------------------------------------------- */
200 temp = new UIImageView();
205 int y = DurationButton[MAX_NUM_TRAINING_DURATION - 1]->GetY() + DurationButton[MAX_NUM_TRAINING_DURATION - 1]->GetHeight();
206 temp->SetPosition(43, y, 380, 40);
207 temp->SetVisible(false);
208 scrollView->Add(temp);
211 UpdateRespiratoryTrainingDurationSelectionView();
215 void RespiratoryTrainingDurationSelectionView::UpdateRespiratoryTrainingDurationSelectionView(void)
217 for (int i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
219 if (i == RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingSelectTime() - 1)
221 DurationButton[i]->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);
225 DurationButton[i]->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
227 DurationButton[i]->Invalidate();