Logo Search packages:      
Sourcecode: scummvm version File versions  Download package

formmusic.cpp

#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 MusicInfoType *musicInfoP = NULL;

// Music
static Boolean MusicTabSave() {
      ControlType *cck1P, *cck2P;
      ListType *list1P;
      FieldType *fld1P;
      UInt16 tempo;
      FormPtr frmP;

      frmP = FrmGetActiveForm();

      cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox);
      cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox);
      list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
      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;
      }

      musicInfoP->sound.music = CtlGetValue(cck1P);
      musicInfoP->sound.multiMidi = CtlGetValue(cck2P);

      musicInfoP->sound.drvMusic = LstGetSelection(list1P);
      musicInfoP->sound.tempo = tempo;

      return true;
}

static void MusicTabInit() {
      ControlType *cck1P, *cck2P;
      ListType *list1P;
      FieldType *fld1P;
      MemHandle tempoH;
      Char *tempoP;

      cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox);
      cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox);
      list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
      fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField);

      CtlSetValue(cck1P, musicInfoP->sound.music);
      CtlSetValue(cck2P, musicInfoP->sound.multiMidi);

      if (musicInfoP->sound.drvMusic > 5)
            musicInfoP->sound.drvMusic = 0;

      LstSetSelection(list1P, musicInfoP->sound.drvMusic);
      CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));

      tempoH = MemHandleNew(FldGetMaxChars(fld1P)+1);
      tempoP = (Char *)MemHandleLock(tempoH);
      StrIToA(tempoP, musicInfoP->sound.tempo);
      MemHandleUnlock(tempoH);
      FldSetTextHandle(fld1P, tempoH);
}

// Sound
static void SoundTabSave() {
      ControlType *cck1P;
      ListType *list1P;

      cck1P = (ControlType *)GetObjectPtr(TabSoundSoundCheckbox);
      list1P = (ListType *)GetObjectPtr(TabSoundRateList);

      musicInfoP->sound.sfx = CtlGetValue(cck1P);
      musicInfoP->sound.rate = LstGetSelection(list1P);
}

static void SoundTabInit() {
      ControlType *cck1P;
      ListType *list1P;

      cck1P = (ControlType *)GetObjectPtr(TabSoundSoundCheckbox);
      list1P = (ListType *)GetObjectPtr(TabSoundRateList);

      CtlSetValue(cck1P, musicInfoP->sound.sfx);
      LstSetSelection(list1P, musicInfoP->sound.rate);
      CtlSetLabel((ControlType *)GetObjectPtr(TabSoundRatePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
}

// 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;
      }

      musicInfoP->sound.CD = CtlGetValue(cck3P);

      musicInfoP->sound.drvCD = LstGetSelection(list1P);
      musicInfoP->sound.frtCD = LstGetSelection(list2P);

      musicInfoP->sound.defaultTrackLength = StrAToI(FldGetTextPtr(fld2P));
      musicInfoP->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, musicInfoP->sound.drvCD);
      CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));

      LstSetSelection(list2P, musicInfoP->sound.frtCD);
      CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));

      CtlSetValue(cck3P, musicInfoP->sound.CD);

      lengthH = MemHandleNew(FldGetMaxChars(fld2P)+1);
      lengthP = (Char *)MemHandleLock(lengthH);
      StrIToA(lengthP, musicInfoP->sound.defaultTrackLength);
      MemHandleUnlock(lengthH);
      FldSetTextHandle(fld2P, lengthH);

      firstTrackH = MemHandleNew(FldGetMaxChars(fld3P)+1);
      firstTrackP = (Char *)MemHandleLock(firstTrackH);
      StrIToA(firstTrackP, musicInfoP->sound.firstTrack);
      MemHandleUnlock(firstTrackH);
      FldSetTextHandle(fld3P, firstTrackH);
}

// Volume
static void VolumeTabSave() {
      SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;

      slid1P = (SliderControlType *)GetObjectPtr(TabVolumeMasterSliderControl);
      slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl);
      slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl);
      slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl);
      slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl);

      CtlGetSliderValues ((ControlType *)slid1P, 0, 0, 0, &musicInfoP->volume.master);
      CtlGetSliderValues ((ControlType *)slid2P, 0, 0, 0, &musicInfoP->volume.music);
      CtlGetSliderValues ((ControlType *)slid3P, 0, 0, 0, &musicInfoP->volume.sfx);
      CtlGetSliderValues ((ControlType *)slid4P, 0, 0, 0, &musicInfoP->volume.speech);
      CtlGetSliderValues ((ControlType *)slid5P, 0, 0, 0, &musicInfoP->volume.audiocd);
}

