#include <PalmOS.h>
#include "MainRsc.h"
typedef enum e_CalcMode
{
CM_RUNTIME = 0,
CM_RATE
}T_CalcMode;
T_CalcMode enumCalcMode = CM_RUNTIME;
FormPtr formMain; /* pointer to Main form structure */
Coord coFldRuntimeX, coFldRuntimeY, coFldRateX, coFldRateY;
FlpCompDouble dAmount, dRPC, dRate, dRuntime;
MemHandle hMemAmount, hMemRPC, hMemRate, hMemRuntime;
void GetFieldTextValues();
void Wait(UInt32 iSec)
{
UInt32 Start;
Start = TimGetSeconds();
while(TimGetSeconds() < Start + 3);
}
void StopCalcError()
{
WinEraseChars("Berechne!", 9, 50, 50);
WinDrawChars("Fehler", 9, 50, 50);
Wait(3);
WinEraseChars("Fehler", 9, 50, 50);
}
void DoCalculate()
{
//Berechnung
WinDrawChars("Berechne!", 9, 50, 50);
GetFieldTextValues();
if((dAmount.d == 0.0) ||
(dRPC.d == 0.0) ||
((dRate.d == 0.0) && (enumCalcMode == CM_RUNTIME)) ||
((dRuntime.d == 0.0) && (enumCalcMode == CM_RATE)))
StopCalcError();
//Hier soll ma was berechnet werden
WinEraseChars("Berechne!", 9, 50, 50);
}
void SetCalcMode(T_CalcMode mode)
{
UInt16 cbIndexRuntime, cbIndexRate, fieldIndexRuntime, fieldIndexRate;
cbIndexRate = FrmGetObjectIndex(formMain, CheckRate);
cbIndexRuntime = FrmGetObjectIndex(formMain, CheckRuntime);
FrmSetControlValue (formMain, cbIndexRuntime, mode == CM_RUNTIME ? 1 : 0);
FrmSetControlValue (formMain, cbIndexRate, mode == CM_RATE ? 1 : 0);
fieldIndexRate = FrmGetObjectIndex(formMain, FieldRate);
fieldIndexRuntime = FrmGetObjectIndex(formMain, FieldRuntime);
FrmShowObject(formMain, mode == CM_RUNTIME ? fieldIndexRate : fieldIndexRuntime);
FrmHideObject(formMain, mode == CM_RUNTIME ? fieldIndexRuntime : fieldIndexRate);
enumCalcMode = mode;
}
void SetFieldTextValues()
{
// Werte in den Fields setzen und anzeigen
MemPtr pMem;
UInt16 fieldIndexRuntime, fieldIndexRate, filedIndexRPC, fieldIndexAmount;
FieldType *pftAmount, *pftRPC, *pftRate, *pftRuntime;
fieldIndexRate = FrmGetObjectIndex(formMain, FieldRate);
fieldIndexRuntime = FrmGetObjectIndex(formMain, FieldRuntime);
filedIndexRPC = FrmGetObjectIndex(formMain, FieldRPC);
fieldIndexAmount = FrmGetObjectIndex(formMain, FieldAmount);
pftAmount = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexAmount);
pftRPC = (FieldType*)FrmGetObjectPtr (formMain, filedIndexRPC);
pftRate = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexRate);
pftRuntime = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexRuntime);
pMem = MemHandleLock(hMemAmount);
FlpFToA(dAmount.fd, (Char *)pMem);
MemHandleUnlock(hMemAmount);
FldDrawField(pftAmount);
pMem = MemHandleLock(hMemRPC);
FlpFToA(dRPC.fd, (Char *)pMem);
MemHandleUnlock(hMemRPC);
FldDrawField(pftRPC);
pMem = MemHandleLock(hMemRate);
FlpFToA(dRate.fd, (Char *)pMem);
MemHandleUnlock(hMemRate);
FldDrawField(pftRate);
pMem = MemHandleLock(hMemRuntime);
FlpFToA(dRuntime.fd, (Char *)pMem);
MemHandleUnlock(hMemRuntime);
FldDrawField(pftRuntime);
}
void GetFieldTextValues()
{
// Werte aus den Fields auslesen und in die Variablen speichern
MemPtr pMem;
UInt16 fieldIndexRuntime, fieldIndexRate, filedIndexRPC, fieldIndexAmount;
FieldType *pftAmount, *pftRPC, *pftRate, *pftRuntime;
fieldIndexRate = FrmGetObjectIndex(formMain, FieldRate);
fieldIndexRuntime = FrmGetObjectIndex(formMain, FieldRuntime);
filedIndexRPC = FrmGetObjectIndex(formMain, FieldRPC);
fieldIndexAmount = FrmGetObjectIndex(formMain, FieldAmount);
pftAmount = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexAmount);
pftRPC = (FieldType*)FrmGetObjectPtr (formMain, filedIndexRPC);
pftRate = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexRate);
pftRuntime = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexRuntime);
pMem = MemHandleLock(hMemAmount);
dAmount.fd = FlpAToF((Char *)pMem);
MemHandleUnlock(hMemAmount);
pMem = MemHandleLock(hMemRPC);
dRPC.fd = FlpAToF((Char *)pMem);
MemHandleUnlock(hMemRPC);
pMem = MemHandleLock(hMemRate);
dRate.fd = FlpAToF((Char *)pMem);
MemHandleUnlock(hMemRate);
pMem = MemHandleLock(hMemRuntime);
dRuntime.fd = FlpAToF((Char *)pMem);
MemHandleUnlock(hMemRuntime);
}
/* main form handler function */
static Boolean MainformHandleEvent( EventType* event)
{
/* Parse the event */
if( event->eType == ctlSelectEvent )
{
switch(event->data.ctlSelect.controlID)
{
case ButtonDoCalculate:
DoCalculate();
break;
case CheckRuntime:
SetCalcMode(CM_RUNTIME);
break;
case CheckRate:
SetCalcMode(CM_RATE);
break;
}
}
return( false );
}
/* application init function */
void AppStart()
{
UInt16 cbIndex;
UInt16 fieldIndexRuntime, fieldIndexRate, filedIndexRPC, fieldIndexAmount;
FieldType *pftAmount, *pftRPC, *pftRate, *pftRuntime;
/* Initialize form */
formMain = FrmInitForm( ZinsrechnerForm );
FrmSetEventHandler( formMain, MainformHandleEvent );
FrmSetActiveForm( formMain );
FrmDrawForm( formMain );
fieldIndexRate = FrmGetObjectIndex(formMain, FieldRate);
fieldIndexRuntime = FrmGetObjectIndex(formMain, FieldRuntime);
filedIndexRPC = FrmGetObjectIndex(formMain, FieldRPC);
fieldIndexAmount = FrmGetObjectIndex(formMain, FieldAmount);
FrmGetObjectPosition (formMain, fieldIndexRuntime, &coFldRuntimeX, &coFldRuntimeY);
FrmGetObjectPosition (formMain, fieldIndexRate, &coFldRateX, &coFldRateY);
hMemAmount = MemHandleNew(25);
hMemRPC = MemHandleNew(25);
hMemRate = MemHandleNew(25);
hMemRuntime = MemHandleNew(25);
pftAmount = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexAmount);
pftRPC = (FieldType*)FrmGetObjectPtr (formMain, filedIndexRPC);
pftRate = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexRate);
pftRuntime = (FieldType*)FrmGetObjectPtr (formMain, fieldIndexRuntime);
FldSetTextHandle(pftAmount, hMemAmount);
FldSetTextHandle(pftRPC, hMemRPC);
FldSetTextHandle(pftRate, hMemRate);
FldSetTextHandle(pftRuntime, hMemRuntime);
SetFieldTextValues();
SetCalcMode(CM_RUNTIME);
}
/* application stop function */
void AppStop( void )
{
MemHandleFree(hMemAmount);
MemHandleFree(hMemRPC);
MemHandleFree(hMemRate);
MemHandleFree(hMemRuntime);
FrmCloseAllForms ();
}
void EventLoop()
{
EventType event; /* event structure */
/* event loop */
do
{
/* Get the next event */
EvtGetEvent( &event, evtWaitForever );
/* Handle system events */
if( SysHandleEvent( &event ) )
continue;
/* Handle form events */
FrmDispatchEvent( &event );
/* If it's a stop event, exit */
} while( event.eType != appStopEvent );
}
/***********************************************************************
*
* FUNCTION: PilotMain
*
* DESCRIPTION: The entry point for all Palm OS applications, this
* function's sole purpose is to receive and respond to
* launch codes.
*
* PARAMETERS: -> cmd The launch code to which your application is to
* respond. See Palm OS® Programmer's API Reference
* Chapter 1, "Application Launch Codes,"
* for a list of predefined launch codes. You may create
* additional launch codes; see "Creating Your Own Launch
* Codes" of the Palm OS Programmer's Companion, vol. I.
*
* -> cmdPBP A pointer to a structure containing any
* launch-command-specific parameters, or NULL if the
* launch code has none. See the description of each launch
* code for a description of the parameter structure that
* accompanies it, if any.
*
* -> launchFlags Flags that indicate whether your application's
* global variables are available, whether your application
* is now the active application, whether it already was the
* active application, and so on. See "Launch Flags" for a
* list of launch flags.
*
* RETURNED: Return errNone if your application processed the launch
* code successfully, or an appropriate error code if there
* was a problem. When another application invokes your
* application using SysAppLaunch, this value is returned to
* the caller.
*
***********************************************************************/
UInt32 PilotMain (UInt16 cmd, void *cmdPBP, UInt16 launchFlags)
{
/* If this is not a normal launch, don't launch */
if( cmd != sysAppLaunchCmdNormalLaunch )
return( 0 );
AppStart();
EventLoop();
AppStop();
return errNone;
}