/********************************************************************** Tell the Palm to act like the user tapped the given button... Return true if we did (a very few callers would like to know) **********************************************************************/ Boolean hit_button_if_usable(FormPtr frm, Word btn_index) { ControlPtr btn; btn = FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, btn_index)); if (btn->attr.usable) CtlHitControl(btn); return (btn->attr.usable); }
void MainFormPressFindButton(const FormType* form) { Assert(form); Assert(formDictMain==FrmGetFormId(form)); UInt16 index=FrmGetObjectIndex(form, buttonFind); Assert(frmInvalidObjectId!=index); const ControlType* findButton=static_cast<const ControlType*>(FrmGetObjectPtr(form, index)); Assert(findButton); CtlHitControl(findButton); }
static void ResidentBrowseFormChooseWord(AppContext* appContext, FormType* form, UInt32 wordNo) { ControlType* cancelButton=NULL; UInt16 index=FrmGetObjectIndex(form, buttonCancel); Assert(index!=frmInvalidObjectId); appContext->currentWord = wordNo; Assert(appContext->currentWord < appContext->wordsCount); cancelButton=(ControlType*)FrmGetObjectPtr(form, index); Assert(cancelButton); CtlHitControl(cancelButton); }
static Boolean RegistrationFormHandleEvent(EventType* event) { Boolean handled=false; FormType* form=FrmGetFormPtr(formRegistration); UInt16 index; char * regCode; AppContext* appContext=GetAppContext(); switch (event->eType) { case winEnterEvent: if ((reinterpret_cast<_WinEnterEventType&>(event->data)).enterWindow==(void*)form) { index=FrmGetObjectIndex(form, fieldRegCode); Assert(frmInvalidObjectId!=index); FrmSetFocus(form, index); FieldType* field=static_cast<FieldType*>(FrmGetObjectPtr(form, index)); Assert(field); regCode = (char*)appContext->prefs.regCode; if (StrLen(regCode)>0) { FldClearInsert(form, fieldRegCode, regCode); FldSelectAllText(field); } } handled = true; break; case keyDownEvent: if (returnChr==event->data.keyDown.chr || linefeedChr==event->data.keyDown.chr) { index=FrmGetObjectIndex(form, buttonRegister); Assert(frmInvalidObjectId!=index); const ControlType* regButton=static_cast<const ControlType*>(FrmGetObjectPtr(form, index)); Assert(regButton); CtlHitControl(regButton); handled=true; } } return handled; }
Boolean ExamsFormHandleEvent(EventPtr event) { FormPtr frm=FrmGetActiveForm(); Boolean handled = false; Boolean categoryEdited, reDraw=false; UInt16 category, numRecords; ControlType *ctl; UInt32 *recordList; if (event->eType == ctlSelectEvent) { // button handling switch (event->data.ctlSelect.controlID) { case BUTTON_ex_back: handled=true; FrmGotoForm(FORM_main); break; case BUTTON_ex_add: handled=true; if (CountCourses() > 0) { gExamsLastSelRowUID=0; FrmPopupForm(FORM_exam_details); } else { FrmAlert(ALERT_nocourses); } break; case BUTTON_ex_edit: handled=true; gExamsLastSelRowUID=TblGetRowData(GetObjectPtr(TABLE_exams), gExamsSelRow); FrmPopupForm(FORM_exam_details); break; case BUTTON_ex_note: { UInt16 index=0; handled=true; gExamsLastSelRowUID=TblGetRowData(GetObjectPtr(TABLE_exams), gExamsSelRow); DmFindRecordByID(DatabaseGetRefN(DB_MAIN), gExamsLastSelRowUID, &index); NoteSet(index, FORM_exams); FrmPopupForm(NewNoteView); break; } case BUTTON_ex_del: handled=true; gExamsLastSelRowUID=TblGetRowData(GetObjectPtr(TABLE_exams), gExamsSelRow); ExamDelete(); break; case BUTTON_ex_beam: handled=true; gExamsLastSelRowUID=TblGetRowData(GetObjectPtr(TABLE_exams), gExamsSelRow); ExamBeam(); break; case LIST_ex_cat_trigger: handled=true; category=DatabaseGetCat(); numRecords=DmNumRecordsInCategory(DatabaseGetRef(), DELETE_CATEGORY); recordList=(UInt32 *)MemPtrNew(numRecords * sizeof(UInt32)); CatPreEdit(numRecords, recordList); categoryEdited = CategorySelect(DatabaseGetRef(), frm, LIST_ex_cat_trigger, LIST_ex_cat, false, &category, gCategoryName, 0, STRING_cat_edit); // categoryDefaultEditCategoryString if (categoryEdited || (category != DatabaseGetCat())) { reDraw=true; DatabaseSetCat(category); ctl = GetObjectPtr(LIST_ex_cat_trigger); CategoryGetName(DatabaseGetRef(), category, gCategoryName); CategorySetTriggerLabel(ctl, gCategoryName); } CatPostEdit(numRecords, recordList); if (reDraw) { gExamsOffset=0; gExamsSelRow=0; FrmUpdateForm(FORM_exams, frmRedrawUpdateCode); } if (recordList != NULL) MemPtrFree((MemPtr)recordList); break; default: break; } } else if (event->eType == tblEnterEvent) { UInt16 i; if (event->data.tblEnter.column == EXCOL_DONE) { handled=false; } else if (event->data.tblEnter.column == EXCOL_NOTE) { MemHandle m; Boolean hasNote=false; gExamsSelRow=event->data.tblEnter.row; for (i=0; i < TblGetNumberOfRows(event->data.tblEnter.pTable); ++i) { RectangleType r; TblGetItemBounds(event->data.tblEnter.pTable, i, EXCOL_SELI, &r); TableDrawSelection(event->data.tblEnter.pTable, i, event->data.tblEnter.column, &r); } m = DmQueryRecord(DatabaseGetRefN(DB_MAIN), TblGetRowID(event->data.tblEnter.pTable, event->data.tblEnter.row)); if (m) { ExamDBRecord *ex = (ExamDBRecord *)MemHandleLock(m); if (ex->note) hasNote = true; else hasNote = false; MemHandleUnlock(m); } if (hasNote) { Coord newPointX, newPointY; Boolean isPenDown=false, drawn=false; RectangleType fieldBounds; IndexedColorType curForeColor, curBackColor, curTextColor; Char noteSymb[2] = { GADGET_NOTESYMBOL, 0 }; FontID oldFont; EvtGetPen(&newPointX, &newPointY, &isPenDown); TblGetItemBounds(event->data.tblEnter.pTable, event->data.tblEnter.row, EXCOL_NOTE, &fieldBounds); oldFont = FntSetFont(symbolFont); while (isPenDown){ if (! drawn && RctPtInRectangle(newPointX, newPointY, &fieldBounds)) { curForeColor = WinSetForeColor(UIColorGetTableEntryIndex(UIObjectSelectedForeground)); curBackColor = WinSetBackColor(UIColorGetTableEntryIndex(UIObjectSelectedFill)); curTextColor = WinSetTextColor(UIColorGetTableEntryIndex(UIObjectSelectedForeground)); TNDrawCharsToFitWidth(noteSymb, &fieldBounds); WinSetForeColor(curForeColor); WinSetForeColor(curBackColor); WinSetForeColor(curTextColor); drawn = true; } else if (drawn && ! RctPtInRectangle(newPointX, newPointY, &fieldBounds)) { curForeColor = WinSetForeColor(UIColorGetTableEntryIndex(UIObjectForeground)); curBackColor = WinSetBackColor(UIColorGetTableEntryIndex(UIObjectFill)); curTextColor = WinSetTextColor(UIColorGetTableEntryIndex(UIObjectForeground)); TNDrawCharsToFitWidth(noteSymb, &fieldBounds); WinSetForeColor(curForeColor); WinSetForeColor(curBackColor); WinSetForeColor(curTextColor); drawn = false; } EvtGetPen(&newPointX, &newPointY, &isPenDown); } FntSetFont(oldFont); } else { handled = true; } } else { gExamsSelRow=event->data.tblEnter.row; for (i=0; i < TblGetNumberOfRows(event->data.tblEnter.pTable); ++i) { RectangleType r; TblGetItemBounds(event->data.tblEnter.pTable, i, EXCOL_SELI, &r); TableDrawSelection(event->data.tblEnter.pTable, i, event->data.tblEnter.column, &r); } handled=true; } } else if (event->eType == tblSelectEvent) { if (event->data.tblEnter.column == EXCOL_DONE) { MemHandle mex; ExamDBRecord *ex; Boolean done=(TblGetItemInt(event->data.tblSelect.pTable, event->data.tblSelect.row, event->data.tblSelect.column) == 0) ? false : true; UInt16 flags, index=TblGetRowID(event->data.tblSelect.pTable, event->data.tblSelect.row); mex=DmGetRecord(DatabaseGetRefN(DB_MAIN), index); ex = MemHandleLock(mex); flags = ex->flags; if (done) { flags |= EX_FLAG_DONE; } else { flags &= (EX_FLAG_DONE ^ 0xFFFF); } DmWrite(ex, offsetof(ExamDBRecord, flags), &flags, sizeof(flags)); DmReleaseRecord(DatabaseGetRefN(DB_MAIN), index, false); TblMarkRowInvalid(event->data.tblSelect.pTable, event->data.tblSelect.row); TblRedrawTable(event->data.tblSelect.pTable); MemHandleUnlock(mex); } else if (event->data.tblEnter.column == EXCOL_NOTE) { ControlType *ctl=GetObjectPtr(BUTTON_ex_note); // Don't need code twice, just read ctlSelect Event for BUTTON_ex_note CtlHitControl(ctl); } handled=true; } else if (event->eType == ctlRepeatEvent) { // Repeat buttons pressed if( event->data.ctlRepeat.controlID == REPEAT_ex_up ) gExamsOffset -= 1; else gExamsOffset += 1; ExamsTableInit(); TblMarkTableInvalid(GetObjectPtr(TABLE_exams)); TblRedrawTable(GetObjectPtr(TABLE_exams)); } else if (event->eType == keyDownEvent) { // We have a hard button assigned and it was pressed if (TxtCharIsHardKey(event->data.keyDown.modifiers, event->data.keyDown.chr)) { if (! (event->data.keyDown.modifiers & poweredOnKeyMask)) { FrmGotoForm(FORM_main); handled = true; } } } else if (event->eType == menuOpenEvent) { return HandleMenuOpenEvent(event); } else if (event->eType == menuEvent) { // forwarding of menu events return HandleMenuEvent(event->data.menu.itemID); } else if (event->eType == frmOpenEvent) { // initializes and draws the form ControlType *ctl; gExamsOffset=0; ExamsTableInit(); FrmDrawForm (frm); ctl = GetObjectPtr(LIST_ex_cat_trigger); CategoryGetName (DatabaseGetRef(), DatabaseGetCat(), gCategoryName); CategorySetTriggerLabel (ctl, gCategoryName); handled = true; } else if (event->eType == frmUpdateEvent) { // redraws the form if needed gExamsOffset=0; ExamsTableInit(); FrmDrawForm(frm); handled = false; } else if (event->eType == frmCloseEvent) { // this is done if form is closed // TblEraseTable(GetObjectPtr(TABLE_exams)); // ExamsFormFree(); FrmEraseForm(frm); } return (handled); }
Boolean ReplyFormHandleEvent(EventType * eventP) { Boolean handled = false; FormType * frmP; static Boolean listShown = false; frmP = FrmGetActiveForm(); switch (eventP->eType) { case frmOpenEvent: switch (g_ComposeMode) { case COMPOSE_REPLY: ReplyCurrentRecord(g_SmsDb); SetupReplyForm(frmP); break; case COMPOSE_NEW: SetupNewForm(frmP); break; case COMPOSE_FORWARD: ForwardCurrentRecord(g_SmsDb); SetupNewForm(frmP); break; case COMPOSE_FEATURE: SetupFeatureNew(); SetupNewForm(frmP); break; case COMPOSE_RESTORE: RestoreReplyForm(); break; } FrmDrawForm(frmP); ListAllGroups(); SetTriggerText(0); handled = true; break; case frmCloseEvent: ClearPhoneGroups(g_PhoneGroups); break; case menuEvent: switch(eventP->data.menu.itemID) { case MenuItemQueue: DoQueue(); break; case MenuItemBack: DoBack(); break; case MenuItemDraft: DoDraft(); break; case MenuItemSend: DoSend(); break; case MenuItemSendAndBack: DoSendAndBack(); break; case MenuItemSelectTo: SelectTo(); break; case MenuItemSelectGroup: CtlHitControl((ControlPtr) GetObjectPtr(frmP, TriggerGroup)); break; } break; case ctlSelectEvent: switch(eventP->data.ctlSelect.controlID) { case ButtonSendAndBack: DoSendAndBack(); break; case ButtonBack: DoBack(); break; case ButtonGo: DoSend(); break; case ButtonSelectTo: SelectTo(); break; case TriggerGroup: if (listShown) { FrmHideObject(frmP, FrmGetObjectIndex(frmP, ListGroups)); FrmDrawForm(frmP); listShown = false; } else { FrmShowObject(frmP, FrmGetObjectIndex(frmP, ListGroups)); listShown = true; } handled = true; break; } break; case penDownEvent: if (IsEventInControl(frmP, eventP, TriggerGroup)) break; if (IsEventInControl(frmP, eventP, ListGroups)) break; FrmHideObject(frmP, FrmGetObjectIndex(frmP, ListGroups)); FrmDrawForm(frmP); listShown = false; break; case lstSelectEvent: if (eventP->data.lstSelect.listID == ListGroups) { FrmHideObject(frmP, FrmGetObjectIndex(frmP, ListGroups)); FrmDrawForm(frmP); listShown = false; ListPtr list = (ListPtr) GetObjectPtr(frmP, ListGroups); Int16 sel = LstGetSelection(list); if (sel == noListSelection) { ShowMsg("Select a group."); break; } SetTriggerText(sel); } break; case keyDownEvent: WChar chr = eventP->data.keyDown.chr; UInt16 keyCode = eventP->data.keyDown.keyCode; switch(chr) { case vchrPageUp: if (listShown) SelectNextInList(-1); else ScrollFieldPage(frmP, FieldReference, ScrollbarReference, winUp); break; case vchrPageDown: if (listShown) SelectNextInList(1); else ScrollFieldPage(frmP, FieldReference, ScrollbarReference, winDown); break; case vchrNavChange: if(keyCode & navBitSelect) { FrmHideObject(frmP, FrmGetObjectIndex(frmP, ListGroups)); FrmDrawForm(frmP); listShown = false; ListPtr list = (ListPtr) GetObjectPtr(frmP, ListGroups); Int16 sel = LstGetSelection(list); if (sel == noListSelection) { ShowMsg("Select a group."); break; } SetTriggerText(sel); } break; } break; case sclRepeatEvent: ScrollFieldByEvent(frmP, eventP, FieldReference, ScrollbarReference); break; } return handled; }