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

166 lines
6.2 KiB
C++

#include "TjdUiAppAlarmAdapter.h"
#include "TjdUiMultiLanguageExt.h"
#include "TjdUiAppAlarmModel.h"
#include "sys_config.h"
#include <iostream>
#include <sstream>
#include <string>
#include <cstdint>
#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
using namespace OHOS;
namespace TJD {
static constexpr int16_t ALARM_ITEM_WIDTH = ALARM_ITEM_W;
static constexpr int16_t ALARM_ITEM_HEIGHT = ALARM_ITEM_H;
/*----------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------*/
/*------------------------------- Class AlarmItemListener --------------------------------*/
/*----------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------*/
bool AlarmItemListener::OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event)
{
view_->itemView_ = static_cast<TjdAlarmItemView *>(&view);
view_->ShowView(ALARM_EDIT_VIEW);
view_->editContainer_->SelectedCallback((item_->GetItemInfo()));
return true;
}
bool AlarmItemListener::OnChange(OHOS::UICheckBox::UICheckBoxState state)
{
static_print_debug("state:%s", state? "UNSELECTED":"SELECTED");
if (state == UICheckBox::UICheckBoxState::SELECTED) {
TjdUiAppAlarmModel::GetInstance().AlarmEnableToSQL(item_->GetItemInfo().index, true);
} else {
TjdUiAppAlarmModel::GetInstance().AlarmEnableToSQL(item_->GetItemInfo().index, false);
}
return true;
}
/*----------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------*/
/*------------------------------- Class TjdAlarmItemView ---------------------------------*/
/*----------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------*/
TjdAlarmItemView::TjdAlarmItemView() : itemListener_(this)
{
SetPosition(0, 0, HORIZONTAL_RESOLUTION, ALARM_ITEM_HEIGHT);
SetStyle(STYLE_MARGIN_BOTTOM, 13);
SetStyle(STYLE_BORDER_RADIUS, 60);
SetStyle(STYLE_BACKGROUND_COLOR, 0xff262626);
SetTouchable(true);
SetOnClickListener(&itemListener_);
timeLabel_.SetPosition(42, 26, 304, 45);
timeLabel_.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
timeLabel_.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);
timeLabel_.SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_40);
weekLabel_.SetPosition(42, 75, 304, 30);
weekLabel_.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
weekLabel_.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);
weekLabel_.SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_24);
weekLabel_.SetStyle(STYLE_TEXT_COLOR, 0xff7e7e7e);
button_.SetPosition(ALARM_ITEM_WIDTH-120, (ALARM_ITEM_HEIGHT-120)/2, 120, 120);
button_.SetSelectedStateColor(Color::GetColorFromRGB(0xff, 0xc4, 0x0b));
button_.SetOnChangeListener(&itemListener_);
Add(&timeLabel_);
Add(&weekLabel_);
Add(&button_);
}
TjdAlarmItemView::~TjdAlarmItemView() { RemoveAll(); }
void TjdAlarmItemView::SetItemInfo(const AlarmItem &itemInfo)
{
itemInfo_ = itemInfo;
TjdUITimePicker::TimePickerType type = TjdUITimePicker::TimePickerType::TIME_PICKER_24_HOUR;
if (TjdUiAppAlarmPresenter::GetInstance()->GetTimeType() == type) {
std::string str = CheckTimeIsNeedFillZero(itemInfo.hour) + ":" + CheckTimeIsNeedFillZero(itemInfo.minute);
timeLabel_.SetText(str.c_str());
} else {
std::string str = "上午 ";
uint8_t hour = itemInfo.hour;
if (hour > 12) {
str = "下午 ";
hour = hour - 12;
}
str += CheckTimeIsNeedFillZero(hour) + ":" + CheckTimeIsNeedFillZero(itemInfo.minute);
timeLabel_.SetText(str.c_str());
}
weekLabel_.SetText(buildCycleString(itemInfo.cycle_mode).c_str());
if (itemInfo.enable) {
button_.SetState(true);
} else {
button_.SetState(false);
}
}
/*----------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------*/
/*-------------------------------- Class TjdAlarmAdapter ---------------------------------*/
/*----------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------*/
OHOS::UIView *TjdAlarmAdapter::GetView(OHOS::UIView *inView, int16_t index)
{
if (index >= (int16_t)listData_.size() || index < 0) {
return nullptr;
}
std::list<AlarmItem>::iterator it = listData_.begin();
for (int i = 0; i < index; i++) {
it++;
}
AlarmItem itemData = *it;
TjdAlarmItemView *item = nullptr;
if (inView == nullptr) {
item = new TjdAlarmItemView();
} else {
item = static_cast<TjdAlarmItemView *>(inView);
}
item->SetItemInfo(itemData);
return item;
}
void TjdAlarmAdapter::DeleteListItem(uint8_t index)
{
auto it = std::find_if(listData_.begin(), listData_.end(),
[index](const AlarmItem &item) { return item.index == index; });
if (it != listData_.end()) {
listData_.erase(it);
}
}
AlarmItem *TjdAlarmAdapter::GetListItem(uint8_t index)
{
for (auto it = listData_.begin(); it != listData_.end(); ++it) {
if ((*it).index == index) {
return &*it;
}
}
return nullptr;
}
} // namespace TJD