⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.c

📁 mtk工具箱,计算器的详细设计,可以由此入手了解mtk的
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -