📄 mytext.final
字号:
/*===========================================================================
FILE: mytext.c
===========================================================================*/
/*===============================================================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================================================== */
#include "AEEModGen.h" // Module interface definitions
#include "AEEAppGen.h" // Applet interface definitions
#include "AEEShell.h" // Shell interface definitions
#include "AEEMenu.h"
#include "AEEText.h"
#include "AEEStdLib.h"
#include "mytext.bid"
#include "mytext_res.h"
#define ID_SINGLE 1
#define ID_MULTI 2
#define ID_DISPLAY 3
#define ID_OK 4
#define ID_INPUTMODE 5
#define STATUS_MENU 6
#define STATUS_SINGLE 7
#define STATUS_MULTI 8
#define STATUS_INPUTMENU 9
#define FOCUS_TEXT1 10
#define FOCUS_TEXT2 11
/*-------------------------------------------------------------------
Applet structure. All variables in here are reference via "pMe->"
-------------------------------------------------------------------*/
typedef struct _mytext {
AEEApplet a ; // First element of this structure must be AEEApplet
AEEDeviceInfo DeviceInfo; // always have access to the hardware device information
IDisplay *pIDisplay; // give a standard way to access the Display interface
IShell *pIShell; // give a standard way to access the Shell interface
// add your own variables here...
IMenuCtl *pMenu;
ITextCtl *pSingleText;
IMenuCtl *pSoftkey1;
ITextCtl *pMultiText1;
AECHAR *pContent1;
ITextCtl *pMultiText2;
AECHAR *pContent2;
IMenuCtl *pSoftkey2;
IMenuCtl *pInputMenu;
uint16 textctl_focus;
uint16 input_mode;
uint16 input_flag;
int status;
int m_PreTextInputMode; // 前一个输入法
} mytext;
/*-------------------------------------------------------------------
Function Prototypes
-------------------------------------------------------------------*/
static boolean mytext_HandleEvent(mytext* pMe, AEEEvent eCode,
uint16 wParam, uint32 dwParam);
boolean mytext_InitAppData(mytext* pMe);
void mytext_FreeAppData(mytext* pMe);
static void BuildMainMenu(mytext *pMe);
static void DisplaySingleText(mytext *pMe);
static void DisplayMultiText(mytext *pMe);
static void BuildInputMenu(mytext *pMe);
static void GetContent(mytext *pMe);
static void SetContent(mytext *pMe);
/*===============================================================================
FUNCTION DEFINITIONS
=============================================================================== */
/*===========================================================================
FUNCTION: AEEClsCreateInstance
===========================================================================*/
int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj)
{
*ppObj = NULL;
if( ClsId == AEECLSID_MYTEXT )
{
// Create the applet and make room for the applet structure
if( AEEApplet_New(sizeof(mytext),
ClsId,
pIShell,
po,
(IApplet**)ppObj,
(AEEHANDLER)mytext_HandleEvent,
(PFNFREEAPPDATA)mytext_FreeAppData) ) // the FreeAppData function is called after sending EVT_APP_STOP to the HandleEvent function
{
//Initialize applet data, this is called before sending EVT_APP_START
// to the HandleEvent function
if(mytext_InitAppData((mytext*)*ppObj))
{
//Data initialized successfully
return(AEE_SUCCESS);
}
else
{
//Release the applet. This will free the memory allocated for the applet when
// AEEApplet_New was called.
IAPPLET_Release((IApplet*)*ppObj);
return EFAILED;
}
} // end AEEApplet_New
}
return(EFAILED);
}
/*===========================================================================
FUNCTION SampleAppWizard_HandleEvent
===========================================================================*/
static boolean mytext_HandleEvent(mytext* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
uint16 item;
AECHAR input_info[12];
if(pMe->pMenu && IMENUCTL_HandleEvent(pMe->pMenu,eCode,wParam,dwParam))
return TRUE;
if(pMe->pSingleText && ITEXTCTL_HandleEvent(pMe->pSingleText,eCode,wParam,dwParam) )
return TRUE;
if(pMe->pSoftkey1 && IMENUCTL_HandleEvent(pMe->pSoftkey1,eCode,wParam,dwParam))
return TRUE;
if(pMe->pMultiText1 && ITEXTCTL_HandleEvent(pMe->pMultiText1,eCode,wParam,dwParam) )
return TRUE;
if(pMe->pMultiText2 && ITEXTCTL_HandleEvent(pMe->pMultiText2,eCode,wParam,dwParam) )
return TRUE;
if(pMe->pSoftkey2 && IMENUCTL_HandleEvent(pMe->pSoftkey2,eCode,wParam,dwParam))
return TRUE;
if(pMe->pInputMenu && IMENUCTL_HandleEvent(pMe->pInputMenu,eCode,wParam,dwParam))
return TRUE;
switch (eCode)
{
// App is told it is starting up
case EVT_APP_START:
// Add your code here...
BuildMainMenu(pMe);
return(TRUE);
// App is told it is exiting
case EVT_APP_STOP:
// Add your code here...
return(TRUE);
#if 0
case EVT_CTL_TEXT_MODECHANGED:
DBGPRINTF("EVT_CTL_TEXT_MODECHANGED");
if(pMe->input_mode == AEE_TM_SYMBOLS)
{
if((!pMe->input_flag) && pMe->pSoftkey2)
{
ITEXTCTL_Redraw(pMe->pMultiText1);
ITEXTCTL_Redraw(pMe->pMultiText2);
IMENUCTL_Redraw(pMe->pSoftkey2);
pMe->input_flag = 1;
DBGPRINTF("Redraw for SYMBOLS mode flag");
}
else
pMe->input_flag = 0;
}
return TRUE;
#endif
case EVT_CTL_TEXT_MODECHANGED:
{
int CurTextInputMode;
CurTextInputMode = wParam;
if(CurTextInputMode != pMe->m_PreTextInputMode)
{
DBGPRINTF("EVT_CTL_TEXT_MODECHANGED %d-->%d", pMe->m_PreTextInputMode, CurTextInputMode);
if(pMe->m_PreTextInputMode == AEE_TM_SYMBOLS)
{
if(pMe->pMultiText1 && pMe->pMultiText2 && pMe->pSoftkey2)
{
ITEXTCTL_Redraw(pMe->pMultiText1);
ITEXTCTL_Redraw(pMe->pMultiText2);
IMENUCTL_Redraw(pMe->pSoftkey2);
}
}
pMe->m_PreTextInputMode = CurTextInputMode;
}
}
return TRUE;
// App is being suspended
case EVT_APP_RESUME:
// Add your code here...
switch(pMe->status)
{
case STATUS_MENU:
BuildMainMenu(pMe);
break;
case STATUS_SINGLE:
DisplaySingleText(pMe);
break;
case STATUS_MULTI:
DisplayMultiText(pMe);
SetContent(pMe);
if(pMe->textctl_focus == FOCUS_TEXT2)
{
ITEXTCTL_Redraw(pMe->pMultiText1);
ITEXTCTL_SetActive(pMe->pMultiText2,TRUE);
}
else
{
ITEXTCTL_Redraw(pMe->pMultiText2);
ITEXTCTL_SetActive(pMe->pMultiText1,TRUE);
}
break;
case STATUS_INPUTMENU:
BuildInputMenu(pMe);
break;
}
return(TRUE);
// App is being resumed
// Add your code here...
case EVT_APP_SUSPEND:
switch(pMe->status)
{
case STATUS_MENU:
IMENUCTL_Release(pMe->pMenu);
pMe->pMenu = NULL;
break;
case STATUS_SINGLE:
ITEXTCTL_Release(pMe->pSingleText);
pMe->pSingleText = NULL;
break;
case STATUS_MULTI:
GetContent(pMe);
ITEXTCTL_Release(pMe->pMultiText1);
ITEXTCTL_Release(pMe->pMultiText2);
IMENUCTL_Release(pMe->pSoftkey2);
pMe->pMultiText1 = NULL;
pMe->pMultiText2 = NULL;
pMe->pSoftkey2 = NULL;
break;
case STATUS_INPUTMENU:
IMENUCTL_Release(pMe->pInputMenu);
pMe->pInputMenu = NULL;
break;
}
return(TRUE);
// An SMS message has arrived for this app. Message is in the dwParam above as (char *)
// sender simply uses this format "//BREW:ClassId:Message", example //BREW:0x00000001:Hello World
case EVT_APP_MESSAGE:
// Add your code here...
return(TRUE);
// A key was pressed. Look at the wParam above to see which key was pressed. The key
// codes are in AEEVCodes.h. Example "AVK_1" means that the "1" key was pressed.
case EVT_KEY:
// Add your code here...
switch(wParam)
{
case AVK_CLR:
if(pMe->status != STATUS_MENU)
{
switch(pMe->status)
{
case STATUS_INPUTMENU:
IMENUCTL_Release(pMe->pInputMenu);
pMe->pInputMenu = NULL;
DisplayMultiText(pMe);
SetContent(pMe);
if(pMe->textctl_focus == FOCUS_TEXT2)
{
ITEXTCTL_Redraw(pMe->pMultiText1);
ITEXTCTL_SetActive(pMe->pMultiText2,TRUE);
}
else
{
ITEXTCTL_Redraw(pMe->pMultiText2);
ITEXTCTL_SetActive(pMe->pMultiText1,TRUE);
}
return TRUE;
case STATUS_SINGLE:
ITEXTCTL_Release(pMe->pSingleText);
pMe->pSingleText = NULL;
IMENUCTL_Release(pMe->pSoftkey1);
pMe->pSoftkey1 = NULL;
break;
case STATUS_MULTI:
ITEXTCTL_Release(pMe->pMultiText1);
pMe->pMultiText1 = NULL;
ITEXTCTL_Release(pMe->pMultiText2);
pMe->pMultiText2 = NULL;
IMENUCTL_Release(pMe->pSoftkey2);
pMe->pSoftkey2 = NULL;
break;
}
pMe->status = STATUS_MENU;
IMENUCTL_SetActive(pMe->pMenu,TRUE);
return TRUE;
}
else //When the user press clear key and the current page is main menu, the application should exit.
return FALSE;
break;
case AVK_SELECT:
if(pMe->status = STATUS_MULTI)
{
GetContent(pMe);
IMENUCTL_SetActive(pMe->pSoftkey2,TRUE);
return TRUE;
}
else
return FALSE;
}
return(TRUE);
case EVT_COMMAND:
if(pMe->pMenu && IMENUCTL_IsActive(pMe->pMenu))
{
item = IMENUCTL_GetSel (pMe->pMenu);
switch(item)
{
case ID_SINGLE:
DisplaySingleText(pMe);
break;
case ID_MULTI:
DisplayMultiText(pMe);
ITEXTCTL_SetActive(pMe->pMultiText1,TRUE);
break;
default:
break;
}
}
else if(pMe->pSoftkey1 && IMENUCTL_IsActive(pMe->pSoftkey1))
{
item = IMENUCTL_GetSel(pMe->pSoftkey1);
switch(item)
{
case ID_DISPLAY:
ITEXTCTL_GetText(pMe->pSingleText,input_info,sizeof(input_info));
IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_BOLD, input_info,-1,0,50,NULL,0);
IDISPLAY_Update(pMe->pIDisplay);
break;
case ID_OK:
ITEXTCTL_Release(pMe->pSingleText);
IMENUCTL_Release(pMe->pSoftkey1);
pMe->pSingleText = NULL;
pMe->pSoftkey1 = NULL;
IMENUCTL_SetActive(pMe->pMenu,TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -