计算器修改 #771 1069/1 1069/head
authorhcj <1224667075@qq.com>
Mon, 30 Sep 2024 07:09:45 +0000 (15:09 +0800)
committerhcj <1224667075@qq.com>
Mon, 30 Sep 2024 07:09:45 +0000 (15:09 +0800)
code/sdk/application/wearable/fd230app/nativeui/calculator/include/CalculatorView.h
code/sdk/application/wearable/fd230app/nativeui/calculator/src/CalculatorView.cpp

index 99e983f..3d27578 100644 (file)
@@ -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};
 
index 65f46ba..53eba1b 100644 (file)
@@ -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);