New form with tabs
svn-id: r15062
This commit is contained in:
parent
7afd085317
commit
83dac5960f
1 changed files with 386 additions and 239 deletions
|
@ -1,13 +1,362 @@
|
|||
#include <PalmOS.h>
|
||||
|
||||
#include "formTabs.h"
|
||||
#include "forms.h"
|
||||
|
||||
#include "start.h"
|
||||
#include "games.h"
|
||||
#include "skin.h"
|
||||
|
||||
#define errBadParam 0x1000
|
||||
|
||||
static TabType *myTabP;
|
||||
static UInt16 lastTab = 0;
|
||||
|
||||
UInt8 gFormEditMode;
|
||||
|
||||
static void GameTabInit(GameInfoType *gameInfoP) {
|
||||
FieldType *fld1P, *fld2P, *fld3P;
|
||||
Char *nameP, *pathP, *gameP;
|
||||
MemHandle nameH, pathH, gameH;
|
||||
|
||||
fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField);
|
||||
fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField);
|
||||
fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField);
|
||||
|
||||
nameH = MemHandleNew(FldGetMaxChars(fld1P)+1);
|
||||
pathH = MemHandleNew(FldGetMaxChars(fld2P)+1);
|
||||
gameH = MemHandleNew(FldGetMaxChars(fld3P)+1);
|
||||
|
||||
nameP = (Char *)MemHandleLock(nameH);
|
||||
pathP = (Char *)MemHandleLock(pathH);
|
||||
gameP = (Char *)MemHandleLock(gameH);
|
||||
|
||||
if (gameInfoP) {
|
||||
StrCopy(nameP, gameInfoP->nameP);
|
||||
StrCopy(pathP, gameInfoP->pathP);
|
||||
StrCopy(gameP, gameInfoP->gameP);
|
||||
} else {
|
||||
MemSet(nameP,MemHandleSize(nameH),0);
|
||||
MemSet(pathP,MemHandleSize(pathH),0);
|
||||
MemSet(gameP,MemHandleSize(gameH),0);
|
||||
}
|
||||
|
||||
MemHandleUnlock(nameH);
|
||||
MemHandleUnlock(pathH);
|
||||
MemHandleUnlock(gameH);
|
||||
|
||||
FldSetTextHandle(fld1P, nameH);
|
||||
FldSetTextHandle(fld2P, pathH);
|
||||
FldSetTextHandle(fld3P, gameH);
|
||||
}
|
||||
|
||||
static Err GameTabSave(GameInfoType *gameInfoP) {
|
||||
FieldType *fld1P, *fld2P, *fld3P;
|
||||
|
||||
FormType *frmP = FrmGetActiveForm();
|
||||
|
||||
fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField);
|
||||
fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField);
|
||||
fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField);
|
||||
|
||||
FldTrimText(fld1P);
|
||||
FldTrimText(fld2P);
|
||||
FldTrimText(fld3P);
|
||||
|
||||
if (!gameInfoP) {
|
||||
if (FldGetTextLength(fld1P) == 0) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified an entry name.",0,0);
|
||||
TabSetActive(frmP, myTabP, 0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField));
|
||||
return errBadParam;
|
||||
|
||||
} else if (FldGetTextLength(fld2P) == 0) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a path.",0,0);
|
||||
TabSetActive(frmP, myTabP, 0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoPathField));
|
||||
return errBadParam;
|
||||
|
||||
} else if (FldGetTextLength(fld3P) == 0) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a game.",0,0);
|
||||
TabSetActive(frmP, myTabP, 0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoGameField));
|
||||
return errBadParam;
|
||||
}
|
||||
|
||||
} else {
|
||||
StrCopy(gameInfoP->nameP, FldGetTextPtr(fld1P));
|
||||
StrCopy(gameInfoP->pathP, FldGetTextPtr(fld2P));
|
||||
StrCopy(gameInfoP->gameP, FldGetTextPtr(fld3P));
|
||||
|
||||
if (gameInfoP->pathP[StrLen(gameInfoP->pathP)-1] != '/')
|
||||
StrCat(gameInfoP->pathP, "/");
|
||||
|
||||
}
|
||||
|
||||
return errNone;
|
||||
}
|
||||
|
||||
static void DisplayInit(GameInfoType *gameInfoP) {
|
||||
ListType *list1P;
|
||||
|
||||
list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList);
|
||||
|
||||
if (gameInfoP) {
|
||||
LstSetSelection(list1P, gameInfoP->gfxMode);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), gameInfoP->filter);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), gameInfoP->fullscreen);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), gameInfoP->aspectRatio);
|
||||
|
||||
} else {
|
||||
LstSetSelection(list1P, 2);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), 0);
|
||||
}
|
||||
|
||||
CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayGfxPopupPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
|
||||
}
|
||||
|
||||
static Err DisplaySave(GameInfoType *gameInfoP) {
|
||||
ListType *list1P;
|
||||
ControlType *cck6P, *cck7P, *cck8P;
|
||||
|
||||
FormType *frmP = FrmGetActiveForm();
|
||||
|
||||
list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList);
|
||||
cck6P = (ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox);
|
||||
cck7P = (ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox);
|
||||
cck8P = (ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox);
|
||||
|
||||
if (!gameInfoP) {
|
||||
} else {
|
||||
gameInfoP->gfxMode = LstGetSelection(list1P);
|
||||
gameInfoP->filter = CtlGetValue(cck6P);
|
||||
gameInfoP->fullscreen = CtlGetValue(cck7P);
|
||||
gameInfoP->aspectRatio = CtlGetValue(cck8P);
|
||||
}
|
||||
|
||||
return errNone;
|
||||
}
|
||||
|
||||
static void OptionsInit(GameInfoType *gameInfoP) {
|
||||
ListType *list2P, *list3P;
|
||||
FieldType *fld4P, *fld5P, *fld6P;
|
||||
Char *loadP, *roomP, *talkP;
|
||||
MemHandle loadH, roomH, talkH;
|
||||
|
||||
list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList);
|
||||
list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList);
|
||||
|
||||
fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField);
|
||||
fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField);
|
||||
fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField);
|
||||
|
||||
loadH = MemHandleNew(FldGetMaxChars(fld4P)+1);
|
||||
roomH = MemHandleNew(FldGetMaxChars(fld5P)+1);
|
||||
talkH = MemHandleNew(FldGetMaxChars(fld6P)+1);
|
||||
|
||||
loadP = (Char *)MemHandleLock(loadH);
|
||||
roomP = (Char *)MemHandleLock(roomH);
|
||||
talkP = (Char *)MemHandleLock(talkH);
|
||||
|
||||
if (gameInfoP) {
|
||||
LstSetSelection(list2P, gameInfoP->language);
|
||||
LstSetSelection(list3P, gameInfoP->platform);
|
||||
|
||||
StrIToA(loadP, gameInfoP->loadSlot);
|
||||
StrIToA(roomP, gameInfoP->bootValue);
|
||||
StrIToA(talkP, gameInfoP->talkValue);
|
||||
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), gameInfoP->autoLoad);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), gameInfoP->bootParam);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), gameInfoP->setPlatform);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), gameInfoP->subtitles);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), gameInfoP->talkSpeed);
|
||||
|
||||
} else {
|
||||
LstSetSelection(list2P, 0);
|
||||
LstSetSelection(list3P, 0);
|
||||
|
||||
StrIToA(loadP, 0);
|
||||
StrIToA(roomP, 0);
|
||||
StrIToA(talkP, 60);
|
||||
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), 0);
|
||||
}
|
||||
|
||||
MemHandleUnlock(loadH);
|
||||
MemHandleUnlock(roomH);
|
||||
MemHandleUnlock(talkH);
|
||||
|
||||
FldSetTextHandle(fld4P, loadH);
|
||||
FldSetTextHandle(fld5P, roomH);
|
||||
FldSetTextHandle(fld6P, talkH);
|
||||
|
||||
CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsLanguagePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
|
||||
CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsPlatformPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P)));
|
||||
}
|
||||
|
||||
static Err OptionsSave(GameInfoType *gameInfoP) {
|
||||
FieldType *fld4P, *fld5P, *fld6P;
|
||||
ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P;
|
||||
ListType *list2P, *list3P;
|
||||
|
||||
FormType *frmP = FrmGetActiveForm();
|
||||
|
||||
list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList);
|
||||
list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList);
|
||||
|
||||
fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField);
|
||||
fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField);
|
||||
fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField);
|
||||
|
||||
cck1P = (ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox);
|
||||
cck2P = (ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox);
|
||||
cck3P = (ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox);
|
||||
cck4P = (ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox);
|
||||
cck5P = (ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox);
|
||||
|
||||
if (!gameInfoP) {
|
||||
if (FldGetTextLength(fld5P) == 0 && CtlGetValue(cck2P) == 1) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a room number.",0,0);
|
||||
TabSetActive(frmP, myTabP, 2);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsStartRoomField));
|
||||
return errBadParam;
|
||||
|
||||
} else if (FldGetTextLength(fld6P) == 0 && CtlGetValue(cck5P) == 1) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a talk speed.",0,0);
|
||||
TabSetActive(frmP, myTabP, 2);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsTalkSpeedField));
|
||||
return errBadParam;
|
||||
}
|
||||
} else {
|
||||
gameInfoP->language = LstGetSelection(list2P);
|
||||
gameInfoP->platform = LstGetSelection(list3P);
|
||||
|
||||
gameInfoP->autoLoad = CtlGetValue(cck1P);
|
||||
gameInfoP->bootParam = CtlGetValue(cck2P);
|
||||
gameInfoP->setPlatform = CtlGetValue(cck3P);
|
||||
gameInfoP->subtitles = (CtlGetValue(cck4P));
|
||||
gameInfoP->talkSpeed = CtlGetValue(cck5P);
|
||||
|
||||
gameInfoP->loadSlot = StrAToI(FldGetTextPtr(fld4P));
|
||||
gameInfoP->bootValue = StrAToI(FldGetTextPtr(fld5P));
|
||||
gameInfoP->talkValue = StrAToI(FldGetTextPtr(fld6P));
|
||||
}
|
||||
|
||||
return errNone;
|
||||
}
|
||||
|
||||
static void GameManInit(UInt16 index) {
|
||||
TabType *tabP;
|
||||
FormType *frmP = FrmGetActiveForm();
|
||||
UInt16 active = lastTab;
|
||||
|
||||
tabP = TabNewTabs(3);
|
||||
TabAddContent(&frmP, tabP, "Game", TabGameInfoForm);
|
||||
TabAddContent(&frmP, tabP, "Display", TabGameDisplayForm);
|
||||
TabAddContent(&frmP, tabP, "Options", TabGameOptionsForm);
|
||||
|
||||
if (index != dmMaxRecordIndex) {
|
||||
MemHandle recordH = NULL;
|
||||
GameInfoType *gameInfoP;
|
||||
|
||||
recordH = DmQueryRecord(gameDB, index);
|
||||
gameInfoP = (GameInfoType *)MemHandleLock(recordH);
|
||||
|
||||
GameTabInit(gameInfoP);
|
||||
DisplayInit(gameInfoP);
|
||||
OptionsInit(gameInfoP);
|
||||
|
||||
MemHandleUnlock(recordH);
|
||||
CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),true);
|
||||
} else {
|
||||
active = 0; // new game ? start with first tab
|
||||
GameTabInit(0);
|
||||
DisplayInit(0);
|
||||
OptionsInit(0);
|
||||
CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),false);
|
||||
}
|
||||
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField));
|
||||
FrmDrawForm(frmP);
|
||||
TabSetActive(frmP, tabP, active);
|
||||
|
||||
myTabP = tabP;
|
||||
}
|
||||
|
||||
static void GameManSave(UInt16 index) {
|
||||
MemHandle recordH;
|
||||
GameInfoType *gameInfoP, newGameInfo;
|
||||
|
||||
if (GameTabSave(0) == errBadParam) return;
|
||||
if (DisplaySave(0) == errBadParam) return;
|
||||
if (OptionsSave(0) == errBadParam) return;
|
||||
|
||||
if (index != dmMaxRecordIndex) {
|
||||
recordH = DmGetRecord(gameDB, index);
|
||||
gameInfoP = (GameInfoType *)MemHandleLock(recordH);
|
||||
MemMove(&newGameInfo, gameInfoP, sizeof(GameInfoType));
|
||||
|
||||
} else {
|
||||
index = dmMaxRecordIndex;
|
||||
GamUnselect();
|
||||
recordH = DmNewRecord(gameDB, &index, sizeof(GameInfoType));
|
||||
gameInfoP = (GameInfoType *)MemHandleLock(recordH);
|
||||
|
||||
MemSet(&newGameInfo, sizeof(GameInfoType), 0);
|
||||
newGameInfo.version = curItemVersion;
|
||||
newGameInfo.icnID = 0xFFFF;
|
||||
newGameInfo.selected = true;
|
||||
|
||||
// default sound data
|
||||
newGameInfo.musicInfo.volume.master = 192;
|
||||
newGameInfo.musicInfo.volume.music = 192;
|
||||
newGameInfo.musicInfo.volume.sfx = 192;
|
||||
newGameInfo.musicInfo.volume.speech = 192;
|
||||
newGameInfo.musicInfo.volume.audiocd = 50;
|
||||
|
||||
newGameInfo.musicInfo.sound.tempo = 100;
|
||||
newGameInfo.musicInfo.sound.defaultTrackLength = 10;
|
||||
newGameInfo.musicInfo.sound.firstTrack = 1;
|
||||
}
|
||||
|
||||
GameTabSave(&newGameInfo);
|
||||
DisplaySave(&newGameInfo);
|
||||
OptionsSave(&newGameInfo);
|
||||
|
||||
DmWrite(gameInfoP, 0, &newGameInfo, sizeof(GameInfoType));
|
||||
|
||||
MemHandleUnlock(recordH);
|
||||
DmReleaseRecord (gameDB, index, 0);
|
||||
GamSortList();
|
||||
// update list position
|
||||
{
|
||||
RectangleType rArea;
|
||||
UInt16 posIndex, maxView;
|
||||
|
||||
// get the sorted index
|
||||
index = GamGetSelected();
|
||||
// if new item is out of the list bounds, change current list pos
|
||||
SknGetListBounds(&rArea, NULL);
|
||||
maxView = rArea.extent.y / sknInfoListItemSize;
|
||||
posIndex = gPrefs->listPosition;
|
||||
|
||||
// if out of the current list position
|
||||
if (!(index >= posIndex && index < (posIndex + maxView)))
|
||||
gPrefs->listPosition = index; // this value is corrected in SknUpdateList if needed
|
||||
}
|
||||
|
||||
TabDeleteTabs(myTabP);
|
||||
FrmReturnToMain();
|
||||
SknUpdateList();
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
*
|
||||
* FUNCTION: EditGameFormSave
|
||||
|
@ -29,289 +378,87 @@ void EditGameFormDelete(Boolean direct) {
|
|||
|
||||
} else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) {
|
||||
DmRemoveRecord(gameDB, index);
|
||||
if (!direct)
|
||||
if (!direct) {
|
||||
TabDeleteTabs(myTabP);
|
||||
FrmReturnToMain();
|
||||
}
|
||||
GamSortList();
|
||||
SknUpdateList();
|
||||
}
|
||||
}
|
||||
|
||||
static void EditGameFormSave(UInt16 index) {
|
||||
|
||||
FieldType *fld1P, *fld2P, *fld3P, *fld4P, *fld5P, *fld6P; // need to change this with good names
|
||||
ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P;
|
||||
ListType *list1P, *list2P, *list3P;
|
||||
FormPtr frmP;
|
||||
|
||||
MemHandle recordH;
|
||||
GameInfoType *gameInfo, newGameInfo;
|
||||
// UInt16 index;
|
||||
|
||||
list1P = (ListType *)GetObjectPtr(EditGameGfxListList);
|
||||
list2P = (ListType *)GetObjectPtr(EditGameLanguageList);
|
||||
list3P = (ListType *)GetObjectPtr(EditGamePlatformList);
|
||||
|
||||
fld1P = (FieldType *)GetObjectPtr(EditGameEntryNameField);
|
||||
fld2P = (FieldType *)GetObjectPtr(EditGamePathField);
|
||||
fld3P = (FieldType *)GetObjectPtr(EditGameGameField);
|
||||
fld4P = (FieldType *)GetObjectPtr(EditGameLoadSlotField);
|
||||
fld5P = (FieldType *)GetObjectPtr(EditGameStartRoomField);
|
||||
fld6P = (FieldType *)GetObjectPtr(EditGameTalkSpeedField);
|
||||
|
||||
cck1P = (ControlType *)GetObjectPtr(EditGameLoadSlotCheckbox);
|
||||
cck2P = (ControlType *)GetObjectPtr(EditGameStartRoomCheckbox);
|
||||
cck3P = (ControlType *)GetObjectPtr(EditGameAmigaCheckbox);
|
||||
cck4P = (ControlType *)GetObjectPtr(EditGameSubtitlesCheckbox);
|
||||
cck5P = (ControlType *)GetObjectPtr(EditGameTalkSpeedCheckbox);
|
||||
|
||||
frmP = FrmGetActiveForm();
|
||||
|
||||
FldTrimText(fld1P);
|
||||
FldTrimText(fld2P);
|
||||
FldTrimText(fld3P);
|
||||
|
||||
if (FldGetTextLength(fld1P) == 0) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified an entry name.",0,0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameEntryNameField));
|
||||
return;
|
||||
} else if (FldGetTextLength(fld2P) == 0) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a path.",0,0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGamePathField));
|
||||
return;
|
||||
} else if (FldGetTextLength(fld3P) == 0) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a game.",0,0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameGameField));
|
||||
return;
|
||||
} else if (FldGetTextLength(fld5P) == 0 && CtlGetValue(cck2P) == 1) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a room number.",0,0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameStartRoomField));
|
||||
return;
|
||||
} else if (FldGetTextLength(fld6P) == 0 && CtlGetValue(cck5P) == 1) {
|
||||
FrmCustomAlert(FrmWarnAlert,"You must specified a talk speed.",0,0);
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameTalkSpeedField));
|
||||
return;
|
||||
}
|
||||
|
||||
// index = GamGetSelected();
|
||||
|
||||
if (index != dmMaxRecordIndex) {
|
||||
recordH = DmGetRecord(gameDB, index);
|
||||
} else {
|
||||
index = dmMaxRecordIndex;
|
||||
GamUnselect();
|
||||
recordH = DmNewRecord(gameDB, &index, sizeof(GameInfoType));
|
||||
}
|
||||
|
||||
gameInfo = (GameInfoType *)MemHandleLock(recordH);
|
||||
|
||||
StrCopy(newGameInfo.nameP, FldGetTextPtr(fld1P));
|
||||
StrCopy(newGameInfo.pathP, FldGetTextPtr(fld2P));
|
||||
StrCopy(newGameInfo.gameP, FldGetTextPtr(fld3P));
|
||||
|
||||
if (newGameInfo.pathP[StrLen(newGameInfo.pathP)-1] != '/')
|
||||
StrCat(newGameInfo.pathP, "/");
|
||||
|
||||
newGameInfo.version = curItemVersion;
|
||||
newGameInfo.icnID = 0xFFFF;
|
||||
newGameInfo.gfxMode = LstGetSelection(list1P);
|
||||
newGameInfo.language = LstGetSelection(list2P);
|
||||
newGameInfo.platform = LstGetSelection(list3P);
|
||||
newGameInfo.selected = true;
|
||||
newGameInfo.autoLoad = CtlGetValue(cck1P);
|
||||
newGameInfo.loadSlot = StrAToI(FldGetTextPtr(fld4P));
|
||||
newGameInfo.bootParam = CtlGetValue(cck2P);
|
||||
newGameInfo.bootValue = StrAToI(FldGetTextPtr(fld5P));
|
||||
newGameInfo.setPlatform = CtlGetValue(cck3P);
|
||||
newGameInfo.subtitles = (CtlGetValue(cck4P));
|
||||
newGameInfo.talkValue = StrAToI(FldGetTextPtr(fld6P));
|
||||
newGameInfo.talkSpeed = CtlGetValue(cck5P);
|
||||
|
||||
DmWrite(gameInfo, 0, &newGameInfo, sizeof(GameInfoType));
|
||||
|
||||
MemHandleUnlock(recordH);
|
||||
DmReleaseRecord (gameDB, index, 0);
|
||||
GamSortList();
|
||||
// update list position
|
||||
{
|
||||
RectangleType rArea;
|
||||
UInt16 posIndex, maxView;
|
||||
|
||||
// get the sorted index
|
||||
index = GamGetSelected();
|
||||
// if new item is out of the list bounds, change current list pos
|
||||
SknGetListBounds(&rArea, NULL);
|
||||
maxView = rArea.extent.y / sknInfoListItemSize;
|
||||
posIndex = gPrefs->listPosition;
|
||||
|
||||
// if out of the current list position
|
||||
if (!(index >= posIndex && index < (posIndex + maxView)))
|
||||
gPrefs->listPosition = index; // this value is corrected in SknUpdateList if needed
|
||||
}
|
||||
|
||||
FrmReturnToMain();
|
||||
SknUpdateList();
|
||||
}
|
||||
|
||||
static void EditGameFormInit(UInt16 index) {
|
||||
|
||||
FieldType *fld1P, *fld2P, *fld3P, *fld4P, *fld5P, *fld6P;
|
||||
FormPtr frmP;
|
||||
ListType *list1P, *list2P, *list3P;
|
||||
|
||||
Char *nameP, *pathP, *gameP, *loadP, *roomP, *talkP;
|
||||
MemHandle nameH, pathH, gameH, loadH, roomH, talkH;
|
||||
|
||||
MemHandle recordH = NULL;
|
||||
GameInfoType *game;
|
||||
|
||||
list1P = (ListType *)GetObjectPtr(EditGameGfxListList);
|
||||
list2P = (ListType *)GetObjectPtr(EditGameLanguageList);
|
||||
list3P = (ListType *)GetObjectPtr(EditGamePlatformList);
|
||||
|
||||
fld1P = (FieldType *)GetObjectPtr(EditGameEntryNameField);
|
||||
fld2P = (FieldType *)GetObjectPtr(EditGamePathField);
|
||||
fld3P = (FieldType *)GetObjectPtr(EditGameGameField);
|
||||
fld4P = (FieldType *)GetObjectPtr(EditGameLoadSlotField);
|
||||
fld5P = (FieldType *)GetObjectPtr(EditGameStartRoomField);
|
||||
fld6P = (FieldType *)GetObjectPtr(EditGameTalkSpeedField);
|
||||
|
||||
nameH = MemHandleNew(FldGetMaxChars(fld1P)+1);
|
||||
pathH = MemHandleNew(FldGetMaxChars(fld2P)+1);
|
||||
gameH = MemHandleNew(FldGetMaxChars(fld3P)+1);
|
||||
loadH = MemHandleNew(FldGetMaxChars(fld4P)+1);
|
||||
roomH = MemHandleNew(FldGetMaxChars(fld5P)+1);
|
||||
talkH = MemHandleNew(FldGetMaxChars(fld6P)+1);
|
||||
|
||||
nameP = (Char *)MemHandleLock(nameH);
|
||||
pathP = (Char *)MemHandleLock(pathH);
|
||||
gameP = (Char *)MemHandleLock(gameH);
|
||||
loadP = (Char *)MemHandleLock(loadH);
|
||||
roomP = (Char *)MemHandleLock(roomH);
|
||||
talkP = (Char *)MemHandleLock(talkH);
|
||||
|
||||
frmP = FrmGetActiveForm();
|
||||
|
||||
if (index != dmMaxRecordIndex) {
|
||||
recordH = DmQueryRecord(gameDB, index);
|
||||
game = (GameInfoType *)MemHandleLock(recordH);
|
||||
StrCopy(nameP, game->nameP);
|
||||
StrCopy(pathP, game->pathP);
|
||||
StrCopy(gameP, game->gameP);
|
||||
|
||||
LstSetSelection(list1P, game->gfxMode);
|
||||
LstSetSelection(list2P, game->language);
|
||||
LstSetSelection(list3P, game->platform);
|
||||
|
||||
StrIToA(loadP, game->loadSlot);
|
||||
StrIToA(roomP, game->bootValue);
|
||||
StrIToA(talkP, game->talkValue);
|
||||
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameLoadSlotCheckbox), game->autoLoad);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameStartRoomCheckbox), game->bootParam);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameAmigaCheckbox), game->setPlatform);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameSubtitlesCheckbox), game->subtitles);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameTalkSpeedCheckbox), game->talkSpeed);
|
||||
|
||||
MemHandleUnlock(recordH);
|
||||
CtlSetUsable((ControlType *)GetObjectPtr(EditGameDeleteButton),true);
|
||||
}
|
||||
else {
|
||||
MemSet(nameP,MemHandleSize(nameH),0);
|
||||
MemSet(pathP,MemHandleSize(pathH),0);
|
||||
MemSet(gameP,MemHandleSize(gameH),0);
|
||||
|
||||
StrIToA(loadP, 0);
|
||||
StrIToA(roomP, 0);
|
||||
StrIToA(talkP, 60);
|
||||
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameLoadSlotCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameStartRoomCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameAmigaCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameSubtitlesCheckbox), 0);
|
||||
CtlSetValue((ControlType *)GetObjectPtr(EditGameTalkSpeedCheckbox), 0);
|
||||
|
||||
LstSetSelection(list1P, 1);
|
||||
LstSetSelection(list2P, 0);
|
||||
LstSetSelection(list3P, 0);
|
||||
CtlSetUsable((ControlType *)GetObjectPtr(EditGameDeleteButton),false);
|
||||
|
||||
FrmSetFocus(frmP, FrmGetObjectIndex(frmP, EditGameEntryNameField));
|
||||
}
|
||||
|
||||
MemHandleUnlock(nameH);
|
||||
MemHandleUnlock(pathH);
|
||||
MemHandleUnlock(gameH);
|
||||
MemHandleUnlock(loadH);
|
||||
MemHandleUnlock(roomH);
|
||||
MemHandleUnlock(talkH);
|
||||
|
||||
FldSetTextHandle(fld1P, nameH);
|
||||
FldSetTextHandle(fld2P, pathH);
|
||||
FldSetTextHandle(fld3P, gameH);
|
||||
FldSetTextHandle(fld4P, loadH);
|
||||
FldSetTextHandle(fld5P, roomH);
|
||||
FldSetTextHandle(fld6P, talkH);
|
||||
|
||||
CtlSetLabel((ControlType *)GetObjectPtr(EditGameGfxPopupPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
|
||||
CtlSetLabel((ControlType *)GetObjectPtr(EditGameLanguagePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
|
||||
CtlSetLabel((ControlType *)GetObjectPtr(EditGamePlatformPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P)));
|
||||
|
||||
FrmDrawForm(frmP);
|
||||
}
|
||||
|
||||
Boolean EditGameFormHandleEvent(EventPtr eventP)
|
||||
{
|
||||
Boolean EditGameFormHandleEvent(EventPtr eventP) {
|
||||
FormPtr frmP = FrmGetActiveForm();
|
||||
Boolean handled = false;
|
||||
|
||||
switch (eventP->eType) {
|
||||
case frmOpenEvent:
|
||||
switch (gFormEditMode) {
|
||||
case edtModeAdd:
|
||||
EditGameFormInit(dmMaxRecordIndex);
|
||||
GameManInit(dmMaxRecordIndex);
|
||||
break;
|
||||
case edtModeEdit:
|
||||
case edtModeParams:
|
||||
default :
|
||||
EditGameFormInit(GamGetSelected());
|
||||
GameManInit(GamGetSelected());
|
||||
break;
|
||||
}
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
case keyDownEvent:
|
||||
switch (eventP->data.keyDown.chr) {
|
||||
case chrLineFeed:
|
||||
case chrCarriageReturn:
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case ctlSelectEvent:
|
||||
switch (eventP->data.ctlSelect.controlID)
|
||||
{
|
||||
case EditGameOKButton:
|
||||
case (GameEditForm + 1) :
|
||||
case (GameEditForm + 2) :
|
||||
case (GameEditForm + 3) :
|
||||
lastTab = (eventP->data.ctlSelect.controlID - GameEditForm - 1);
|
||||
TabSetActive(frmP, myTabP, lastTab);
|
||||
break;
|
||||
|
||||
case GameEditOKButton:
|
||||
switch (gFormEditMode) {
|
||||
case edtModeAdd:
|
||||
EditGameFormSave(dmMaxRecordIndex);
|
||||
GameManSave(dmMaxRecordIndex);
|
||||
break;
|
||||
case edtModeEdit:
|
||||
case edtModeParams:
|
||||
default :
|
||||
EditGameFormSave(GamGetSelected());
|
||||
GameManSave(GamGetSelected());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case EditGameCancelButton:
|
||||
case GameEditCancelButton:
|
||||
TabDeleteTabs(myTabP);
|
||||
FrmReturnToMain();
|
||||
break;
|
||||
|
||||
case EditGameDeleteButton:
|
||||
case GameEditDeleteButton:
|
||||
EditGameFormDelete(false);
|
||||
break;
|
||||
|
||||
case EditGameGfxPopupPopTrigger:
|
||||
FrmList(eventP, EditGameGfxListList);
|
||||
case TabGameDisplayGfxPopupPopTrigger:
|
||||
FrmList(eventP, TabGameDisplayGfxListList);
|
||||
FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameDisplayGfxListList));
|
||||
break;
|
||||
|
||||
case EditGameLanguagePopTrigger:
|
||||
FrmList(eventP, EditGameLanguageList);
|
||||
case TabGameOptionsLanguagePopTrigger:
|
||||
FrmList(eventP, TabGameOptionsLanguageList);
|
||||
FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsLanguageList));
|
||||
break;
|
||||
|
||||
case EditGamePlatformPopTrigger:
|
||||
FrmList(eventP, EditGamePlatformList);
|
||||
case TabGameOptionsPlatformPopTrigger:
|
||||
FrmList(eventP, TabGameOptionsPlatformList);
|
||||
FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsPlatformList));
|
||||
break;
|
||||
}
|
||||
handled = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue