00001
00009 #include <PalmOS.h>
00010 #include <simcity_resconsts.h>
00011 #include <sections.h>
00012 #include <options.h>
00013 #include <globals.h>
00014 #include <simcity.h>
00015 #include <logging.h>
00016 #include <palmutils.h>
00017
00018 static FormPtr setupOptions(void) CONFIG_SECTION;
00019 static void saveOptions(void) CONFIG_SECTION;
00020 static FormPtr setupButtonConfig(void) CONFIG_SECTION;
00021 static void saveButtonConfig(void) CONFIG_SECTION;
00022 static void clearButtonConfig(void) CONFIG_SECTION;
00023
00028 Boolean
00029 hOptions(EventPtr event)
00030 {
00031 Boolean handled = false;
00032 static char okHit = 0;
00033
00034 switch (event->eType) {
00035 case frmOpenEvent:
00036 PauseGame();
00037 WriteLog("options open\n");
00038 FrmDrawForm(setupOptions());
00039 okHit = 0;
00040 handled = true;
00041 break;
00042 case frmCloseEvent:
00043 WriteLog("options closed\n");
00044 if (okHit)
00045 saveOptions();
00046 break;
00047 case keyDownEvent:
00048 switch (event->data.keyDown.chr) {
00049 case vchrLaunch:
00050 FrmGotoForm(formID_pocketCity);
00051 handled = true;
00052 break;
00053 }
00054 case ctlSelectEvent:
00055 switch (event->data.ctlEnter.controlID) {
00056 case buttonID_OK:
00057 okHit = 1;
00058 handled = true;
00059 FrmGotoForm(formID_pocketCity);
00060 break;
00061 case buttonID_Cancel:
00062 okHit = 0;
00063 handled = true;
00064 FrmGotoForm(formID_pocketCity);
00065 break;
00066 }
00067 default:
00068 break;
00069 }
00070
00071 return (handled);
00072 }
00073
00078 static FormPtr
00079 setupOptions(void)
00080 {
00081 FormPtr form = FrmGetActiveForm();
00082 UInt8 tval = getDisasterLevel();
00083
00084 tval = (UInt8)((tval > 3) ? 3 : tval);
00085 CtlSetValue((ControlPtr)GetObjectPtr(form,
00086 (UInt16)(buttonID_dis_off + tval)), 1);
00087
00088 tval = getDifficultyLevel();
00089 tval = (UInt8)((tval > 2) ? 2 : tval);
00090 CtlSetValue((ControlPtr)GetObjectPtr(form,
00091 (UInt16)(buttonID_Easy + tval)), 1);
00092
00093 CtlSetValue((ControlPtr)GetObjectPtr(form, checkboxID_autobulldoze),
00094 GETAUTOBULLDOZE() ? 1 : 0);
00095
00096 CtlSetValue((ControlPtr)GetObjectPtr(form, checkboxID_minimapvisible),
00097 GETMINIMAPVISIBLE() ? 1 : 0);
00098
00099 CtlSetValue((ControlPtr)GetObjectPtr(form, checkboxID_minimapdetailed),
00100 GETMINIMAPDETAILED() ? 1 : 0);
00101 return (form);
00102 }
00103
00110 static void
00111 saveOptions(void)
00112 {
00113 FormPtr form = FrmGetActiveForm();
00114 UInt8 level = 0;
00115 if (CtlGetValue((ControlPtr)GetObjectPtr(form, buttonID_dis_off))) {
00116 level = 0;
00117 } else if (CtlGetValue((ControlPtr)GetObjectPtr(form,
00118 buttonID_dis_one))) {
00119 level = 1;
00120 } else if (CtlGetValue((ControlPtr)GetObjectPtr(form,
00121 buttonID_dis_two))) {
00122 level = 2;
00123 } else if (CtlGetValue((ControlPtr)GetObjectPtr(form,
00124 buttonID_dis_three))) {
00125 level = 3;
00126 }
00127 setDisasterLevel(level);
00128
00129 level = 0;
00130
00131 if (CtlGetValue((ControlPtr)GetObjectPtr(form, buttonID_Easy))) {
00132 level = 0;
00133 } else if (CtlGetValue((ControlPtr)GetObjectPtr(form,
00134 buttonID_Medium))) {
00135 level = 1;
00136 } else if (CtlGetValue((ControlPtr)GetObjectPtr(form, buttonID_Hard))) {
00137 level = 2;
00138 }
00139 setDifficultyLevel(level);
00140 SETAUTOBULLDOZE(CtlGetValue((ControlPtr)GetObjectPtr(form,
00141 checkboxID_autobulldoze)));
00142 SETMINIMAPVISIBLE(CtlGetValue((ControlPtr)GetObjectPtr(form,
00143 checkboxID_minimapvisible)));
00144 SETMINIMAPDETAILED(CtlGetValue((ControlPtr)GetObjectPtr(form,
00145 checkboxID_minimapdetailed)));
00146 }
00147
00148
00149 Boolean
00150 hButtonConfig(EventPtr event)
00151 {
00152 Boolean handled = false;
00153 static char okHit = 0;
00154
00155 switch (event->eType) {
00156 case frmOpenEvent:
00157 WriteLog("open buttonconfig\n");
00158 PauseGame();
00159 FrmDrawForm(setupButtonConfig());
00160 okHit = 0;
00161 handled = true;
00162 break;
00163 case frmCloseEvent:
00164 WriteLog("close buttonconfig\n");
00165 if (okHit) saveButtonConfig();
00166 clearButtonConfig();
00167 break;
00168 case keyDownEvent:
00169 switch (event->data.keyDown.chr) {
00170 case vchrLaunch:
00171 FrmGotoForm(formID_pocketCity);
00172 handled = true;
00173 break;
00174 }
00175 case ctlSelectEvent:
00176 switch (event->data.ctlEnter.controlID) {
00177 case buttonID_OK:
00178 okHit = 1;
00179 handled = true;
00180 FrmGotoForm(formID_pocketCity);
00181 break;
00182 case buttonID_Cancel:
00183 okHit = 0;
00184 handled = true;
00185 FrmGotoForm(formID_pocketCity);
00186 break;
00187 }
00188 default:
00189 break;
00190 }
00191
00192 return (handled);
00193 }
00194
00204 static const struct bc_chelts {
00205 UInt16 popup;
00206 UInt16 list;
00207 UInt16 elt;
00208 } bc_elts[] = {
00209 { List_Cal_Popup, List_Cal, BkCalendar },
00210 { List_Addr_Popup, List_Addr, BkAddress },
00211 { List_HrUp_Popup, List_HrUp, BkHardUp },
00212 { List_HrDn_Popup, List_HrDn, BkHardDown },
00213 { List_ToDo_Popup, List_ToDo, BkToDo },
00214 { List_Memo_Popup, List_Memo, BkMemo },
00215 { List_Calc_Popup, List_Calc, BkCalc },
00216 { List_Find_Popup, List_Find, BkFind },
00217 #ifdef SONY_CLIE
00218 { List_JogUp_Popup, List_JogUp, BkJogUp },
00219 { List_JogDn_Popup, List_JogDn, BkJogDown },
00220 { List_JogOut_Popup, List_JogOut, BkJogRelease },
00221 #endif
00222 { 0, 0, 0 }
00223 };
00224
00226 static char **Popups;
00227
00237 static FormPtr
00238 setupButtonConfig(void)
00239 {
00240 FormPtr form = FrmGetActiveForm();
00241 UInt16 poplen;
00242 ButtonKey bk;
00243
00244 Popups = FillStringList(StrID_Popups, &poplen);
00245
00246 for (bk = BkCalendar; bc_elts[bk].popup != 0; bk++) {
00247 ListPtr lp;
00248 UInt16 ko = gameConfig.pc.keyOptions[bk];
00249
00250 if (ko > poplen) {
00251 ko = poplen - 1;
00252 }
00253 CtlSetLabel((ControlPtr)GetObjectPtr(form, bc_elts[bk].popup),
00254 Popups[ko]);
00255 lp = (ListPtr)GetObjectPtr(form, bc_elts[bk].list);
00256 LstSetListChoices(lp, (Char **)Popups, (Int16)poplen);
00257 LstSetSelection(lp, (Int16)ko);
00258 }
00259 return (form);
00260 }
00261
00267 static void
00268 saveButtonConfig(void)
00269 {
00270 ButtonKey bk;
00271 FormPtr form = FrmGetActiveForm();
00272
00273 for (bk = BkCalendar; bc_elts[bk].popup != 0; bk++) {
00274 gameConfig.pc.keyOptions[bk] =
00275 (ButtonEvent)LstGetSelection((ListPtr)GetObjectPtr(form,
00276 bc_elts[bk].list));
00277 }
00278 }
00279
00285 static void
00286 clearButtonConfig(void)
00287 {
00288 FreeStringList(Popups);
00289 }