00001 /***************************************************************************** 00002 * 00003 * $RCSfile: MapOptsForm_8c-source.html,v $ 00004 * 00005 * GPS4Palm Map Options Form 00006 * 00007 * This program is Copyright (C) 03/2003 Matthias Prinke 00008 * <matthias.prinke@surfeu.de> and covered by GNU's GPL. 00009 * In particular, this program is free software and comes WITHOUT 00010 * ANY WARRANTY. 00011 * 00012 * $Author: mp $ 00013 * 00014 * $Date: 2007-10-08 20:40:33 $ 00015 * 00016 * $Revision: 1.7.2.1 $ 00017 * 00018 * $Log: MapOptsForm_8c-source.html,v $ 00018 * Revision 1.7.2.1 2007-10-08 20:40:33 mp 00018 * updated for gps4palm V0.9.5 beta 00018 * 00019 * Revision 1.7 2005-01-30 21:22:30 mp 00020 * added PortsMenu event handling 00021 * 00022 * Revision 1.6 2004/11/30 20:45:02 mp 00023 * added TrackMenu event handling 00024 * 00025 * Revision 1.5 2004/11/24 21:18:17 mp 00026 * moved static function declarations from header to implementation file 00027 * 00028 * Revision 1.4 2004/11/23 17:49:11 mp 00029 * removed unused variable 00030 * 00031 * Revision 1.3 2004/04/29 18:42:31 mp 00032 * added RouteForm, modified for doxygen 00033 * 00034 * Revision 1.2 2004/02/28 17:21:43 mp 00035 * added menuEvent WaypointMenu 00036 * 00037 * Revision 1.1 2003/11/20 20:38:49 mp 00038 * initial version 00039 * 00040 * 00041 ****************************************************************************/ 00042 #include <PalmOS.h> 00043 #include "ResourceDefines.h" 00044 #include "Serial.h" 00045 #include "Sinetab.h" 00046 #include "MapOptsForm.h" 00047 #include "GPS.h" 00048 #include "Utils.h" 00049 #include "common.h" 00050 00051 extern UInt16 gAutoPwrOff; 00052 extern Boolean gFormOpened; 00053 extern PrefsType gPrefs; 00054 00055 /* Locals */ 00056 #define SCALE_ITEMS 30 00057 00058 /* Caution: Make sure the entries match the list ScaleList in Resources.rcp ! */ 00059 static UInt32 ScaleMappings[SCALE_ITEMS] = { 00060 1000, 1500, 2000, 3000, 5000, 7500, 00061 10000, 15000, 20000, 30000, 50000, 75000, 00062 100000, 150000, 200000, 300000, 500000, 750000, 00063 1000000, 1500000, 2000000, 3000000, 5000000, 7500000, 00064 10000000, 15000000, 20000000, 30000000, 50000000, 75000000 00065 }; 00066 00067 00068 /* Static Functions */ 00069 static void MapOptsFormInit(void) MAPOPTSFORM_SECTION; 00070 static UInt16 mapToPosition( 00071 UInt32 *mappingArray, UInt32 value, 00072 UInt16 mappings, UInt32 defaultItem) MAPOPTSFORM_SECTION; 00073 00074 00075 /* 00076 * mapToPosition: 00077 * Get list position from list item (reverse array lookup). 00078 * 00079 * 00080 * Parameters: 00081 * ----------- 00082 * mappingArray Pointer to array 00083 * value Lookup value 00084 * mappings Total number of items in array 00085 * defaultItem Default Item 00086 * 00087 * Returns: 00088 * -------- 00089 * Position of 'value' in array or default item if not found. 00090 */ 00091 static UInt16 mapToPosition(UInt32 *mappingArray, UInt32 value, 00092 UInt16 mappings, UInt32 defaultItem) 00093 { 00094 UInt16 i; 00095 00096 i = 0; 00097 while (mappingArray[i] != value && i < mappings) 00098 i++; 00099 if (i >= mappings) 00100 return defaultItem; 00101 00102 return i; 00103 } 00104 00105 00106 static 00107 void MapOptsFormInit(void) 00108 { 00109 gFormOpened = true; 00110 } 00111 00112 00113 /****************************************************************************/ 00114 /** 00115 * \brief Map Options Form event handler 00116 * 00117 * \param eventP pointer to event structure 00118 * 00119 * \return event handled flag 00120 ****************************************************************************/ 00121 Boolean MapOptsFormHandleEvent(EventPtr eventP) 00122 { 00123 FormPtr frmP = FrmGetActiveForm(); /* Form Ptr */ 00124 ListPtr lstP; /* List Ptr */ 00125 UInt16 sel; /* List Selection */ 00126 Boolean handled; 00127 00128 handled = false; 00129 switch (eventP->eType) 00130 { 00131 case menuEvent: 00132 switch (eventP->data.menu.itemID) { 00133 00134 case PositionMenu: 00135 FrmGotoForm(GPSMainForm); 00136 handled = true; 00137 break; 00138 00139 case SkyviewMenu: 00140 FrmGotoForm(SkyviewForm); 00141 handled = true; 00142 break; 00143 00144 case NavigationMenu: 00145 FrmGotoForm(NavigationForm); 00146 handled = true; 00147 break; 00148 00149 case MapMenu: 00150 FrmGotoForm(MapForm); 00151 handled = true; 00152 break; 00153 00154 case MiscOptsMenu: 00155 FrmGotoForm(MiscOptsForm); 00156 handled = true; 00157 break; 00158 00159 case PortsMenu: 00160 if (gNewSerialManager) { 00161 FrmGotoForm(GPSPortForm); 00162 } 00163 handled = true; 00164 break; 00165 00166 case WaypointMenu: 00167 FrmGotoForm(WaypointForm); 00168 handled = true; 00169 break; 00170 00171 case RouteMenu: 00172 FrmGotoForm(RouteForm); 00173 handled = true; 00174 break; 00175 00176 case TrackMenu: 00177 FrmGotoForm(TrackForm); 00178 handled = true; 00179 break; 00180 00181 case AboutMenu: 00182 FrmGotoForm(AboutForm); 00183 handled = true; 00184 break; 00185 00186 } 00187 break; 00188 00189 case ctlSelectEvent: 00190 /* Map Download Policy Push Buttons */ 00191 switch (eventP->data.ctlSelect.controlID) { 00192 case DldAPushb: 00193 gPrefs.mapprefs.download = DLD_A; 00194 break; 00195 00196 case DldQPushb: 00197 gPrefs.mapprefs.download = DLD_Q; 00198 break; 00199 00200 case DldOPushb: 00201 gPrefs.mapprefs.download = DLD_O; 00202 break; 00203 } 00204 00205 break; 00206 00207 case popSelectEvent: 00208 /* Map Scale Popup List */ 00209 sel = eventP->data.popSelect.selection; 00210 frmP = FrmGetActiveForm(); 00211 FrmSetFocus(frmP, noFocus); 00212 gPrefs.mapprefs.scale = ScaleMappings[sel]; 00213 handled = false; 00214 break; 00215 00216 00217 case frmOpenEvent: 00218 MapOptsFormInit(); 00219 FrmDrawForm(FrmGetActiveForm()); 00220 00221 /* Set Map Download Policy Push Buttons from Preferences */ 00222 switch (gPrefs.mapprefs.download) { 00223 case DLD_A: 00224 SetControlValueFromId(DldAPushb, 1); 00225 break; 00226 00227 case DLD_Q: 00228 SetControlValueFromId(DldQPushb, 1); 00229 break; 00230 00231 case DLD_O: 00232 SetControlValueFromId(DldOPushb, 1); 00233 break; 00234 } 00235 00236 /* Init the scale pop-up from Preferences */ 00237 lstP = FrmGetObjectPtr(frmP, 00238 FrmGetObjectIndex(frmP, ScaleList)); 00239 00240 /* Reverse array lookup (value -> index) */ 00241 sel = mapToPosition(ScaleMappings, /* array */ 00242 gPrefs.mapprefs.scale, /* Prefs. value */ 00243 SCALE_ITEMS, /* array size */ 00244 20000); /* default value */ 00245 00246 LstSetSelection (lstP, sel); 00247 CtlSetLabel(FrmGetObjectPtr(frmP, 00248 FrmGetObjectIndex(frmP, ScalePopup)), 00249 LstGetSelectionText(lstP, sel)); 00250 00251 handled = true; 00252 break; 00253 00254 case frmCloseEvent: 00255 /* Deallocate Fields' Text Memory */ 00256 //SetFieldText(NavigationStatusField, NULL, false, true); 00257 break; 00258 00259 } 00260 return(handled); 00261 } /* MapOptsFormHandleEvent() */