📄 sugarmemomain.c
字号:
DmCloseDatabase(db);
return;
}
StrPrintF(newName, "%s%s", "SG_", name);
CreateWordDB(newName);
localID = DmFindDatabase(0, newName);
newdb = DmOpenDatabase(0, localID, dmModeReadWrite);
MemSet(&defaultNewRecord, sizeof(Header) + sizeof(LTStatus) + sizeof(MemorizingStatus), 0);
SetBitMacro(defaultNewRecord.header.allBits, RawQueue);
defaultNewRecord.memoStatus.eFactor = 2.5;
defaultNewRecord.memoStatus.difficulty = 40;
for (index = WordFieldQuestion; index < WordFieldsCount; index++)
defaultNewRecord.field[index] = NULL;
for (index = 16; index < num; index++){
record = defaultNewRecord;
UnpackSuperMemoRecord(db, index, &record, &recordH, cache);
NewWordRecord(newdb, &record, &newIndex);
DmSetRecordInfo (newdb, newIndex, &attr, NULL);
MemHandleUnlock(recordH);
}
DmCloseDatabase(newdb);
MainFormLoadTable();
}
/*
FormType * form;
FieldType * field;
Char* p;
Char newp[50];
Char cache[100];
DmOpenRef db, newdb;
LocalID localID;
UInt16 num, index, newIndex;
UInt16 attr = dmUnfiledCategory;
WordRecordType record;
MemHandle recordH;
form = FrmInitForm(InputDBNameForm);
field = FrmGetObjectPtr(form, FrmGetObjectIndex(form, InputDBNameInputField));
FldSetMaxChars(field, DBNameMaxLen);
if (FrmDoDialog(form) == InputDBNameOKButton) {
p = FldGetTextPtr(field);
if (p != NULL && StrLen(p)>0) {
localID = DmFindDatabase(0, p);
if (localID == 0) goto end;
db = DmOpenDatabase(0, localID, dmModeReadWrite);
num = DmNumRecordsInCategory(db, dmAllCategories);
if (num < 17) {
DmCloseDatabase(db);
goto end;
}
StrPrintF(newp, "%s%s", "new_", p);
CreateWordDB(newp);
localID = DmFindDatabase(0, newp);
newdb = DmOpenDatabase(0, localID, dmModeReadWrite);
for (index = 16; index < num; index++){
record = DefaultNewWordRecord;
UnpackSuperMemoRecord(db, index, &record, &recordH, cache);
NewWordRecord(newdb, &record, &newIndex);
DmSetRecordInfo (newdb, newIndex, &attr, NULL);
MemHandleUnlock(recordH);
}
DmCloseDatabase(newdb);
}
}
end:FrmDeleteForm(form);
FrmUpdateForm(MainForm, frmRedrawUpdateCode);
*/
static Boolean MainFormDoCommand(UInt16 command)
{
Boolean handled = false;
FormType * frmP;
switch (command)
{
case MainDatabaseSugarMemo:
// Clear the menu status from the display
MenuEraseStatus(0);
// Display the About Box.
frmP = FrmInitForm (AboutForm);
FrmDoDialog (frmP);
FrmDeleteForm (frmP);
handled = true;
break;
case MainDatabaseMenuItem1200: //新建
DoCommandNewDatabase();
handled = true; //
break;
case MainDatabaseMenuItem1201: //重命名
DoCommandRenameDatabase();
handled = true;
break;
case MainDatabaseMenuItem1202: //删除
DoCommandDeleteDatabase();
handled = true;
break;
case MainDatabaseMenuItem1204: //Pref
MenuEraseStatus(0);
if (GetSelectedDatabase()) FrmGotoForm(PrefsForm);
handled = true;
break;
case MainAdvancedMenuItem1000: //clear choice buffer
MenuEraseStatus(0);
ClearChoiceBuffer();
handled = true;
break;
case MainAdvancedMenuItem1001: //sort study list
MenuEraseStatus(0);
SortStudyList();
handled = true;
break;
case MainAdvancedMenuItem1002: //rebuild test queue
MenuEraseStatus(0);
RebuildTestQueue();
handled = true;
break;
case MainAdvancedMenuItem1004: //Reset
DoCommandResetDatabase();
handled = true;
break;
}
return handled;
}
//MainForm Handle Event
static Boolean MainFormHandleEvent(EventType * eventP)
{
Boolean handled = false;
FormType * frmP = FrmGetActiveForm();
switch (eventP->eType)
{
case menuEvent:
return MainFormDoCommand(eventP->data.menu.itemID);
case frmOpenEvent:
MainFormInit();
FrmDrawForm(frmP);
MainFormLoadTable();
InitializeAllDatabase();
handled = true;
break;
case ctlSelectEvent:
switch (eventP->data.ctlSelect.controlID){//switch (event->data.ctlSelect.controlID)
case MainReviewButton:
if (GetSelectedDatabase()){
HeaderRecordIndex = TestingRecordIndex;
FrmGotoForm(Learn2Form);
}
handled = true;
break;
case MainBrowseButton:
if (GetSelectedDatabase()){
HeaderRecordIndex = HeaderIndexCounts;
FrmGotoForm(BrowseForm);
}
handled = true;
break;
case MainLearnButton:
if (GetSelectedDatabase()){
HeaderRecordIndex = LearningRecordIndex;
FrmGotoForm(Learn2Form);
}
handled = true;
break;
case MainHelpButton:
FrmHelp(MainHelpString);
handled = true;
break;
default:
break;
}
break;
case keyDownEvent:
if (eventP->data.keyDown.chr == chrSmall_I){
PeekDBVersion();
handled = true;
}
if (eventP->data.keyDown.chr == chrPercentSign){
DoCommandImport();
handled = true;
}
break;
default:
break;
}
return handled;
}
// FUNCTION: AppHandleEvent
static Boolean AppHandleEvent(EventType * eventP)
{
UInt16 formId;
FormType * frmP;
Boolean handled = false;
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;
case BrowseForm:
FrmSetEventHandler(frmP, BrowseFormHandleEvent);
break;
case LearnForm:
FrmSetEventHandler(frmP, LearnFormHandleEvent);
break;
case EditForm:
FrmSetEventHandler(frmP, EditFormHandleEvent);
break;
case DetailForm:
FrmSetEventHandler(frmP, DetailFormHandleEvent);
break;
case PhoneticForm:
FrmSetEventHandler(frmP, PhoneticFormHandleEvent);
break;
case PrefsForm:
FrmSetEventHandler(frmP, PrefsFormHandleEvent);
break;
case Learn2Form:
FrmSetEventHandler(frmP, Learn2FormHandleEvent);
break;
case FontForm:
FrmSetEventHandler(frmP, FontFormHandleEvent);
break;
default:
break;
}
return true;
}
return false;
}
// FUNCTION: AppEventLoop
//
// DESCRIPTION: This routine is the event loop for the application.
static void AppEventLoop(void)
{
UInt16 error;
EventType event;
Boolean handled = false;
do {
// change timeout if you need periodic nilEvents
EvtGetEvent(&event, 50); //evtWaitForever);
handled = false;
if (event.eType == keyDownEvent){
if ((HeaderRecordIndex == LearningRecordIndex) || (HeaderRecordIndex == TestingRecordIndex)){
if (TxtCharIsHardKey(event.data.keyDown.modifiers, event.data.keyDown.chr)){
handled = Learn2FormDoHardKey(&event);
}
}
}
if (!handled)
{
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.
//
// RETURNED:
// errNone - if nothing went wrong
static Err AppStart(void)
{
UInt16 prefsSize;
// Read the saved preferences / saved-state information.
prefsSize = sizeof(SugarMemoPreferenceType);
if (PrefGetAppPreferences(
appFileCreator, appPrefID, &g_prefs, &prefsSize, true) !=
noPreferenceFound)
{
// FIXME: setup g_prefs with default values
}
phoneticSmallFontH = DmGetResource('NFNT', 12345);
phoneticSmallFontP = (FontType*) MemHandleLock(phoneticSmallFontH);
FntDefineFont(PhoneticSmallFont, phoneticSmallFontP);
phoneticLargeFontH = DmGetResource('NFNT', 12346);
phoneticLargeFontP = (FontType*) MemHandleLock(phoneticLargeFontH);
FntDefineFont(PhoneticLargeFont, phoneticLargeFontP);
phoneticHugeFontH = DmGetResource('NFNT', 12347);
phoneticHugeFontP = (FontType*) MemHandleLock(phoneticHugeFontH);
FntDefineFont(PhoneticHugeFont, phoneticHugeFontP);
OS5_16_FontH = DmGetResource('NFNT', 12348);
OS5_16_FontP = (FontType*) MemHandleLock(OS5_16_FontH);
FntDefineFont(OS5_16_Font, OS5_16_FontP);
return errNone;
}
// FUNCTION: AppStop
static void AppStop(void)
{
// Write the saved preferences / saved-state information. This
// data will be saved during a HotSync backup.
PrefSetAppPreferences(
appFileCreator, appPrefID, appPrefVersionNum,
&g_prefs, sizeof(SugarMemoPreferenceType), true);
MemHandleUnlock(phoneticSmallFontH);
DmReleaseResource(phoneticSmallFontH);
MemHandleUnlock(phoneticLargeFontH);
DmReleaseResource(phoneticLargeFontH);
MemHandleUnlock(phoneticHugeFontH);
DmReleaseResource(phoneticHugeFontH);
MemHandleUnlock(OS5_16_FontH);
DmReleaseResource(OS5_16_FontH);
// Close all the open forms.
FrmCloseAllForms();
}
// all code from here to end of file should use no global variables
#pragma warn_a5_access on
// FUNCTION: RomVersionCompatible
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: SugarMemoPalmMain
static UInt32 SugarMemoPalmMain(
UInt16 cmd,
MemPtr /*cmdPBP*/,
UInt16 launchFlags)
{
Err error;
error = RomVersionCompatible (ourMinVersion, launchFlags);
if (error) return (error);
switch (cmd)
{
case sysAppLaunchCmdNormalLaunch:
error = AppStart();
if (error)
return error;
// start application by opening the main form
// and then entering the main event loop
FrmGotoForm(MainForm);
AppEventLoop();
AppStop();
break;
default:
break;
}
return errNone;
}
// FUNCTION: PilotMain
UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
return SugarMemoPalmMain(cmd, cmdPBP, launchFlags);
}
// turn a5 warning off to prevent it being set off by C++
// static initializer code generation
#pragma warn_a5_access reset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -