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

📄 currencyconvertore.c

📁 mtk工具箱,计算器的详细设计,可以由此入手了解mtk的
💻 C
📖 第 1 页 / 共 5 页
字号:

/*****************************************************************************
 * FUNCTION
 *  mmi_cconv_rate_select_list
 * DESCRIPTION
 *  create rate selection list for rate setting
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_cconv_rate_select_list(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S8 listCount[CCONV_MAX_RATEENTRIES];
    S8 strTemp[] = { ' ', '\0', '\0', '\0' };
    S32 precision;
    S8 i, j;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* Exchange rate Input Setting */
    for (i = 0; i < CCONV_MAX_RATEENTRIES; i++)
    {
        if (i == 0)
        {
            for (j = 0, listCount[i] = 0; j < CCONV_MAX_CURRENCY; j++)
            {
                if (curName[j] == curName[g_cconv_ctx->selectedLocalCurID])
                {
                    continue;
                }
                g_cconv_ctx->curList[0][listCount[0]++] = curName[j];
            }
        }
        else
        {
            for (j = 0, listCount[i] = 0; j < listCount[i - 1]; j++)
            {
                if (g_cconv_ctx->curList[i - 1][j] == curName[g_cconv_ctx->curID[i - 1]])
                {
                    continue;
                }
                g_cconv_ctx->curList[i][listCount[i]++] = g_cconv_ctx->curList[i - 1][j];
            }
        }

        g_cconv_ctx->curIndex[i] = mmi_cconv_get_cur_index(g_cconv_ctx->curID[i], g_cconv_ctx->curList[i], listCount[i]);
        g_cconv_ctx->curID[i] = mmi_cconv_get_cur_id(g_cconv_ctx->curIndex[i], g_cconv_ctx->curList[i]);

        SetInlineItemActivation(&wgui_inline_items[ITEM_BASE + i * 2], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
        SetInlineItemSelect(
            &wgui_inline_items[ITEM_BASE + i * 2],
            listCount[i],
            (U8 **) g_cconv_ctx->curList[i],
            &g_cconv_ctx->curIndex[i]);
        RegisterInlineSelectHighlightHandler(
            &wgui_inline_items[ITEM_BASE + i * 2],
            mmi_cconv_rate_inline_select_highlight_hdlr);

        memset(g_cconv_ctx->strRate[i], 0, CCONV_SEL_BUF_LEN);
        if (g_cconv_ctx->rate[i] > 0)
        {
            precision = CalcComputePrecision(g_cconv_ctx->rate[i], CCONV_MAX_RESULT);
            gui_float_string(g_cconv_ctx->rate[i], precision, (S8*) g_cconv_ctx->strRate[i]);
        }
        if (g_cconv_ctx->selectedLocalCurID < CCONV_NAMED_CURRENCY)
        {
            UCS2Strcat((S8*) g_cconv_ctx->strRate[i], (S8*) strTemp);   /* concatenate white space */
            UCS2Strcat((S8*) g_cconv_ctx->strRate[i], (S8*) curShortName[g_cconv_ctx->selectedLocalCurID]);
        }
        SetInlineItemActivation(&wgui_inline_items[ITEM_BASE + i * 2 + 1], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
        SetInlineItemTextEdit(
            &wgui_inline_items[ITEM_BASE + i * 2 + 1],
            (U8*) g_cconv_ctx->strRate[i],
            (CCONV_MAX_RATE + 1),
            INPUT_TYPE_DECIMAL_NUMERIC);
        SetInlineTextEditCustomFunction(
            &wgui_inline_items[ITEM_BASE + i * 2 + 1],
            mmi_cconv_rate_inline_edit_highlight_hdlr);
        RegisterInlineFullScreenEditValidationFunction(
            &wgui_inline_items[ITEM_BASE + i * 2 + 1],
            mmi_cconv_rate_inline_edit_validation_hdlr);
        EnableInlineItemBoundary(&wgui_inline_items[ITEM_BASE + i * 2 + 1]);
        RightJustifyInlineItem(&wgui_inline_items[ITEM_BASE + i * 2 + 1]);
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_cconv_rate_layout_inline_items
 * DESCRIPTION
 *  Layout inline items in rate screen
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_cconv_rate_layout_inline_items(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    set_leading_zero(FALSE);
    DisableInlineInputMethodHints();

    /* Local Currency Selection */
    SetInlineItemActivation(&wgui_inline_items[CCONV_RATE_INLINE_LOCAL_CAP], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
    SetInlineItemCaption(&wgui_inline_items[CCONV_RATE_INLINE_LOCAL_CAP], (U8*) GetString(STR_CURRENCYCONV_LOCAL));

    SetInlineItemActivation(
        &wgui_inline_items[CCONV_RATE_INLINE_LOCAL_SELECT],
        INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT,
        0);
    SetInlineItemSelect(
        &wgui_inline_items[CCONV_RATE_INLINE_LOCAL_SELECT],
        CCONV_MAX_CURRENCY,
        (U8 **) curName,
        &g_cconv_ctx->selectedLocalCurID);
    RegisterInlineSelectHighlightHandler(
        &wgui_inline_items[CCONV_RATE_INLINE_LOCAL_SELECT],
        mmi_cconv_rate_local_select_hdlr);

    SetInlineItemActivation(&wgui_inline_items[CCONV_RATE_INLINE_FORE_CAP], INLINE_ITEM_ACTIVATE_WITHOUT_KEY_EVENT, 0);
    SetInlineItemCaption(&wgui_inline_items[CCONV_RATE_INLINE_FORE_CAP], (U8*) GetString(STR_CURRENCYCONV_FOREIGN));

    mmi_cconv_rate_select_list();

    g_cconv_ctx->prevSelectedLocalCurID = g_cconv_ctx->selectedLocalCurID;
}


/*****************************************************************************
 * FUNCTION
 *  mmi_cconv_entry_rate
 * DESCRIPTION
 *  Entry Function of Compute cur exchange
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_cconv_entry_rate(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U8 *guiBuffer;
    U8 *inputBuffer;        /* added for inline edit history */
    U16 inputBufferSize;    /* added for inline edit history */

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    EntryNewScreen(SCR_ID_CCONV_RATE_INPUT, mmi_cconv_exit_rate, NULL, NULL);

    guiBuffer = GetCurrGuiBuffer(SCR_ID_CCONV_RATE_INPUT);

    InitializeCategory57Screen();

    inputBuffer = GetCurrNInputBuffer(SCR_ID_CCONV_RATE_INPUT, &inputBufferSize);       /* added for inline edit history */

    if (inputBuffer && g_cconv_ctx->isRedrawScreen == FALSE)
    {
        SetCategory57Data(wgui_inline_items, CCONV_RATE_INLINE_TOTAL, inputBuffer);     /* sets the data */
    }
    else
    {
        g_cconv_ctx->isRedrawScreen = FALSE;
    }

    mmi_cconv_rate_layout_inline_items();
    RegisterHighlightHandler(mmi_cconv_rate_item_highlight_hdlr);

    ShowCategory57Screen(
        STR_CURRENCYCONV_RATEINPUT,
        GetRootTitleIcon(EXTRA_CURRENCYCONVERTOR_MENU),
        STR_GLOBAL_OK,
        IMG_GLOBAL_OK,
        STR_GLOBAL_BACK,
        IMG_GLOBAL_BACK,
        CCONV_RATE_INLINE_TOTAL,
        NULL,
        wgui_inline_items,
        g_cconv_ctx->hiliteItemIndex,
        guiBuffer);

    DisableCategory57ScreenDone();
    SetLeftSoftkeyFunction(mmi_cconv_rate_save_change, KEY_EVENT_UP);
    SetCategory57RightSoftkeyFunctions(mmi_cconv_rate_save_change, GoBackHistory);

    SetHighlightedItem(g_cconv_ctx->hiliteItemIndex);
}


/*****************************************************************************
 * FUNCTION
 *  mmi_cconv_exit_rate
 * DESCRIPTION
 *  Entry Function of Compute cur exchange
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_cconv_exit_rate(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U16 inputBufferSize;    /* added for inline edit history */
    history HistoryCCComputeCurrency;
    S16 nHistory = 0;
    S8 i;
    S8 strTemp[CCONV_SEL_BUF_LEN];
    S8 length;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    set_leading_zero(TRUE);
    if (g_cconv_ctx)
    {
        CloseCategory57Screen();
        if (!g_cconv_ctx->isRedrawScreen)
        {
            for (i = 0; i < CCONV_MAX_RATEENTRIES; i++)
            {
                /* Extract rate value from strings */
                if (g_cconv_ctx->selectedLocalCurID < CCONV_NAMED_CURRENCY)
                {
                    length = gui_strlen((UI_string_type) g_cconv_ctx->strRate[i]) -
                        gui_strlen((UI_string_type) curShortName[g_cconv_ctx->selectedLocalCurID]) - 1;

                    if (length < 1)
                    {
                        g_cconv_ctx->rate[i] = -1;
                    }
                    else
                    {
                        UCS2Strncpy(strTemp, (S8*) g_cconv_ctx->strRate[i], length);
                        g_cconv_ctx->rate[i] = gui_atof((U16*) strTemp);
                    }
                }
                else
                {
                    if (gui_strlen((UI_string_type) g_cconv_ctx->strRate[i]) < 1)
                    {
                        g_cconv_ctx->rate[i] = -1;
                    }
                    else
                    {
                        g_cconv_ctx->rate[i] = gui_atof((U16*) g_cconv_ctx->strRate[i]);
                    }
                }
                // Remap currency selections into IDs.
                //g_cconv_ctx->curID[i] = mmi_cconv_get_cur_id(g_cconv_ctx->curIndex[i], g_cconv_ctx->curList[i]);
            }
        }
        g_cconv_ctx->reloadFromNVRAM = TRUE;
    }

    HistoryCCComputeCurrency.scrnID = SCR_ID_CCONV_RATE_INPUT;
    HistoryCCComputeCurrency.entryFuncPtr = mmi_cconv_entry_rate;
    GetCategory57History(HistoryCCComputeCurrency.guiBuffer);
    UCS2Strcpy((S8*) HistoryCCComputeCurrency.inputBuffer, (S8*) & nHistory);
    inputBufferSize = (U16) GetCategory57DataSize();        /* added for inline edit history */
    GetCategory57Data((U8*) HistoryCCComputeCurrency.inputBuffer);     /* added for inline edit history */
    AddNHistory(HistoryCCComputeCurrency, inputBufferSize); /* added for inline edit history */
}


/*****************************************************************************
 * FUNCTION
 *  mmi_cconv_rate_save_change
 * DESCRIPTION
 *  Save rate setting changes into NVRAM.
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_cconv_rate_save_change(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S8 strTemp[CCONV_SEL_BUF_LEN];
    S8 length;
    S16 error;
    S8 i;
    U8 rateflag = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    CloseCategory57Screen();

    for (i = 0; i < CCONV_MAX_RATEENTRIES; i++)
    {
        /* Extract rate value from strings */
        if (g_cconv_ctx->selectedLocalCurID < CCONV_NAMED_CURRENCY)
        {
            length = gui_strlen((UI_string_type) g_cconv_ctx->strRate[i]) -
                gui_strlen((UI_string_type) curShortName[g_cconv_ctx->selectedLocalCurID]) - 1;

            if (length < 1)
            {
                g_cconv_ctx->rate[i] = -1;
            }
            else
            {
                UCS2Strncpy(strTemp, (S8*) g_cconv_ctx->strRate[i], length);
                g_cconv_ctx->rate[i] = gui_atof((U16*) strTemp);
                rateflag = 1;
            }
        }
        else
        {
            if (gui_strlen((UI_string_type) g_cconv_ctx->strRate[i]) < 1)
            {
                g_cconv_ctx->rate[i] = -1;
            }
            else
            {
                g_cconv_ctx->rate[i] = gui_atof((U16*) g_cconv_ctx->strRate[i]);
                rateflag = 1;
            }
        }
        if (!g_cconv_ctx->bRateDefined && g_cconv_ctx->rate[i] > 0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -