📄 wml_mmi.c
字号:
void SDL_CreateOption(void* pUserAgent, void* pElement, void* pwchLabelText, int iOptionID)
{
OPTIONELEMENT *pOptionElm=NULL;
WCHAR* pwchTitle=NULL;
if (pElement)
{
pOptionElm = (OPTIONELEMENT*)pElement;
pwchTitle = (WCHAR*) SDL_GetText((UA*)pUserAgent, pOptionElm->pTitle);
if (pOptionElm !=NULL)
{
WML_TrimTextWCHAR((WCHAR*)pwchLabelText, TRIMTEXT_BOTH);
MMIa_newOption (((UA*)pUserAgent)->iViewID, (UINT8)iOptionID, (WCHAR*)pwchLabelText, pwchTitle, pOptionElm->fSelected);
}
DEALLOC(&pwchTitle);
#ifdef WAE_DEBUG
PrintChar("--Option--\n");
WMLUA_PrintWS(pwchLabelText);
#endif
}
}
/*-------------------------------------------------------------------
updates and returns the option element
----------------------------------------------------------------------*/
void* SDL_UpdateOption(void *pUserAgent, void* pOptionList, int OptionID)
{
/* Removed by GBU,000510, not used, (001016 ASPN)
UA *pUser;
*/
void* pListElement=NULL;
void* pSelectListElement=NULL;
ELEMENTTYPE* pTheReturnElement=NULL;
OPTIONELEMENT* pOptElm=NULL;
ELEMENTTYPE* pTheWMLElement=NULL;
#ifdef WAE_DEBUG
PrintChar("--Updateoption--\n");
#endif
/* Added by GBU,000510, to remove warning for unused variable, (001016 ASPN) */
pUserAgent = pUserAgent;
/* int iTmp=0; */
/* Removed by GBU,000510, not used (001016 ASPN)
pUser = (UA*)pUserAgent;
*/
if (pOptionList!=NULL)
{
/*get first element */
pListElement = SDL_GetNextListElement(pOptionList,NULL);
while (pListElement!=NULL)
{
pTheWMLElement = (ELEMENTTYPE*)SDL_GetListElementContent(pListElement);
/* found a select list element - always saving the latest*/
if (pTheWMLElement->iType==Type_SELECT)
pSelectListElement = pListElement;
/* found the actual option element to toggle */
else if (SDL_GetListElementID(pListElement) == OptionID)
{
pTheReturnElement = pTheWMLElement;
pOptElm = (OPTIONELEMENT*)pTheReturnElement;
break;
}
pListElement = SDL_GetNextListElement(pOptionList,pListElement);
}
/* scan the select */
if (pSelectListElement!=NULL && pOptElm!=NULL)
{
pTheWMLElement = (ELEMENTTYPE*)SDL_GetListElementContent(pSelectListElement);
/* if multiple select no problem, just toggle */
if ( ((SELECTELEMENT*)(pTheWMLElement))->fMultiple==TRUE)
{
/* set the option */
if (pOptElm->fSelected)
pOptElm->fSelected=FALSE;
else
pOptElm->fSelected=TRUE;
}
/* otherwise clear all fields and toggle*/
else
{
#ifdef WAE_DEBUG
PrintChar("Single option select");
#endif
pListElement = SDL_GetNextListElement(pOptionList,pSelectListElement);
while (pListElement!=NULL)
{
pTheWMLElement = (ELEMENTTYPE*)SDL_GetListElementContent(pListElement);
if (pTheWMLElement->iType != Type_OPTION)
{
/* select is empty or no more optelelemts*/
break;
}
((OPTIONELEMENT*)(pTheWMLElement))->fSelected=FALSE; /* TODOjens pElm */
pListElement = SDL_GetNextListElement(pOptionList,pListElement);
}
pOptElm->fSelected=TRUE;
}
}
}
#ifdef WAE_DEBUG
pListElement = SDL_GetNextListElement(pOptionList,pSelectListElement);
while (pListElement!=NULL)
{
pTheWMLElement = (ELEMENTTYPE*)SDL_GetListElementContent(pListElement);
if (pTheWMLElement->iType != Type_OPTION)
{
/* select is empty or no more optelelemts*/
break;
}
if (((OPTIONELEMENT*)(pTheWMLElement))->fSelected)
PrintChar("TRUE");
else
PrintChar("FALSE");
pListElement = SDL_GetNextListElement(pOptionList,pListElement);
}
PrintChar("--Updateoption--\n");
#endif
return (void*)pTheReturnElement;
}
/*-------------------------------------------------------------------
Creates a new image element, depending on if dynamic updating is set
or not the UpdateImage is used when the actual image data arrives
----------------------------------------------------------------------*/
void SDL_CreateImage(void *pUserAgent, void *pElement, void* pData, int iDataLen, void* pbContentTypeAsString, int iImageID, void* pLinkElement)
{
IMGELEMENT *pImageElm=NULL;
UA *pUser;
WCHAR wchAccessKey=0;
WCHAR *pwchAlternativeText = NULL;
WCHAR *pwchLocalSrc = NULL;
WCHAR *pLinkTitle=NULL;
BOOL fIsLink=FALSE;
pUser = (UA*)pUserAgent;
if (pElement !=NULL)
{
pImageElm=(IMGELEMENT*)pElement;
pImageElm->iMMIElementID = (UINT8)iImageID;
pwchAlternativeText = (WCHAR*) SDL_GetText( pUserAgent, pImageElm->pAlt );
pwchLocalSrc = (WCHAR*) SDL_GetText( pUserAgent, pImageElm->pLocalSrc );
/* if a linkelement is present the title is retrieved */
if (pLinkElement)
{
fIsLink = TRUE;
if ( ((ELEMENTTYPE*)pLinkElement)->iType == Type_A)
{
pLinkTitle = (WCHAR*) SDL_GetText(pUser, ((AELEMENT*)(pLinkElement))->pTitle );
wchAccessKey = ((AELEMENT*)(pLinkElement))->wchAccessKey;
}
else
{
pLinkTitle = (WCHAR*) SDL_GetText(pUser, ((ANCHORELEMENT*)(pLinkElement))->pTitle );
wchAccessKey = ((ANCHORELEMENT*)(pLinkElement))->wchAccessKey;
}
}
else
fIsLink = FALSE;
MMIa_newImage (pUser->iViewID, (UINT8)iImageID, (CHAR*)pData, (UINT16)iDataLen , (CHAR*)pbContentTypeAsString, pwchAlternativeText, pwchLocalSrc,fIsLink,pLinkTitle, wchAccessKey, pImageElm->iVSpace,pImageElm->iHSpace, pImageElm->iWidth, pImageElm->iHeight, pImageElm->iIsPercent, (INT8)(pImageElm->iIAlign));
DEALLOC( & pwchAlternativeText);
DEALLOC( & pwchLocalSrc);
DEALLOC( & pLinkTitle);
}
else
{
MMIa_newImage (pUser->iViewID, (UINT8)iImageID, NULL, 0 , NULL, NULL,NULL, FALSE, NULL,0, 0, 0, 0, 0, 0, 0);
}
}
void SDL_UpdateImage(void *pUserAgent, void *pImageElement, void* pData, int iDataLen, void* pchContentTypeAsString)
{
IMGELEMENT *pElm;
#ifdef WAE_DEBUG
PrintChar("--IMAGEUPDATE-\n");
#endif
if (pImageElement)
{
if ( ((ELEMENTTYPE*)pImageElement)->iType == Type_IMG )
{
pElm = (IMGELEMENT*)pImageElement;
MMIa_completeImage ( ((UA*)pUserAgent)->iViewID, pElm->iMMIElementID, (CHAR*)pData, (UINT16)iDataLen, (CHAR*)pchContentTypeAsString);
#ifdef WAE_DEBUG
PrintChar("Image updated\n");
#endif
}
}
}
/*-------------------------------------------------------------------
Creates a softkey element with reference id iDoRef
----------------------------------------------------------------------*/
void SDL_CreateKey(void *pUser,void *pElement, int iDoRef)
{
DOELEMENT *pDoElm;
WCHAR *pwchLabel;
if (pElement && ((ELEMENTTYPE*)(SDL_GetElementContent( (ELEMENTTYPE*)pElement )))->iType != Type_NOOP )
{
pDoElm=(DOELEMENT*)pElement;
pwchLabel = (WCHAR*) SDL_GetText(pUser, pDoElm->pLabel);
MMIa_newKey ( ((UA*)pUser)->iViewID, (UINT8)iDoRef, pDoElm->pchType, pwchLabel, pDoElm->fOptional );
#ifdef WAE_DEBUG
PrintChar("--SOFTKEY--\n");
#endif
DEALLOC(&pwchLabel);
}
}
#ifdef HANDLE_NOKIA_DEVIATIONS_FROM_STANDARD
BOOL CheckIfTemplateElement(void* pUser, void* pDoElement );
/* returns true if the element is in the templatelist */
BOOL CheckIfTemplateElement(void* pUser, void* pDoElement )
{
ELEMENTTYPE *pFirstCard = NULL;
TEMPLATEDOTYPE *pCurrentElement=NULL;
pFirstCard = (ELEMENTTYPE *) SDL_GetElementContent( ((UA*)pUser)->pDeck );
while ( pFirstCard != NULL && pFirstCard->iType != Type_CARD)
{
pFirstCard = (ELEMENTTYPE *) SDL_GetNextElement (pFirstCard);
}
if (pFirstCard)
pCurrentElement = WML_GetTemplateDO(pFirstCard);
else
return FALSE;
while (pCurrentElement != NULL && pCurrentElement->pDO!=pDoElement)
{
pCurrentElement = WML_GetNextTemplateDO( (TEMPLATEDOTYPE*)pCurrentElement );
}
if (!pCurrentElement)
return FALSE;
return TRUE;
}
#endif
/* returns TRUE if there already exists a identical do element i.e same name */
int SDL_CheckDoDuplicates(void *pUser, void *pDoElement, void* pDoList)
{
ELEMENTTYPE *pCompareDoElement=NULL;
WCHAR *pwchDoName1 = NULL;
WCHAR *pwchDoName2 = NULL;
void *pListDoElement=NULL;
if (pDoElement == NULL || pDoList==NULL)
return TRUE;
#ifdef HANDLE_NOKIA_DEVIATIONS_FROM_STANDARD
/* check if it is a template element */
if ( !CheckIfTemplateElement(pUser,pDoElement) )
return FALSE; /* no match => it is ok to display even if there are duplicate names */
/* otherwise it is a match, then perform a check */
#endif
/* get first element */
pListDoElement = SDL_GetNextListElement(pDoList,NULL);
while (pListDoElement!=NULL)
{
pCompareDoElement = (ELEMENTTYPE*)SDL_GetListElementContent(pListDoElement);
if (pCompareDoElement->iType==Type_DO)
{
/* check is name is duplicate */
pwchDoName1 = ((DOELEMENT*)(pCompareDoElement))->pchName;
#ifndef HANDLE_NOKIA_DEVIATIONS_FROM_STANDARD
if (pwchDoName1==NULL)
pwchDoName1 = ((DOELEMENT*)(pCompareDoElement))->pchType;
#endif
pwchDoName2 = ((DOELEMENT*)(pDoElement))->pchName;
#ifndef HANDLE_NOKIA_DEVIATIONS_FROM_STANDARD
if (pwchDoName2==NULL)
pwchDoName2 = ((DOELEMENT*)(pDoElement))->pchType;
#endif
if (pwchDoName1 && pwchDoName2)
{
#ifdef HANDLE_NOKIA_DEVIATIONS_FROM_STANDARD
/* if not both elements in the template and the comparison matches */
if ( !CheckIfTemplateElement(pUser,pCompareDoElement) && !COMPARESTRING(pwchDoName1,pwchDoName2) )
return TRUE;
#else
/* make comparison */
if (!COMPARESTRING(pwchDoName1,pwchDoName2))
return TRUE;
#endif
}
else
{
#ifndef HANDLE_NOKIA_DEVIATIONS_FROM_STANDARD
return TRUE;
#endif
}
}
pListDoElement = SDL_GetNextListElement(pDoList,pListDoElement);
}
pwchDoName2 = (WCHAR*) pUser; /* at this point only a dummy assignment */
return FALSE;
}
BOOL SDL_CreateParagraph(void *pUser,void *pElement)
{
PELEMENT *pPElm=NULL;
BOOL fPreformatted = FALSE;
if (!pElement)
return FALSE;
if (((ELEMENTTYPE*)pElement)->iType == Type_P)
{
pPElm=(PELEMENT*)pElement;
MMIa_newParagraph (((UA*)pUser)->iViewID, (INT8)(pPElm->iAlign),!((BOOL)(pPElm->iMode)), FALSE);
}
else
{
fPreformatted = ( ((PREELEMENT*)pElement)->iXmlSpace == XML_SPACE_PRESERVE) ? TRUE : FALSE;
MMIa_newParagraph (((UA*)pUser)->iViewID,ALIGN_LEFT,TRUE,fPreformatted );
}
#ifdef WAE_DEBUG
PrintChar("--P--\n");
#endif
return fPreformatted;
}
void SDL_CloseParagraph(void *pUser)
{
#ifdef WAE_DEBUG
PrintChar("--/P--\n");
#endif
if (pUser)
MMIa_closeParagraph (((UA*)pUser)->iViewID);
}
void SDL_CreateBR(void *pUser)
{
if (pUser)
MMIa_newBreak (((UA*)pUser)->iViewID);
#ifdef WAE_DEBUG
PrintChar("--BR--\n");
#endif
}
/*-------------------------------------------------------------------
Create and close a new fieldset element
----------------------------------------------------------------------*/
void SDL_CreateField(void *pUser,void *pElement)
{
WCHAR* pwchText=NULL;
if (pElement)
{
pwchText = (WCHAR*) SDL_GetText((UA*)pUser, ((FIELDSETELEMENT*)pElement)->pTitle);
MMIa_newFieldSet(((UA*)pUser)->iViewID,pwchText);
#ifdef WAE_DEBUG
PrintChar("--FIELD--\n");
#endif
DEALLOC(&pwchText);
}
}
void SDL_CloseField(void* pUser)
{
if (pUser)
MMIa_closeFieldSet(((UA*)pUser)->iViewID);
#ifdef WAE_DEBUG
PrintChar("--FIELDCLOSE--\n");
#endif
}
/*----------------------------------------------------------------------*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -