Main Page   Data Structures   File List   Data Fields   Globals   Related Pages  

palm/query.c

Go to the documentation of this file.
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         /* Pollution / Crime NYI */
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 }

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