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--;
}
}
+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;
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)
else
CalculatorModel::GetInstance()->symbol_stack_top_uddata(buf[0]);
+ number_string=new_buf;
number->SetText(buf);
+
RootView::GetInstance()->Invalidate();
return;
}
{
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)
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]=='%')
sprintf_s(new_buf,64,"%.09lf",number_float);
break;
}
+ number_string=new_buf;
number->SetText(new_buf);
RootView::GetInstance()->Invalidate();
}
{
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();
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);
// CalculatorModel::GetInstance()->number_push_stack(number_float);
number_falg=2;
-
+ number_string=new_buf;
+
number->SetText(new_buf);
RootView::GetInstance()->Invalidate();
{
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);