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

📄 wml_mmi.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:

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 + -