aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp')
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp387
1 files changed, 387 insertions, 0 deletions
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp b/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp
new file mode 100644
index 0000000000..9b4b5355a7
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp
@@ -0,0 +1,387 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include <PalmOS.h>
+
+#include "start.h"
+#include "formTabs.h"
+#include "forms.h"
+#include "games.h"
+
+#include "globals.h"
+
+static TabType *myTabP;
+static UInt16 lastTab = 0;
+
+static GameInfoType *gameInfoP = NULL;
+
+// Music
+static Boolean MusicTabSave() {
+ ControlType *cck1P, *cck2P;
+ ListType *list1P, *list2P, *list3P;
+ FieldType *fld1P;
+ UInt16 tempo;
+ FormPtr frmP;
+
+ frmP = FrmGetActiveForm();
+
+ cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox);
+ cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox);
+
+ list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
+ list2P = (ListType *)GetObjectPtr(TabMusicRateList);
+ list3P = (ListType *)GetObjectPtr(TabMusicQualityList);
+
+ fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField);
+
+ tempo = StrAToI(FldGetTextPtr(fld1P));
+ if (tempo < 50 || tempo > 200) {
+ TabSetActive(frmP, myTabP, 0);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMusicTempoField));
+ FrmCustomAlert(FrmErrorAlert, "Invalid tempo value (50...200)", 0, 0);
+ return false;
+ }
+
+ gameInfoP->musicInfo.sound.music = CtlGetValue(cck1P);
+ gameInfoP->musicInfo.sound.multiMidi = CtlGetValue(cck2P);
+
+ gameInfoP->musicInfo.sound.drvMusic = LstGetSelection(list1P);
+ gameInfoP->musicInfo.sound.rate = LstGetSelection(list2P);
+ gameInfoP->fmQuality = LstGetSelection(list3P);
+ gameInfoP->musicInfo.sound.tempo = tempo;
+
+ return true;
+}
+
+static void MusicTabInit() {
+ ControlType *cck1P, *cck2P;
+ ListType *list1P, *list2P, *list3P;
+ FieldType *fld1P;
+ MemHandle tempoH;
+ Char *tempoP;
+
+ cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox);
+ cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox);
+
+ list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
+ list2P = (ListType *)GetObjectPtr(TabMusicRateList);
+ list3P = (ListType *)GetObjectPtr(TabMusicQualityList);
+
+ fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField);
+
+ CtlSetValue(cck1P, gameInfoP->musicInfo.sound.music);
+ CtlSetValue(cck2P, gameInfoP->musicInfo.sound.multiMidi);
+
+ if (gameInfoP->musicInfo.sound.drvMusic > 5)
+ gameInfoP->musicInfo.sound.drvMusic = 0;
+
+
+ LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvMusic);
+ LstSetTopItem(list1P, gameInfoP->musicInfo.sound.drvMusic);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+
+ LstSetSelection(list2P, gameInfoP->musicInfo.sound.rate);
+ LstSetTopItem(list2P, gameInfoP->musicInfo.sound.rate);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
+
+ LstSetSelection(list3P, gameInfoP->fmQuality);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicQualityPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P)));
+
+ tempoH = MemHandleNew(FldGetMaxChars(fld1P)+1);
+ tempoP = (Char *)MemHandleLock(tempoH);
+ StrIToA(tempoP, gameInfoP->musicInfo.sound.tempo);
+ MemHandleUnlock(tempoH);
+ FldSetTextHandle(fld1P, tempoH);
+}
+
+// Audio CD
+static Boolean AudioCDTabSave() {
+ ControlType *cck3P;
+ FieldType *fld2P, *fld3P;
+ ListType *list1P, *list2P;
+ UInt16 firstTrack;
+ FormPtr frmP;
+
+ frmP = FrmGetActiveForm();
+
+ cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox);
+ fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField);
+ fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField);
+ list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList);
+ list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+
+ firstTrack = StrAToI(FldGetTextPtr(fld3P));
+ if (firstTrack < 1 || firstTrack > 999) {
+ TabSetActive(frmP, myTabP, 2);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabAudioCDFirstTrackField));
+ FrmCustomAlert(FrmErrorAlert, "Invalid track value (1...999)", 0, 0);
+ return false;
+ }
+
+ gameInfoP->musicInfo.sound.CD = CtlGetValue(cck3P);
+
+ gameInfoP->musicInfo.sound.drvCD = LstGetSelection(list1P);
+ gameInfoP->musicInfo.sound.frtCD = LstGetSelection(list2P);
+
+ gameInfoP->musicInfo.sound.defaultTrackLength = StrAToI(FldGetTextPtr(fld2P));
+ gameInfoP->musicInfo.sound.firstTrack = firstTrack;
+
+ return true;
+}
+
+static void AudioCDTabInit() {
+ ControlType *cck3P;
+ FieldType *fld2P, *fld3P;
+ ListType *list1P, *list2P;
+ MemHandle lengthH, firstTrackH;
+ Char *lengthP, *firstTrackP;
+
+ cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox);
+ fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField);
+ fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField);
+ list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList);
+ list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+
+ LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvCD);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+
+ LstSetSelection(list2P, gameInfoP->musicInfo.sound.frtCD);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
+
+ CtlSetValue(cck3P, gameInfoP->musicInfo.sound.CD);
+
+ lengthH = MemHandleNew(FldGetMaxChars(fld2P)+1);
+ lengthP = (Char *)MemHandleLock(lengthH);
+ StrIToA(lengthP, gameInfoP->musicInfo.sound.defaultTrackLength);
+ MemHandleUnlock(lengthH);
+ FldSetTextHandle(fld2P, lengthH);
+
+ firstTrackH = MemHandleNew(FldGetMaxChars(fld3P)+1);
+ firstTrackP = (Char *)MemHandleLock(firstTrackH);
+ StrIToA(firstTrackP, gameInfoP->musicInfo.sound.firstTrack);
+ MemHandleUnlock(firstTrackH);
+ FldSetTextHandle(fld3P, firstTrackH);
+}
+
+// Volume
+static void VolumeTabSave() {
+ SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;
+
+ slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl);
+ slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl);
+ slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl);
+ slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl);
+ slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl);
+
+ CtlGetSliderValues ((ControlType *)slid1P, 0, 0, 0, &gameInfoP->musicInfo.volume.palm);
+ CtlGetSliderValues ((ControlType *)slid2P, 0, 0, 0, &gameInfoP->musicInfo.volume.music);
+ CtlGetSliderValues ((ControlType *)slid3P, 0, 0, 0, &gameInfoP->musicInfo.volume.sfx);
+ CtlGetSliderValues ((ControlType *)slid4P, 0, 0, 0, &gameInfoP->musicInfo.volume.speech);
+ CtlGetSliderValues ((ControlType *)slid5P, 0, 0, 0, &gameInfoP->musicInfo.volume.audiocd);
+}
+
+static void VolumeTabInit() {
+ SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;
+ UInt16 value;
+
+ slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl);
+ slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl);
+ slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl);
+ slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl);
+ slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl);
+
+ value = gameInfoP->musicInfo.volume.palm;
+ CtlSetSliderValues ((ControlType *)slid1P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.music;
+ CtlSetSliderValues ((ControlType *)slid2P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.sfx;
+ CtlSetSliderValues ((ControlType *)slid3P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.speech;
+ CtlSetSliderValues ((ControlType *)slid4P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.audiocd;
+ CtlSetSliderValues ((ControlType *)slid5P, 0, 0, 0, &value);
+}
+
+static void MusicFormSave(UInt16 index) {
+ if (index != dmMaxRecordIndex) {
+ MemHandle recordH;
+ GameInfoType *ogameInfoP;
+
+ if (!MusicTabSave()) return;
+ if (!AudioCDTabSave()) return;
+ VolumeTabSave();
+
+ recordH = DmGetRecord(gameDB, index);
+ ogameInfoP = (GameInfoType *)MemHandleLock(recordH);
+ DmWrite(ogameInfoP, 0, gameInfoP, sizeof(GameInfoType));
+ MemHandleUnlock(recordH);
+ DmReleaseRecord (gameDB, index, 0);
+ }
+
+ MemPtrFree(gameInfoP);
+ gameInfoP = NULL;
+
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+}
+static void MusicFormInit(UInt16 index) {
+ TabType *tabP;
+ FormType *frmP = FrmGetActiveForm();
+
+ if (index != dmMaxRecordIndex) {
+ MemHandle recordH = NULL;
+ GameInfoType *ogameInfoP;
+
+ recordH = DmQueryRecord(gameDB, index);
+ ogameInfoP = (GameInfoType *)MemHandleLock(recordH);
+
+ if (!ogameInfoP) {
+ FrmCustomAlert(FrmErrorAlert, "An error occured.",0,0);
+ return;
+ }
+
+ gameInfoP = (GameInfoType *)MemPtrNew(sizeof(GameInfoType));
+ MemMove(gameInfoP, ogameInfoP, sizeof(GameInfoType));
+ MemHandleUnlock(recordH);
+
+ } else {
+ FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0);
+ FrmReturnToMain();
+ return;
+ }
+
+ tabP = TabNewTabs(3);
+ TabAddContent(&frmP, tabP, "Sound", TabMusicForm);
+ TabAddContent(&frmP, tabP, "Volume", TabVolumeForm);
+ TabAddContent(&frmP, tabP, "Audio CD", TabAudioCDForm);
+
+ MusicTabInit();
+ AudioCDTabInit();
+ VolumeTabInit();
+
+ FrmDrawForm(frmP);
+ TabSetActive(frmP, tabP, lastTab);
+
+ myTabP = tabP;
+}
+
+Boolean MusicFormHandleEvent(EventPtr eventP) {
+ FormPtr frmP = FrmGetActiveForm();
+ Boolean handled = false;
+
+ switch (eventP->eType) {
+ case frmOpenEvent:
+ MusicFormInit(GamGetSelected());
+ handled = true;
+ break;
+
+ case frmCloseEvent:
+ MusicFormSave(dmMaxRecordIndex);
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case (MusicForm + 1) :
+ case (MusicForm + 2) :
+ case (MusicForm + 3) :
+ lastTab = (eventP->data.ctlSelect.controlID - MusicForm - 1);
+ TabSetActive(frmP, myTabP, lastTab);
+ break;
+
+ case TabMusicDriverPopTrigger:
+ FrmList(eventP, TabMusicDriverList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicDriverList));
+
+ if (!OPTIONS_TST(kOptDeviceZodiac) && !OPTIONS_TST(kOptSonyPa1LibAPI)) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
+
+ if (LstGetSelection(list1P) == 4) {
+ FrmCustomAlert(FrmInfoAlert, "There is no built-in MIDI support on your device.", 0, 0);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ }
+ break;
+
+ case TabMusicQualityPopTrigger:
+ FrmList(eventP, TabMusicQualityList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicQualityList));
+ break;
+
+ case TabMusicRatePopTrigger:
+ FrmList(eventP, TabMusicRateList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicRateList));
+
+ if (!OPTIONS_TST(kOptPalmSoundAPI)) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabMusicRateList);
+
+ if (LstGetSelection(list1P) != 0) {
+ FrmCustomAlert(FrmInfoAlert, "You cannot use this rate on your device.", 0, 0);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ }
+ break;
+
+ case TabAudioCDFormatPopTrigger:
+ FrmList(eventP, TabAudioCDFormatList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDFormatList));
+
+ if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ break;
+
+ case TabAudioCDDriverPopTrigger:
+ FrmList(eventP, TabAudioCDDriverList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDDriverList));
+
+ if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ break;
+
+ case MusicOKButton:
+ MusicFormSave(GamGetSelected());
+ break;
+
+ case MusicCancelButton:
+ MusicFormSave(dmMaxRecordIndex);
+ break;
+ }
+ handled = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}