/*********************************************************************** * * FUNCTION: ThumbnailViewSelectCategory * * DESCRIPTION: This routine handles selection, creation and deletion of * categories form the Details Dialog. * * PARAMETERS: nothing * * RETURNED: The index of the new category. * * The following global variables are modified: * p.category * d.show_all_categories * d.categoryName * ***********************************************************************/ static UInt16 ThumbnailViewSelectCategory(void) { FormPtr frm; UInt16 category; Boolean categoryEdited; /* Process the category popup list. */ category = p.category; frm = FrmGetActiveForm(); categoryEdited = CategorySelect(d.dbR, frm, CategoryPop, CategoryList, true, &category, d.categoryName, 1, categoryDefaultEditCategoryString); if (categoryEdited || (category != p.category)) { ChangeCategory(category); /* Disable 5-way navigation */ d.fiveWayNavigation = false; p.dbI = noRecordSelected; /* Display the new category. */ ThumbnailViewLoadRecords(frm); } return (category); }
Boolean ProcessSelectCategory(FormType* form, Boolean title, UInt16* category, Char* name) { return CategorySelect( plkrDocList, form, frmLibraryCategoryPopup, frmLibraryCategoryList, title, category, name, 1, categoryEditStrID ); }
Boolean CourseListHandleEvent(EventPtr event) { FormPtr frm=FrmGetActiveForm(); Boolean handled = false; ListType *lstP=GetObjectPtr(LIST_courses); Boolean categoryEdited, reDraw=false; UInt16 category, numRecords; ControlType *ctl; UInt32 *recordList; if (event->eType == ctlSelectEvent) { // button handling switch (event->data.ctlSelect.controlID) { case BUTTON_courselist_back: handled=true; FrmGotoForm(FORM_main); break; case BUTTON_courselist_del: handled=true; if (LstGetSelection(lstP) == noListSelection) { FrmAlert(ALERT_clist_noitem); } else { DeleteCourse(gCourseInd[LstGetSelection(lstP)]); CleanupCourselist(); DrawCourses(lstP); FrmDrawForm(FrmGetActiveForm()); } break; case BUTTON_courselist_add: handled=true; gMenuCurrentForm=FORM_courselist; AddCourse(); break; case BUTTON_courselist_edit: handled=true; if (LstGetSelection(lstP) == noListSelection) { FrmAlert(ALERT_clist_noitem); } else { gMenuCurrentForm=FORM_courselist; EditCourse(gCourseInd[LstGetSelection(lstP)]); } break; case BUTTON_courselist_beam: handled=true; if (LstGetSelection(lstP) == noListSelection) { FrmAlert(ALERT_clist_noitem); } else { BeamCourse(gCourseInd[LstGetSelection(lstP)]); } break; case LIST_cl_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_cl_cat_trigger, LIST_cl_cat, false, &category, gCategoryName, 0, STRING_cat_edit); // categoryDefaultEditCategoryString if (categoryEdited || (category != DatabaseGetCat())) { reDraw=true; DatabaseSetCat(category); ctl = GetObjectPtr(LIST_cl_cat_trigger); CategoryGetName(DatabaseGetRef(), category, gCategoryName); CategorySetTriggerLabel(ctl, gCategoryName); } CatPostEdit(numRecords, recordList); if (reDraw) { CleanupCourselist(); DrawCourses(lstP); FrmDrawForm(FrmGetActiveForm()); } if (recordList != NULL) MemPtrFree((MemPtr)recordList); break; default: break; } } 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 (EvtKeydownIsVirtual(event)) { // Up or down keys pressed ListType *lst=GetObjectPtr(LIST_courses); switch (event->data.keyDown.chr) { case vchrPageUp: if (LstGetSelection(lst) == noListSelection) { LstSetSelection(lst, gNumCourses-1); CourseListHandleSelection(); } else if (LstGetSelection(lst) > 0) { LstSetSelection(lst, LstGetSelection(lst)-1); CourseListHandleSelection(); } handled=true; break; case vchrPageDown: if (LstGetSelection(lst) == noListSelection) { LstSetSelection(lst, 0); CourseListHandleSelection(); } else if (LstGetSelection(lst) < (gNumCourses-1)) { LstSetSelection(lst, LstGetSelection(lst)+1); CourseListHandleSelection(); } handled=true; break; default: break; } } } else if (event->eType == lstSelectEvent) { return CourseListHandleSelection(); } 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; frm = FrmGetActiveForm(); lstP=GetObjectPtr(LIST_courses); FrmDrawForm (frm); DrawCourses(lstP); FrmDrawForm (frm); ctl = GetObjectPtr(LIST_cl_cat_trigger); CategoryGetName (DatabaseGetRef(), DatabaseGetCat(), gCategoryName); CategorySetTriggerLabel (ctl, gCategoryName); WinDrawLine(1, 140, 158, 140); handled = true; } else if (event->eType == frmUpdateEvent) { // redraws the form if needed CleanupCourselist(); DrawCourses(GetObjectPtr(LIST_courses)); FrmDrawForm (frm); WinDrawLine(1, 140, 158, 140); handled = false; } else if (event->eType == frmCloseEvent) { // this is done if form is closed CleanupCourselist(); } 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); }
/*********************************************************************** * handling for form and control actions * menu actions are forwarded to MainFormDoCommand ***********************************************************************/ static Boolean MainFormHandleEvent (EventPtr event) { FormType *frm; Boolean handled = false; Boolean categoryEdited, reDraw=false; UInt16 category, numRecords; ControlType *ctl; UInt32 *recordList; if (event->eType == ctlSelectEvent) { // button handling handled = true; switch (event->data.ctlSelect.controlID) { // the ok button - this leaves the application case LIST_cat_trigger: frm = FrmGetActiveForm(); category=DatabaseGetCat(); numRecords=DmNumRecordsInCategory(DatabaseGetRef(), DELETE_CATEGORY); recordList=(UInt32 *)MemPtrNew(numRecords * sizeof(UInt32)); CatPreEdit(numRecords, recordList); categoryEdited = CategorySelect(DatabaseGetRef(), frm, LIST_cat_trigger, LIST_cat, false, &category, gCategoryName, 0, STRING_cat_edit); // categoryDefaultEditCategoryString if (categoryEdited || (category != DatabaseGetCat())) { reDraw=true; DatabaseSetCat(category); ctl = GetObjectPtr(LIST_cat_trigger); CategoryGetName(DatabaseGetRef(), DatabaseGetCat(), gCategoryName); CategorySetTriggerLabel(ctl, gCategoryName); } CatPostEdit(numRecords, recordList); if (reDraw) { GadgetSetNeedsCompleteRedraw(true); FrmDrawForm(frm); } if (recordList != NULL) MemPtrFree((MemPtr)recordList); break; case BUTTON_beam: BeamCourse(GadgetGetHintCourseIndex()); break; case BUTTON_edit: gMenuCurrentForm=FORM_main; EditTime(); break; case BUTTON_next: GadgetDrawHintNext(); break; default: break; } } 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)) { GadgetDrawHintNext(); handled = true; } } else if (EvtKeydownIsVirtual(event)) { // Up or down keys pressed switch (event->data.keyDown.chr) { case vchrPageUp: if (event->data.keyDown.modifiers & autoRepeatKeyMask) { if (! gMainRepeat) { GadgetSwitchScreen(); gMainRepeat = true; } } else { GadgetDrawStep(winUp); gMainRepeat = false; } handled=true; break; case vchrPageDown: if (event->data.keyDown.modifiers & autoRepeatKeyMask) { if (! gMainRepeat) { GadgetSwitchScreen(); gMainRepeat = true; } } else { GadgetDrawStep(winDown); gMainRepeat = false; } handled=true; break; case vchrSendData: BeamCourse(GadgetGetHintCourseIndex()); handled=true; break; default: break; } } } else if (event->eType == menuEvent) { // forwarding of menu events return HandleMenuEvent(event->data.menu.itemID); } else if (event->eType == menuOpenEvent) { return HandleMenuOpenEvent(event); } else if (event->eType == frmUpdateEvent) { // redraws the form if needed frm = FrmGetActiveForm(); FrmDrawForm(frm); // GadgetDrawHintNext(); handled = true; } else if (event->eType == frmOpenEvent) { ControlType *ctl; LocalID dbID; UInt16 cardNo; Boolean newKeyP4=false; UInt16 newKeyP2=0xFFFF; // initializes and draws the form at program launch frm = FrmGetActiveForm(); GadgetSet(frm, GADGET_main, GADGET_hint); FrmSetGadgetHandler(frm, FrmGetObjectIndex(frm, GADGET_main), GadgetHandler); FrmSetGadgetHandler(frm, FrmGetObjectIndex(frm, GADGET_hint), GadgetHintHandler); FrmDrawForm(frm); GadgetDrawHintNext(); ctl = GetObjectPtr(LIST_cat_trigger); CategoryGetName (DatabaseGetRef(), DatabaseGetCat(), gCategoryName); CategorySetTriggerLabel (ctl, gCategoryName); DmOpenDatabaseInfo(DatabaseGetRefN(DB_MAIN), &dbID, NULL, NULL, &cardNo, NULL); SysNotifyRegister(cardNo, dbID, sysNotifyLateWakeupEvent, HandleNotification, sysNotifyNormalPriority, NULL); KeyRates(false,&gKeyP1, &gKeyP2, &gKeyP3, &gKeyP4); KeyRates(true, &gKeyP1, &newKeyP2, &gKeyP3, &newKeyP4); handled = true; } else if (event->eType == frmCloseEvent) { // this is done if program is closed LocalID dbID; UInt16 cardNo; DmOpenDatabaseInfo(DatabaseGetRefN(DB_MAIN), &dbID, NULL, NULL, &cardNo, NULL); SysNotifyUnregister(cardNo, dbID, sysNotifyLateWakeupEvent, sysNotifyNormalPriority); // Restore original key rates KeyRates(true, &gKeyP1, &gKeyP2, &gKeyP3, &gKeyP4); } return (handled); }