diff --git a/src/drivers/Qt/GameApp.cpp b/src/drivers/Qt/GameApp.cpp index fad66336..ebd0df74 100644 --- a/src/drivers/Qt/GameApp.cpp +++ b/src/drivers/Qt/GameApp.cpp @@ -76,7 +76,7 @@ void gameWin_t::createMainMenu(void) fileMenu = menuBar()->addMenu(tr("&File")); // File -> Open ROM - openROM = new QAction(tr("&Open ROM"), this); + openROM = new QAction(tr("Open ROM"), this); openROM->setShortcuts(QKeySequence::Open); openROM->setStatusTip(tr("Open ROM File")); connect(openROM, SIGNAL(triggered()), this, SLOT(openROMFile(void)) ); @@ -84,7 +84,7 @@ void gameWin_t::createMainMenu(void) fileMenu->addAction(openROM); // File -> Close ROM - closeROM = new QAction(tr("&Close ROM"), this); + closeROM = new QAction(tr("Close ROM"), this); closeROM->setShortcut( QKeySequence(tr("Ctrl+C"))); closeROM->setStatusTip(tr("Close Loaded ROM")); connect(closeROM, SIGNAL(triggered()), this, SLOT(closeROMCB(void)) ); @@ -94,7 +94,8 @@ void gameWin_t::createMainMenu(void) fileMenu->addSeparator(); // File -> Quit - quitAct = new QAction(tr("&Quit"), this); + quitAct = new QAction(tr("Quit"), this); + quitAct->setShortcut( QKeySequence(tr("Ctrl+Q"))); quitAct->setStatusTip(tr("Quit the Application")); connect(quitAct, SIGNAL(triggered()), this, SLOT(closeApp())); @@ -102,10 +103,10 @@ void gameWin_t::createMainMenu(void) //----------------------------------------------------------------------- // Options - optMenu = menuBar()->addMenu(tr("&Options")); + optMenu = menuBar()->addMenu(tr("Options")); // Options -> GamePad Config - gamePadConfig = new QAction(tr("&GamePad Config"), this); + gamePadConfig = new QAction(tr("GamePad Config"), this); //gamePadConfig->setShortcut( QKeySequence(tr("Ctrl+C"))); gamePadConfig->setStatusTip(tr("GamePad Configure")); connect(gamePadConfig, SIGNAL(triggered()), this, SLOT(openGamePadConfWin(void)) ); @@ -113,7 +114,7 @@ void gameWin_t::createMainMenu(void) optMenu->addAction(gamePadConfig); // Options -> Sound Config - gameSoundConfig = new QAction(tr("&Sound Config"), this); + gameSoundConfig = new QAction(tr("Sound Config"), this); //gameSoundConfig->setShortcut( QKeySequence(tr("Ctrl+C"))); gameSoundConfig->setStatusTip(tr("Sound Configure")); connect(gameSoundConfig, SIGNAL(triggered()), this, SLOT(openGameSndConfWin(void)) ); @@ -122,9 +123,9 @@ void gameWin_t::createMainMenu(void) //----------------------------------------------------------------------- // Help - helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu = menuBar()->addMenu(tr("Help")); - aboutAct = new QAction(tr("&About"), this); + aboutAct = new QAction(tr("About"), this); aboutAct->setStatusTip(tr("About Qplot")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(aboutQPlot(void)) ); diff --git a/src/drivers/Qt/GameSoundConf.cpp b/src/drivers/Qt/GameSoundConf.cpp index 6cf0d037..0f6ac901 100644 --- a/src/drivers/Qt/GameSoundConf.cpp +++ b/src/drivers/Qt/GameSoundConf.cpp @@ -1,7 +1,10 @@ // GameSoundConf.cpp // +#include "../../fceu.h" +#include "../../driver.h" #include "Qt/GameSoundConf.h" #include "Qt/main.h" +#include "Qt/dface.h" #include "Qt/config.h" #include "Qt/fceuWrapper.h" @@ -9,9 +12,12 @@ GameSndConfDialog_t::GameSndConfDialog_t(QWidget *parent) : QDialog( parent ) { + int buf; QHBoxLayout *hbox1, *hbox2; - QVBoxLayout *vbox1; + QVBoxLayout *vbox1, *vbox2; QLabel *lbl; + QGroupBox *frame; + QSlider *vslider; setWindowTitle("Sound Config"); @@ -23,6 +29,12 @@ GameSndConfDialog_t::GameSndConfDialog_t(QWidget *parent) // Enable Low Pass Filter Select enaLowPass = new QCheckBox("Enable Low Pass Filter"); + setCheckBoxFromProperty( enaChkbox , "SDL.Sound" ); + setCheckBoxFromProperty( enaLowPass, "SDL.Sound.LowPass" ); + + connect(enaChkbox , SIGNAL(stateChanged(int)), this, SLOT(enaSoundStateChange(int)) ); + connect(enaLowPass, SIGNAL(stateChanged(int)), this, SLOT(enaSoundLowPassChange(int)) ); + vbox1->addWidget( enaChkbox ); vbox1->addWidget( enaLowPass ); @@ -37,6 +49,8 @@ GameSndConfDialog_t::GameSndConfDialog_t(QWidget *parent) qualitySelect->addItem( tr("High") , 1 ); qualitySelect->addItem( tr("Very High"), 2 ); + setComboBoxFromProperty( qualitySelect, "SDL.Sound.Quality" ); + hbox2->addWidget( lbl ); hbox2->addWidget( qualitySelect ); @@ -55,6 +69,10 @@ GameSndConfDialog_t::GameSndConfDialog_t(QWidget *parent) rateSelect->addItem( tr("48000"), 48000 ); rateSelect->addItem( tr("96000"), 96000 ); + setComboBoxFromProperty( rateSelect, "SDL.Sound.Rate" ); + + g_config->getOption ("SDL.Sound.Rate", &buf); + hbox2->addWidget( lbl ); hbox2->addWidget( rateSelect ); @@ -62,23 +80,133 @@ GameSndConfDialog_t::GameSndConfDialog_t(QWidget *parent) // Buffer Size Select // - lbl = new QLabel("Buffer Size (in ms)"); + hbox2 = new QHBoxLayout(); + lbl = new QLabel("Buffer Size (in ms):"); + + bufSizeLabel = new QLabel("128"); bufSizeSlider = new QSlider( Qt::Horizontal ); bufSizeSlider->setMinimum( 15); bufSizeSlider->setMaximum(200); - bufSizeSlider->setSliderPosition(128); + //bufSizeSlider->setSliderPosition(128); + setSliderFromProperty( bufSizeSlider, bufSizeLabel, "SDL.Sound.BufSize" ); - vbox1->addWidget( lbl ); + hbox2->addWidget( lbl ); + hbox2->addWidget( bufSizeLabel ); + + vbox1->addLayout( hbox2 ); vbox1->addWidget( bufSizeSlider ); + + connect(bufSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(bufSizeChanged(int)) ); // Swap Duty Cycles swapDutyChkbox = new QCheckBox("Swap Duty Cycles"); vbox1->addWidget( swapDutyChkbox ); + setCheckBoxFromProperty( swapDutyChkbox , "SDL.SwapDuty" ); + + connect(swapDutyChkbox , SIGNAL(stateChanged(int)), this, SLOT(swapDutyCallback(int)) ); + hbox1->addLayout( vbox1 ); + frame = new QGroupBox(tr("Mixer:")); + hbox2 = new QHBoxLayout(); + + frame->setLayout( hbox2 ); + + hbox1->addWidget( frame ); + + frame = new QGroupBox(tr("Volume")); + vbox2 = new QVBoxLayout(); + volLbl = new QLabel("150"); + vslider = new QSlider( Qt::Vertical ); + vslider->setMinimum( 0); + vslider->setMaximum(255); + setSliderFromProperty( vslider, volLbl, "SDL.Sound.Volume" ); + + vbox2->addWidget( volLbl ); + vbox2->addWidget( vslider ); + frame->setLayout( vbox2 ); + hbox2->addWidget( frame ); + + connect(vslider, SIGNAL(valueChanged(int)), this, SLOT(volumeChanged(int)) ); + + frame = new QGroupBox(tr("Triangle")); + vbox2 = new QVBoxLayout(); + triLbl = new QLabel("255"); + vslider = new QSlider( Qt::Vertical ); + vslider->setMinimum( 0); + vslider->setMaximum(255); + setSliderFromProperty( vslider, triLbl, "SDL.Sound.TriangleVolume" ); + + vbox2->addWidget( triLbl ); + vbox2->addWidget( vslider ); + frame->setLayout( vbox2 ); + hbox2->addWidget( frame ); + + connect(vslider, SIGNAL(valueChanged(int)), this, SLOT(triangleChanged(int)) ); + + frame = new QGroupBox(tr("Square1")); + vbox2 = new QVBoxLayout(); + sqr1Lbl = new QLabel("255"); + vslider = new QSlider( Qt::Vertical ); + vslider->setMinimum( 0); + vslider->setMaximum(255); + setSliderFromProperty( vslider, sqr1Lbl, "SDL.Sound.Square1Volume" ); + + vbox2->addWidget( sqr1Lbl ); + vbox2->addWidget( vslider ); + frame->setLayout( vbox2 ); + hbox2->addWidget( frame ); + + connect(vslider, SIGNAL(valueChanged(int)), this, SLOT(square1Changed(int)) ); + + frame = new QGroupBox(tr("Square2")); + vbox2 = new QVBoxLayout(); + sqr2Lbl = new QLabel("255"); + vslider = new QSlider( Qt::Vertical ); + vslider->setMinimum( 0); + vslider->setMaximum(255); + setSliderFromProperty( vslider, sqr2Lbl, "SDL.Sound.Square2Volume" ); + + vbox2->addWidget( sqr2Lbl ); + vbox2->addWidget( vslider ); + frame->setLayout( vbox2 ); + hbox2->addWidget( frame ); + + connect(vslider, SIGNAL(valueChanged(int)), this, SLOT(square2Changed(int)) ); + + frame = new QGroupBox(tr("Noise")); + vbox2 = new QVBoxLayout(); + nseLbl = new QLabel("255"); + vslider = new QSlider( Qt::Vertical ); + vslider->setMinimum( 0); + vslider->setMaximum(255); + setSliderFromProperty( vslider, nseLbl, "SDL.Sound.NoiseVolume" ); + + vbox2->addWidget( nseLbl ); + vbox2->addWidget( vslider ); + frame->setLayout( vbox2 ); + hbox2->addWidget( frame ); + + connect(vslider, SIGNAL(valueChanged(int)), this, SLOT(noiseChanged(int)) ); + + frame = new QGroupBox(tr("PCM")); + vbox2 = new QVBoxLayout(); + pcmLbl = new QLabel("255"); + vslider = new QSlider( Qt::Vertical ); + vslider->setMinimum( 0); + vslider->setMaximum(255); + setSliderFromProperty( vslider, pcmLbl, "SDL.Sound.PCMVolume" ); + + vbox2->addWidget( pcmLbl ); + vbox2->addWidget( vslider ); + frame->setLayout( vbox2 ); + hbox2->addWidget( frame ); + + connect(vslider, SIGNAL(valueChanged(int)), this, SLOT(pcmChanged(int)) ); + // Set Final Layout setLayout( hbox1 ); } @@ -88,3 +216,170 @@ GameSndConfDialog_t::~GameSndConfDialog_t(void) } //---------------------------------------------------- +void GameSndConfDialog_t::setCheckBoxFromProperty( QCheckBox *cbx, const char *property ) +{ + int pval; + g_config->getOption (property, &pval); + + cbx->setCheckState( pval ? Qt::Checked : Qt::Unchecked ); +} +//---------------------------------------------------- +void GameSndConfDialog_t::setComboBoxFromProperty( QComboBox *cbx, const char *property ) +{ + int i, pval; + g_config->getOption (property, &pval); + + for (i=0; icount(); i++) + { + if ( pval == cbx->itemData(i) ) + { + cbx->setCurrentIndex(i); break; + } + } +} +//---------------------------------------------------- +void GameSndConfDialog_t::setSliderFromProperty( QSlider *slider, QLabel *lbl, const char *property ) +{ + int pval; + char stmp[32]; + g_config->getOption (property, &pval); + slider->setValue( pval ); + sprintf( stmp, "%i", pval ); + lbl->setText( stmp ); +} +//---------------------------------------------------- +void GameSndConfDialog_t::bufSizeChanged(int value) +{ + char stmp[32]; + + sprintf( stmp, "%i", value ); + + bufSizeLabel->setText(stmp); + + g_config->setOption ("SDL.Sound.BufSize", value); + // reset sound subsystem for changes to take effect + KillSound (); + InitSound (); +} +//---------------------------------------------------- +void GameSndConfDialog_t::volumeChanged(int value) +{ + char stmp[32]; + + sprintf( stmp, "%i", value ); + + volLbl->setText(stmp); + + g_config->setOption ("SDL.Sound.Volume", value); + FCEUI_SetSoundVolume (value); +} +//---------------------------------------------------- +void GameSndConfDialog_t::triangleChanged(int value) +{ + char stmp[32]; + + sprintf( stmp, "%i", value ); + + triLbl->setText(stmp); + + g_config->setOption ("SDL.Sound.TriangleVolume", value); + FCEUI_SetTriangleVolume (value); +} +//---------------------------------------------------- +void GameSndConfDialog_t::square1Changed(int value) +{ + char stmp[32]; + + sprintf( stmp, "%i", value ); + + sqr1Lbl->setText(stmp); + + g_config->setOption ("SDL.Sound.Square1Volume", value); + FCEUI_SetSquare1Volume (value); +} +//---------------------------------------------------- +void GameSndConfDialog_t::square2Changed(int value) +{ + char stmp[32]; + + sprintf( stmp, "%i", value ); + + sqr2Lbl->setText(stmp); + + g_config->setOption ("SDL.Sound.Square2Volume", value); + FCEUI_SetSquare2Volume (value); +} +//---------------------------------------------------- +void GameSndConfDialog_t::noiseChanged(int value) +{ + char stmp[32]; + + sprintf( stmp, "%i", value ); + + nseLbl->setText(stmp); + + g_config->setOption ("SDL.Sound.NoiseVolume", value); + FCEUI_SetNoiseVolume (value); +} +//---------------------------------------------------- +void GameSndConfDialog_t::pcmChanged(int value) +{ + char stmp[32]; + + sprintf( stmp, "%i", value ); + + pcmLbl->setText(stmp); + + g_config->setOption ("SDL.Sound.PCMVolume", value); + FCEUI_SetPCMVolume (value); +} +//---------------------------------------------------- +void GameSndConfDialog_t::enaSoundStateChange(int value) +{ + if ( value ) + { + int last_soundopt; + g_config->getOption ("SDL.Sound", &last_soundopt); + g_config->setOption ("SDL.Sound", 1); + if (GameInfo && !last_soundopt) + { + InitSound (); + } + } + else + { + g_config->setOption ("SDL.Sound", 0); + KillSound (); + } +} +//---------------------------------------------------- +void GameSndConfDialog_t::enaSoundLowPassChange(int value) +{ + if (value) + { + g_config->setOption ("SDL.Sound.LowPass", 1); + FCEUI_SetLowPass (1); + } + else + { + g_config->setOption ("SDL.Sound.LowPass", 0); + FCEUI_SetLowPass (0); + } + g_config->save (); +} +//---------------------------------------------------- +void GameSndConfDialog_t::swapDutyCallback(int value) +{ + if (value) + { + g_config->setOption ("SDL.SwapDuty", 1); + swapDuty = 1; + } + else + { + g_config->setOption ("SDL.SwapDuty", 0); + swapDuty = 0; + } + g_config->save (); +} +//---------------------------------------------------- diff --git a/src/drivers/Qt/GameSoundConf.h b/src/drivers/Qt/GameSoundConf.h index 455a5009..f6a9918e 100644 --- a/src/drivers/Qt/GameSoundConf.h +++ b/src/drivers/Qt/GameSoundConf.h @@ -31,8 +31,29 @@ class GameSndConfDialog_t : public QDialog QComboBox *qualitySelect; QComboBox *rateSelect; QSlider *bufSizeSlider; + QLabel *bufSizeLabel; + QLabel *volLbl; + QLabel *triLbl; + QLabel *sqr1Lbl; + QLabel *sqr2Lbl; + QLabel *nseLbl; + QLabel *pcmLbl; + + void setCheckBoxFromProperty( QCheckBox *cbx, const char *property ); + void setComboBoxFromProperty( QComboBox *cbx, const char *property ); + void setSliderFromProperty( QSlider *slider, QLabel *lbl, const char *property ); private slots: + void bufSizeChanged(int value); + void volumeChanged(int value); + void triangleChanged(int value); + void square1Changed(int value); + void square2Changed(int value); + void noiseChanged(int value); + void pcmChanged(int value); + void enaSoundStateChange(int value); + void enaSoundLowPassChange(int value); + void swapDutyCallback(int value); };