diff options
Diffstat (limited to 'backends/PalmOS/Src/forms')
| -rw-r--r-- | backends/PalmOS/Src/forms/formEditGame.cpp | 563 | 
1 files changed, 355 insertions, 208 deletions
diff --git a/backends/PalmOS/Src/forms/formEditGame.cpp b/backends/PalmOS/Src/forms/formEditGame.cpp index 8437f971ea..7f2d243e15 100644 --- a/backends/PalmOS/Src/forms/formEditGame.cpp +++ b/backends/PalmOS/Src/forms/formEditGame.cpp @@ -1,317 +1,464 @@  #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; -/*********************************************************************** - * - * FUNCTION:    EditGameFormSave - * FUNCTION:    EditGameFormInit - * FUNCTION:    EditGameFormHandleEvent - * - * DESCRIPTION:  - * - * REVISION HISTORY: - * - * - ***********************************************************************/ -void EditGameFormDelete(Boolean direct) { -	UInt16 index = GamGetSelected(); +static void GameTabInit(GameInfoType *gameInfoP) { +	FieldType *fld1P, *fld2P, *fld3P; +	Char *nameP, *pathP, *gameP; +	MemHandle nameH, pathH, gameH; -	if (index == dmMaxRecordIndex) { -		FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0); -		return; +	fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField); +	fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField); +	fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField); -	} else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) { -		DmRemoveRecord(gameDB, index); -		if (!direct) -			FrmReturnToMain(); -		GamSortList(); -		SknUpdateList(); +	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);  	} -} -static void EditGameFormSave(UInt16 index) { +	MemHandleUnlock(nameH); +	MemHandleUnlock(pathH); +	MemHandleUnlock(gameH); -	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; +	FldSetTextHandle(fld1P, nameH); +	FldSetTextHandle(fld2P, pathH); +	FldSetTextHandle(fld3P, gameH); +} -	MemHandle recordH; -	GameInfoType *gameInfo, newGameInfo; -//	UInt16 index; +static Err GameTabSave(GameInfoType *gameInfoP) { +	FieldType *fld1P, *fld2P, *fld3P; -	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); +	FormType *frmP = FrmGetActiveForm(); -	frmP = FrmGetActiveForm(); +	fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField); +	fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField); +	fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField);  	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 (!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; +		} -	if (index != dmMaxRecordIndex) { -		recordH = DmGetRecord(gameDB, index);  	} else { -		index = dmMaxRecordIndex; -		GamUnselect(); -		recordH = DmNewRecord(gameDB, &index, sizeof(GameInfoType)); -	} +		StrCopy(gameInfoP->nameP, FldGetTextPtr(fld1P)); +		StrCopy(gameInfoP->pathP, FldGetTextPtr(fld2P)); +		StrCopy(gameInfoP->gameP, FldGetTextPtr(fld3P)); -	gameInfo = (GameInfoType *)MemHandleLock(recordH); +		if (gameInfoP->pathP[StrLen(gameInfoP->pathP)-1] != '/') +			StrCat(gameInfoP->pathP, "/"); -	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, "/"); +	} +	 +	return errNone; +} -	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); +static void DisplayInit(GameInfoType *gameInfoP) { +	ListType *list1P; -	DmWrite(gameInfo, 0, &newGameInfo, sizeof(GameInfoType)); +	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); -	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 +	} else { +		LstSetSelection(list1P, 2); +		CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), 0); +		CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), 0); +		CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), 0);  	} -	FrmReturnToMain(); -	SknUpdateList(); +	CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayGfxPopupPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));  } -static void EditGameFormInit(UInt16 index) { +static Err DisplaySave(GameInfoType *gameInfoP) { +	ListType *list1P; +	ControlType *cck6P, *cck7P, *cck8P;	 -	FieldType *fld1P, *fld2P, *fld3P, *fld4P, *fld5P, *fld6P; -	FormPtr frmP; -	ListType *list1P, *list2P, *list3P; +	FormType *frmP = FrmGetActiveForm(); -	Char *nameP, *pathP, *gameP, *loadP, *roomP, *talkP; -	MemHandle nameH, pathH, gameH, loadH, roomH, talkH; +	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; +} -	MemHandle recordH = NULL; -	GameInfoType *game; +static void OptionsInit(GameInfoType *gameInfoP) { +	ListType *list2P, *list3P; +	FieldType *fld4P, *fld5P, *fld6P; +	Char *loadP, *roomP, *talkP; +	MemHandle loadH, roomH, talkH; -	list1P = (ListType *)GetObjectPtr(EditGameGfxListList); -	list2P = (ListType *)GetObjectPtr(EditGameLanguageList); -	list3P = (ListType *)GetObjectPtr(EditGamePlatformList); +	list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList); +	list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList); -	fld1P = (FieldType *)GetObjectPtr(EditGameEntryNameField); -	fld2P = (FieldType *)GetObjectPtr(EditGamePathField); -	fld3P = (FieldType *)GetObjectPtr(EditGameGameField); -	fld4P = (FieldType *)GetObjectPtr(EditGameLoadSlotField); -	fld5P = (FieldType *)GetObjectPtr(EditGameStartRoomField); -	fld6P = (FieldType *)GetObjectPtr(EditGameTalkSpeedField); +	fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField); +	fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField); +	fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField); -	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 (gameInfoP) { +		LstSetSelection(list2P, gameInfoP->language); +		LstSetSelection(list3P, gameInfoP->platform); -	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, 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(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)); +		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(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))); +	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;  } -Boolean EditGameFormHandleEvent(EventPtr eventP) -{ +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 + * FUNCTION:    EditGameFormInit + * FUNCTION:    EditGameFormHandleEvent + * + * DESCRIPTION:  + * + * REVISION HISTORY: + * + * + ***********************************************************************/ +void EditGameFormDelete(Boolean direct) { +	UInt16 index = GamGetSelected(); + +	if (index == dmMaxRecordIndex) { +		FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0); +		return; + +	} else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) { +		DmRemoveRecord(gameDB, index); +		if (!direct) { +			TabDeleteTabs(myTabP); +			FrmReturnToMain(); +		} +		GamSortList(); +		SknUpdateList(); +	} +} + +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;  | 
