mcu_hi3321_watch/tjd/ui/app/sport/TjdUiAppSportPage.h
2025-05-26 20:15:20 +08:00

573 lines
16 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef TJD_UI_APP_SPORT_PAGE_H
#define TJD_UI_APP_SPORT_PAGE_H
#include "TjdUiAppIds.h"
#include "TjdUiAppSportView.h"
#include "TjdUiAppTimerView.h"
#include "TjdUiMemManage.h"
#include "components/tjd_ui_time_picker.h"
#include "components/tjd_ui_transform_list_group.h"
#include "components/ui_picker.h"
#include "graphic_timer.h"
#include "list.h"
namespace TJD {
#pragma region 运动设置主界面(运动目标页)
enum GoalSelectView
{
DISTANCE_SELECT_VIEW,
TIME_SELECT_VIEW,
CALORIES_SELECT_VIEW,
FREE_TRAINING_SELECT_VIEW,
MAX_SELECT_VIEW_INDEX
};
struct GoalSelectViewInfo
{
GoalSelectView index;
int imgIconResId;
// char *name;
uint16_t nameId;
// char *goal;
uint16_t goalId;
char *itemId;
};
// ----------------------------------------------------------------------------
// 运动消息弹窗
// ----------------------------------------------------------------------------
enum PopupMsgType
{
SPORT_POPUP_MSG_TYPE_DISTANCE,
SPORT_POPUP_MSG_TYPE_TIME,
SPORT_POPUP_MSG_TYPE_CALORIES,
SPORT_POPUP_MSG_TYPE_PER_DISTANCE,
SPORT_POPUP_MSG_TYPE_PER_TIME,
SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_1,
SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_2,
SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_3,
SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_4,
SPORT_POPUP_TYPE_END_30_MIN_REMIND, // 30分钟结束提醒
SPORT_POPUP_TYPE__END_50_MIN_REMIND, // 50分钟结束提醒
SPORT_POPUP_TYPE__END_60_MIN_REMIND, // 60分钟结束提醒
SPORT_POPUP_TYPE__END_65_MIN_REMIND, // 65分钟结束提醒
SPORT_POPUP_TYPE__END_70_MIN_REMIND, // 70分钟结束提醒
SPORT_POPUP_MSG_TYPE_MAX
};
class SportPopupWindowListener : public OHOS::UIView::OnClickListener, public OHOS::RootView::OnKeyActListener
{
public:
SportPopupWindowListener(){};
~SportPopupWindowListener(){};
bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event);
bool OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event);
private:
int16_t dragStartX_{0};
int16_t dragCurrentX_{0};
int32_t dragDistance_{0};
};
class SportPopupWindow : public OHOS::UIViewGroup // 运动主弹窗
{
public:
SportPopupWindow(PopupMsgType msgType, char *goal);
~SportPopupWindow() { RemoveAll(); };
static SportPopupWindow *GetInstance(void);
private:
OHOS::UIImageView sportIcon_;
OHOS::UIImageView achieveIcon_;
OHOS::UIImageView heartrateIcon_;
OHOS::UIImageView distanceIcon_;
OHOS::UIImageView timeIcon_;
OHOS::UILabelExt popupContent_;
OHOS::UILabelExt tip_;
SportPopupWindowListener onclickListener_;
SportPopupWindowListener onkeyListener_;
};
// ----------------------------------------------------------------------------
// 运动目标页列表项
// ----------------------------------------------------------------------------
class ItemViewOnclickListener : public OHOS::UIView::OnClickListener
{
public:
ItemViewOnclickListener(){};
~ItemViewOnclickListener(){};
virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event);
private:
};
class ItemView : public OHOS::UITransformGroup
{
public:
ItemView(GoalSelectViewInfo &info, uint8_t i);
~ItemView() { RemoveAll(); };
void UpdateView(GoalSelectViewInfo &info, uint8_t index);
friend class SportGoalSelectView;
OHOS::UILabelExt goal_;
private:
// bool OnClickEvent(const OHOS::ClickEvent &event) override;
ItemViewOnclickListener itemViewOnclickListener;
OHOS::UIImageView icon_;
OHOS::UIImageView moreIcon_;
OHOS::UILabelExt name_;
};
// ----------------------------------------------------------------------------
// 运动目标页
// ----------------------------------------------------------------------------
class SportGoalSelectAdapter : public OHOS::AbstractAdapter
{
public:
SportGoalSelectAdapter() {}
~SportGoalSelectAdapter();
OHOS::UIView *GetView(OHOS::UIView *inView, int16_t index) override;
uint16_t GetCount() override;
private:
ItemView *itemView_{nullptr};
// OHOS::UIView::OnClickListener *onClickListener_{nullptr};
};
class SportGoalSelectView : public SportViewBase
{
public:
SportGoalSelectView();
~SportGoalSelectView();
void ReMeasure();
static SportGoalSelectView *GetInstance(void);
void SportGoalSelectViewRefresh();
void SportGoalSelectVDataRefresh();
virtual void ShowView();
void HideView();
void InitList();
void SetListTitleVisible(bool visible);
std::list<GoalSelectViewInfo> *ItemList_ = nullptr;
OHOS::UITransformList *sportGoalSelectList_{nullptr};
ItemView *itemViews_[MAX_SELECT_VIEW_INDEX]{nullptr};
friend class SportGoalSelectAdapter;
private:
OHOS::UILabelExt mainTitle_;
OHOS::UIView hide_;
bool ifDistance = false; // 是否有距离
// SportGoalListScrollListener listScrollListener;
OHOS::ImageInfo *imgItemInfo[MAX_SELECT_VIEW_INDEX]{nullptr};
};
#pragma endregion
#pragma region 通用目标页
enum CommonViewItemIndex
{
GOAL_SELECT_ITEM,
REMIND_SELECT_ITEM,
MAX_COMMON_VIEW_ITEM_INDEX
};
class CommonGoalItemOnclickListener : public OHOS::UIView::OnClickListener
{
public:
CommonGoalItemOnclickListener(){};
~CommonGoalItemOnclickListener(){};
virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event);
void EnterCallBack(OHOS::UIView &view);
private:
};
class CommonGoalItemView : public OHOS::UITransformGroup
{
public:
CommonGoalItemView(GoalSelectViewInfo &info);
~CommonGoalItemView() { RemoveAll(); };
static CommonGoalItemView *GetInstance();
void CommonGoalItemViewRefresh();
OHOS::UILabel *GetGoalLabel() { return &goal_; };
friend class CommonViewGoalPage;
private:
// bool OnClickEvent(const OHOS::ClickEvent &event) override;
CommonGoalItemOnclickListener goalItemOnclickListener;
OHOS::UIImageView icon_;
OHOS::UIImageView moreIcon_;
OHOS::UILabelExt name_;
OHOS::UILabelExt goal_;
GoalSelectView index_;
};
class CommonViewGoalPage : public SportViewBase
{
public:
CommonViewGoalPage(GoalSelectView index);
~CommonViewGoalPage();
static CommonViewGoalPage *GetInstance(void);
void ShowView();
void HideView();
void GoalPageDataRefresh();
static uint8_t CurSelectGoalView;
void UpdateLocalTime();
// int32_t hour = 1; // 保存当前选择的小时
// int32_t minute = 0; // 保存当前选择的分钟
private:
OHOS::GraphicTimer *timeTimer_ = nullptr;
OHOS::UILabel timeTitle_;
OHOS::UIImageView startIcon_;
CommonGoalItemOnclickListener startIconOnclickListener;
CommonGoalItemView *goalItemViews_[MAX_COMMON_VIEW_ITEM_INDEX]{nullptr};
};
#pragma endregion
#pragma region 距离、时间选择CommonUiPicker, 监听器
class GoalOnclickListener : public OHOS::UIView::OnClickListener
{
public:
GoalOnclickListener(){};
~GoalOnclickListener(){};
virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event);
private:
};
class CommonUiPicker : public SportViewBase
{
public:
CommonUiPicker(const char *uiPickerId, OHOS::ColorType highlightColor, const char *uiPickerData[], uint8_t len,
int64_t highlightBgColor);
~CommonUiPicker() { RemoveAll(); };
static CommonUiPicker *GetInstance(void);
OHOS::UIPicker uiPicker_;
friend class DistnaceGoalSelectView;
void ViewRequestFocus();
private:
OHOS::UIImageView highLightBg_;
};
#pragma endregion
#pragma region 距离目标选择
class DistnaceGoalSelectView : public SportViewBase
{
public:
DistnaceGoalSelectView();
~DistnaceGoalSelectView();
static DistnaceGoalSelectView *GetInstance(void);
void ShowView();
void HideView();
uint16_t GetSelectedDistance() { return distancePickIndex; };
private:
uint8_t distancePickIndex = 5; // 距离目标选择索引
OHOS::UILabelExt lbTitle_;
OHOS::UIImageView imgConfirm;
CommonUiPicker *distancePicker_;
GoalOnclickListener distnaceGoalOnclickListener;
};
#pragma endregion
#pragma region 时间目标选择
class SportTimerPickerOnListener : public TjdUITimePicker::ItemSelectdEnterListener
{
public:
SportTimerPickerOnListener(){};
~SportTimerPickerOnListener(){};
void OnSelectTimePicker(OHOS::UIPicker &picker);
void OnEnter(int32_t hour, int32_t minute);
private:
};
class TimeGoalSelectView : public SportViewBase
{
public:
TimeGoalSelectView();
~TimeGoalSelectView()
{
RemoveAll();
if (timePicker != nullptr) {
delete timePicker;
timePicker = nullptr;
}
}
private:
SportTimerPickerOnListener timePickerOnListener;
TjdUITimePicker *timePicker{nullptr};
};
#pragma endregion
#pragma region 卡路里目标选择
class CaloriesGoalSelectView : public SportViewBase
{
public:
CaloriesGoalSelectView();
~CaloriesGoalSelectView();
static CaloriesGoalSelectView *GetInstance(void);
uint16_t GetSelectedCalories() { return caloriesPickIndex; };
void ShowView();
void HideView();
private:
uint8_t caloriesPickIndex = 1; // 卡路里目标选择索引
OHOS::UILabelExt lbTitle_;
OHOS::UIImageView imgConfirm;
CommonUiPicker *caloriesPicker_;
GoalOnclickListener caloriesGoalOnclickListener;
};
#pragma endregion
#pragma region 提醒目标页
enum RemindGoalListItemIndex
{
HEART_RATE_INDEX,
TIME_INDEX,
ONCE_INDEX,
REMIND_GOAL_MAX_INDEX,
};
struct RemindItemInfo
{
RemindGoalListItemIndex index;
int iconResId;
// char *name;
uint16_t nameId;
// char *goal;
uint16_t goalId;
char *itemId;
};
class RemindGoalListItemOnclickListener : public OHOS::UIView::OnClickListener
{
public:
RemindGoalListItemOnclickListener(){};
~RemindGoalListItemOnclickListener(){};
virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event);
private:
};
class RemindGoalListItemView : public OHOS::UITransformGroup // 提醒列表item项
{
public:
RemindGoalListItemView(RemindItemInfo &info);
~RemindGoalListItemView() { RemoveAll(); };
OHOS::UILabelExt goal_;
private:
OHOS::UIImageView icon_;
OHOS::UIImageView moreIcon_;
OHOS::UILabelExt name_;
RemindGoalListItemOnclickListener remindGoalListItemOnclickListener;
};
class RemindGoalListView : public SportViewBase
{
public:
RemindGoalListView();
~RemindGoalListView();
static RemindGoalListView *GetInstance(void);
void ShowView();
void RemindGoalListViewRefresh();
int heartRateIndex[5] = {0}; // 心率区间选择索引
private:
OHOS::UILabelExt remindTitle_;
RemindGoalListItemView *remindItemViews_[REMIND_GOAL_MAX_INDEX]{nullptr};
};
#pragma endregion
#pragma region 心率提醒区间选择
enum HeartRatePickIndex
{
FIRAT_SECTOR_INDEX,
SECOND_SECTOR_INDEX,
THREE_SECTOR_INDEX,
FOUR_SECTOR_INDEX,
NONE_SECTOR_INDEX,
HEART_RATE_MAX_INDEX,
};
struct HeartRateItemInfo
{
HeartRatePickIndex index;
int imgIconResId;
// char *content;
uint16_t contentId;
// char *unit;
uint16_t unitId;
};
class HeartRateItemView : public ItemConstructor<HeartRateItemInfo> // 心率区间选择控件
{
public:
HeartRateItemView(const HeartRateItemInfo &info);
~HeartRateItemView() { RemoveAll(); };
void RefreshItem(const HeartRateItemInfo &itemInfo, int16_t index);
bool OnClickEvent(const OHOS::ClickEvent &event);
// OHOS::UICheckBox checkBox_;
OHOS::UIImageView switch_;
OHOS::UIImageView icon_;
OHOS::UILabelExt content_;
private:
uint8_t selectedZoomCount = 1;
OHOS::UIImageView moreIcon_;
OHOS::UILabelExt unit_;
OHOS::ImageInfo *selectRes_{nullptr};
OHOS::ImageInfo *unSelectRes_{nullptr};
OHOS::ImageInfo *iconRes_{nullptr};
};
class HeartRatePickView : public SportViewBase
{
public:
HeartRatePickView();
~HeartRatePickView();
void ShowView();
void HideView();
HeartRateItemView *heartRateItemViews_[HEART_RATE_MAX_INDEX]{nullptr};
uint8_t heartRateZoomPick[HEART_RATE_MAX_INDEX] = {0}; // 保存当前选择的心率区间索引
private:
OHOS::UIView hide_;
OHOS::UILabelExt heartRateTitle_;
uint8_t selectedZoomCount = 1; // 当前选择的心率区间数量
std::list<HeartRateItemInfo> heartRateListItemInfo_;
TjdUITransformListGroup *heartRateListView_{nullptr};
TjdUITransformListGroupAdapter<HeartRateItemInfo, HeartRateItemView, std::list<HeartRateItemInfo>>
*heartRateAdapterPtr_{nullptr};
};
#pragma endregion
#pragma region 时间提醒、距离提醒item
struct TimeOrDistRemindItemInfo
{
uint8_t index;
// char *content;
uint16_t contentId;
uint8_t type; //0代表为时间提醒1代表为距离提醒
};
class TimeOrDistRemindItemView : public ItemConstructor<TimeOrDistRemindItemInfo>
{
public:
TimeOrDistRemindItemView(const TimeOrDistRemindItemInfo &info);
~TimeOrDistRemindItemView() { RemoveAll(); };
void RefreshItem(const TimeOrDistRemindItemInfo &itemInfo, int16_t index);
void TimeRemindOnClickEventHandle(void);
void DistanceRemindOnClickEventHandle(void);
bool OnClickEvent(const OHOS::ClickEvent &event);
void SetCurSelectIndex(uint8_t index) { curSelectIndex = index; };
uint8_t GetCurSelectIndex() { return curSelectIndex; };
// OHOS::UICheckBox checkBox_;
OHOS::UIImageView switch_;
private:
uint8_t curSelectIndex = 0;
OHOS::UILabelExt content_;
OHOS::ImageInfo *selectRes_{nullptr};
OHOS::ImageInfo *unSelectRes_{nullptr};
};
#pragma endregion
#pragma region 时间提醒区间选择
enum TimeRemindPickIndex
{
PER_TEN_MIN_INDEX,
PER_TWENTY_MIN_INDEX,
PER_THIRTY_MIN_INDEX,
PER_FORTY_MIN_INDEX,
PER_FIFTY_MIN_INDEX,
PER_SIXTY_MIN_INDEX,
UNSELECT_MIN_INDEX,
MAX_MIN_INDEX,
};
class TimeRemindPickView : public SportViewBase
{
public:
TimeRemindPickView();
~TimeRemindPickView();
void ShowView();
void HideView();
TimeOrDistRemindItemView *timeItemViews_[MAX_MIN_INDEX]{nullptr};
static uint8_t curSelectTimeIndex;
private:
OHOS::UIView hide_;
OHOS::UILabelExt timeRemindTitle_;
std::list<TimeOrDistRemindItemInfo> timeListItemInfo_;
TjdUITransformListGroup *timeListView_{nullptr};
TjdUITransformListGroupAdapter<TimeOrDistRemindItemInfo, TimeOrDistRemindItemView, std::list<TimeOrDistRemindItemInfo>>
*timeAdapterPtr_{nullptr};
};
#pragma endregion
#pragma region 距离提醒区间选择
enum DistanceRemindPickIndex
{
PER_500_METERS_INDEX,
PER_1000_METERS_INDEX,
PER_2000_METERS_INDEX,
PER_3000_METERS_INDEX,
PER_5000_METERS_INDEX,
UNSELECT_DISTANCE_INDEX,
MAX_DISTANCE_INDEX,
};
class DistanceRemindPickView : public SportViewBase
{
public:
DistanceRemindPickView();
~DistanceRemindPickView();
void ShowView();
void HideView();
TimeOrDistRemindItemView *distItemViews_[MAX_DISTANCE_INDEX]{nullptr};
static uint8_t curSelectDistanceIndex;
private:
OHOS::UIView hide_;
OHOS::UILabelExt distRemindTitle_;
std::list<TimeOrDistRemindItemInfo> distanceListItemInfo_;
TjdUITransformListGroup *distanceListView_{nullptr};
TjdUITransformListGroupAdapter<TimeOrDistRemindItemInfo, TimeOrDistRemindItemView, std::list<TimeOrDistRemindItemInfo>>
*distanceAdapterPtr_{nullptr};
};
#pragma endregion
#pragma region 运动结束提醒
class SportFinishRemindOnclickListener : public OHOS::UIView::OnClickListener, public OHOS::RootView::OnKeyActListener
{
public:
SportFinishRemindOnclickListener(){};
~SportFinishRemindOnclickListener(){};
virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event);
bool OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event);
private:
};
class SportFinishRemindView : public SportViewBase
{
public:
SportFinishRemindView(uint8_t time_stamp);
~SportFinishRemindView();
static SportFinishRemindView *GetInstance(void);
private:
OHOS::UILabel remindContent_;
OHOS::UIImageView cancelImage_;
OHOS::UIImageView confirmImage_;
SportFinishRemindOnclickListener listener_;
SportFinishRemindOnclickListener onkeyListener_;
};
#pragma endregion
} // namespace TJD
#endif