palm-os-sdk/PalmOne/Samples/HtmlLibTest68K/Src/HtmlLibTestMain.c

290 lines
7.2 KiB
C

/******************************************************************************
* HtmlLibTest68K
*
* HtmlLibTestMain.c
*
* Brief:This sample code shows how to render text and image data using HTML library on
* GSM phones and T|X handheld.
*
* Copyright (c) 2004-2006 Palm, Inc. or its subsidiaries.
*
* All rights reserved.
*****************************************************************************/
#include <PalmOS.h>
#include <HsExt.h>
#include <HsNav.h>
#include "HtmlLibTestRsc.h"
/* Application Creator */
#define appFileCreator 'ApkF'
/* global variable */
Int32 gEventWait = 0;
MemHandle gTextHandle = NULL;
/* extern */
Boolean RendererInitialize(void);
void RendererFinalize(void);
/***********************************************************************
*
* FUNCTION: MainFormHandleEvent
*
* DESCRIPTION: This routine is the event handler for the
* "MainForm" of this application.
*
* PARAMETERS: eventP - a pointer to an EventType structure
*
* RETURNED: true if the event has handle and should not be passed
* to a higher level handler.
*
***********************************************************************/
Boolean MainFormHandleEvent(EventPtr eventP)
{
Boolean handled = false;
FormPtr frmP;
switch (eventP->eType) {
case frmOpenEvent:
frmP = FrmGetActiveForm();
FrmDrawForm(frmP);
FrmNavObjectTakeFocus(frmP, MainContentField);
handled = true;
break;
case frmUpdateEvent:
FrmDrawForm(FrmGetFormPtr(eventP->data.frmUpdate.formID));
handled = true;
break;
case frmCloseEvent:
break;
case menuEvent:
if (eventP->data.menu.itemID == OptionsAboutHtmlLibTest)
{
UInt16 cardNo;
LocalID dbID;
DmSearchStateType searchState;
DmGetNextDatabaseByTypeCreator(true, &searchState, sysFileTApplication,
appFileCreator, true, &cardNo, &dbID);
HsAboutHandspringApp(cardNo, dbID, "2006", "Palm DTS Team");
handled = true;
}
break;
case ctlSelectEvent:
if (eventP->data.ctlSelect.controlID == MainRenderButton) {
FrmPopupForm(RenderForm);
}
break;
case popSelectEvent:
if (eventP->data.popSelect.selection >= 0) {
MemHandle resH = NULL;
if (eventP->data.popSelect.selection == 0) {
resH = DmGetResource(strRsc, Test1String);
} else {
resH = DmGetResource(strRsc, Test2String);
}
if (resH) {
FormType *frmP = FrmGetActiveForm();
FieldType *fldP;
Char *textP;
Char *strP = MemHandleLock(resH);
if (strP) {
fldP = FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, MainContentField));
if (gTextHandle) {
FldSetTextHandle(fldP, NULL);
MemHandleFree(gTextHandle);
}
gTextHandle = MemHandleNew(MemHandleSize(resH));
if (gTextHandle) {
textP = MemHandleLock(gTextHandle);
StrCopy(textP, strP);
MemHandleUnlock(gTextHandle);
FldSetTextHandle(fldP, gTextHandle);
FldDrawField(fldP);
}
MemHandleUnlock(resH);
}
DmReleaseResource(resH);
}
}
break;
default:
break;
}
return handled;
}
/***********************************************************************
*
* FUNCTION: AppStart
*
* DESCRIPTION: Get the current application's preferences.
*
* PARAMETERS: nothing
*
* RETURNED: Err value 0 if nothing went wrong
*
***********************************************************************/
static Err AppStart(void)
{
gEventWait = 60000;
RendererInitialize();
return errNone;
}
/***********************************************************************
*
* FUNCTION: AppStop
*
* DESCRIPTION: Save the current state of the application.
*
* PARAMETERS: nothing
*
* RETURNED: nothing
*
***********************************************************************/
static void AppStop(void)
{
/* Close all the open forms.*/
RendererFinalize();
FrmCloseAllForms();
}
/***********************************************************************
*
* FUNCTION: AppHandleEvent
*
* DESCRIPTION: This routine loads form resources and set the event
* handler for the form loaded.
*
* PARAMETERS: event - a pointer to an EventType structure
*
* RETURNED: true if the event has handle and should not be passed
* to a higher level handler.
*
***********************************************************************/
static Boolean AppHandleEvent(EventPtr eventP)
{
UInt16 formId;
FormPtr frmP;
if (eventP->eType == frmLoadEvent) {
/* Load the form resource */
formId = eventP->data.frmLoad.formID;
frmP = FrmInitForm(formId);
if (!frmP)
return false;
FrmSetActiveForm(frmP);
/* Set the event handler for the form. The handler of the currently*/
/* active form is called by FrmHandleEvent each time is receives an event*/
switch (formId) {
case MainForm:
{
extern Boolean MainFormHandleEvent(EventPtr eventP);
FrmSetEventHandler(frmP, MainFormHandleEvent);
}
break;
case RenderForm:
{
extern Boolean RenderFormHandleEvent(EventPtr eventP);
FrmSetEventHandler(frmP, RenderFormHandleEvent);
}
break;
}
return true;
}
return false;
}
/***********************************************************************
*
* FUNCTION: AppEventLoop
*
* DESCRIPTION: This routine is the event loop for the application.
*
* PARAMETERS: nothing
*
* RETURNED: nothing
*
***********************************************************************/
static void AppEventLoop(void)
{
UInt16 error;
EventType event;
do {
EvtGetEvent(&event, gEventWait);
if (! SysHandleEvent(&event)) {
/* handle some menu events */
if (! MenuHandleEvent(0, &event, &error)) {
if (! AppHandleEvent(&event)) {
FrmDispatchEvent(&event);
}
}
}
} while (event.eType != appStopEvent);
}
/***********************************************************************
*
* FUNCTION: StarterPalmMain
*
* DESCRIPTION: This is the main entry point for the application.
*
* PARAMETERS: cmd - word value specifying the launch code.
* cmdPB - pointer to a structure that is associated with the launch code.
* launchFlags - word value providing extra information about the launch.
*
* RETURNED: Result of launch
*
***********************************************************************/
static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
Err error;
switch (cmd) {
case sysAppLaunchCmdNormalLaunch:
error = AppStart();
if (error)
return error;
FrmGotoForm(MainForm);
AppEventLoop();
AppStop();
break;
}
return errNone;
}
/***********************************************************************
*
* FUNCTION: PilotMain
*
* DESCRIPTION: This is the main entry point for the application.
*
* PARAMETERS: cmd - word value specifying the launch code.
* cmdPB - pointer to a structure that is associated with the launch code.
* launchFlags - word value providing extra information about the launch.
* RETURNED: Result of launch
*
***********************************************************************/
UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
return StarterPalmMain(cmd, cmdPBP, launchFlags);
}