320 lines
15 KiB
C++
320 lines
15 KiB
C++
/*----------------------------------------------------------------------------
|
||
* 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;
|
||
}
|
||
|
||
}
|