${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stopwatch/src/MainStopWatchPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stopwatch/src/MainStopWatchView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stopwatch/src/StopWatchModel.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stopwatch/src/StopWatchAdapter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stopwatch/src/StopWatchItemView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stopwatch/src/StopWatchRecordCycleToLimitView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stopwatch/src/StopWatchRecordTimeToLimitView.cpp
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-04-04 15:13:51\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-10-30 14:28:49\r
+ * @LastEditTime: 2024-12-13 17:02:27\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/stopwatch/include/MainStopWatchView.h\r
*/\r
#ifndef MAIN_STOPWATCH_VIEW_H\r
#include "components/text_adapter.h"\r
#include "stopwatch/include/StopWatchRecordCycleToLimitView.h"\r
#include "stopwatch/include/StopWatchRecordTimeToLimitView.h"\r
+#include "stopwatch/include/StopWatchAdapter.h"\r
/*秒表主视图*/\r
namespace OHOS\r
{\r
UICheckBox *GetPlayOrPausecheckBox(void);\r
void ChangeRecordTimeToLimitView(void);\r
UIScrollView *GetScrollView(int16_t index);\r
+ StopWatchAdapter *GetStopWatchAdapter(void);\r
private:\r
void InitMainStopWatchView(void);\r
void ClearAll(void);\r
UIList *list = nullptr;\r
TextAdapter *listadapter = nullptr;\r
List<const char *> *listdata = nullptr;\r
+\r
+ StopWatchAdapter *stopWatchAdapter{nullptr};\r
};\r
} // namespace OHOS\r
#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-12-12 11:03:15
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-12-16 11:43:14
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/stopwatch/include/StopWatchAdapter.h
+ */
+
+#ifndef STOPWATCH_ADAPTER_H
+#define STOPWATCH_ADAPTER_H
+
+#include "components/ui_list.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_view_group.h"
+#include "components/ui_image_view.h"
+#include "components/abstract_adapter.h"
+#include <list>
+#include <string>
+
+namespace OHOS
+{
+ typedef struct
+ {
+ std::string RecordCycleNumber;
+ std::string formattedTime;
+ std::string formattedDiff;
+ int curSelectItemViewIndex;
+ } StopWatchItem;
+
+ class StopWatchAdapter : public AbstractAdapter
+ {
+ public:
+ explicit StopWatchAdapter();
+ ~StopWatchAdapter() override;
+ uint16_t GetCount(void) override;
+ void ClearData(void);
+ void setSelectedIndex(int index);
+ UIView *GetView(UIView *inView, int16_t index) override;
+ void AddListItem(const StopWatchItem &item);
+
+ private:
+ std::list<const StopWatchItem> listData;
+ int curSelectItemViewIndex{-1};
+ };
+}
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-30 09:14:38
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-12-16 14:42:31
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/settings/include/SettingItemView.h
+ */
+
+#ifndef STOPWATCH_ITEM_VIEW_H
+#define STOPWATCH_ITEM_VIEW_H
+
+#include "components/ui_label_ext.h"
+#include "components/ui_view_group.h"
+#include "stopwatch/include/StopWatchAdapter.h"
+namespace OHOS
+{
+ class StopWatchItemView : public UIViewGroup
+ {
+ public:
+ explicit StopWatchItemView();
+ ~StopWatchItemView() override;
+ void SetItemInfo(const StopWatchItem itemInfo);
+ void SetUpChild();
+ void SetItemViewColor(bool flag);
+
+ private:
+ UILabel RecordCycleNumber;
+ UILabel formattedTime;
+ UILabel formattedDiff;
+ };
+}
+#endif
const char *formattedTime = MainStopWatchView::GetInstance()->GetShowTimelabel()->GetText();\r
char formattedDiff[64] = {0};\r
MillisecondsToTimeStr(timeDifference, formattedDiff);\r
- char *PickerData = (char *)malloc(128);\r
- if (lastRecordTime == 0) // 如果是第一次标记\r
- {\r
- sprintf(PickerData, "%02d %s +%s", RecordCycleNumber, formattedTime, formattedTime);\r
- }\r
- else\r
- {\r
- sprintf(PickerData, "%02d %s +%s", RecordCycleNumber, formattedTime, formattedDiff);\r
- }\r
- m_listdata->PushFront(const_cast<const char *>(PickerData));\r
- m_listadapter->SetData(m_listdata);\r
- m_list->SetAdapter(m_listadapter);\r
+ // char *PickerData = (char *)malloc(128);\r
+ // if (lastRecordTime == 0) // 如果是第一次标记\r
+ // {\r
+ // sprintf(PickerData, "%02d %s +%s", RecordCycleNumber, formattedTime, formattedTime);\r
+ // }\r
+ // else\r
+ // {\r
+ // sprintf(PickerData, "%02d %s +%s", RecordCycleNumber, formattedTime, formattedDiff);\r
+ // }\r
+ // m_listdata->PushFront(const_cast<const char *>(PickerData));\r
+ // m_listadapter->SetData(m_listdata);\r
+ // m_list->SetAdapter(m_listadapter);\r
+ // char PickerData[128]={0};\r
+ // if (lastRecordTime == 0) // 如果是第一次标记\r
+ // {\r
+ // sprintf(PickerData, "%02d %s +%s", RecordCycleNumber, formattedTime, formattedTime);\r
+ // }\r
+ // else\r
+ // {\r
+ // sprintf(PickerData, "%02d %s +%s", RecordCycleNumber, formattedTime, formattedDiff);\r
+ // }\r
+\r
+ StopWatchItem item = {"", "", "", 0};\r
+ char buffer[3] = {0}; // 足够存放两位数字及字符串结束符'\0'\r
+ std::sprintf(buffer, "%02d", RecordCycleNumber);\r
+ item.RecordCycleNumber = buffer;\r
+ item.formattedTime = std::string(formattedTime);;\r
+ item.formattedDiff = "+" + std::string((lastRecordTime == 0) ? formattedTime : formattedDiff); //lastRecordTime == 0,如果是第一次标记\r
+ item.curSelectItemViewIndex = RecordCycleNumber - 1;\r
+ \r
+ view_->GetStopWatchAdapter()->setSelectedIndex(RecordCycleNumber - 1);\r
+ view_->GetStopWatchAdapter()->AddListItem(item);\r
+ m_list->SetAdapter(view_->GetStopWatchAdapter());\r
m_list->SetStartIndex(RecordCycleNumber - 1);\r
m_list->SetSelectPosition(RecordCycleNumber);\r
m_list->RefreshList();\r
StopWatchModel::GetInstance()->StopWatch_StopTimer(); // 停止定时器\r
mainStopWatchView->GetShowTimelabel()->SetText("00:00.00");\r
lastRecordTime = 0;\r
+ view_->GetStopWatchAdapter()->ClearData();\r
+ m_list->SetAdapter(nullptr);\r
+ m_list->RefreshList();\r
\r
m_button->SetViewId(ResetOrMarkButton_RESET1_VIEWID);\r
m_button->SetImageSrc(ResetOrMarkButtonImg_Reset1, ResetOrMarkButtonImg_Reset1);\r
isStartMark = false;\r
}\r
\r
- if (m_listdata != nullptr)\r
- {\r
- // 遍历列表,释放每个元素所占用的内存\r
- ListNode<const char *> *node = m_listdata->Head();\r
- int cnt = 0;\r
- while (node!= m_listdata->End())\r
- {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%d",++cnt);\r
- const char *p = node->data_;\r
- free(const_cast<char *>(p));\r
-\r
- node = m_listdata->Remove(node);\r
- }\r
- m_listdata->Clear();\r
- }\r
- else\r
- {\r
- // Handle error or log the issue\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: m_listdata is nullptr");\r
- }\r
+ // if (m_listdata != nullptr)\r
+ // {\r
+ // // 遍历列表,释放每个元素所占用的内存\r
+ // ListNode<const char *> *node = m_listdata->Head();\r
+ // int cnt = 0;\r
+ // while (node != m_listdata->End())\r
+ // {\r
+ // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%d", ++cnt);\r
+ // const char *p = node->data_;\r
+ // free(const_cast<char *>(p));\r
+\r
+ // node = m_listdata->Remove(node);\r
+ // }\r
+ // m_listdata->Clear();\r
+ // }\r
+ // else\r
+ // {\r
+ // // Handle error or log the issue\r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: m_listdata is nullptr");\r
+ // }\r
RecordCycleNumber = 0;\r
}\r
else if (strcmp(clickedViewId, CycleToLimitReturnButton_VIEWID) == 0) // 点击返回按钮\r
LineImage = nullptr;\r
}\r
\r
+ if (stopWatchAdapter != nullptr)\r
+ {\r
+ delete stopWatchAdapter;\r
+ stopWatchAdapter = nullptr;\r
+ }\r
+\r
if (list != nullptr)\r
{\r
list->ClearFocus();\r
return;\r
}\r
group->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
- UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(MainStopWatchPresenter::GetInstance());\r
- if (draglistener == nullptr)\r
- {\r
- return;\r
- }\r
- group->SetOnDragListener(draglistener);\r
- group->SetTouchable(true);\r
- group->SetDraggable(true);\r
/* ----------------------- scrollView[MAIN_STOPWATCH] ----------------------- */\r
if (scrollView[MAIN_STOPWATCH] == nullptr)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showTimelabel new fail!!");\r
return;\r
}\r
- showTimelabel->SetPosition(0, 160,466, 94);\r
+ showTimelabel->SetPosition(0, 160, 466, 94);\r
showTimelabel->SetStyle(STYLE_TEXT_FONT, 84);\r
showTimelabel->SetStyle(STYLE_LINE_HEIGHT, 94);\r
showTimelabel->SetText("00:00.00");\r
const char *imageimagesPath = "/user/res/stopwatch/STOPWATCH_LINE.bin";\r
LineImage->SetSrc(imageimagesPath);\r
LineImage->SetVisible(false);\r
+ /* ---------------------------- stopWatchAdapter ---------------------------- */\r
+ stopWatchAdapter = new StopWatchAdapter();\r
+ if (stopWatchAdapter == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stopWatchAdapter new fail!!");\r
+ return;\r
+ }\r
/* ---------------------------------- list ---------------------------------- */\r
list = new UIList();\r
if (list == nullptr)\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "list new fail!!");\r
return;\r
}\r
- list->SetPosition(56, 170, 360, 100);\r
+ list->SetPosition(56, 170, 360, 130);\r
list->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
list->SetReboundSize(30);\r
list->SetThrowDrag(true);\r
MainStopWatchPresenter::GetInstance()->SetImage(LineImage);\r
MainStopWatchPresenter::GetInstance()->SetList(list, listadapter, listdata);\r
// Add the CallBack about events\r
- UICheckBox::OnChangeListener *PlayOrPausecheckBoxChangeListener = static_cast<UICheckBox::OnChangeListener *>(MainStopWatchPresenter::GetInstance());\r
- PlayOrPausecheckBox->SetOnChangeListener(PlayOrPausecheckBoxChangeListener);\r
+ PlayOrPausecheckBox->SetOnChangeListener(presenter_);\r
PlayOrPausecheckBox->SetOnClickListener(presenter_);\r
- UIView::OnClickListener *ResetOrMarkbuttonClick = static_cast<UIView::OnClickListener *>(MainStopWatchPresenter::GetInstance());\r
- ResetOrMarkbutton->SetOnClickListener(ResetOrMarkbuttonClick);\r
+ ResetOrMarkbutton->SetOnClickListener(presenter_);\r
}\r
}\r
\r
return scrollView[index];\r
}\r
\r
+ StopWatchAdapter *MainStopWatchView::GetStopWatchAdapter(void)\r
+ {\r
+ return stopWatchAdapter;\r
+ }\r
+\r
void MainStopWatchView::OnStart()\r
{\r
View<MainStopWatchPresenter>::OnStart();\r
+ SetContainerView(new UIViewGroup());\r
+ if (GetContainer() == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetContainerView fail!!");\r
+ return;\r
+ }\r
+ container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
InitMainStopWatchView();\r
// 增加按键监听\r
- RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MainStopWatchPresenter::GetInstance();\r
- RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r
+ RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
}\r
\r
void MainStopWatchView::OnSetUpView()\r
scrollView[MAIN_STOPWATCH]->Add(PlayOrPausecheckBox);\r
scrollView[MAIN_STOPWATCH]->Add(ResetOrMarkbutton);\r
group->Add(scrollView[MAIN_STOPWATCH]);\r
- RootView::GetInstance()->Add(group);\r
- container_ = group;\r
+ container_->Add(group);\r
Draw();\r
}\r
\r
\r
View<MainStopWatchPresenter>::OnStop();\r
RootView::GetInstance()->ClearOnKeyActListener();\r
- RootView::GetInstance()->RemoveAll();\r
+ if (container_ != nullptr)\r
+ {\r
+ container_->RemoveAll();\r
+ delete container_;\r
+ container_ = nullptr;\r
+ }\r
return;\r
}\r
}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-12-12 11:07:26
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-12-16 11:43:35
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/stopwatch/src/StopWatchAdapter.cpp
+ */
+#include "stopwatch/include/StopWatchAdapter.h"
+#include "stopwatch/include/StopWatchItemView.h"
+#include "wearable_log.h"
+namespace OHOS
+{
+ StopWatchAdapter::StopWatchAdapter() {}
+ StopWatchAdapter::~StopWatchAdapter()
+ {
+ listData.clear();
+ }
+ uint16_t StopWatchAdapter::GetCount(void)
+ {
+ return listData.size();
+ }
+
+ void StopWatchAdapter::ClearData(void)
+ {
+ listData.clear();
+ curSelectItemViewIndex = -1;
+ }
+
+ void StopWatchAdapter::setSelectedIndex(int index)
+ {
+ curSelectItemViewIndex = index;
+ }
+
+ UIView *StopWatchAdapter::GetView(UIView *inView, int16_t index)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetView:%d", index);
+ if (listData.empty())
+ {
+ return nullptr;
+ }
+ if (index < 0)
+ {
+ return nullptr;
+ }
+ size_t uindex = index;
+ if (uindex >= listData.size())
+ {
+ return nullptr;
+ }
+
+ std::list<const StopWatchItem>::iterator it = listData.begin();
+ for (int i = 0; i < index; i++)
+ {
+ it++;
+ }
+ const StopWatchItem itemData = *it;
+ StopWatchItemView *item = nullptr;
+ if (inView == nullptr)
+ {
+ item = new StopWatchItemView();
+ }
+ else
+ {
+ item = static_cast<StopWatchItemView *>(inView);
+ }
+ item->SetViewIndex(index);
+ item->SetItemInfo(itemData);
+ if(curSelectItemViewIndex == itemData.curSelectItemViewIndex)
+ {
+ item->SetItemViewColor(true);
+ }
+ else
+ {
+ item->SetItemViewColor(false);
+ }
+ return item;
+ }
+
+ void StopWatchAdapter::AddListItem(const StopWatchItem &item)
+ {
+ listData.push_front(item);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-12-12 14:40:44
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-12-16 11:40:34
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/stopwatch/src/StopWatchItemView.cpp
+ */
+#include "stopwatch/include/StopWatchItemView.h"
+#include "wearable_log.h"
+namespace OHOS
+{
+ StopWatchItemView::StopWatchItemView()
+ {
+ SetPosition(0, 0, 360, 42);
+ SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+ SetStyle(STYLE_BACKGROUND_OPA, 255);
+ SetUpChild();
+ Add(&RecordCycleNumber);
+ Add(&formattedTime);
+ Add(&formattedDiff);
+ }
+
+ StopWatchItemView::~StopWatchItemView()
+ {
+ RemoveAll();
+ }
+
+ void StopWatchItemView::SetItemInfo(const StopWatchItem itemInfo)
+ {
+ RecordCycleNumber.SetText(itemInfo.RecordCycleNumber.c_str());
+ formattedTime.SetText(itemInfo.formattedTime.c_str());
+ formattedDiff.SetText(itemInfo.formattedDiff.c_str());
+ }
+
+ void StopWatchItemView::SetUpChild()
+ {
+ RecordCycleNumber.SetPosition(0, 0, 80, 32);
+ RecordCycleNumber.SetStyle(STYLE_TEXT_FONT, 28);
+ RecordCycleNumber.SetStyle(STYLE_LINE_HEIGHT, 32);
+ RecordCycleNumber.SetLineBreakMode(UILabel::LINE_BREAK_CLIP);
+ RecordCycleNumber.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+ RecordCycleNumber.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28);
+
+ formattedTime.SetPosition(80, 0, 120, 32);
+ formattedTime.SetStyle(STYLE_TEXT_FONT, 28);
+ formattedTime.SetStyle(STYLE_LINE_HEIGHT, 32);
+ formattedTime.SetLineBreakMode(UILabel::LINE_BREAK_CLIP);
+ formattedTime.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+ formattedTime.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28);
+
+ formattedDiff.SetPosition(230, 0, 130, 32);
+ formattedDiff.SetStyle(STYLE_TEXT_FONT, 28);
+ formattedDiff.SetStyle(STYLE_LINE_HEIGHT, 32);
+ formattedDiff.SetLineBreakMode(UILabel::LINE_BREAK_CLIP);
+ formattedDiff.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+ formattedDiff.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28);
+ }
+
+ void StopWatchItemView::SetItemViewColor(bool flag)
+ {
+ if (flag)
+ {
+ RecordCycleNumber.SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff));
+ formattedTime.SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff));
+ formattedDiff.SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff));
+ }
+ else
+ {
+ RecordCycleNumber.SetTextColor(Color::GetColorFromRGBA(0xaa, 0xaa, 0xaa, 0xff));
+ formattedTime.SetTextColor(Color::GetColorFromRGBA(0xaa, 0xaa, 0xaa, 0xff));
+ formattedDiff.SetTextColor(Color::GetColorFromRGBA(0xaa, 0xaa, 0xaa, 0xff));
+ }
+ }
+}
\ No newline at end of file