/* ** DrawXferDoneButton */ void DrawXferDoneButton(DynamicButtonType* btn) { WinHandle oldH = WinSetDrawWindow(btn->content.bmpW); Int16 bitmapID = 0; const IndexedColorType oldCol = WinSetBackColor(0); /* otherwise the pixels will not count as "off" */ if (((p.flags&PFLAGS_XFER_GOTO) || xferGotoIsAlways) && !(xferGotoIsNever)) bitmapID = XferDoneGotoBitmap; else bitmapID = XferDoneBitmap; DrawBitmap(bitmapID, 0, 0); if (p.flags&PFLAGS_XFER_DELETE) WinEraseLine(12, 2, 12, 10); if ((d.xfer.complete || xferCompleteIsAlways) && !(xferCompleteIsNever)) WinEraseLine(10, 7, 15, 7); if (d.linker_available && p.flags & PFLAGS_XFER_BACKLINK) WinEraseLine(9, 2, 9, 10); /* Restore old draw window & state */ WinSetDrawWindow(oldH); WinSetBackColor(oldCol); }
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); }
/* ** DrawPlugButton */ void DrawPlugButton(DynamicButtonType* btn) { Char str[48], str2[48]; Int16 i = -1; WinHandle oldH = WinSetDrawWindow(btn->content.bmpW); /* Set up draw state */ WinPushDrawState(); WinSetBackColor(0); /* otherwise the pixels will not count as "off" */ if (d.xfer.pluglistH && ((i = GetCurrentXferAppListIndex()) != -1)) { BitmapType* bmp = NULL; BitmapTypeV3* bmpV3 = NULL; WinHandle tmpH = NULL; Coord x, y; UInt32 depth; Err err = errNone; /* Hi-res 1-bpp-bug-workaround, part 1 */ if (d.hires && !d.sonyClie) { /* Create a new temporary bitmap with screen depth */ BmpGetDimensions(btn->bmp, &x, &y, NULL); WinScreenMode(winScreenModeGet, NULL, NULL, &depth, NULL); bmp = BmpCreate(x, y, depth, NULL, &err); if (err) abort(); /* ...make it a double density bitmap */ bmpV3 = BmpCreateBitmapV3(bmp, kDensityDouble, BmpGetBits(bmp), NULL); /* ...and create a temporary window */ tmpH = WinCreateBitmapWindow((BitmapType*) bmpV3, &err); if (err) abort(); /* Draw to temporary window for the time being... */ WinSetDrawWindow(tmpH); /* ...and set the right foreground color */ WinSetForeColor(WinRGBToIndex(&black)); } /* Get the plugin icon and draw it */ DrawPlugBitmap(i, boogerID_button, 0, 0); /* Hi-res 1-bpp-bug-workaround, part 2 */ if (d.hires && !d.sonyClie) { /* Copy the icon to the actual button */ WinSetDrawWindow(btn->content.bmpW); WinPaintBitmap(WinGetBitmap(tmpH), 0, 0); /* Clean up */ if (tmpH) WinDeleteWindow(tmpH, false); if (bmpV3) BmpDelete((BitmapType*) bmpV3); if (bmp) BmpDelete(bmp); } /* Load "goto" behavior */ GetPlugString(i, boogerID_gotobehavior, str); if (StrChr(str, 'n')) xferGotoSetNever(); else if (StrChr(str, 'a')) xferGotoSetAlways(); else xferGotoClear(); /* Load "completion" behaviour ("completion" is never on by default (yet)) */ GetPlugString(i, boogerID_completebehavior, str2); if (StrChr(str2, 'a')) xferCompleteSetAlways(); else if (StrChr(str2, 'o')) xferCompleteClear(); else xferCompleteSetNever(); } else { DrawBitmap(XferNoAppBitmap, 0, 0); xferGotoClear(); xferCompleteClear(); } /* Restore old draw window & state */ WinPopDrawState(); WinSetDrawWindow(oldH); }
/***************************************************************************** * Function: GadgetHintTap * * Description: Handles penDown events (taps) on the hint gadget *****************************************************************************/ void GadgetHintTap(FormGadgetType *pGadget, EventType *event) { //you may find it useful to track if they //lift the pen still within the boundaries of the gadget Boolean isPenDown = true; Int16 newPointX, newPointY, startPointX, startPointY; UInt16 index; RectangleType bounds, rect; Char noteSymb[2] = { GADGET_NOTESYMBOL, 0 }; FontID oldFont; Boolean drawn=false; IndexedColorType curForeColor, curBackColor, curTextColor; // This is just needed since we do not want to access internal structure // data directly in FormGadgetType (need rect field below) index = TNGetObjectIndexFromPtr(FrmGetActiveForm(), pGadget); FrmGetObjectBounds(FrmGetActiveForm(), index, &bounds); oldFont = FntSetFont(symbolFont); RctSetRectangle(&rect, bounds.topLeft.x+1, // +1 for border bounds.topLeft.y+1, // Put VALUE BELOW here.... +top+1 removed because of own Gadget bounds.extent.x-3, bounds.extent.y - 3); // -4 for bottom border RctSetRectangle(&rect, rect.topLeft.x+rect.extent.x-8, rect.topLeft.y+rect.extent.y-12, FntLineWidth(noteSymb, 1), FntLineHeight()); //track the pen down event EvtGetPen(&newPointX, &newPointY, &isPenDown); startPointX = newPointX; startPointY = newPointY; while (isPenDown){ EvtGetPen(&newPointX, &newPointY, &isPenDown); if (gHintNote) { if (! drawn && RctPtInRectangle(newPointX, newPointY, &rect)) { curForeColor = WinSetForeColor(UIColorGetTableEntryIndex(UIObjectSelectedForeground)); curBackColor = WinSetBackColor(UIColorGetTableEntryIndex(UIObjectSelectedFill)); curTextColor = WinSetTextColor(UIColorGetTableEntryIndex(UIObjectSelectedForeground)); TNDrawCharsToFitWidth(noteSymb, &rect); WinSetForeColor(curForeColor); WinSetForeColor(curBackColor); WinSetForeColor(curTextColor); drawn = true; } else if (drawn && ! RctPtInRectangle(newPointX, newPointY, &rect)) { curForeColor = WinSetForeColor(UIColorGetTableEntryIndex(UIObjectForeground)); curBackColor = WinSetBackColor(UIColorGetTableEntryIndex(UIObjectFill)); curTextColor = WinSetTextColor(UIColorGetTableEntryIndex(UIObjectForeground)); TNDrawCharsToFitWidth(noteSymb, &rect); WinSetForeColor(curForeColor); WinSetForeColor(curBackColor); WinSetForeColor(curTextColor); drawn = false; } } } FntSetFont(oldFont); if (gHintNote && RctPtInRectangle(newPointX, newPointY, &rect)) { NoteSet(GadgetGetHintTimeIndex(), FORM_main); FrmPopupForm(NewNoteView); } // else outside gadget bounds -> do nothing }