Can someone please tell me why my Categories does show
up
/******************************************************************************
*
* Copyright (c) 1999 Palm Computing, Inc. or its
subsidiaries.
* All rights reserved.
*
* File: Starter.cpp
*
*****************************************************************************/
#include <PalmOS.h>
#include "StarterRsc.h"
/***********************************************************************
*
* Entry Points
*
***********************************************************************/
/***********************************************************************
*
* Internal Structures
*
***********************************************************************/
typedef struct
{
UInt8 replaceme;
} StarterPreferenceType;
typedef struct
{
UInt8 replaceme;
} StarterAppInfoType;
typedef StarterAppInfoType* StarterAppInfoPtr;
typedef struct {
AppInfoType appInfo;
UInt16 myCustomAppInfo;
} MyAppInfoType;
/***********************************************************************
*
* Global variables
*
***********************************************************************/
//static Boolean HideSecretRecords;
/***********************************************************************
*
* Internal Constants
*
***********************************************************************/
#define appFileCreator 'STRT' // register your own
at http://www.palmos.com/dev/creatorid/
#define appVersionNum 0x01
#define appPrefID 0x00
#define appPrefVersionNum 0x01
#define appDatabaseType 'DATA'
#define appDatabase "CDatabaseTest"
// Define the minimum OS version we support (2.0 for
now).
#define kOurMinVersion
sysMakeROMVersion(2,0,0,sysROMStageRelease,0)
#define kPalmOS10Version
sysMakeROMVersion(1,0,0,sysROMStageRelease,0)
static Boolean ShowAllCategories = true;
static UInt16 CurrentCategory = dmAllCategories;
static char CategoryName [dmCategoryLength];
static UInt16 MemosInCategory;
static DmOpenRef DB;
/***********************************************************************
*
* Internal Functions
*
***********************************************************************/
Err CreateAndOpenDatabase(DmOpenRef dbPP, UInt16 mode)
{
Err error = errNone;
DmOpenRef dbP;
UInt16 cardNo;
MemHandle h;
LocalID dbID;
LocalID appInfoID;
MyAppInfoType *appInfoP;
// Create the database.
error = DmCreateDatabase (0, appDatabase,
appFileCreator, appDatabaseType,false);
if (error) return error;
// Open the database.
dbP = DmOpenDatabaseByTypeCreator(appDatabaseType,
appFileCreator,mode);
if (!dbP) return (dmErrCantOpen);
// Get database local ID and card number. We need
these to
// initialize app info block.
if (DmOpenDatabaseInfo(dbP, &dbID, NULL, NULL,
&cardNo, NULL))
return dmErrInvalidParam;
// Allocate app info in storage heap.
h = DmNewHandle(dbP, sizeof(MyAppInfoType));
if (!h) return dmErrMemError;
// Associate app info with database.
appInfoID = MemHandleToLocalID (h);
DmSetDatabaseInfo(cardNo, dbID, NULL, NULL, NULL,
NULL, NULL,
NULL, NULL, &appInfoID, NULL, NULL, NULL);
// Initialize app info block to 0.
appInfoP = (MyAppInfoType *)MemHandleLock(h);
DmSet(appInfoP, 0, sizeof(MyAppInfoType), 0);
// Initialize the categories.
CategoryInitialize ((AppInfoPtr) appInfoP,
CategoryStringList);
// Unlock the app info block.
MemPtrUnlock(appInfoP);
// Set the output parameter and return.
// dbPP = dbP;
DmCloseDatabase(dbP);
return error;
}
static DmOpenRef OpenRecordDatabase( const Char *name,
UInt32 creatorID, UInt32 type )
{
UInt16 mode = dmModeReadWrite;
SystemPreferencesType prefs;
DmOpenRef dbRef;
PrefGetPreferences( &prefs );
if( !prefs.hideSecretRecords ){
mode |= dmModeShowSecret;
}
dbRef = DmOpenDatabaseByTypeCreator( type,
creatorID, mode );
if( !dbRef )
{
Err err = CreateAndOpenDatabase(dbRef, mode);
// Err err = DmCreateDatabase( 0, name,
creatorID, type, false );
if( err != 0 ) return NULL;
dbRef = DmOpenDatabaseByTypeCreator( type,
creatorID, mode );
}
return dbRef;
}
/***********************************************************************
*
* FUNCTION: RomVersionCompatible
*
* DESCRIPTION: This routine checks that a ROM version
is meet your
* minimum requirement.
*
* PARAMETERS: requiredVersion - minimum rom version
required
* (see
sysFtrNumROMVersion in SystemMgr.h
* for format)
* launchFlags - flags that indicate
if the application
* UI is initialized.
*
* RETURNED: error code or zero if rom is
compatible
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Err RomVersionCompatible(UInt32
requiredVersion, UInt16 launchFlags)
{
UInt32 romVersion;
// See if we're on in minimum required version of the
ROM or later.
FtrGet(sysFtrCreator, sysFtrNumROMVersion,
&romVersion);
if (romVersion < requiredVersion)
{
if ((launchFlags & (sysAppLaunchFlagNewGlobals |
sysAppLaunchFlagUIApp)) ==
(sysAppLaunchFlagNewGlobals |
sysAppLaunchFlagUIApp))
{
FrmAlert (RomIncompatibleAlert);
// Palm OS 1.0 will continuously relaunch this app
unless we switch to
// another safe one.
if (romVersion <= kPalmOS10Version)
{
AppLaunchWithCommand(sysFileCDefaultApp,
sysAppLaunchCmdNormalLaunch, NULL);
}
}
return sysErrRomIncompatible;
}
return errNone;
}
/***********************************************************************
*
* FUNCTION: GetObjectPtr
*
* DESCRIPTION: This routine returns a pointer to an
object in the current
* form.
*
* PARAMETERS: formId - id of the form to display
*
* RETURNED: void *
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void * GetObjectPtr(UInt16 objectID)
{
FormPtr frmP;
frmP = FrmGetActiveForm();
return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP,
objectID));
}
/***********************************************************************
*
* FUNCTION: MainFormInit
*
* DESCRIPTION: This routine initializes the MainForm
form.
*
* PARAMETERS: frm - pointer to the MainForm form.
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void MainFormInit(FormPtr frmP)
{
// DmOpenRef dbRef;
DB = OpenRecordDatabase(appDatabase, appFileCreator,
appDatabaseType);
CategoryGetName (DB, CurrentCategory, CategoryName);
if (*CategoryName == 0)
{
CurrentCategory = dmAllCategories;
ShowAllCategories = true;
}
// DmCloseDatabase(dbRef);
}
/***********************************************************************
*
* FUNCTION: MainFormDoCommand
*
* DESCRIPTION: This routine performs the menu command
specified.
*
* PARAMETERS: command - menu item id
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Boolean MainFormDoCommand(UInt16 command)
{
Boolean handled = false;
FormPtr frmP;
switch (command)
{
case MainOptionsAboutStarterApp:
MenuEraseStatus(0); //
Clear the menu status
from the display.
frmP = FrmInitForm (AboutForm);
FrmDoDialog (frmP); //
Display the About Box.
FrmDeleteForm (frmP);
handled = true;
break;
}
return handled;
}
/***********************************************************************
*
* 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.
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void ChangeCategory (UInt16 category)
{
if (ShowAllCategories)
MemosInCategory = DmNumRecordsInCategory (DB,
dmAllCategories);
else
MemosInCategory = DmNumRecordsInCategory (DB,
category);
CurrentCategory = category;
// TopVisibleRecord = 0;
}
static UInt16 ListViewSelectCategory (void)
{
FormPtr frm;
TablePtr table;
UInt16 category;
Boolean categoryEdited;
// Process the category popup list.
category = CurrentCategory;
frm = FrmGetActiveForm();
categoryEdited = CategorySelect (DB, frm,
MainCatPopTrigger,
MainCatList,
true, &category, CategoryName,
1, categoryDefaultEditCategoryString);
if (category == dmAllCategories)
ShowAllCategories = true;
else
ShowAllCategories = false;
if (categoryEdited || (category != CurrentCategory))
{
ChangeCategory (category);
// Display the new category.
// ListViewLoadRecords (frm);
// table = GetObjectPtr (ListTable);
// TblEraseTable (table);
// TblDrawTable (table);
}
return (category);
}
static Boolean MainFormHandleEvent(EventPtr eventP)
{
Boolean handled = false;
FormPtr frmP;
switch (eventP->eType)
{
case menuEvent:
return MainFormDoCommand(eventP->data.menu.itemID);
case frmOpenEvent:
frmP = FrmGetActiveForm();
MainFormInit( frmP);
FrmDrawForm ( frmP);
handled = true;
break;
case frmCloseEvent:
DmCloseDatabase(DB);
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID)
{
case MainCatPopTrigger:
ListViewSelectCategory ();
handled = true;
break;
}
case frmUpdateEvent:
// To do any custom drawing here, first call
FrmDrawForm(), then do your
// drawing, and then set handled to true.
break;
default:
break;
}
return handled;
}
/***********************************************************************
*
* 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.
*
* REVISION HISTORY:
*
*
***********************************************************************/
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);
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:
FrmSetEventHandler(frmP, MainFormHandleEvent);
break;
default:
// ErrFatalDisplay("Invalid Form Load Event");
break;
}
return true;
}
return false;
}
/***********************************************************************
*
* FUNCTION: AppEventLoop
*
* DESCRIPTION: This routine is the event loop for the
application.
*
* PARAMETERS: nothing
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void AppEventLoop(void)
{
UInt16 error;
EventType event;
do {
EvtGetEvent(&event, evtWaitForever);
if (! SysHandleEvent(&event))
if (! MenuHandleEvent(0, &event, &error))
if (! AppHandleEvent(&event))
FrmDispatchEvent(&event);
} while (event.eType != appStopEvent);
}
/***********************************************************************
*
* FUNCTION: AppStart
*
* DESCRIPTION: Get the current application's
preferences.
*
* PARAMETERS: nothing
*
* RETURNED: Err value 0 if nothing went wrong
*
* REVISION HISTORY:
*
*
***********************************************************************/
static Err AppStart(void)
{
StarterPreferenceType prefs;
UInt16 prefsSize;
// Read the saved preferences / saved-state
information.
prefsSize = sizeof(StarterPreferenceType);
if (PrefGetAppPreferences(appFileCreator, appPrefID,
&prefs, &prefsSize, true) !=
noPreferenceFound)
{
}
return errNone;
}
/***********************************************************************
*
* FUNCTION: AppStop
*
* DESCRIPTION: Save the current state of the
application.
*
* PARAMETERS: nothing
*
* RETURNED: nothing
*
* REVISION HISTORY:
*
*
***********************************************************************/
static void AppStop(void)
{
StarterPreferenceType prefs;
// Write the saved preferences / saved-state
information. This data
// will saved during a HotSync backup.
PrefSetAppPreferences (appFileCreator, appPrefID,
appPrefVersionNum,
&prefs, sizeof (prefs), true);
// Close all the open forms.
FrmCloseAllForms ();
}
/***********************************************************************
*
* 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
*
* REVISION HISTORY:
*
*
***********************************************************************/
static UInt32 StarterPalmMain(UInt16 cmd, MemPtr
/*cmdPBP*/, UInt16 launchFlags)
{
Err error;
error = RomVersionCompatible (kOurMinVersion,
launchFlags);
if (error) return (error);
switch (cmd)
{
case sysAppLaunchCmdNormalLaunch:
error = AppStart();
if (error)
return error;
FrmGotoForm(MainForm);
AppEventLoop();
AppStop();
break;
default:
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
*
* REVISION HISTORY:
*
*
***********************************************************************/
UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16
launchFlags)
{
return StarterPalmMain(cmd, cmdPBP, launchFlags);
}
__________________________________________________
Do You Yahoo!?
Send FREE video emails in Yahoo! Mail!
http://promo.yahoo.com/videomail/
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/tech/support/forums/