📄 sublcdhistory.c
字号:
}
#endif /* __MMI_UI_SMALL_SCREEN_SUPPORT__ */
MMI_TRACE((MMI_TRACE_G1_FRM, MMI_FRM_INFO_SUBHIST_DEL_SUBLCD_SCR_HDLR, ScrId));
if (!IsSubLCDScreenPresent(ScrId))
{
return ST_FAILURE;
}
count = NodeIndex;
/* Locating the screen */
while (count)
{
if (SubLCDHistoryData[count].scrnID == ScrId)
{
/*
* Not support for stop callback at this funciton
* Because the application want to delete the special screen in the history,
* we don't need to check the return value of the delete callback function.
* the behavior is the same with DeleteScreenIfPresent()
*/
ExecHistoryScrnCallBackHandle_ex(count, 0);
break;
}
--count;
}
if (Status)
{
/* Shifting All the nodes by one notch */
for (i = count + 1; i <= NodeIndex; i++, count++)
{
memcpy(&SubLCDHistoryData[count], &SubLCDHistoryData[i], sizeof(SubLCDHistoryNode));
}
--NodeIndex;
memset(&SubLCDHistoryData[NodeIndex + 1], 0, sizeof(SubLCDHistoryNode));
}
#endif /* __MMI_SUBLCD__ */
return Status;
}
/*****************************************************************************
* FUNCTION
* DeleteNSubLCDHistory
* DESCRIPTION
* Deletes 'n' history nodes from current Sub LCDhistory index
*
* This shall pop 'n' history nodes without invoking
* entry functions of the deleted nodes
* PARAMETERS
* DeleteCount [IN]
* n(?) [IN]
* RETURNS
* void
*****************************************************************************/
void DeleteNSubLCDHistory(U16 DeleteCount)
{
#ifdef __MMI_SUBLCD__
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S16 Count = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifdef __MMI_UI_SMALL_SCREEN_SUPPORT__
if (redraw_in_small_screen_proceduer())
{
return ;
}
#endif /* __MMI_UI_SMALL_SCREEN_SUPPORT__ */
MMI_TRACE((MMI_TRACE_G1_FRM, MMI_FRM_INFO_SUBHIST_DEL_SUBLCD_SCR_NUM, DeleteCount));
if (NodeIndex >= DeleteCount)
{
/* To make sure the callback will run at topist screen */
ExecTopScrnCallbackHandler_ex(0);
for (Count = DeleteCount; Count >= 1; --Count)
{
/* JL, if want to stop to run next decrement will return true. */
if (ExecHistoryScrnCallBackHandle_ex(NodeIndex, 0) == MMI_HIST_STOP_DELETING)
{
break;
}
DecrementSubLCD();
}
}
#endif /* __MMI_SUBLCD__ */
}
/*****************************************************************************
* FUNCTION
* DeleteBeyondSubLCDScrTillScr
* DESCRIPTION
* To delete scrns beyond scrn A
* till scrn B
* PARAMETERS
* beyondScrnid [IN]
* tillScrnid [IN]
* scrnid1(?) [IN]
* scrnid2(?) [IN]
* RETURNS
* U16 - status
*****************************************************************************/
U8 DeleteBeyondSubLCDScrTillScr(U16 beyondScrnid, U16 tillScrnid)
{
U8 Status = ST_SUCCESS;
#ifdef __MMI_SUBLCD__
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S16 count = 0, count1 = 0;
S16 endScreenPresent = -1, startScreenPresent = -1;
U16 screensDeleted = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifdef __MMI_UI_SMALL_SCREEN_SUPPORT__
if (redraw_in_small_screen_proceduer())
{
return ST_SUCCESS;
}
#endif /* __MMI_UI_SMALL_SCREEN_SUPPORT__ */
MMI_TRACE((MMI_TRACE_G1_FRM, MMI_FRM_INFO_SUBHIST_DEL_BEYOND_TILL_SUBLCD_SCR_HDLR, beyondScrnid, tillScrnid));
if (!IsSubLCDScreenPresent(beyondScrnid) || !IsSubLCDScreenPresent(tillScrnid))
{
return ST_FAILURE;
}
if (NodeIndex > 0)
{
count = NodeIndex;
count1 = NodeIndex;
}
while (count)
{
if (SubLCDHistoryData[count].scrnID == beyondScrnid)
{
startScreenPresent = count;
}
if (SubLCDHistoryData[count].scrnID == tillScrnid)
{
MMI_ASSERT(startScreenPresent != -1);
endScreenPresent = count;
break;
}
--count;
}
MMI_ASSERT((startScreenPresent != -1) && (endScreenPresent != -1));
for (count = startScreenPresent - 1; count >= endScreenPresent; count--)
{
if (ExecHistoryScrnCallBackHandle_ex(count, 0) == MMI_HIST_STOP_DELETING)
{
/*
* The screen won't want to delete.
* We stop continue to delete the screens.
*/
endScreenPresent = count + 1;
Status = ST_FAILURE;
break;
}
if (SubLCDHistoryData[count].guiBuffer)
{
OslMfree(SubLCDHistoryData[count].guiBuffer);
}
memset(&SubLCDHistoryData[count], 0, sizeof(SubLCDHistoryNode));
NodeIndex--;
screensDeleted++;
}
memcpy(
SubLCDHistoryData + endScreenPresent,
SubLCDHistoryData + startScreenPresent,
sizeof(SubLCDHistoryNode) * (count1 - startScreenPresent + 1));
memset(SubLCDHistoryData + (NodeIndex + 1), 0, (sizeof(SubLCDHistoryNode) * screensDeleted));
#endif /* __MMI_SUBLCD__ */
return Status;
}
/*****************************************************************************
* FUNCTION
* DeleteBetweenSubLCDScreen
* DESCRIPTION
* Deletes Between two Screens including the boundaries
* PARAMETERS
* StartScrId [IN]
* EndScrId [IN]
* RETURNS
* U16 - status
*****************************************************************************/
U16 DeleteBetweenSubLCDScreen(U16 StartScrId, U16 EndScrId)
{
U8 Status = ST_SUCCESS;
#ifdef __MMI_SUBLCD__
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S16 count = 0, count1 = 0;
S16 endScreenPresent = -1, startScreenPresent = -1;
U16 screensDeleted = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifdef __MMI_UI_SMALL_SCREEN_SUPPORT__
if (redraw_in_small_screen_proceduer())
{
return ST_SUCCESS;
}
#endif /* __MMI_UI_SMALL_SCREEN_SUPPORT__ */
MMI_TRACE((MMI_TRACE_G1_FRM, MMI_FRM_INFO_SUBHIST_DEL_BETWEEN_SUBLCD_SCR_HDLR, StartScrId, EndScrId));
if (!IsSubLCDScreenPresent(StartScrId) || !IsSubLCDScreenPresent(EndScrId))
{
return ST_FAILURE;
}
if (NodeIndex > 0)
{
count = NodeIndex;
count1 = NodeIndex;
}
while (count >= 0)
{
if (SubLCDHistoryData[count].scrnID == EndScrId)
{
startScreenPresent = count;
}
if (SubLCDHistoryData[count].scrnID == StartScrId)
{
endScreenPresent = count;
break;
}
--count;
}
MMI_ASSERT((startScreenPresent != -1) && (endScreenPresent != -1));
for (count = startScreenPresent; count >= endScreenPresent; count--)
{
if (ExecHistoryScrnCallBackHandle_ex(count, 0) == MMI_HIST_STOP_DELETING)
{
/*
* The screen won't want to delete.
* We stop continue to delete the screens.
*/
endScreenPresent = count + 1;
Status = ST_FAILURE;
break;
}
if (SubLCDHistoryData[count].guiBuffer)
{
OslMfree(SubLCDHistoryData[count].guiBuffer);
}
memset(&SubLCDHistoryData[count], 0, sizeof(SubLCDHistoryNode));
NodeIndex--;
screensDeleted++;
}
memcpy(
SubLCDHistoryData + endScreenPresent,
SubLCDHistoryData + startScreenPresent + 1,
sizeof(SubLCDHistoryNode) * (count1 - startScreenPresent + 1));
memset(SubLCDHistoryData + (NodeIndex + 1), 0, (sizeof(SubLCDHistoryNode) * screensDeleted));
#endif /* __MMI_SUBLCD__ */
return Status;
}
/*****************************************************************************
* FUNCTION
* SubLCDHistoryReplace
* DESCRIPTION
* To replace a specific history
*
* HistoryReplace will be used for a exist history
* PARAMETERS
* out_scrn_id [IN]
* in_scrn_id [IN]
* in_src_func [IN]
* RETURNS
* pBool
*****************************************************************************/
pBOOL SubLCDHistoryReplace(U16 out_scrn_id, U16 in_scrn_id, FuncPtr in_src_func)
{
#ifdef __MMI_SUBLCD__
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S16 count = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
MMI_TRACE((MMI_TRACE_G1_FRM, MMI_FRM_INFO_SUBHIST_REPLACE_SUBLCD_SCR_HDLR, out_scrn_id, in_scrn_id, in_src_func));
for (count = 0; ((count < MAX_SUBLCD_HISTORY) && ((count <= NodeIndex) && (NodeIndex != -1))); count++)
{
/* Find the matched source history and then to write into destinate history */
if (SubLCDHistoryData[count].scrnID == out_scrn_id)
{
ClearDelScrnIDCallbackHandler(out_scrn_id, NULL);
SubLCDHistoryData[count].scrnID = in_scrn_id;
SubLCDHistoryData[count].entryFuncPtr = in_src_func;
if (SubLCDHistoryData[count].guiBuffer)
{
OslMfree(SubLCDHistoryData[count].guiBuffer);
}
SubLCDHistoryData[count].guiBuffer = NULL;
SubLCDHistoryData[count].guiLen = 0;
return MMI_TRUE;
}
}
#endif /* __MMI_SUBLCD__ */
return MMI_FALSE;
}
/*****************************************************************************
* FUNCTION
* IsSubLCDScreenPresent
* DESCRIPTION
* Queries history for presence of a screen Id in sub-LCD history
* PARAMETERS
* scrnId [IN]
* scrnid(?) [IN]
* RETURNS
* pBOOL
*****************************************************************************/
pBOOL IsSubLCDScreenPresent(U16 scrnId)
{
#ifdef __MMI_SUBLCD__
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S16 count;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
for (count = 0; ((count < MAX_SUBLCD_HISTORY) && ((count <= NodeIndex) && (NodeIndex != -1))); count++)
{
if (SubLCDHistoryData[count].scrnID == scrnId)
{
return TRUE;
}
}
#endif /* __MMI_SUBLCD__ */
return FALSE;
}
/*****************************************************************************
* FUNCTION
* GetCurrSubLCDScreenExitFunc
* DESCRIPTION
* Queries present screen exit function
* PARAMETERS
* void
* RETURNS
* FuncPtr
*****************************************************************************/
FuncPtr GetCurrSubLCDScreenExitFunc(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
#ifdef __MMI_SUBLCD__
return gCurrExitSubLCDFn;
#endif
return 0;
}
/*****************************************************************************
* FUNCTION
* GetCurrSubLCDScreenEntryFunc
* DESCRIPTION
* Queries current screen entry function
* PARAMETERS
* void
* RETURNS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -