Main Page   Data Structures   File List   Data Fields   Globals   Related Pages  

palm/repeathandler.c

Go to the documentation of this file.
00001 
00007 #include <PalmOS.h>
00008 #include <StringMgr.h>
00009 #include <Form.h>
00010 #include <MemoryMgr.h>
00011 #include <Field.h>
00012 #include <repeathandler.h>
00013 #include <palmutils.h>
00014 #include <mem_compat.h>
00015 
00016 #define BUTTONMAPLEN    (sizeof (buttonmappings) / sizeof (buttonmappings[0]))
00017 
00018 buttonmapping_t *
00019 getSpinnerFieldIndex(buttonmapping_t *mapping, UInt16 buttonControl,
00020     Boolean isButton)
00021 {
00022         ErrFatalDisplayIf(mapping == NULL, "Bad Function call");
00023 
00024         while (mapping->down != 0 && mapping->up != 0) {
00025                 if (isButton) {
00026                         if (buttonControl == mapping->down ||
00027                             buttonControl == mapping->up)
00028                                 return (mapping);
00029                 } else {
00030                         if (buttonControl == mapping->field)
00031                                 return (mapping);
00032                 }
00033                 mapping++;
00034         }
00035         return (NULL);
00036 }
00037 
00038 buttonmapping_t *
00039 processRepeater(buttonmapping_t *map, UInt16 control,
00040     Boolean isButton, bmPostHandler post_handle)
00041 {
00042         buttonmapping_t *bm = getSpinnerFieldIndex(map, control,
00043             isButton);
00044         FieldPtr fp;
00045         MemHandle mh;
00046         MemPtr mp;
00047         Int32 fld;
00048         Boolean limited = false;
00049 
00050         if (bm == NULL) return (NULL);
00051 
00052         fp = (FieldPtr)GetObjectPtr(FrmGetActiveForm(), bm->field);
00053         mh = FldGetTextHandle(fp);
00054 
00055         FldSetTextHandle(fp, NULL);
00056         mp = MemHandleLock(mh);
00057 
00058         fld = StrAToI(mp);
00059 
00060         if (isButton) {
00061                 if (control == bm->down)
00062                         fld--;
00063                 else
00064                         fld++;
00065         }
00066         if (fld < bm->min) {
00067                 limited = true;
00068                 fld = bm->min;
00069         } else if (fld > bm->max) {
00070                 limited = true;
00071                 fld = bm->max;
00072         }
00073 
00074         if (isButton || (!isButton && limited))
00075                 StrPrintF(mp, "%ld", fld);
00076 
00077         MemHandleUnlock(mh);
00078         FldSetTextHandle(fp, mh);
00079         FldDrawField(fp);
00080 
00081         if (post_handle != NULL)
00082                 post_handle(control, bm, fld);
00083 
00084         return (bm);
00085 }

Generated on Mon Aug 30 19:44:15 2004 for pocketcity by doxygen1.2.18