00001
00008 #include <PalmTypes.h>
00009 #include <Chars.h>
00010 #include <StringMgr.h>
00011 #include <SysUtils.h>
00012 #include <query.h>
00013 #include <palmutils.h>
00014 #include <simcity.h>
00015 #include <locking.h>
00016 #include <logging.h>
00017 #include <simcity_resconsts.h>
00018 #include <zakdef.h>
00019 #include <simulation.h>
00020 #include <globals.h>
00021 #include <mem_compat.h>
00022
00023 static FormPtr querySetup(void) QUERY_SECTION;
00024 static void queryCleanup(void) QUERY_SECTION;
00025 static void zonetoPtr(Char *zonemsg, welem_t tile, UInt16 maxlen) QUERY_SECTION;
00026 static void frmShowID(FormPtr fp, UInt16 id) QUERY_SECTION;
00027 static void frmHideID(FormPtr fp, UInt16 id) QUERY_SECTION;
00028
00032 Boolean
00033 hQuery(EventPtr event)
00034 {
00035 Boolean handled = false;
00036
00037 switch (event->eType) {
00038 case frmOpenEvent:
00039 PauseGame();
00040 WriteLog("query opened\n");
00041 FrmDrawForm(querySetup());
00042 handled = true;
00043 break;
00044 case frmCloseEvent:
00045 WriteLog("Query close\n");
00046 queryCleanup();
00047 break;
00048 case keyDownEvent:
00049 switch (event->data.keyDown.chr) {
00050 case vchrLaunch:
00051 FrmGotoForm(formID_pocketCity);
00052 handled = true;
00053 break;
00054 }
00055 case ctlSelectEvent:
00056 switch (event->data.ctlEnter.controlID) {
00057 case buttonID_OK:
00058 FrmGotoForm(formID_pocketCity);
00059 handled = true;
00060 break;
00061 }
00062 default:
00063 break;
00064 }
00065
00066 return (handled);
00067 }
00068
00070 static const struct type_zone {
00071 welem_t tile_start;
00072 welem_t tile_end;
00073 UInt16 zonestring;
00074 } type_zones[] = {
00075 { Z_DIRT, Z_DIRT, si_empty_land },
00076 { Z_REALTREE, Z_REALTREE, si_forest },
00077 { Z_REALWATER, Z_REALWATER, si_realwater },
00078 { Z_FAKETREE, Z_FAKETREE, si_faketree },
00079 { Z_FAKEWATER, Z_FAKEWATER, si_fakewater },
00080 { Z_PUMP, Z_PUMP, si_pump },
00081 { Z_WASTE, Z_WASTE, si_waste },
00082 { Z_FIRE1, Z_FIRE3, si_fire },
00083 { Z_CRATER, Z_CRATER, si_crater },
00084 { Z_PIPE_START, Z_PIPE_END, si_pipe },
00085 { Z_POWERLINE_START, Z_POWERLINE_END, si_powerline },
00086 { Z_POWERWATER_START, Z_POWERWATER_END, si_powerwater },
00087 { Z_COMMERCIAL_SLUM, Z_COMMERCIAL_SLUM, si_commercialslum },
00088 { Z_RESIDENTIAL_SLUM, Z_RESIDENTIAL_SLUM, si_residentialslum },
00089 { Z_INDUSTRIAL_SLUM, Z_INDUSTRIAL_SLUM, si_industrialslum },
00090 { Z_COALPLANT_START, Z_COALPLANT_END, si_coalplant },
00091 { Z_NUCLEARPLANT_START, Z_NUCLEARPLANT_END, si_nuclearplant },
00092 { Z_FIRESTATION_START, Z_FIRESTATION_END, si_firestation },
00093 { Z_POLICEDEPT_START, Z_POLICEDEPT_END, si_policedept },
00094 { Z_ARMYBASE_START, Z_ARMYBASE_END, si_armybase },
00095 { Z_COMMERCIAL_MIN, Z_COMMERCIAL_MAX, si_commercial },
00096 { Z_RESIDENTIAL_MIN, Z_RESIDENTIAL_MAX, si_residential },
00097 { Z_INDUSTRIAL_MIN, Z_INDUSTRIAL_MAX, si_industrial },
00098 { Z_POWERROAD_START, Z_POWERROAD_END, si_powerroad },
00099 { Z_PIPEROAD_START, Z_PIPEROAD_END, si_piperoad },
00100 { Z_ROAD_START, Z_ROAD_END, si_road },
00101 { Z_BRIDGE_START, Z_BRIDGE_END, si_bridge },
00102 { Z_RAIL_START, Z_RAIL_END, si_rail },
00103 { Z_RAILPIPE_START, Z_RAILPIPE_END, si_railpipe },
00104 { Z_RAILPOWER_START, Z_RAILPOWER_END, si_railpower },
00105 { Z_RAILOVROAD_START, Z_RAILOVROAD_END, si_railovroad },
00106 { Z_RAILTUNNEL_START, Z_RAILTUNNEL_END, si_railtunnel },
00107 { 0, 0, 0 }
00108 };
00109
00116 static void
00117 zonetoPtr(Char *zonemsg, welem_t tile, UInt16 maxlen)
00118 {
00119 struct type_zone *tzone = (struct type_zone *)&type_zones[0];
00120
00121 while (tzone->zonestring != 0) {
00122 if ((tile >= tzone->tile_start) && (tile <= tzone->tile_end))
00123 break;
00124 tzone++;
00125 }
00126
00127 if (tzone->zonestring == 0) {
00128 StrIToA(zonemsg, tile);
00129 } else {
00130 ResGetString(tzone->zonestring, zonemsg, maxlen);
00131 }
00132 }
00133
00139 static void
00140 frmShowID(FormPtr fp, UInt16 id)
00141 {
00142 FrmShowObject(fp, FrmGetObjectIndex(fp, id));
00143 }
00144
00150 static void
00151 frmHideID(FormPtr fp, UInt16 id)
00152 {
00153 FrmHideObject(fp, FrmGetObjectIndex(fp, id));
00154 }
00155
00160 static FormPtr
00161 querySetup(void)
00162 {
00163 Char *temp;
00164 FormPtr form;
00165 ControlPtr ctl;
00166 FieldPtr fld;
00167 welem_t element;
00168 selem_t status;
00169 Int16 valdens;
00170
00171 LockZone(lz_world);
00172 LockZone(lz_flags);
00173 getWorldAndFlag(GetPositionClicked(), &element, &status);
00174 UnlockZone(lz_flags);
00175 UnlockZone(lz_world);
00176
00177 form = FrmGetActiveForm();
00178 temp = (Char *)MemPtrNew(255);
00179 StrPrintF(temp, "(%d,%d)", (int)(GetPositionClicked() % getMapWidth()),
00180 (int)(GetPositionClicked() / getMapWidth()));
00181 ctl = (ControlPtr)GetObjectPtr(form, labelID_zonelocation);
00182 CtlSetLabel(ctl, temp);
00183
00184 temp = (Char *)MemPtrNew(255);
00185 zonetoPtr(temp, element, 255);
00186 fld = (FieldPtr)GetObjectPtr(form, labelID_zonetype);
00187 FldSetTextPtr(fld, temp);
00188 FldRecalculateField(fld, true);
00189
00190 temp = (Char *)MemPtrNew(255);
00191 valdens = ZoneValue(element);
00192 SysStringByIndex(strID_values, (UInt16)(valdens % 4), temp, 255);
00193 ctl = (ControlPtr)GetObjectPtr(form, labelID_zonevalue);
00194 CtlSetLabel(ctl, temp);
00195
00196 temp = (Char *)MemPtrNew(255);
00197 SysStringByIndex(strID_densities, (UInt16)(valdens / 4), temp, 255);
00198 ctl = (ControlPtr)GetObjectPtr(form, labelID_zonedensity);
00199 CtlSetLabel(ctl, temp);
00200
00201
00202
00203 frmHideID(form, labelID_ispowered);
00204 if (CarryPower(element)) {
00205 if (status & POWEREDBIT)
00206 frmShowID(form, labelID_ispowered);
00207 frmShowID(form, labelID_carrypower);
00208 } else {
00209 frmHideID(form, labelID_carrypower);
00210 }
00211 frmHideID(form, labelID_iswatered);
00212 if (CarryWater(element)) {
00213 if (status & WATEREDBIT)
00214 frmShowID(form, labelID_iswatered);
00215 frmShowID(form, labelID_carrywater);
00216 } else {
00217 frmHideID(form, labelID_carrywater);
00218 }
00219
00220 return (form);
00221 }
00222
00226 static void
00227 queryCleanup(void)
00228 {
00229 FormPtr form;
00230 Char *temp;
00231
00232 form = FrmGetActiveForm();
00233
00234 temp = (char *)CtlGetLabel((ControlPtr)GetObjectPtr(form,
00235 labelID_zonelocation));
00236 if (temp) MemPtrFree(temp);
00237
00238 temp = (char *)FldGetTextPtr((FieldPtr)GetObjectPtr(form,
00239 labelID_zonetype));
00240 if (temp) MemPtrFree(temp);
00241
00242 temp = (char *)CtlGetLabel((ControlPtr)GetObjectPtr(form,
00243 labelID_zonevalue));
00244 if (temp) MemPtrFree(temp);
00245
00246 temp = (char *)CtlGetLabel((ControlPtr)GetObjectPtr(form,
00247 labelID_zonedensity));
00248 if (temp) MemPtrFree(temp);
00249 }