📄 calculator.c
字号:
SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
}
/*****************************************************************************
* FUNCTION
* CalcInit
* DESCRIPTION
* Initialize highlight handler and global vairables.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcInit(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
SetHiliteHandler(EXTRA_CALCULATOR_MENU, HighlightCalcMenu);
}
/*****************************************************************************
* FUNCTION
* CalcDeInit
* DESCRIPTION
* Free dynamic memory.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcDeInit(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_calc_cntx)
{
OslMfree(g_calc_cntx);
g_calc_cntx = NULL;
}
}
/*****************************************************************************
* FUNCTION
* mmi_calc_del_scr_callback
* DESCRIPTION
* Callback function of delete calculator screen
* PARAMETERS
* p [?]
* RETURNS
* void
*****************************************************************************/
U8 mmi_calc_del_scr_callback(void *p)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
CalcDeInit();
return MMI_FALSE;
}
/*****************************************************************************
* FUNCTION
* CalcFreeMemAndBack
* DESCRIPTION
* Free memory and exit calculator application.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcFreeMemAndBack(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_calc_cntx->IsRSKPress)
{
g_calc_cntx->IsRSKPress = FALSE;
SetRightSoftkeyFunction(NULL, KEY_EVENT_LONG_PRESS);
}
else
{
/* CalcDeInit(); */
GoBackHistory();
}
}
/*****************************************************************************
* FUNCTION
* CalcSetRSKClear
* DESCRIPTION
* Change RSK to "Clear"
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcSetRSKClear(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
ChangeRightSoftkey(STR_GLOBAL_CLEAR, IMG_GLOBAL_CLEAR);
SetRightSoftkeyFunction(CalcHandleRSKLongPress, KEY_LONG_PRESS);
SetRightSoftkeyFunction(CalcHandleClearKey, KEY_EVENT_UP);
}
/*****************************************************************************
* FUNCTION
* CalcSetRSKBack
* DESCRIPTION
* Change RSK to "Back"
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcSetRSKBack(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
ChangeRightSoftkey(STR_GLOBAL_BACK, IMG_GLOBAL_OK);
SetRightSoftkeyFunction(CalcFreeMemAndBack, KEY_EVENT_UP);
}
/*****************************************************************************
* FUNCTION
* CalcResetResultValue
* DESCRIPTION
* Reset memory related variables
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcResetResultValue(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
g_calc_cntx->CurrHilite = CALC_OP_EQUAL;
g_calc_cntx->Operator = CALC_OP_NONE;
g_calc_cntx->Operand1 = 0;
g_calc_cntx->Operand2Buf[0] = CALC_SYM_NULL;
g_calc_cntx->Operand1Buf[0] = CALC_SYM_NULL;
memset(g_calc_cntx->Operand2Buf, 0, sizeof(g_calc_cntx->Operand2Buf));
memset(g_calc_cntx->Operand1Buf, 0, sizeof(g_calc_cntx->Operand1Buf));
g_calc_cntx->Operand2Len = 1;
g_calc_cntx->Operand1Len = 1;
g_calc_cntx->OpToExecute = CALC_OP_NONE;
g_calc_cntx->RSKState = CALC_RSK_BACK;
g_calc_cntx->ExecFlag = FALSE;
g_calc_cntx->ResultState = RESULT_NOT_EXCEED;
}
/*****************************************************************************
* FUNCTION
* CalcResetMemValue
* DESCRIPTION
* Reset memory related variables
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
#ifndef __MMI_SLIM_CALCULATOR__
void CalcResetMemValue(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
g_calc_cntx->ResultState = RESULT_NOT_EXCEED;
g_calc_cntx->MemValue = 0;
}
#endif /* __MMI_SLIM_CALCULATOR__ */
/*****************************************************************************
* FUNCTION
* CalcResetContext
* DESCRIPTION
* Reset all values to default.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcResetContext()
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
CalcResetResultValue();
#ifndef __MMI_SLIM_CALCULATOR__
CalcResetMemValue();
#endif
}
#define CALC_DRAW_FUNC
/*****************************************************************************
* FUNCTION
* CalcShowKeypad
* DESCRIPTION
* Draw keypad of calculator.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcShowKeypad(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
gui_reset_clip();
gui_show_image(CALC_KEYPAD_X, CALC_KEYPAD_Y, (PU8) GetImage(IMG_ID_CALC_MAIN));
gui_show_transparent_image(
CALC_KEYPAD_X + g_calc_cntx->OperatorImg[g_calc_cntx->CurrHilite].x,
CALC_KEYPAD_Y + g_calc_cntx->OperatorImg[g_calc_cntx->CurrHilite].y,
(PU8) g_calc_cntx->OperatorImg[g_calc_cntx->CurrHilite].image,
0);
#if(UI_DOUBLE_BUFFER_SUPPORT)
gui_BLT_double_buffer(CALC_KEYPAD_X, CALC_KEYPAD_Y, UI_device_width - 1, UI_device_height - 1);
#endif
}
/*****************************************************************************
* FUNCTION
* CalcShowResultScreen
* DESCRIPTION
* Draw result screen area.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void CalcShowResultScreen()
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
UI_character_type op = CALC_SYM_ERROR;
S32 w;
S8 uni_s[64];
S32 temp_int;
DOUBLE temp_res = 0;
S8 ansii_str[CALC_MAX_BUFF_LEN];
#ifndef __MMI_SLIM_CALCULATOR__
S8 uni_memory[64];
#endif
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#if(UI_DOUBLE_BUFFER_SUPPORT)
gui_lock_double_buffer();
#endif
#if defined (__MMI_MAINLCD_128X128__) || defined (__MMI_MAINLCD_128X160__)
gui_set_font(&MMI_medium_font);
#else
gui_set_font(&MMI_large_font);
#endif
#if defined(__MMI_TOUCH_CALCULATOR__)
gui_set_text_color(gCalcTextColor);
gui_reset_clip();
gui_reset_text_clip();
gui_fill_rectangle(
calculator_keypad.result_area_x,
calculator_keypad.result_area_y,
calculator_keypad.result_area_x + CALC_TOUCH_RESULT_AREA_WIDTH - 1,
calculator_keypad.result_area_y + CALC_TOUCH_RESULT_AREA_HEIGHT - 1,
gTouchCalcResultScrColor);
#else /* defined(__MMI_TOUCH_CALCULATOR__) */
gui_set_text_color(gCalcTextColor);
/* screen background */
gui_reset_clip();
gui_reset_text_clip();
gui_fill_rectangle(
CALC_SCR_X,
CALC_SCR_Y,
CALC_SCR_X + CALC_SCR_WIDTH - 1,
CALC_SCR_Y + CALC_SCR_HEIGHT - 1,
gCalcResultScrColor);
gui_draw_rectangle(
CALC_SCR_X,
CALC_SCR_Y,
CALC_SCR_X + CALC_SCR_WIDTH - 1,
CALC_SCR_Y + CALC_SCR_HEIGHT - 1,
gCalcResultBorderColor);
gui_draw_rectangle(
CALC_SCR_X + 1,
CALC_SCR_Y + 1,
CALC_SCR_X + CALC_SCR_WIDTH - 2,
CALC_SCR_Y + CALC_SCR_HEIGHT - 2,
gCalcResultBorderColor);
#endif /* defined(__MMI_TOUCH_CALCULATOR__) */ /* end of __MMI_TOUCH_CALCULATOR__ */
#if !defined(__MMI_TOUCH_CALCULATOR__) && !defined(__MMI_SLIM_CALCULATOR__) /* 050905 Sophie modified */
/* memory filed */
if (r2lMMIFlag)
{
w = gui_get_character_width((UI_character_type) '[');
gui_move_text_cursor(CALC_MEM_X1 + w, CALC_MEM_Y1);
}
else
{
gui_move_text_cursor(CALC_MEM_X1, CALC_MEM_Y1);
}
gui_print_character((UI_character_type) '[');
if (r2lMMIFlag)
{
w = gui_get_character_width((UI_character_type) ']');
gui_move_text_cursor(CALC_MEM_X2 - 6 + w, CALC_MEM_Y1);
}
else
{
gui_move_text_cursor(CALC_MEM_X2 - 6, CALC_MEM_Y1);
}
gui_print_character((UI_character_type) ']');
#endif /* !defined(__MMI_TOUCH_CALCULATOR__) && !defined(__MMI_SLIM_CALCULATOR__) */
if (g_calc_cntx->ResultState == RESULT_EXCEED)
{
op = CALC_SYM_ERROR;
w = gui_get_character_width(CALC_SYM_ZERO);
#if defined(__MMI_TOUCH_CALCULATOR__)
if (r2lMMIFlag)
{
gui_move_text_cursor(
calculator_keypad.result_area_x + CALC_TOUCH_RESULT_AREA_WIDTH - 4,
calculator_keypad.operand2_y);
}
else
{
gui_move_text_cursor(
calculator_keypad.result_area_x + CALC_TOUCH_RESULT_AREA_WIDTH - w - 4,
calculator_keypad.operand2_y);
}
#else /* defined(__MMI_TOUCH_CALCULATOR__) */
if (r2lMMIFlag)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -