mcu_hi3321_watch/tjd/ui/app/female_health/TjdUiFemaleHaveDataPage.cpp
2025-05-26 20:15:20 +08:00

320 lines
15 KiB
C++
Raw 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.

/*----------------------------------------------------------------------------
* Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved.
*
* Description:
*
* Author: huangshuyi
*
* Create: 2024-8
*--------------------------------------------------------------------------*/
#include "TjdUiFemaleHaveDataPage.h"
#include "components/ui_label.h"
#include "wearable_log.h"
#include "common/image_cache_manager.h"
#include <time.h>
#include <unordered_map>
#include "gfx_utils/image_info.h"
#include "gfx_utils/heap_base.h"
#include "TjdUiImageIds.h"
#include "ui_label.h"
#include "ui_label_ext.h"
#include "components/ui_label_ext.h"
#include "TjdUiMultiLanguageExt.h"
#include "sys_config.h"
#include "components/ui_view.h"
#include "TjdUiMemManage.h"
#include <ctime>
#include "sql_message.h"
#include "TjdUiFemaleHealthView.h"
using namespace OHOS;
namespace TJD {
#define ENABLE_PRINT_INFO 1
#if ENABLE_PRINT_INFO
#define static_print_info(...) sys_ui_log_i(__VA_ARGS__) //一般信息打印宏控制
#define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) //警告信息打印一般常开
#define static_print_error(...) sys_ui_log_e(__VA_ARGS__) //错误信息打印一般常开
#define static_print_debug(...) sys_ui_log_d(__VA_ARGS__)
#else
#define static_print_info(...)
#define static_print_warn(...)
#define static_print_error(...)
#define static_print_debug(...)
#endif
#define IMAGE_BIN_PATH TJD_IMAGE_PATH"img_female.bin"
static const char* week_ch[] = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
static const char* week_en[] = {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"};
static TjdUiFemaleHaveDataPage *g_pFemaleHaveData = nullptr;
TjdUiFemaleHaveDataPage::TjdUiFemaleHaveDataPage()
{
//SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
g_pFemaleHaveData = this;
}
TjdUiFemaleHaveDataPage::~TjdUiFemaleHaveDataPage()
{
g_pFemaleHaveData = nullptr;
}
TjdUiFemaleHaveDataPage *TjdUiFemaleHaveDataPage::GetInstance(void)
{
return g_pFemaleHaveData;
}
bool TjdUiFemaleHaveDataPage::OnClick(UIView &view, const ClickEvent &event)
{
if (&view == labelDateTime) {
TjdUiFemaleHealthView::GetInstance()->CalenderPage_->ShowView();
TjdUiFemaleHealthView::GetInstance()->HaveDataPage_->HideView();
}
return true;
}
void TjdUiFemaleHaveDataPage::HideView(void)
{
static_print_debug("TjdUiFemaleHaveDataPage::HideView\n");
pageGroup->SetVisible(false);
}
void TjdUiFemaleHaveDataPage::ShowView(void)
{
static_print_debug("TjdUiFemaleHaveDataPage::ShowView\n");
pageGroup->SetVisible(true);
}
static UIView* healthDisplayViewArray[7];
UIViewGroup *TjdUiFemaleHaveDataPage::PageInit(void)
{
UIViewGroup *container = (UIViewGroup *)TjdUiFemaleHealthView::GetInstance()->GetContainer();
UIScrollView *scrollCont = new UIScrollView();
scrollCont->SetPosition(0, 0);
scrollCont->SetWidth(Screen::GetInstance().GetWidth());
scrollCont->SetHeight(Screen::GetInstance().GetHeight());
scrollCont->SetScrollBlankSize(80);
scrollCont->SetHorizontalScrollState(false);
scrollCont->SetElastic(true);
scrollCont->SetElasticTime(1000);
scrollCont->SetReboundSize(100);
scrollCont->SetThrowDrag(true);
scrollCont->SetOnDragListener(this);
scrollCont->SetTouchable(true);
scrollCont->SetDraggable(true);
container->Add(scrollCont);
pageGroup = scrollCont;
//UIViewGroup* pageGroup = new UIViewGroup();
// scrollCont->Add(pageGroup);
// pageGroup->SetPosition(0, 0);
// //pageGroup->SetAutoSize(true);
// pageGroup->SetWidth(Screen::GetInstance().GetWidth());
// pageGroup->SetHeight(Screen::GetInstance().GetHeight());
UILabel *labelFemale = new UILabel();
labelFemale->SetFont(TJD_VECTOR_FONT_FILENAME, 30);
pageGroup->Add(labelFemale);
labelFemale->SetText("经期跟踪");
//labelFemale->SetPosition(0, 0, Screen::GetInstance().GetWidth(), 50);
//labelFemale->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28);
labelFemale->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelFemale->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
labelFemale->LayoutLeftOfParent((pageGroup->GetWidth() - labelFemale->GetWidth()) / 2);
labelFemale->LayoutTopOfParent(20);
for (uint8_t i = 0; i < 7; i++) {
UIView* healthDisplayView = new UIView();
pageGroup->Add(healthDisplayView);
healthDisplayView->SetStyle(STYLE_BACKGROUND_COLOR, Color::White().full);
healthDisplayView->SetStyle(STYLE_BORDER_RADIUS, 50);
healthDisplayViewArray[i] = healthDisplayView;
}
healthDisplayViewArray[3]->SetWidth(100);
healthDisplayViewArray[3]->SetHeight(160);
healthDisplayViewArray[3]->LayoutTopOfParent(110);
healthDisplayViewArray[3]->LayoutLeftOfParent((pageGroup->GetWidth() - healthDisplayViewArray[3]->GetWidth()) / 2);
healthDisplayViewArray[3]->SetViewId("View3");
healthDisplayViewArray[2]->SetWidth(healthDisplayViewArray[3]->GetWidth()*0.7);
healthDisplayViewArray[2]->SetHeight(healthDisplayViewArray[3]->GetHeight()*0.7);
healthDisplayViewArray[2]->AlignVerCenterToSibling(healthDisplayViewArray[3]->GetViewId(), 0);
healthDisplayViewArray[2]->LayoutLeftToSibling(healthDisplayViewArray[3]->GetViewId(), 5);
healthDisplayViewArray[2]->SetViewId("View2");
healthDisplayViewArray[1]->SetWidth(healthDisplayViewArray[2]->GetWidth()*0.6);
healthDisplayViewArray[1]->SetHeight(healthDisplayViewArray[2]->GetHeight()*0.6);
healthDisplayViewArray[1]->AlignVerCenterToSibling(healthDisplayViewArray[2]->GetViewId(), 0);
healthDisplayViewArray[1]->LayoutLeftToSibling(healthDisplayViewArray[2]->GetViewId(), 5);
healthDisplayViewArray[1]->SetViewId("View1");
healthDisplayViewArray[0]->SetWidth(healthDisplayViewArray[1]->GetWidth()*0.4);
healthDisplayViewArray[0]->SetHeight(healthDisplayViewArray[1]->GetHeight()*0.4);
healthDisplayViewArray[0]->AlignVerCenterToSibling(healthDisplayViewArray[1]->GetViewId(), 0);
healthDisplayViewArray[0]->LayoutLeftToSibling(healthDisplayViewArray[1]->GetViewId(), 5);
healthDisplayViewArray[0]->SetViewId("View0");
healthDisplayViewArray[4]->SetWidth(healthDisplayViewArray[3]->GetWidth()*0.7);
healthDisplayViewArray[4]->SetHeight(healthDisplayViewArray[3]->GetHeight()*0.7);
healthDisplayViewArray[4]->AlignVerCenterToSibling(healthDisplayViewArray[3]->GetViewId(), 0);
healthDisplayViewArray[4]->LayoutRightToSibling(healthDisplayViewArray[3]->GetViewId(), 5);
healthDisplayViewArray[4]->SetViewId("View4");
healthDisplayViewArray[5]->SetWidth(healthDisplayViewArray[4]->GetWidth()*0.6);
healthDisplayViewArray[5]->SetHeight(healthDisplayViewArray[4]->GetHeight()*0.6);
healthDisplayViewArray[5]->AlignVerCenterToSibling(healthDisplayViewArray[4]->GetViewId(), 0);
healthDisplayViewArray[5]->LayoutRightToSibling(healthDisplayViewArray[4]->GetViewId(), 5);
healthDisplayViewArray[5]->SetViewId("View5");
healthDisplayViewArray[6]->SetWidth(healthDisplayViewArray[5]->GetWidth()*0.4);
healthDisplayViewArray[6]->SetHeight(healthDisplayViewArray[5]->GetHeight()*0.4);
healthDisplayViewArray[6]->AlignVerCenterToSibling(healthDisplayViewArray[5]->GetViewId(), 0);
healthDisplayViewArray[6]->LayoutRightToSibling(healthDisplayViewArray[5]->GetViewId(), 5);
healthDisplayViewArray[6]->SetViewId("View6");
ImageInfo* imgInfo;
leftArrow = new UIImageView();
leftArrow->SetOnClickListener(this);
leftArrow->SetTouchable(true);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FEMALE_LEFT_ARROW, IMAGE_BIN_PATH);
pageGroup->Add(leftArrow);
leftArrow->SetPosition(68, 305);
leftArrow->SetSrc(imgInfo);
rightArrow = new UIImageView();
rightArrow->SetOnClickListener(this);
rightArrow->SetTouchable(true);
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FEMALE_RIGHT_ARROW, IMAGE_BIN_PATH);
pageGroup->Add(rightArrow);
rightArrow->SetPosition(396, 305);
rightArrow->SetSrc(imgInfo);
labelDateTime = new UILabel();
labelDateTime->SetOnClickListener(this);
labelDateTime->SetTouchable(true);
labelDateTime->SetFont(TJD_VECTOR_FONT_FILENAME, 28);
labelDateTime->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
pageGroup->Add(labelDateTime);
char buf[50];
uint8_t month = 11;
uint8_t day = 24;
uint8_t hour = 12;
uint8_t minute = 0;
uint8_t weekIndex = 0;
const char* weekStr = week_ch[weekIndex];
uint8_t language = 0;//0:中文1:英文
if (language) {
weekStr = week_en[weekIndex];
} else {
weekStr = week_ch[weekIndex];
}
snprintf(buf, 50, "%s (%02d/%02d)", weekStr, month, day);//需要根据实际数据显示
labelDateTime->SetText(buf);
labelDateTime->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelDateTime->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
labelDateTime->LayoutLeftOfParent((pageGroup->GetWidth() - labelDateTime->GetWidth()) / 2);
labelDateTime->LayoutTopOfParent(300);
///////////经期显示////////////////
UIViewGroup* healthDataStatusGroup = new UIViewGroup();
pageGroup->Add(healthDataStatusGroup);
healthDataStatusGroup->SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0xff);
healthDataStatusGroup->SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0xff262626);
healthDataStatusGroup->SetStyle(OHOS::STYLE_BORDER_RADIUS, 55);
healthDataStatusGroup->SetPosition(8, 359, Screen::GetInstance().GetWidth() - 16, 110);
UILabel *labelStatusTag = new UILabel();
labelStatusTag->SetFont(TJD_VECTOR_FONT_FILENAME, 34);
labelStatusTag->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
healthDataStatusGroup->Add(labelStatusTag);
labelStatusTag->SetText("状态");
labelStatusTag->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelStatusTag->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
labelStatusTag->LayoutLeftOfParent(42);
labelStatusTag->LayoutTopOfParent((healthDataStatusGroup->GetHeight() - labelStatusTag->GetHeight()) / 2);
labelStatusData = new UILabel();
labelStatusData->SetFont(TJD_VECTOR_FONT_FILENAME, 28);
labelStatusData->SetStyle(STYLE_TEXT_COLOR, 0xFF959595);
healthDataStatusGroup->Add(labelStatusData);
labelStatusData->SetText("经期");//需要根据实际数据显示
labelStatusData->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelStatusData->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
labelStatusData->LayoutRightOfParent(36);
labelStatusData->LayoutTopOfParent((healthDataStatusGroup->GetHeight() - labelStatusData->GetHeight()) / 2);
///////////流量显示////////////////
UIViewGroup* healthDataFlowGroup = new UIViewGroup();
pageGroup->Add(healthDataFlowGroup);
healthDataFlowGroup->SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0xff);
healthDataFlowGroup->SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0xff262626);
healthDataFlowGroup->SetStyle(OHOS::STYLE_BORDER_RADIUS, 55);
healthDataFlowGroup->SetPosition(8, 477, Screen::GetInstance().GetWidth() - 16, 110);
UILabel *labelFlowTag = new UILabel();
labelFlowTag->SetFont(TJD_VECTOR_FONT_FILENAME, 34);
labelFlowTag->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
healthDataFlowGroup->Add(labelFlowTag);
labelFlowTag->SetText("流量");
labelFlowTag->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelFlowTag->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
labelFlowTag->LayoutLeftOfParent(42);
labelFlowTag->LayoutTopOfParent((healthDataFlowGroup->GetHeight() - labelFlowTag->GetHeight()) / 2);
uint8_t level = 0;//流量等级,需要根据实际数据显示
for (uint8_t i = 0; i < 3; i++) {
imageFlow[i] = new UIImageView();
healthDataFlowGroup->Add(imageFlow[i]);
if (i < level) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FEMALE_FLOW_ON, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FEMALE_FLOW_OFF, IMAGE_BIN_PATH);
}
imageFlow[i]->SetPosition(68, 305);
imageFlow[i]->SetSrc(imgInfo);
imageFlow[i]->LayoutLeftOfParent(i * (20 + imageFlow[i]->GetWidth()) + 319);
imageFlow[i]->LayoutTopOfParent((healthDataFlowGroup->GetHeight() - imageFlow[i]->GetHeight()) / 2);
}
///////////痛经显示////////////////
UIViewGroup* healthDataAcheGroup = new UIViewGroup();
pageGroup->Add(healthDataAcheGroup);
healthDataAcheGroup->SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0xff);
healthDataAcheGroup->SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0xff262626);
healthDataAcheGroup->SetStyle(OHOS::STYLE_BORDER_RADIUS, 55);
healthDataAcheGroup->SetPosition(8, 595, Screen::GetInstance().GetWidth() - 16, 110);
UILabel *labelAcheTag = new UILabel();
labelAcheTag->SetFont(TJD_VECTOR_FONT_FILENAME, 34);
labelAcheTag->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
healthDataAcheGroup->Add(labelAcheTag);
labelAcheTag->SetText("痛经");
labelAcheTag->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelAcheTag->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
labelAcheTag->LayoutLeftOfParent(42);
labelAcheTag->LayoutTopOfParent((healthDataAcheGroup->GetHeight() - labelAcheTag->GetHeight()) / 2);
level = 0;//痛经等级,需要根据实际数据显示
for (uint8_t i = 0; i < 3; i++) {
imageAche[i] = new UIImageView();
healthDataAcheGroup->Add(imageAche[i]);
if (i < level) {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FEMALE_ACHE_ON, IMAGE_BIN_PATH);
} else {
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_FEMALE_ACHE_ON, IMAGE_BIN_PATH);
}
imageAche[i]->SetPosition(68, 305);
imageAche[i]->SetSrc(imgInfo);
imageAche[i]->LayoutLeftOfParent(i * (20 + imageAche[i]->GetWidth()) + 319);
imageAche[i]->LayoutTopOfParent((healthDataAcheGroup->GetHeight() - imageAche[i]->GetHeight()) / 2);
}
///////////同步时间显示//////////////////////////////
labelSyncTime = new UILabel();
labelSyncTime->SetFont(TJD_VECTOR_FONT_FILENAME, 34);
labelSyncTime->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
pageGroup->Add(labelSyncTime);
snprintf(buf, 50, "同步时间:%02d/%02d %02d:%02d", month, day, hour, minute);//需要根据实际数据显示
labelSyncTime->SetText(buf);
labelSyncTime->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelSyncTime->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
labelSyncTime->LayoutLeftOfParent((pageGroup->GetWidth() - labelSyncTime->GetWidth()) / 2);
labelSyncTime->LayoutTopOfParent(757);
static_print_debug("TjdUiFemaleHaveDataPage::PageInit end");
return pageGroup;
}
}