📄 currencyconvertore.c
字号:
/*****************************************************************************
* 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 + -