static void VolumeTabInit() {
      SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;
      UInt16 value;

      slid1P = (SliderControlType *)GetObjectPtr(TabVolumeMasterSliderControl);
      slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl);
      slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl);
      slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl);
      slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl);

      value = musicInfoP->volume.master;
      CtlSetSliderValues ((ControlType *)slid1P, 0, 0, 0, &value);
      value = musicInfoP->volume.music;
      CtlSetSliderValues ((ControlType *)slid2P, 0, 0, 0, &value);
      value = musicInfoP->volume.sfx;
      CtlSetSliderValues ((ControlType *)slid3P, 0, 0, 0, &value);
      value = musicInfoP->volume.speech;
      CtlSetSliderValues ((ControlType *)slid4P, 0, 0, 0, &value);
      value = musicInfoP->volume.audiocd;
      CtlSetSliderValues ((ControlType *)slid5P, 0, 0, 0, &value);
}


static void MusicFormSave(UInt16 index) {
      if (index != dmMaxRecordIndex) {
            MemHandle recordH;
            GameInfoType *gameInfoP;

            if (!MusicTabSave()) return;
            SoundTabSave();
            if (!AudioCDTabSave()) return;
            VolumeTabSave();

            recordH = DmGetRecord(gameDB, index);
            gameInfoP = (GameInfoType *)MemHandleLock(recordH);
            DmWrite(gameInfoP, OffsetOf(GameInfoType, musicInfo), musicInfoP, sizeof(MusicInfoType));
            MemHandleUnlock(recordH);
            DmReleaseRecord (gameDB, index, 0);
      }

      MemPtrFree(musicInfoP);
      musicInfoP = NULL;

      TabDeleteTabs(myTabP);
      FrmReturnToMain();
}
static void MusicFormInit(UInt16 index) {
      TabType *tabP;
      FormType *frmP = FrmGetActiveForm();

      if (index != dmMaxRecordIndex) {
            MemHandle recordH = NULL;
            GameInfoType *gameInfoP;

            recordH = DmQueryRecord(gameDB, index);
            gameInfoP = (GameInfoType *)MemHandleLock(recordH);

            if (!gameInfoP) {
                  FrmCustomAlert(FrmErrorAlert, "An error occured.",0,0);
                  return;
            }

            musicInfoP = (MusicInfoType *)MemPtrNew(sizeof(MusicInfoType));
            MemMove(musicInfoP, &gameInfoP->musicInfo, sizeof(MusicInfoType));
            MemHandleUnlock(recordH);

      } else {
            FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0);
            FrmReturnToMain();
            return;
      }

      tabP = TabNewTabs(4);
      TabAddContent(&frmP, tabP, "Music", TabMusicForm);
      TabAddContent(&frmP, tabP, "Sound", TabSoundForm);
      TabAddContent(&frmP, tabP, "Audio CD", TabAudioCDForm);
      TabAddContent(&frmP, tabP, "Volume", TabVolumeForm);

      MusicTabInit();
      SoundTabInit();
      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 ctlSelectEvent:
                  switch (eventP->data.ctlSelect.controlID)
                  {
                        case (MusicForm + 1) :
                        case (MusicForm + 2) :
                        case (MusicForm + 3) :
                        case (MusicForm + 4) :
                              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) == 1) {
                                          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 TabSoundRatePopTrigger:
                              FrmList(eventP, TabSoundRateList);
                              FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabSoundRateList));

                              if (!OPTIONS_TST(kOptPalmSoundAPI)) {
                                    ListType *list1P = (ListType *)GetObjectPtr(TabSoundRateList);

                                    if (LstGetSelection(list1P) != 0) {
                                          FrmCustomAlert(FrmInfoAlert, "You cannot use this rate on your device.", 0, 0);
                                          LstSetSelection(list1P, 0);
                                          CtlSetLabel((ControlType *)GetObjectPtr(TabSoundRatePopTrigger), 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;
}

Generated by  Doxygen 1.6.0   Back to index