From e93ef9ec3f823899cab4cb379bda42f39f561544 Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Mon, 30 Sep 2024 15:09:45 +0800 Subject: [PATCH] =?utf8?q?=E8=AE=A1=E7=AE=97=E5=99=A8=E4=BF=AE=E6=94=B9=20?= =?utf8?q?#771?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../calculator/include/CalculatorView.h | 8 + .../calculator/src/CalculatorView.cpp | 171 ++++++++++++++---- 2 files changed, 146 insertions(+), 33 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/calculator/include/CalculatorView.h b/code/sdk/application/wearable/fd230app/nativeui/calculator/include/CalculatorView.h index 99e983ff0..3d2757869 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/calculator/include/CalculatorView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/calculator/include/CalculatorView.h @@ -45,9 +45,14 @@ public: void symbol_text_updata_calculate_buf(const char *buf); void start_call_roll_timer(); + void start_call_roll_timer_move(); + void show_hint_label(bool data); + + void show_long_label(); osTimerId_t call_roll_timer=NULL; + osTimerId_t call_roll_timer_move=NULL; private: uint8_t number_falg=0; @@ -60,6 +65,9 @@ private: UIViewGroup *group{nullptr}; UILabel *number{nullptr}; UILabelExt *hint{nullptr}; + + std::string number_string=""; + UIView::OnClickListener* clickLeftListener{nullptr}; UIView:: OnDragListener* dragListener{nullptr}; diff --git a/code/sdk/application/wearable/fd230app/nativeui/calculator/src/CalculatorView.cpp b/code/sdk/application/wearable/fd230app/nativeui/calculator/src/CalculatorView.cpp index 65f46bacd..53eba1b0b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/calculator/src/CalculatorView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/calculator/src/CalculatorView.cpp @@ -60,11 +60,20 @@ CalculatorView::~CalculatorView() osTimerStop(call_roll_timer); osTimerDelete(call_roll_timer); call_roll_timer = NULL; - } + + if(call_roll_timer_move) + { + osTimerStop(call_roll_timer_move); + osTimerDelete(call_roll_timer_move); + call_roll_timer_move = NULL; + } + } static int8_t roll_falg=0;//0.1s一次变换 +static int8_t roll_falg_2=0;//0.1s一次变换 + static void label_Timer_CallBack(int data) { roll_falg--; @@ -82,6 +91,25 @@ static int8_t roll_falg=0;//0.1s一次变换 } } +static void label_Timer_CallBack_move(int data) +{ + roll_falg_2--; + if(roll_falg_2<=0) + { + if(CalculatorView::GetInstance()) + CalculatorView::GetInstance()->show_long_label(); + + if(g_pMainView->call_roll_timer_move) + { + osTimerStop(g_pMainView->call_roll_timer_move); + osTimerDelete(g_pMainView->call_roll_timer_move); + g_pMainView->call_roll_timer_move = NULL; + } + } +} + + + CalculatorView *CalculatorView::GetInstance() { return g_pMainView; @@ -94,56 +122,109 @@ void CalculatorView::show_hint_label(bool data) RootView::GetInstance()->Invalidate(); } +void CalculatorView::show_long_label(void) +{ + number->SetText(number_string.c_str()); + + RootView::GetInstance()->Invalidate(); +} + void CalculatorView::start_call_roll_timer() +{ + uint32_t tick; + osStatus_t retTimer; + if(call_roll_timer) { - uint32_t tick; - osStatus_t retTimer; - if(call_roll_timer) - { - roll_falg=10; + roll_falg=10; + } + else + { + roll_falg=10; + + call_roll_timer = osTimerNew((osTimerFunc_t)label_Timer_CallBack, osTimerPeriodic, NULL, NULL); + tick =100;// osMs2Tick(1000); + retTimer = osTimerStart(call_roll_timer, tick); + if (retTimer != osOK && call_roll_timer != NULL) { + osTimerDelete(call_roll_timer); + call_roll_timer = NULL; + return ; } - else - { - roll_falg=10; - - call_roll_timer = osTimerNew((osTimerFunc_t)label_Timer_CallBack, osTimerPeriodic, NULL, NULL); - tick =100;// osMs2Tick(1000); - retTimer = osTimerStart(call_roll_timer, tick); - if (retTimer != osOK && call_roll_timer != NULL) { - osTimerDelete(call_roll_timer); - call_roll_timer = NULL; - return ; - } + } +} + + +void CalculatorView::start_call_roll_timer_move() +{ + uint32_t tick; + osStatus_t retTimer; + if(call_roll_timer_move) + { + roll_falg_2=10; + } + else + { + roll_falg_2=10; + + call_roll_timer_move = osTimerNew((osTimerFunc_t)label_Timer_CallBack, osTimerPeriodic, NULL, NULL); + tick =100;// osMs2Tick(1000); + retTimer = osTimerStart(call_roll_timer_move, tick); + if (retTimer != osOK && call_roll_timer_move != NULL) { + osTimerDelete(call_roll_timer_move); + call_roll_timer_move = NULL; + return ; } } +} + void CalculatorView::number_text_updata_buf(const char *buf) { char new_buf[64]={0}; const char*text_buf=NULL; - if(number_falg==1) - text_buf=number->GetText(); - else - text_buf=""; - if(strlen(text_buf)>20) + + if(number_falg!=1) + number_string=""; + + + if(number_string.length()>20) { //超出长度限制 start_call_roll_timer(); show_hint_label(true); return; } - sprintf_s(new_buf,64,"%s%s",text_buf,buf); - number->SetText(new_buf); + + number_string=number_string+buf; + + if(number_string.length()>12) + { + number->SetText(number_string.c_str()+number_string.length()-12); + number_falg=1; + RootView::GetInstance()->Invalidate(); + return; + } + + number->SetText(number_string.c_str()); + number_falg=1; + RootView::GetInstance()->Invalidate(); return; } void CalculatorView::symbol_text_updata_buf(const char *buf) { + + if(g_pMainView->call_roll_timer_move) + { + osTimerStop(g_pMainView->call_roll_timer_move); + osTimerDelete(g_pMainView->call_roll_timer_move); + g_pMainView->call_roll_timer_move = NULL; + } + char new_buf[64]={0}; - const char*text_buf=number->GetText(); + const char*text_buf=number_string.c_str(); if(number_falg==0) { if(strcmp(buf,"÷")==0) @@ -151,7 +232,9 @@ void CalculatorView::symbol_text_updata_buf(const char *buf) else CalculatorModel::GetInstance()->symbol_stack_top_uddata(buf[0]); + number_string=new_buf; number->SetText(buf); + RootView::GetInstance()->Invalidate(); return; } @@ -164,13 +247,15 @@ void CalculatorView::symbol_text_updata_buf(const char *buf) { number_float =CalculatorModel::GetInstance()->calculate_stack(); CalculatorModel::GetInstance()->number_push_stack(number_float); - RootView::GetInstance()->Invalidate(); } sprintf_s(new_buf,64,"%s",buf); + + number_string=new_buf; number->SetText(new_buf); + RootView::GetInstance()->Invalidate(); if(strcmp(buf,"÷")==0) @@ -185,14 +270,23 @@ void CalculatorView::symbol_text_updata_buf(const char *buf) void CalculatorView::symbol_text_updata_single_buf(const char *buf) { - char new_buf[16]={0}; - const char*text_buf=number->GetText(); + if(g_pMainView->call_roll_timer_move) + { + osTimerStop(g_pMainView->call_roll_timer_move); + osTimerDelete(g_pMainView->call_roll_timer_move); + g_pMainView->call_roll_timer_move = NULL; + } + + char new_buf[64]={0}; + + const char*text_buf=number_string.c_str(); double number_float=strtod(text_buf,NULL); if(buf[0]=='C') { CalculatorModel::GetInstance()->clean_stack(); number->SetText(""); + number_string=""; RootView::GetInstance()->Invalidate(); } else if (buf[0]=='%') @@ -239,6 +333,7 @@ void CalculatorView::symbol_text_updata_single_buf(const char *buf) sprintf_s(new_buf,64,"%.09lf",number_float); break; } + number_string=new_buf; number->SetText(new_buf); RootView::GetInstance()->Invalidate(); } @@ -246,6 +341,8 @@ void CalculatorView::symbol_text_updata_single_buf(const char *buf) { number_float=0; sprintf_s(new_buf,16,"%.00lf",number_float); + + number_string=new_buf; number->SetText(new_buf); number_falg=2; RootView::GetInstance()->Invalidate(); @@ -256,8 +353,15 @@ void CalculatorView::symbol_text_updata_single_buf(const char *buf) void CalculatorView::symbol_text_updata_calculate_buf(const char *buf) { + if(g_pMainView->call_roll_timer_move) + { + osTimerStop(g_pMainView->call_roll_timer_move); + osTimerDelete(g_pMainView->call_roll_timer_move); + g_pMainView->call_roll_timer_move = NULL; + } + char new_buf[64]={0}; - const char*text_buf=number->GetText(); + const char*text_buf=number_string.c_str(); double number_float=strtod(text_buf,NULL); @@ -309,7 +413,8 @@ void CalculatorView::symbol_text_updata_calculate_buf(const char *buf) // CalculatorModel::GetInstance()->number_push_stack(number_float); number_falg=2; - + number_string=new_buf; + number->SetText(new_buf); RootView::GetInstance()->Invalidate(); @@ -390,8 +495,8 @@ bool CalculatorView::Label_init() { return false; } - number->SetPosition(61, 73); // widget's left position and top position - number->Resize(300, 60); // widget's width and height + number->SetPosition(65, 73); // widget's left position and top position + number->Resize(310, 60); // widget's width and height number->SetViewId("label5");// Set style number->SetStyle(STYLE_TEXT_FONT, 50); -- 2.17.1