/* * pHatt - PalmOS(TM) Hattrick (http://www.hattrick.org) Manager Assistant * * arena.c - the ArenaSizer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "phat.h" static Char *fanText; static MemHandle fanHandle; static Char *prefsTexts[7]; static MemHandle prefsHandles[7]; static UInt16 getFieldNr(Int8 i) { switch (i) { case 0: return PrefsArenaPessimistic; case 1: return PrefsArenaNormal; case 2: return PrefsArenaOptimistic; case 3: return PrefsArenaTerraces; case 4: return PrefsArenaBasic; case 5: return PrefsArenaRoof; case 6: return PrefsArenaVIP; } return NULL; } static void calculateArena () { Int16 mult[3]; Int32 value; Char s[2 * maxStrIToALen + 10]; mult[0] = prefs.arenaPessimistic; mult[1] = prefs.arenaNormal; mult[2] = prefs.arenaOptimistic; value = prefs.supporters * mult[prefs.selectedArena] * prefs.arenaTerraces / 100 + 0.5; StrPrintF(s, "%li (%+li)", value, value - prefs.arenaHasTerraces); FldSetTextPtr(getOPtr(Places1), s); FldDrawField(getOPtr(Places1)); value = prefs.supporters * mult[prefs.selectedArena] * prefs.arenaBasic / 100 + 0.5; StrPrintF(s, "%li (%+li)", value, value - prefs.arenaHasBasic); FldSetTextPtr(getOPtr(Places2), s); FldDrawField(getOPtr(Places2)); value = prefs.supporters * mult[prefs.selectedArena] * prefs.arenaRoof / 100 + 0.5; StrPrintF(s, "%li (%+li)", value, value - prefs.arenaHasRoof); FldSetTextPtr(getOPtr(Places3), s); FldDrawField(getOPtr(Places3)); value = prefs.supporters * mult[prefs.selectedArena] * prefs.arenaVIP / 100 + 0.5; StrPrintF(s, "%li (%+li)", value, value - prefs.arenaHasVIP); FldSetTextPtr(getOPtr(Places4), s); FldDrawField(getOPtr(Places4)); value = prefs.supporters * mult[prefs.selectedArena]; StrPrintF(s, "%li (%+li)", value, value - prefs.arenaHasTerraces - prefs.arenaHasBasic - prefs.arenaHasRoof - prefs.arenaHasVIP); FldSetTextPtr(getOPtr(Places5), s); FldDrawField(getOPtr(Places5)); } static Boolean checkPrefValues() { Char *temp; Int16 sum; sum = 0; temp = FldGetTextPtr(getOPtr(PrefsArenaTerraces)); sum += ( temp ? StrAToI(temp) : 0 ); temp = FldGetTextPtr(getOPtr(PrefsArenaBasic)); sum += ( temp ? StrAToI(temp) : 0 ); temp = FldGetTextPtr(getOPtr(PrefsArenaRoof)); sum += ( temp ? StrAToI(temp) : 0 ); temp = FldGetTextPtr(getOPtr(PrefsArenaVIP)); sum += ( temp ? StrAToI(temp) : 0 ); return sum == 100; } static void setPrefValues() { Char *temp; temp = FldGetTextPtr(getOPtr(PrefsArenaPessimistic)); prefs.arenaPessimistic = ( temp ? StrAToI(temp) : 0); temp = FldGetTextPtr(getOPtr(PrefsArenaNormal)); prefs.arenaNormal = ( temp ? StrAToI(temp) : 0); temp = FldGetTextPtr(getOPtr(PrefsArenaOptimistic)); prefs.arenaOptimistic = ( temp ? StrAToI(temp) : 0); temp = FldGetTextPtr(getOPtr(PrefsArenaTerraces)); prefs.arenaTerraces = ( temp ? StrAToI(temp) : 0); temp = FldGetTextPtr(getOPtr(PrefsArenaBasic)); prefs.arenaBasic = ( temp ? StrAToI(temp) : 0); temp = FldGetTextPtr(getOPtr(PrefsArenaRoof)); prefs.arenaRoof = ( temp ? StrAToI(temp) : 0); temp = FldGetTextPtr(getOPtr(PrefsArenaVIP)); prefs.arenaVIP = ( temp ? StrAToI(temp) : 0); } static Int16 getPrefValues(Int8 i) { if ( getFieldNr(i) == PrefsArenaPessimistic ) return prefs.arenaPessimistic; if ( getFieldNr(i) == PrefsArenaNormal ) return prefs.arenaNormal; if ( getFieldNr(i) == PrefsArenaOptimistic ) return prefs.arenaOptimistic; if ( getFieldNr(i) == PrefsArenaTerraces ) return prefs.arenaTerraces; if ( getFieldNr(i) == PrefsArenaBasic ) return prefs.arenaBasic; if ( getFieldNr(i) == PrefsArenaRoof ) return prefs.arenaRoof; if ( getFieldNr(i) == PrefsArenaVIP ) return prefs.arenaVIP; return 0; } Boolean ArenaPrefsEHandler(EventPtr event) { Boolean handled = false; Int8 i; switch (event->eType) { case frmOpenEvent: gpForm = FrmGetActiveForm(); for ( i = 0; i < 7; i++ ) { prefsHandles[i] = MemHandleNew(maxStrIToALen + 2); prefsTexts[i] = MemHandleLock(prefsHandles[i]); StrPrintF(prefsTexts[i], "%i", getPrefValues(i)); FldSetTextHandle(getOPtr(getFieldNr(i)), prefsHandles[i]); } FrmDrawForm(gpForm); handled = true; break; case frmCloseEvent: for ( i = 0; i < 7; i++) { FldSetTextHandle(getOPtr(getFieldNr(i)), NULL); MemHandleUnlock(prefsHandles[i]); MemHandleFree(prefsHandles[i]); prefsTexts[i] = NULL; } FrmEraseForm(gpForm); FrmDeleteForm(gpForm); gpForm = 0; handled = true; break; case ctlSelectEvent: switch (event->data.ctlEnter.controlID) { case EditOKButton: if ( checkPrefValues() ) { setPrefValues(); FrmGotoForm(prefs.prefsPrevScreen); handled = true; } else { SndPlaySystemSound(sndError); FrmAlert(PercentAlert); } break; case EditCancelButton: FrmGotoForm(prefs.prefsPrevScreen); handled = true; default: break; } default: break; } return handled; } Boolean ArenaScreenEHandler(EventPtr event) { Boolean handled = false; Char *supnum; switch (event->eType) { case frmOpenEvent: gpForm = FrmGetActiveForm(); if ( bgForm ) { FrmEraseForm(bgForm); FrmDeleteForm(bgForm); } bgForm = NULL; SetEditValue(Suspection, SuspectTrigger, prefs.selectedArena); fanHandle = MemHandleNew(maxStrIToALen + 2); fanText = MemHandleLock(fanHandle); StrPrintF(fanText, "%li", prefs.supporters); FldSetTextHandle(getOPtr(Supporters), fanHandle); FrmDrawForm(gpForm); calculateArena(); handled = true; break; case frmCloseEvent: FldSetTextHandle(getOPtr(Supporters), NULL); MemHandleUnlock(fanHandle); MemHandleFree(fanHandle); fanText = NULL; if ( ! bgForm ) { FrmEraseForm(gpForm); FrmDeleteForm(gpForm); } gpForm = 0; handled = true; break; case popSelectEvent: switch (event->data.popSelect.listID) { case Suspection: prefs.selectedArena = LstGetSelection(getOPtr(Suspection)); calculateArena(); break; default: break; } break; case ctlSelectEvent: switch (event->data.ctlEnter.controlID) { case PositionPlayerButton: case PlayerPosButton: FrmGotoForm(PlayerScreen); handled = true; break; } break; case keyDownEvent: case fldEnterEvent: case penUpEvent: supnum = FldGetTextPtr(getOPtr(Supporters)); prefs.supporters = ( supnum ? StrAToI(supnum) : 0 ); calculateArena(); break; case menuEvent: handled = switchScreen(event->data.menu.itemID); break; default: break; } return handled; }