Boolean ExamDetailsFormHandleEvent(EventPtr event) { FormPtr frm=FrmGetActiveForm(); Boolean handled = false; if (event->eType == ctlSelectEvent) { // button handling switch (event->data.ctlSelect.controlID) { case BUTTON_exd_cancel: handled=true; ExamDetailsFormFree(); FrmReturnToForm(FORM_exams); FrmUpdateForm(FORM_exams, frmRedrawUpdateCode); break; case BUTTON_exd_ok: handled=true; if (ExamDetailsFormSave()) { ExamDetailsFormFree(); FrmReturnToForm(FORM_exams); FrmUpdateForm(FORM_exams, frmRedrawUpdateCode); } break; case SELECTOR_exd_date: handled=true; ExamDetailsGetDate(); break; case SELECTOR_exd_time: handled=true; EditTimeGetTime(GetObjectPtr(SELECTOR_exd_time), &gExamDetailsBegin, &gExamDetailsEnd, gExamDetailsTimeTrigger); break; default: break; } } 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 ExamDetailsFormInit(frm); FrmDrawForm (frm); handled = true; } else if (event->eType == frmUpdateEvent) { // redraws the form if needed FrmDrawForm (frm); handled = false; } else if (event->eType == frmCloseEvent) { // this is done if form is closed ExamDetailsFormFree(); } return (handled); }
static Boolean WordsListFormControlSelected(AppContext* appContext, FormType* form, const EventType* event) { Boolean handled=false; Err error=errNone; UInt16 controlId = event->data.ctlSelect.controlID; switch (controlId) { case ctlArrowLeft: WordsListFormScrollList(form, -(appContext->dispLinesCount-1)); handled=true; break; case ctlArrowRight: WordsListFormScrollList(form, (appContext->dispLinesCount-1)); handled=true; break; case buttonCancel: FrmReturnToForm(0); WordsListFormCleanup(appContext); handled=true; break; default: Assert(false); } return handled; }
inline static void WordsListFormSelectProposal(AppContext* appContext, UInt16 proposal) { Assert(proposal>=0 && proposal<appContext->wordsInListCount); const char* selectedWord=appContext->wordsList[proposal]; FrmReturnToForm(0); StartWordLookup(appContext, selectedWord); WordsListFormCleanup(appContext); }
/* Send a goto event for internal bookmark */ void SendBookmarkGoToEvent ( BookmarkListEntry* listEntry, Boolean returnToForm ) { AnnotationEntry e; UInt16 offset; Header* header; MemHandle handle; EventType match; if ( ! GetAnnotationHeaderByRecordNum( &e, listEntry->recordNum ) ) return; handle = ReturnRecordHandle( e.id.uid ); if ( handle == NULL ) return; header = MemHandleLock( handle ); offset = e.triggerStart + GetParagraphOffset( header, GET_PARAGRAPH( header, e.id.paragraphNum ) ); MemHandleUnlock( handle ); FreeRecordHandle( &handle ); if ( returnToForm ) FrmReturnToForm( GetMainFormId() ); MemSet( &match, sizeof( EventType ), 0 ); match.eType = frmGotoEvent; match.data.frmGoto.formID = GetMainFormId(); match.data.frmGoto.recordNum = e.id.uid; match.data.frmGoto.matchPos = offset; match.data.frmGoto.matchCustom = GOTO_BOOKMARK; EvtAddEventToQueue( &match ); }
UInt16 DisplayDialog( UInt16 formID, FormEventHandlerPtr handler ) { FormPtr active = FrmGetActiveForm(); UInt16 activeID = ( active != NULL ) ? FrmGetFormId( active ) : 0; FormPtr dialog = FrmInitForm( formID ); UInt16 buttonPressed = 0; FrmSetActiveForm( dialog ); if( handler ){ FrmSetEventHandler( dialog, handler ); } FrmPopupForm( formID ); buttonPressed = FrmDoDialog( dialog ); FrmReturnToForm( activeID ); return buttonPressed; }
Boolean BookmarksFormHandleEvent(EventType * event) { Boolean handled = false; FormType * frm; ListType * bkmList, * sortTypeList; char * listTxt; UInt16 bookmarksCount; AppContext* appContext = GetAppContext(); frm = FrmGetActiveForm(); switch (event->eType) { case frmOpenEvent: OpenBookmarksDB(appContext, appContext->prefs.bookmarksSortType); bkmList = (ListType *) FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, listBookmarks)); bookmarksCount = BookmarksWordCount(appContext); Assert( 0 != bookmarksCount ); LstSetDrawFunction(bkmList, BookmarksListDrawFunc); LstSetListChoices(bkmList, NULL, bookmarksCount); sortTypeList = (ListType *) FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, listSortBy)); // list position matches enums for simplicity LstSetSelection(sortTypeList, (Int16)appContext->prefs.bookmarksSortType); listTxt = LstGetSelectionText(sortTypeList, appContext->prefs.bookmarksSortType); CtlSetLabel((ControlType *)FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,popupSortBy)), listTxt); FrmDrawForm(frm); handled = true; break; case winDisplayChangedEvent: handled= BookmarksFormDisplayChanged(appContext, frm); break; case ctlSelectEvent: switch (event->data.ctlSelect.controlID) { case buttonCancel: CloseBookmarksDB(appContext); FrmReturnToForm(0); handled = true; break; case popupSortBy: // do nothing break; default: Assert(false); break; } break; case popSelectEvent: switch (event->data.popSelect.listID) { case listSortBy: Assert( appContext->currBookmarkDbType == appContext->prefs.bookmarksSortType ); if ((BookmarkSortType) event->data.popSelect.selection != appContext->prefs.bookmarksSortType) { // we changed sorting type sortTypeList = (ListType *) FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, listSortBy)); listTxt = LstGetSelectionText(sortTypeList, event->data.popSelect.selection); CtlSetLabel((ControlType *)FrmGetObjectPtr(frm,FrmGetObjectIndex(frm,popupSortBy)), listTxt); // list position matches enums for simplicity OpenBookmarksDB(appContext, (BookmarkSortType) event->data.popSelect.selection); appContext->prefs.bookmarksSortType = (BookmarkSortType) event->data.popSelect.selection; #ifdef DEBUG // word count shouldn't change bookmarksCount = BookmarksWordCount(appContext); bkmList = (ListType *) FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, listBookmarks)); Assert( LstGetNumberOfItems(bkmList) == bookmarksCount ); #endif FrmDrawForm(frm); } handled = true; break; default: Assert(false); break; } break; case lstSelectEvent: { MemHandle recHandle; char * word; recHandle = DmQueryRecord(appContext->bookmarksDb, event->data.lstSelect.selection); Assert( recHandle ); // no reason it shouldn't work if (recHandle) { word = (char*)MemHandleLock(recHandle); Assert(word); #ifndef I_NOAH appContext->currentWord = dictGetFirstMatching(GetCurrentFile(appContext), word); MemHandleUnlock(recHandle); SendEvtWithType(evtNewWordSelected); #else FrmReturnToForm(0); StartWordLookup(appContext, word); MemHandleUnlock(recHandle); #endif } CloseBookmarksDB(appContext); #ifndef I_NOAH FrmReturnToForm(0); #endif handled = true; } default: break; } return handled; }
/* Event handler for the details form */ Boolean DetailsFormHandleEvent ( EventType* event /* pointer to an EventType structure */ ) { Boolean handled; Boolean update; handled = false; update = false; switch ( event->eType ) { case ctlSelectEvent: if ( event->data.ctlEnter.controlID == frmDetailsOK ) { UInt16 reference; Boolean oldStatus; Boolean newStatus; reference = GetHistoryCurrent(); oldStatus = ShowImages( reference ); newStatus = CtlGetValue( GetObjectPtr( frmDetailsShowImages ) ); update = oldStatus ^ newStatus; if ( newStatus ) ShowImagesOn( reference ); else ShowImagesOff( reference ); if ( CtlGetValue( GetObjectPtr( frmDetailsStatusRead ) ) ) SetVisitedLink( reference ); else UnsetVisitedLink( reference ); } else if ( event->data.ctlEnter.controlID == frmDetailsCopy ) { FieldType* field; field = GetObjectPtr( frmDetailsLink ); WriteTextFieldToMemo( field ); } else if ( event->data.ctlEnter.controlID != frmDetailsCancel ) { break; } FrmReturnToForm( PREVIOUS_FORM ); if ( update ) { ResetHeight(); FrmUpdateForm( GetMainFormId(), frmRedrawUpdateCode ); } handled = true; break; case winEnterEvent: handled = ResizeHandleWinEnterEvent(); break; case winDisplayChangedEvent: handled = ResizeHandleWinDisplayChangedEvent(); break; case winExitEvent: handled = ResizeHandleWinExitEvent(); break; case frmOpenEvent: #ifdef HAVE_SILKSCREEN ResizeHandleFrmOpenEvent(); #endif DetailsFormInit(); handled = true; break; case frmCloseEvent: #ifdef HAVE_SILKSCREEN ResizeHandleFrmCloseEvent(); #endif handled = false; break; default: handled = false; } return handled; }
/* * \brief react to cancel button being pressed on newcity form. * * The cancel button is pressed in the new city form * Note the use of the returntoform api, this is means the last * form is reopened, and the frmcloseevent isn't sent to the * form that's being closed. */ static void cnCancelButtonPressed(void) { game.cityname[0] = '\0'; FrmReturnToForm(0); }
Boolean IconSelectHandleEvent(EventPtr eventP) { Boolean handled = false; FormPtr frmP = FrmGetActiveForm(); Int16 num; ScrollBarPtr barP; switch (eventP->eType) { case menuEvent: return handled; case frmOpenEvent: FrmDrawForm(frmP); num = LoadIcon(0); barP = GetObjectPtr(IconSelectScrollBar); if (num > 9*8) { SclSetScrollBar(barP, 0, 0, num/8-8, 9); } else { SclSetScrollBar(barP, 0, 0, 0, 9); } handled = true; break; case ctlSelectEvent: IconSelectCancelPressed = false; if (eventP->data.ctlSelect.controlID >= IconSelectIcon1Button && eventP->data.ctlSelect.controlID < IconSelectIcon1Button+9*8) { Int16 val, min, max, page; DmResID resID; SclGetScrollBar(GetObjectPtr(IconSelectScrollBar), &val, &min, &max, &page); DmResourceInfo(IconDB, (val*8+ eventP->data.ctlSelect.controlID - IconSelectIcon1Button), NULL, &resID, NULL); g_prefs.iconNumber = resID; } switch (eventP->data.ctlSelect.controlID) { case IconSelectNoneButton: g_prefs.iconNumber = -1; break; case IconSelectCancelButton: IconSelectCancelPressed = true; break; } // FrmUpdateForm(NewTodoForm, frmRedrawUpdateCode+1); // FrmUpdateForm(NewEventForm, frmRedrawUpdateCode+1); FrmReturnToForm(0); handled = true; break; case sclRepeatEvent: IconFormScroll(eventP->data.sclRepeat.newValue, eventP->data.sclRepeat.value); break; case keyDownEvent: { Int16 valueP, minP, maxP, pageSizeP; ScrollBarPtr barP = GetObjectPtr(IconSelectScrollBar); SclGetScrollBar(barP, &valueP, &minP, &maxP, &pageSizeP); switch (eventP->data.keyDown.chr) { case vchrPageUp: case vchrPrevField: IconFormScrollLines(-(pageSizeP-1)); break; case vchrPageDown: case vchrNextField: IconFormScrollLines((pageSizeP-1)); handled = true; break; } break; } default: break; } return handled; }
static Boolean PrefFormHandleEvent (EventPtr e) { Boolean handled = false; FormPtr frm; UInt16 i; frm = FrmGetActiveForm(); switch (e->eType) { case frmOpenEvent: FrmDrawForm(frm); PrefFormSetValue(frm, chkDisableAutoOff, stopWatchPrefs.disableAutoOff); PrefFormSetValue(frm, chkShowTicks, stopWatchPrefs.showTicks); PrefFormSetValue(frm, btnSoundOff, btnSoundOff == stopWatchPrefs.sound); PrefFormSetValue(frm, btnSound1, btnSound1 == stopWatchPrefs.sound); PrefFormSetValue(frm, btnSound2, btnSound2 == stopWatchPrefs.sound); PrefFormSetValue(frm, btnSound3, btnSound3 == stopWatchPrefs.sound); PrefFormSetValue(frm, btnSoundHigh, btnSoundHigh == stopWatchPrefs.sound); PrefFormSetValue(frm, btnVisualNum, btnVisualNum == stopWatchPrefs.visual); PrefFormSetValue(frm, btnVisualBar, btnVisualBar == stopWatchPrefs.visual); PrefFormSetValue(frm, btnVisualSticks, btnVisualSticks == stopWatchPrefs.visual); PrefFormSetValue(frm, btnVisualHour, btnVisualHour == stopWatchPrefs.visual); handled = true; break; case menuEvent: MenuEraseStatus(NULL); handled = true; break; case ctlSelectEvent: switch(e->data.ctlSelect.controlID) { case chkDisableAutoOff: stopWatchPrefs.disableAutoOff=e->data.ctlSelect.on; break; case chkShowTicks: stopWatchPrefs.showTicks=e->data.ctlSelect.on; break; case btnSoundOff: stopWatchPrefs.sound=e->data.ctlSelect.controlID; stopWatchPrefs.vol=0; break; case btnSound1: stopWatchPrefs.sound=e->data.ctlSelect.controlID; stopWatchPrefs.vol=5; break; case btnSound2: stopWatchPrefs.sound=e->data.ctlSelect.controlID; stopWatchPrefs.vol=10; break; case btnSound3: stopWatchPrefs.sound=e->data.ctlSelect.controlID; stopWatchPrefs.vol=30; break; case btnSoundHigh: stopWatchPrefs.sound=e->data.ctlSelect.controlID; stopWatchPrefs.vol=50; break; case btnVisualNum: case btnVisualBar: case btnVisualSticks: case btnVisualHour: stopWatchPrefs.visual=e->data.ctlSelect.controlID; break; case btnOk: // set things /* tell main form to update itself. */ //FrmUpdateForm(MainForm, UPDATE_LISTING); /* FALLTHROUGH */ case btnCancel: // cancel is TODO FrmReturnToForm(MainForm); handled = true; break; } break; default: break; } return handled; }
Boolean Ln2SlFormHandleEvent(EventPtr e) { Boolean handled = false; DateType dt = {0, 0}; FormPtr frm = FrmGetFormPtr(Ln2SlForm); switch (e->eType) { case frmOpenEvent: if(gbVgaExists) VgaFormModify(frm, vgaFormModify160To240); DateSecondsToDate(TimGetSeconds(), &dt); DateToAsciiLong(dt.month, dt.day, dt.year + 1904, gPrefdfmts, gAppErrStr); SetFieldTextFromStr(Ln2SlFormInput, gAppErrStr); FrmDrawForm(frm); handled = true; break; case ctlSelectEvent: switch(e->data.ctlSelect.controlID) { case Ln2SlFormOk: FrmReturnToForm(0); handled = true; break; case Ln2SlFormConvert: { HappyDaysFlag dummy; Int16 year, month, day; Char* input; int ret; input = FldGetTextPtr(GetObjectPointer(frm, Ln2SlFormInput)); if ((ret = AnalysisHappyDays(input, &dummy, &year, &month, &day))) { int syear, smonth, sday; int leapyes = CtlGetValue(GetObjectPointer(frm, Ln2SlFormInputLeap)); ret = lunarL2S(lunarRefNum, year, month, day, leapyes, &syear, &smonth, &sday); if (ret == errNone) { Char temp[15]; SysCopyStringResource(temp, DayOfWeek(smonth, sday, syear) + SunString); DateToAsciiLong(smonth, sday, syear, gPrefdfmts, gAppErrStr); StrNCat(gAppErrStr, " [", AppErrStrLen); StrNCat(gAppErrStr, temp, AppErrStrLen); StrNCat(gAppErrStr, "]", AppErrStrLen); FldDrawField(SetFieldTextFromStr(Ln2SlFormResult, gAppErrStr)); } else DisplayInvalidDateErrorString(Ln2SlFormResult); } else { DisplayInvalidDateErrorString(Ln2SlFormResult); } handled = true; break; } default: break; } break; case menuEvent: handled = TextMenuHandleEvent(e->data.menu.itemID, Ln2SlFormInput); break; default: break; } return handled; }
Boolean Sl2LnFormHandleEvent(EventPtr e) { Boolean handled = false; DateType dt = {0, 0}; FormPtr frm = FrmGetFormPtr(Sl2LnForm); switch (e->eType) { case frmOpenEvent: if(gbVgaExists) VgaFormModify(frm, vgaFormModify160To240); DateSecondsToDate(TimGetSeconds(), &dt); DateToAsciiLong(dt.month, dt.day, dt.year + 1904, gPrefdfmts, gAppErrStr); SetFieldTextFromStr(Sl2LnFormInput, gAppErrStr); FrmDrawForm(frm); handled = true; break; case ctlSelectEvent: switch(e->data.ctlSelect.controlID) { case Sl2LnFormConvert: { HappyDaysFlag dummy; Int16 year, month, day; int lyear, lmonth, lday; Char* input; int ret = false; input = FldGetTextPtr(GetObjectPointer(frm, Sl2LnFormInput)); if ((ret = AnalysisHappyDays(input, &dummy, &year, &month, &day))) { int leapyes = 0; ret = lunarS2L(lunarRefNum, year, month, day, &lyear, &lmonth, &lday, &leapyes); if (ret == errNone) { if (leapyes) { StrCopy(gAppErrStr, "#)"); } else { StrCopy(gAppErrStr, "-)"); } DateToAsciiLong(lmonth, lday, lyear, gPrefdfmts, &gAppErrStr[2]); FldDrawField(SetFieldTextFromStr(Sl2LnFormResult, gAppErrStr)); } else DisplayInvalidDateErrorString(Sl2LnFormResult); } else DisplayInvalidDateErrorString(Sl2LnFormResult); handled = true; break; } case Sl2LnFormOk: FrmReturnToForm(0); handled = true; break; default: break; } break; case menuEvent: handled = TextMenuHandleEvent(e->data.menu.itemID, Sl2LnFormInput); break; default: break; } return handled; }
Boolean AnnotationFormHandleEvent ( EventType* event /* pointer to an EventType structure */ ) { Boolean handled; handled = ResizeHandleEvent( event ); if ( handled ) return handled; switch ( event->eType ) { case frmOpenEvent: AnnotationFormInit(); handled = true; break; case keyDownEvent: switch ( event->data.keyDown.chr ) { case pageUpChr: if ( FldScrollable( field, winUp ) ) FldScrollField( field, 1, winUp ); UpdateFieldScrollbar( field, scrollBar ); break; case pageDownChr: if ( FldScrollable( field, winDown ) ) FldScrollField( field, 1, winDown ); UpdateFieldScrollbar( field, scrollBar ); break; default: { UInt16 scrollPos; UInt16 textHeight; UInt16 fieldHeight; FldGetScrollValues( field, &scrollPos, &textHeight, &fieldHeight ); if ( FldHandleEvent( field, event ) ) { UInt16 newScrollPos; UInt16 newTextHeight; UInt16 newFieldHeight; FldGetScrollValues( field, &newScrollPos, &newTextHeight, &newFieldHeight ); if ( scrollPos != newScrollPos || textHeight != newTextHeight || fieldHeight != newFieldHeight ) UpdateFieldScrollbar( field, scrollBar ); handled = true; } break; } } break; case sclRepeatEvent: ScrollMessage( field, event->data.sclRepeat.newValue - event->data.sclRepeat.value ); break; case ctlSelectEvent: switch ( event->data.ctlSelect.controlID ){ case frmAnnotationCancel: AnnotationFormClose(); FrmReturnToForm( Prefs()->lastForm ); handled = true; break; case frmAnnotationOK: SaveAnnotation(); AnnotationFormClose(); FrmReturnToForm( Prefs()->lastForm ); if ( IsFormMain( Prefs()->lastForm ) ) FrmUpdateForm( GetMainFormId(), frmRedrawUpdateCode ); handled = true; break; case frmAnnotationDelete: if ( entryP->id.indexInParagraph != NEW_ANNOTATION ) { DeleteAnnotation( &( entryP->id ) ); } AnnotationFormClose(); if ( IsFormMain( Prefs()->lastForm ) ) FrmUpdateForm( GetMainFormId(), frmRedrawUpdateCode ); FrmReturnToForm( Prefs()->lastForm ); handled = true; break; default: handled = true; break; } break; case frmCloseEvent: AnnotationFormClose(); handled = false; break; default: handled = false; } return handled; }
static Boolean URLFormDoCommand(UInt16 command) { GlobalsPtr gP = GetGlobals(); Boolean handled = false; if (!gP) return false; switch (command) { // Menus // Control Objects case kURLOpenButton: { Char *navigationText = FldGetTextPtr(GetObjectPtr(kURLField)); Boolean openInNewTab = false; if (navigationText && StrLen(navigationText)) { if (gP->navigationOpen) { MemPtrFree(gP->navigationOpen); } gP->navigationOpen = StrDup(navigationText); if (CtlGetValue(GetObjectPtr(kURLOpenInNewTabCheckbox))) { openInNewTab = true; } FrmReturnToForm(0); if (openInNewTab) { FrmUpdateForm(kMainForm, frmUpdateNewTab); } FrmUpdateForm(kMainForm, URLFormDetermineRequestType(navigationText)); } } break; case kURLCancelButton: FrmReturnToForm(0); break; // Handle inserting text using the insert buttons, or list. case kWWWPushButton: case kCOMPushButton: case kORGPushButton: case kNETPushButton: case kSlashPushButton: case kDotPushButton: case kHTMLPushButton: { FieldPtr urlFldP = GetObjectPtr(kURLField); const Char *buttonLabelP = CtlGetLabel(GetObjectPtr(command)); FldInsert(urlFldP, buttonLabelP, StrLen(buttonLabelP)); CtlSetValue(GetObjectPtr(command), 0); handled = true; } break; case kMoreTrigger: { ListPtr moreListP = GetObjectPtr(kMoreList); FieldPtr urlFldP = GetObjectPtr(kURLField); Int16 selection = LstPopupList(moreListP); if (selection >= 0) { const Char *selectionP = LstGetSelectionText(moreListP, selection); FldInsert(urlFldP, selectionP, StrLen(selectionP)); } handled = true; } break; // Default default: break; } return handled; }