void setupDialog::audioInterfaceChanged( const QString & _iface ) { for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin(); it != m_audioIfaceSetupWidgets.end(); ++it ) { it.value()->hide(); } m_audioIfaceSetupWidgets[m_audioIfaceNames[_iface]]->show(); }
setupDialog::setupDialog( ConfigTabs _tab_to_open ) : m_bufferSize( configManager::inst()->value( "mixer", "framesperaudiobuffer" ).toInt() ), m_toolTips( !configManager::inst()->value( "tooltips", "disabled" ).toInt() ), m_warnAfterSetup( !configManager::inst()->value( "app", "nomsgaftersetup" ).toInt() ), m_displaydBV( configManager::inst()->value( "app", "displaydbv" ).toInt() ), m_MMPZ( !configManager::inst()->value( "app", "nommpz" ).toInt() ), m_hqAudioDev( configManager::inst()->value( "mixer", "hqaudio" ).toInt() ), m_workingDir( configManager::inst()->workingDir() ), m_vstDir( configManager::inst()->vstDir() ), m_artworkDir( configManager::inst()->artworkDir() ), m_flDir( configManager::inst()->flDir() ), m_ladDir( configManager::inst()->ladspaDir() ), #ifdef LMMS_HAVE_FLUIDSYNTH m_defaultSoundfont( configManager::inst()->defaultSoundfont() ), #endif #ifdef LMMS_HAVE_STK m_stkDir( configManager::inst()->stkDir() ), #endif m_backgroundArtwork( configManager::inst()->backgroundArtwork() ), m_smoothScroll( configManager::inst()->value( "ui", "smoothscroll" ).toInt() ), m_enableAutoSave( configManager::inst()->value( "ui", "enableautosave" ).toInt() ), m_oneInstrumentTrackWindow( configManager::inst()->value( "ui", "oneinstrumenttrackwindow" ).toInt() ), m_compactTrackButtons( configManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ), m_syncVSTPlugins( configManager::inst()->value( "ui", "syncvstplugins" ).toInt() ), m_animateAFP(configManager::inst()->value( "ui", "animateafp").toInt() ), m_printNoteLabels(configManager::inst()->value( "ui", "printnotelabels").toInt() ), m_displayWaveform(configManager::inst()->value( "ui", "displaywaveform").toInt() ) { setWindowIcon( embed::getIconPixmap( "setup_general" ) ); setWindowTitle( tr( "Setup LMMS" ) ); setModal( true ); engine::projectJournal()->setJournalling( false ); QVBoxLayout * vlayout = new QVBoxLayout( this ); vlayout->setSpacing( 0 ); vlayout->setMargin( 0 ); QWidget * settings = new QWidget( this ); QHBoxLayout * hlayout = new QHBoxLayout( settings ); hlayout->setSpacing( 0 ); hlayout->setMargin( 0 ); m_tabBar = new tabBar( settings, QBoxLayout::TopToBottom ); m_tabBar->setExclusive( true ); m_tabBar->setFixedWidth( 72 ); QWidget * ws = new QWidget( settings ); int wsHeight = 336; #ifdef LMMS_HAVE_STK wsHeight += 50; #endif #ifdef LMMS_HAVE_FLUIDSYNTH wsHeight += 50; #endif ws->setFixedSize( 360, wsHeight ); QWidget * general = new QWidget( ws ); general->setFixedSize( 360, 240 ); QVBoxLayout * gen_layout = new QVBoxLayout( general ); gen_layout->setSpacing( 0 ); gen_layout->setMargin( 0 ); labelWidget( general, tr( "General settings" ) ); tabWidget * bufsize_tw = new tabWidget( tr( "BUFFER SIZE" ), general ); bufsize_tw->setFixedHeight( 80 ); m_bufSizeSlider = new QSlider( Qt::Horizontal, bufsize_tw ); m_bufSizeSlider->setRange( 1, 256 ); m_bufSizeSlider->setTickPosition( QSlider::TicksBelow ); m_bufSizeSlider->setPageStep( 8 ); m_bufSizeSlider->setTickInterval( 8 ); m_bufSizeSlider->setGeometry( 10, 16, 340, 18 ); m_bufSizeSlider->setValue( m_bufferSize / 64 ); connect( m_bufSizeSlider, SIGNAL( valueChanged( int ) ), this, SLOT( setBufferSize( int ) ) ); m_bufSizeLbl = new QLabel( bufsize_tw ); m_bufSizeLbl->setGeometry( 10, 40, 200, 24 ); setBufferSize( m_bufSizeSlider->value() ); QPushButton * bufsize_reset_btn = new QPushButton( embed::getIconPixmap( "reload" ), "", bufsize_tw ); bufsize_reset_btn->setGeometry( 290, 40, 28, 28 ); connect( bufsize_reset_btn, SIGNAL( clicked() ), this, SLOT( resetBufSize() ) ); toolTip::add( bufsize_reset_btn, tr( "Reset to default-value" ) ); QPushButton * bufsize_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", bufsize_tw ); bufsize_help_btn->setGeometry( 320, 40, 28, 28 ); connect( bufsize_help_btn, SIGNAL( clicked() ), this, SLOT( displayBufSizeHelp() ) ); tabWidget * misc_tw = new tabWidget( tr( "MISC" ), general ); const int XDelta = 10; const int YDelta = 18; const int HeaderSize = 30; int labelNumber = 0; ledCheckBox * enable_tooltips = new ledCheckBox( tr( "Enable tooltips" ), misc_tw ); labelNumber++; enable_tooltips->move( XDelta, YDelta*labelNumber ); enable_tooltips->setChecked( m_toolTips ); connect( enable_tooltips, SIGNAL( toggled( bool ) ), this, SLOT( toggleToolTips( bool ) ) ); ledCheckBox * restart_msg = new ledCheckBox( tr( "Show restart warning after changing settings" ), misc_tw ); labelNumber++; restart_msg->move( XDelta, YDelta*labelNumber ); restart_msg->setChecked( m_warnAfterSetup ); connect( restart_msg, SIGNAL( toggled( bool ) ), this, SLOT( toggleWarnAfterSetup( bool ) ) ); ledCheckBox * dbv = new ledCheckBox( tr( "Display volume as dBV " ), misc_tw ); labelNumber++; dbv->move( XDelta, YDelta*labelNumber ); dbv->setChecked( m_displaydBV ); connect( dbv, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisplaydBV( bool ) ) ); ledCheckBox * mmpz = new ledCheckBox( tr( "Compress project files per default" ), misc_tw ); labelNumber++; mmpz->move( XDelta, YDelta*labelNumber ); mmpz->setChecked( m_MMPZ ); connect( mmpz, SIGNAL( toggled( bool ) ), this, SLOT( toggleMMPZ( bool ) ) ); ledCheckBox * oneitw = new ledCheckBox( tr( "One instrument track window mode" ), misc_tw ); labelNumber++; oneitw->move( XDelta, YDelta*labelNumber ); oneitw->setChecked( m_oneInstrumentTrackWindow ); connect( oneitw, SIGNAL( toggled( bool ) ), this, SLOT( toggleOneInstrumentTrackWindow( bool ) ) ); ledCheckBox * hqaudio = new ledCheckBox( tr( "HQ-mode for output audio-device" ), misc_tw ); labelNumber++; hqaudio->move( XDelta, YDelta*labelNumber ); hqaudio->setChecked( m_hqAudioDev ); connect( hqaudio, SIGNAL( toggled( bool ) ), this, SLOT( toggleHQAudioDev( bool ) ) ); ledCheckBox * compacttracks = new ledCheckBox( tr( "Compact track buttons" ), misc_tw ); labelNumber++; compacttracks->move( XDelta, YDelta*labelNumber ); compacttracks->setChecked( m_compactTrackButtons ); connect( compacttracks, SIGNAL( toggled( bool ) ), this, SLOT( toggleCompactTrackButtons( bool ) ) ); ledCheckBox * syncVST = new ledCheckBox( tr( "Sync VST plugins to host playback" ), misc_tw ); labelNumber++; syncVST->move( XDelta, YDelta*labelNumber ); syncVST->setChecked( m_syncVSTPlugins ); connect( syncVST, SIGNAL( toggled( bool ) ), this, SLOT( toggleSyncVSTPlugins( bool ) ) ); ledCheckBox * noteLabels = new ledCheckBox( tr( "Enable note labels in piano roll" ), misc_tw ); labelNumber++; noteLabels->move( XDelta, YDelta*labelNumber ); noteLabels->setChecked( m_printNoteLabels ); connect( noteLabels, SIGNAL( toggled( bool ) ), this, SLOT( toggleNoteLabels( bool ) ) ); ledCheckBox * displayWaveform = new ledCheckBox( tr( "Enable waveform display by default" ), misc_tw ); labelNumber++; displayWaveform->move( XDelta, YDelta*labelNumber ); displayWaveform->setChecked( m_displayWaveform ); connect( displayWaveform, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisplayWaveform( bool ) ) ); ledCheckBox * disableAutoquit = new ledCheckBox( tr( "Keep effects running even without input" ), misc_tw ); labelNumber++; disableAutoquit->move( XDelta, YDelta*labelNumber ); disableAutoquit->setChecked( configManager::inst()->isAutoquitDisabled() ); connect( disableAutoquit, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisableAutoquit( bool ) ) ); misc_tw->setFixedHeight( YDelta*labelNumber + HeaderSize ); gen_layout->addWidget( bufsize_tw ); gen_layout->addSpacing( 10 ); gen_layout->addWidget( misc_tw ); gen_layout->addStretch(); QWidget * paths = new QWidget( ws ); int pathsHeight = 356; #ifdef LMMS_HAVE_STK pathsHeight += 55; #endif #ifdef LMMS_HAVE_FLUIDSYNTH pathsHeight += 55; #endif paths->setFixedSize( 360, pathsHeight ); QVBoxLayout * dir_layout = new QVBoxLayout( paths ); dir_layout->setSpacing( 0 ); dir_layout->setMargin( 0 ); labelWidget( paths, tr( "Paths" ) ); // working-dir tabWidget * lmms_wd_tw = new tabWidget( tr( "LMMS working directory" ).toUpper(), paths ); lmms_wd_tw->setFixedHeight( 48 ); m_wdLineEdit = new QLineEdit( m_workingDir, lmms_wd_tw ); m_wdLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_wdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setWorkingDir( const QString & ) ) ); QPushButton * workingdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", lmms_wd_tw ); workingdir_select_btn->setFixedSize( 24, 24 ); workingdir_select_btn->move( 320, 16 ); connect( workingdir_select_btn, SIGNAL( clicked() ), this, SLOT( openWorkingDir() ) ); // vst-dir tabWidget * vst_tw = new tabWidget( tr( "VST-plugin directory" ).toUpper(), paths ); vst_tw->setFixedHeight( 48 ); m_vdLineEdit = new QLineEdit( m_vstDir, vst_tw ); m_vdLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_vdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setVSTDir( const QString & ) ) ); QPushButton * vstdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", vst_tw ); vstdir_select_btn->setFixedSize( 24, 24 ); vstdir_select_btn->move( 320, 16 ); connect( vstdir_select_btn, SIGNAL( clicked() ), this, SLOT( openVSTDir() ) ); // artwork-dir tabWidget * artwork_tw = new tabWidget( tr( "Artwork directory" ).toUpper(), paths ); artwork_tw->setFixedHeight( 48 ); m_adLineEdit = new QLineEdit( m_artworkDir, artwork_tw ); m_adLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_adLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setArtworkDir( const QString & ) ) ); QPushButton * artworkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", artwork_tw ); artworkdir_select_btn->setFixedSize( 24, 24 ); artworkdir_select_btn->move( 320, 16 ); connect( artworkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openArtworkDir() ) ); // background artwork file tabWidget * backgroundArtwork_tw = new tabWidget( tr( "Background artwork" ).toUpper(), paths ); backgroundArtwork_tw->setFixedHeight( 48 ); m_baLineEdit = new QLineEdit( m_backgroundArtwork, backgroundArtwork_tw ); m_baLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_baLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setBackgroundArtwork( const QString & ) ) ); QPushButton * backgroundartworkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", backgroundArtwork_tw ); backgroundartworkdir_select_btn->setFixedSize( 24, 24 ); backgroundartworkdir_select_btn->move( 320, 16 ); connect( backgroundartworkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openBackgroundArtwork() ) ); // FL Studio-dir tabWidget * fl_tw = new tabWidget( tr( "FL Studio installation directory" ).toUpper(), paths ); fl_tw->setFixedHeight( 48 ); m_fdLineEdit = new QLineEdit( m_flDir, fl_tw ); m_fdLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_fdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setFLDir( const QString & ) ) ); QPushButton * fldir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", fl_tw ); fldir_select_btn->setFixedSize( 24, 24 ); fldir_select_btn->move( 320, 16 ); connect( fldir_select_btn, SIGNAL( clicked() ), this, SLOT( openFLDir() ) ); // LADSPA-dir tabWidget * lad_tw = new tabWidget( tr( "LADSPA plugin paths" ).toUpper(), paths ); lad_tw->setFixedHeight( 48 ); m_ladLineEdit = new QLineEdit( m_ladDir, lad_tw ); m_ladLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_ladLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setLADSPADir( const QString & ) ) ); QPushButton * laddir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", lad_tw ); laddir_select_btn->setFixedSize( 24, 24 ); laddir_select_btn->move( 320, 16 ); connect( laddir_select_btn, SIGNAL( clicked() ), this, SLOT( openLADSPADir() ) ); #ifdef LMMS_HAVE_STK // STK-dir tabWidget * stk_tw = new tabWidget( tr( "STK rawwave directory" ).toUpper(), paths ); stk_tw->setFixedHeight( 48 ); m_stkLineEdit = new QLineEdit( m_stkDir, stk_tw ); m_stkLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_stkLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setSTKDir( const QString & ) ) ); QPushButton * stkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", stk_tw ); stkdir_select_btn->setFixedSize( 24, 24 ); stkdir_select_btn->move( 320, 16 ); connect( stkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openSTKDir() ) ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH // Soundfont tabWidget * sf_tw = new tabWidget( tr( "Default Soundfont File" ).toUpper(), paths ); sf_tw->setFixedHeight( 48 ); m_sfLineEdit = new QLineEdit( m_defaultSoundfont, sf_tw ); m_sfLineEdit->setGeometry( 10, 20, 300, 16 ); connect( m_sfLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setDefaultSoundfont( const QString & ) ) ); QPushButton * sf_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", sf_tw ); sf_select_btn->setFixedSize( 24, 24 ); sf_select_btn->move( 320, 16 ); connect( sf_select_btn, SIGNAL( clicked() ), this, SLOT( openDefaultSoundfont() ) ); #endif dir_layout->addWidget( lmms_wd_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( vst_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( artwork_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( backgroundArtwork_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( fl_tw ); dir_layout->addSpacing( 10 ); dir_layout->addWidget( lad_tw ); #ifdef LMMS_HAVE_STK dir_layout->addSpacing( 10 ); dir_layout->addWidget( stk_tw ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH dir_layout->addSpacing( 10 ); dir_layout->addWidget( sf_tw ); #endif dir_layout->addStretch(); QWidget * performance = new QWidget( ws ); performance->setFixedSize( 360, 240 ); QVBoxLayout * perf_layout = new QVBoxLayout( performance ); perf_layout->setSpacing( 0 ); perf_layout->setMargin( 0 ); labelWidget( performance, tr( "Performance settings" ) ); tabWidget * ui_fx_tw = new tabWidget( tr( "UI effects vs. " "performance" ).toUpper(), performance ); ui_fx_tw->setFixedHeight( 80 ); ledCheckBox * smoothScroll = new ledCheckBox( tr( "Smooth scroll in Song Editor" ), ui_fx_tw ); smoothScroll->move( 10, 20 ); smoothScroll->setChecked( m_smoothScroll ); connect( smoothScroll, SIGNAL( toggled( bool ) ), this, SLOT( toggleSmoothScroll( bool ) ) ); ledCheckBox * autoSave = new ledCheckBox( tr( "Enable auto save feature" ), ui_fx_tw ); autoSave->move( 10, 40 ); autoSave->setChecked( m_enableAutoSave ); connect( autoSave, SIGNAL( toggled( bool ) ), this, SLOT( toggleAutoSave( bool ) ) ); ledCheckBox * animAFP = new ledCheckBox( tr( "Show playback cursor in AudioFileProcessor" ), ui_fx_tw ); animAFP->move( 10, 60 ); animAFP->setChecked( m_animateAFP ); connect( animAFP, SIGNAL( toggled( bool ) ), this, SLOT( toggleAnimateAFP( bool ) ) ); perf_layout->addWidget( ui_fx_tw ); perf_layout->addStretch(); QWidget * audio = new QWidget( ws ); audio->setFixedSize( 360, 200 ); QVBoxLayout * audio_layout = new QVBoxLayout( audio ); audio_layout->setSpacing( 0 ); audio_layout->setMargin( 0 ); labelWidget( audio, tr( "Audio settings" ) ); tabWidget * audioiface_tw = new tabWidget( tr( "AUDIO INTERFACE" ), audio ); audioiface_tw->setFixedHeight( 60 ); m_audioInterfaces = new QComboBox( audioiface_tw ); m_audioInterfaces->setGeometry( 10, 20, 240, 22 ); QPushButton * audio_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", audioiface_tw ); audio_help_btn->setGeometry( 320, 20, 28, 28 ); connect( audio_help_btn, SIGNAL( clicked() ), this, SLOT( displayAudioHelp() ) ); // create ifaces-settings-widget QWidget * asw = new QWidget( audio ); asw->setFixedHeight( 60 ); QHBoxLayout * asw_layout = new QHBoxLayout( asw ); asw_layout->setSpacing( 0 ); asw_layout->setMargin( 0 ); //asw_layout->setAutoAdd( true ); #ifdef LMMS_HAVE_JACK m_audioIfaceSetupWidgets[AudioJack::name()] = new AudioJack::setupWidget( asw ); #endif #ifdef LMMS_HAVE_ALSA m_audioIfaceSetupWidgets[AudioAlsa::name()] = new AudioAlsa::setupWidget( asw ); #endif #ifdef LMMS_HAVE_PULSEAUDIO m_audioIfaceSetupWidgets[AudioPulseAudio::name()] = new AudioPulseAudio::setupWidget( asw ); #endif #ifdef LMMS_HAVE_PORTAUDIO m_audioIfaceSetupWidgets[AudioPortAudio::name()] = new AudioPortAudio::setupWidget( asw ); #endif #ifdef LMMS_HAVE_SDL m_audioIfaceSetupWidgets[AudioSdl::name()] = new AudioSdl::setupWidget( asw ); #endif #ifdef LMMS_HAVE_OSS m_audioIfaceSetupWidgets[AudioOss::name()] = new AudioOss::setupWidget( asw ); #endif m_audioIfaceSetupWidgets[AudioDummy::name()] = new AudioDummy::setupWidget( asw ); for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin(); it != m_audioIfaceSetupWidgets.end(); ++it ) { m_audioIfaceNames[tr( it.key().toAscii())] = it.key(); } for( trMap::iterator it = m_audioIfaceNames.begin(); it != m_audioIfaceNames.end(); ++it ) { QWidget * audioWidget = m_audioIfaceSetupWidgets[it.value()]; audioWidget->hide(); asw_layout->addWidget( audioWidget ); m_audioInterfaces->addItem( it.key() ); } m_audioInterfaces->setCurrentIndex( m_audioInterfaces->findText( tr( engine::mixer()->audioDevName().toAscii() ) ) ); m_audioIfaceSetupWidgets[engine::mixer()->audioDevName()]->show(); connect( m_audioInterfaces, SIGNAL( activated( const QString & ) ), this, SLOT( audioInterfaceChanged( const QString & ) ) ); audio_layout->addWidget( audioiface_tw ); audio_layout->addSpacing( 20 ); audio_layout->addWidget( asw ); audio_layout->addStretch(); QWidget * midi = new QWidget( ws ); QVBoxLayout * midi_layout = new QVBoxLayout( midi ); midi_layout->setSpacing( 0 ); midi_layout->setMargin( 0 ); labelWidget( midi, tr( "MIDI settings" ) ); tabWidget * midiiface_tw = new tabWidget( tr( "MIDI INTERFACE" ), midi ); midiiface_tw->setFixedHeight( 60 ); m_midiInterfaces = new QComboBox( midiiface_tw ); m_midiInterfaces->setGeometry( 10, 20, 240, 22 ); QPushButton * midi_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", midiiface_tw ); midi_help_btn->setGeometry( 320, 20, 28, 28 ); connect( midi_help_btn, SIGNAL( clicked() ), this, SLOT( displayMIDIHelp() ) ); // create ifaces-settings-widget QWidget * msw = new QWidget( midi ); msw->setFixedHeight( 60 ); QHBoxLayout * msw_layout = new QHBoxLayout( msw ); msw_layout->setSpacing( 0 ); msw_layout->setMargin( 0 ); //msw_layout->setAutoAdd( true ); #ifdef LMMS_HAVE_ALSA m_midiIfaceSetupWidgets[MidiAlsaSeq::name()] = new MidiAlsaSeq::setupWidget( msw ); m_midiIfaceSetupWidgets[MidiAlsaRaw::name()] = new MidiAlsaRaw::setupWidget( msw ); #endif #ifdef LMMS_HAVE_OSS m_midiIfaceSetupWidgets[MidiOss::name()] = new MidiOss::setupWidget( msw ); #endif #ifdef LMMS_BUILD_WIN32 m_midiIfaceSetupWidgets[MidiWinMM::name()] = new MidiWinMM::setupWidget( msw ); #endif m_midiIfaceSetupWidgets[MidiDummy::name()] = new MidiDummy::setupWidget( msw ); for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin(); it != m_midiIfaceSetupWidgets.end(); ++it ) { m_midiIfaceNames[tr( it.key().toAscii())] = it.key(); } for( trMap::iterator it = m_midiIfaceNames.begin(); it != m_midiIfaceNames.end(); ++it ) { QWidget * midiWidget = m_midiIfaceSetupWidgets[it.value()]; midiWidget->hide(); msw_layout->addWidget( midiWidget ); m_midiInterfaces->addItem( it.key() ); } m_midiInterfaces->setCurrentIndex( m_midiInterfaces->findText( tr( engine::mixer()->midiClientName().toAscii() ) ) ); m_midiIfaceSetupWidgets[engine::mixer()->midiClientName()]->show(); connect( m_midiInterfaces, SIGNAL( activated( const QString & ) ), this, SLOT( midiInterfaceChanged( const QString & ) ) ); midi_layout->addWidget( midiiface_tw ); midi_layout->addSpacing( 20 ); midi_layout->addWidget( msw ); midi_layout->addStretch(); m_tabBar->addTab( general, tr( "General settings" ), 0, false, true )->setIcon( embed::getIconPixmap( "setup_general" ) ); m_tabBar->addTab( paths, tr( "Paths" ), 1, false, true )->setIcon( embed::getIconPixmap( "setup_directories" ) ); m_tabBar->addTab( performance, tr( "Performance settings" ), 2, false, true )->setIcon( embed::getIconPixmap( "setup_performance" ) ); m_tabBar->addTab( audio, tr( "Audio settings" ), 3, false, true )->setIcon( embed::getIconPixmap( "setup_audio" ) ); m_tabBar->addTab( midi, tr( "MIDI settings" ), 4, true, true )->setIcon( embed::getIconPixmap( "setup_midi" ) ); m_tabBar->setActiveTab( _tab_to_open ); hlayout->addWidget( m_tabBar ); hlayout->addSpacing( 10 ); hlayout->addWidget( ws ); hlayout->addSpacing( 10 ); hlayout->addStretch(); QWidget * buttons = new QWidget( this ); QHBoxLayout * btn_layout = new QHBoxLayout( buttons ); btn_layout->setSpacing( 0 ); btn_layout->setMargin( 0 ); QPushButton * ok_btn = new QPushButton( embed::getIconPixmap( "apply" ), tr( "OK" ), buttons ); connect( ok_btn, SIGNAL( clicked() ), this, SLOT( accept() ) ); QPushButton * cancel_btn = new QPushButton( embed::getIconPixmap( "cancel" ), tr( "Cancel" ), buttons ); connect( cancel_btn, SIGNAL( clicked() ), this, SLOT( reject() ) ); btn_layout->addStretch(); btn_layout->addSpacing( 10 ); btn_layout->addWidget( ok_btn ); btn_layout->addSpacing( 10 ); btn_layout->addWidget( cancel_btn ); btn_layout->addSpacing( 10 ); vlayout->addWidget( settings ); vlayout->addSpacing( 10 ); vlayout->addWidget( buttons ); vlayout->addSpacing( 10 ); vlayout->addStretch(); show(); }
void setupDialog::accept() { configManager::inst()->setValue( "mixer", "framesperaudiobuffer", QString::number( m_bufferSize ) ); configManager::inst()->setValue( "mixer", "audiodev", m_audioIfaceNames[m_audioInterfaces->currentText()] ); configManager::inst()->setValue( "mixer", "mididev", m_midiIfaceNames[m_midiInterfaces->currentText()] ); configManager::inst()->setValue( "tooltips", "disabled", QString::number( !m_toolTips ) ); configManager::inst()->setValue( "app", "nomsgaftersetup", QString::number( !m_warnAfterSetup ) ); configManager::inst()->setValue( "app", "displaydbv", QString::number( m_displaydBV ) ); configManager::inst()->setValue( "app", "nommpz", QString::number( !m_MMPZ ) ); configManager::inst()->setValue( "mixer", "hqaudio", QString::number( m_hqAudioDev ) ); configManager::inst()->setValue( "ui", "smoothscroll", QString::number( m_smoothScroll ) ); configManager::inst()->setValue( "ui", "enableautosave", QString::number( m_enableAutoSave ) ); configManager::inst()->setValue( "ui", "oneinstrumenttrackwindow", QString::number( m_oneInstrumentTrackWindow ) ); configManager::inst()->setValue( "ui", "compacttrackbuttons", QString::number( m_compactTrackButtons ) ); configManager::inst()->setValue( "ui", "syncvstplugins", QString::number( m_syncVSTPlugins ) ); configManager::inst()->setValue( "ui", "animateafp", QString::number( m_animateAFP ) ); configManager::inst()->setValue( "ui", "printnotelabels", QString::number( m_printNoteLabels ) ); configManager::inst()->setValue( "ui", "displaywaveform", QString::number( m_displayWaveform ) ); configManager::inst()->setValue( "ui", "disableautoquit", QString::number( configManager::inst()->isAutoquitDisabled() ) ); configManager::inst()->setWorkingDir( m_workingDir ); configManager::inst()->setVSTDir( m_vstDir ); configManager::inst()->setArtworkDir( m_artworkDir ); configManager::inst()->setFLDir( m_flDir ); configManager::inst()->setLADSPADir( m_ladDir ); #ifdef LMMS_HAVE_FLUIDSYNTH configManager::inst()->setDefaultSoundfont( m_defaultSoundfont ); #endif #ifdef LMMS_HAVE_STK configManager::inst()->setSTKDir( m_stkDir ); #endif configManager::inst()->setBackgroundArtwork( m_backgroundArtwork ); // tell all audio-settings-widget to save their settings for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin(); it != m_audioIfaceSetupWidgets.end(); ++it ) { it.value()->saveSettings(); } // tell all MIDI-settings-widget to save their settings for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin(); it != m_midiIfaceSetupWidgets.end(); ++it ) { it.value()->saveSettings(); } configManager::inst()->saveConfigFile(); QDialog::accept(); if( m_warnAfterSetup ) { QMessageBox::information( NULL, tr( "Restart LMMS" ), tr( "Please note that most changes " "won't take effect until " "you restart LMMS!" ), QMessageBox::Ok ); } }
SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : m_bufferSize( ConfigManager::inst()->value( "mixer", "framesperaudiobuffer" ).toInt() ), m_toolTips( !ConfigManager::inst()->value( "tooltips", "disabled" ).toInt() ), m_warnAfterSetup( !ConfigManager::inst()->value( "app", "nomsgaftersetup" ).toInt() ), m_displaydBV( ConfigManager::inst()->value( "app", "displaydbv" ).toInt() ), m_MMPZ( !ConfigManager::inst()->value( "app", "nommpz" ).toInt() ), m_disableBackup( !ConfigManager::inst()->value( "app", "disablebackup" ).toInt() ), m_hqAudioDev( ConfigManager::inst()->value( "mixer", "hqaudio" ).toInt() ), m_lang( ConfigManager::inst()->value( "app", "language" ) ), m_workingDir( QDir::toNativeSeparators( ConfigManager::inst()->workingDir() ) ), m_vstDir( QDir::toNativeSeparators( ConfigManager::inst()->vstDir() ) ), m_artworkDir( QDir::toNativeSeparators( ConfigManager::inst()->artworkDir() ) ), m_flDir( QDir::toNativeSeparators( ConfigManager::inst()->flDir() ) ), m_ladDir( QDir::toNativeSeparators( ConfigManager::inst()->ladspaDir() ) ), m_gigDir( QDir::toNativeSeparators( ConfigManager::inst()->gigDir() ) ), m_sf2Dir( QDir::toNativeSeparators( ConfigManager::inst()->sf2Dir() ) ), #ifdef LMMS_HAVE_FLUIDSYNTH m_defaultSoundfont( QDir::toNativeSeparators( ConfigManager::inst()->defaultSoundfont() ) ), #endif #ifdef LMMS_HAVE_STK m_stkDir( QDir::toNativeSeparators( ConfigManager::inst()->stkDir() ) ), #endif m_backgroundArtwork( QDir::toNativeSeparators( ConfigManager::inst()->backgroundArtwork() ) ), m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ), m_enableAutoSave( ConfigManager::inst()->value( "ui", "enableautosave" ).toInt() ), m_oneInstrumentTrackWindow( ConfigManager::inst()->value( "ui", "oneinstrumenttrackwindow" ).toInt() ), m_compactTrackButtons( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ), m_syncVSTPlugins( ConfigManager::inst()->value( "ui", "syncvstplugins" ).toInt() ), m_animateAFP(ConfigManager::inst()->value( "ui", "animateafp").toInt() ), m_printNoteLabels(ConfigManager::inst()->value( "ui", "printnotelabels").toInt() ), m_displayWaveform(ConfigManager::inst()->value( "ui", "displaywaveform").toInt() ), m_disableAutoQuit(ConfigManager::inst()->value( "ui", "disableautoquit").toInt() ) { setWindowIcon( embed::getIconPixmap( "setup_general" ) ); setWindowTitle( tr( "Setup LMMS" ) ); setModal( true ); Engine::projectJournal()->setJournalling( false ); QVBoxLayout * vlayout = new QVBoxLayout( this ); vlayout->setSpacing( 0 ); vlayout->setMargin( 0 ); QWidget * settings = new QWidget( this ); QHBoxLayout * hlayout = new QHBoxLayout( settings ); hlayout->setSpacing( 0 ); hlayout->setMargin( 0 ); m_tabBar = new TabBar( settings, QBoxLayout::TopToBottom ); m_tabBar->setExclusive( true ); m_tabBar->setFixedWidth( 72 ); QWidget * ws = new QWidget( settings ); int wsHeight = 370; #ifdef LMMS_HAVE_STK wsHeight += 50; #endif #ifdef LMMS_HAVE_FLUIDSYNTH wsHeight += 50; #endif ws->setFixedSize( 360, wsHeight ); QWidget * general = new QWidget( ws ); general->setFixedSize( 360, 240 ); QVBoxLayout * gen_layout = new QVBoxLayout( general ); gen_layout->setSpacing( 0 ); gen_layout->setMargin( 0 ); labelWidget( general, tr( "General settings" ) ); TabWidget * bufsize_tw = new TabWidget( tr( "BUFFER SIZE" ), general ); bufsize_tw->setFixedHeight( 80 ); m_bufSizeSlider = new QSlider( Qt::Horizontal, bufsize_tw ); m_bufSizeSlider->setRange( 1, 256 ); m_bufSizeSlider->setTickPosition( QSlider::TicksBelow ); m_bufSizeSlider->setPageStep( 8 ); m_bufSizeSlider->setTickInterval( 8 ); m_bufSizeSlider->setGeometry( 10, 16, 340, 18 ); m_bufSizeSlider->setValue( m_bufferSize / 64 ); connect( m_bufSizeSlider, SIGNAL( valueChanged( int ) ), this, SLOT( setBufferSize( int ) ) ); m_bufSizeLbl = new QLabel( bufsize_tw ); m_bufSizeLbl->setGeometry( 10, 40, 200, 24 ); setBufferSize( m_bufSizeSlider->value() ); QPushButton * bufsize_reset_btn = new QPushButton( embed::getIconPixmap( "reload" ), "", bufsize_tw ); bufsize_reset_btn->setGeometry( 290, 40, 28, 28 ); connect( bufsize_reset_btn, SIGNAL( clicked() ), this, SLOT( resetBufSize() ) ); ToolTip::add( bufsize_reset_btn, tr( "Reset to default-value" ) ); QPushButton * bufsize_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", bufsize_tw ); bufsize_help_btn->setGeometry( 320, 40, 28, 28 ); connect( bufsize_help_btn, SIGNAL( clicked() ), this, SLOT( displayBufSizeHelp() ) ); TabWidget * misc_tw = new TabWidget( tr( "MISC" ), general ); const int XDelta = 10; const int YDelta = 18; const int HeaderSize = 30; int labelNumber = 0; LedCheckBox * enable_tooltips = new LedCheckBox( tr( "Enable tooltips" ), misc_tw ); labelNumber++; enable_tooltips->move( XDelta, YDelta*labelNumber ); enable_tooltips->setChecked( m_toolTips ); connect( enable_tooltips, SIGNAL( toggled( bool ) ), this, SLOT( toggleToolTips( bool ) ) ); LedCheckBox * restart_msg = new LedCheckBox( tr( "Show restart warning after changing settings" ), misc_tw ); labelNumber++; restart_msg->move( XDelta, YDelta*labelNumber ); restart_msg->setChecked( m_warnAfterSetup ); connect( restart_msg, SIGNAL( toggled( bool ) ), this, SLOT( toggleWarnAfterSetup( bool ) ) ); LedCheckBox * dbv = new LedCheckBox( tr( "Display volume as dBV " ), misc_tw ); labelNumber++; dbv->move( XDelta, YDelta*labelNumber ); dbv->setChecked( m_displaydBV ); connect( dbv, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisplaydBV( bool ) ) ); LedCheckBox * mmpz = new LedCheckBox( tr( "Compress project files per default" ), misc_tw ); labelNumber++; mmpz->move( XDelta, YDelta*labelNumber ); mmpz->setChecked( m_MMPZ ); connect( mmpz, SIGNAL( toggled( bool ) ), this, SLOT( toggleMMPZ( bool ) ) ); LedCheckBox * oneitw = new LedCheckBox( tr( "One instrument track window mode" ), misc_tw ); labelNumber++; oneitw->move( XDelta, YDelta*labelNumber ); oneitw->setChecked( m_oneInstrumentTrackWindow ); connect( oneitw, SIGNAL( toggled( bool ) ), this, SLOT( toggleOneInstrumentTrackWindow( bool ) ) ); LedCheckBox * hqaudio = new LedCheckBox( tr( "HQ-mode for output audio-device" ), misc_tw ); labelNumber++; hqaudio->move( XDelta, YDelta*labelNumber ); hqaudio->setChecked( m_hqAudioDev ); connect( hqaudio, SIGNAL( toggled( bool ) ), this, SLOT( toggleHQAudioDev( bool ) ) ); LedCheckBox * compacttracks = new LedCheckBox( tr( "Compact track buttons" ), misc_tw ); labelNumber++; compacttracks->move( XDelta, YDelta*labelNumber ); compacttracks->setChecked( m_compactTrackButtons ); connect( compacttracks, SIGNAL( toggled( bool ) ), this, SLOT( toggleCompactTrackButtons( bool ) ) ); LedCheckBox * syncVST = new LedCheckBox( tr( "Sync VST plugins to host playback" ), misc_tw ); labelNumber++; syncVST->move( XDelta, YDelta*labelNumber ); syncVST->setChecked( m_syncVSTPlugins ); connect( syncVST, SIGNAL( toggled( bool ) ), this, SLOT( toggleSyncVSTPlugins( bool ) ) ); LedCheckBox * noteLabels = new LedCheckBox( tr( "Enable note labels in piano roll" ), misc_tw ); labelNumber++; noteLabels->move( XDelta, YDelta*labelNumber ); noteLabels->setChecked( m_printNoteLabels ); connect( noteLabels, SIGNAL( toggled( bool ) ), this, SLOT( toggleNoteLabels( bool ) ) ); LedCheckBox * displayWaveform = new LedCheckBox( tr( "Enable waveform display by default" ), misc_tw ); labelNumber++; displayWaveform->move( XDelta, YDelta*labelNumber ); displayWaveform->setChecked( m_displayWaveform ); connect( displayWaveform, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisplayWaveform( bool ) ) ); LedCheckBox * disableAutoquit = new LedCheckBox( tr( "Keep effects running even without input" ), misc_tw ); labelNumber++; disableAutoquit->move( XDelta, YDelta*labelNumber ); disableAutoquit->setChecked( m_disableAutoQuit ); connect( disableAutoquit, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisableAutoquit( bool ) ) ); LedCheckBox * disableBackup = new LedCheckBox( tr( "Create backup file when saving a project" ), misc_tw ); labelNumber++; disableBackup->move( XDelta, YDelta*labelNumber ); disableBackup->setChecked( m_disableBackup ); connect( disableBackup, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisableBackup( bool ) ) ); misc_tw->setFixedHeight( YDelta*labelNumber + HeaderSize ); TabWidget * lang_tw = new TabWidget( tr( "LANGUAGE" ), general ); lang_tw->setFixedHeight( 48 ); QComboBox * changeLang = new QComboBox( lang_tw ); changeLang->move( XDelta, YDelta ); QDir dir( ConfigManager::inst()->localeDir() ); QStringList fileNames = dir.entryList( QStringList( "*.qm" ) ); for( int i = 0; i < fileNames.size(); ++i ) { // get locale extracted by filename fileNames[i].truncate( fileNames[i].lastIndexOf( '.' ) ); m_languages.append( fileNames[i] ); QString lang = QLocale( m_languages.last() ).nativeLanguageName(); changeLang->addItem( lang ); } connect( changeLang, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setLanguage( int ) ) ); //If language unset, fallback to system language when available if( m_lang == "" ) { QString tmp = QLocale::system().name().left( 2 ); if( m_languages.contains( tmp ) ) { m_lang = tmp; } else { m_lang = "en"; } } for( int i = 0; i < changeLang->count(); ++i ) { if( m_lang == m_languages.at( i ) ) { changeLang->setCurrentIndex( i ); break; } } gen_layout->addWidget( bufsize_tw ); gen_layout->addSpacing( 10 ); gen_layout->addWidget( misc_tw ); gen_layout->addSpacing( 10 ); gen_layout->addWidget( lang_tw ); gen_layout->addStretch(); QWidget * paths = new QWidget( ws ); int pathsHeight = 370; #ifdef LMMS_HAVE_STK pathsHeight += 55; #endif #ifdef LMMS_HAVE_FLUIDSYNTH pathsHeight += 55; #endif paths->setFixedSize( 360, pathsHeight ); QVBoxLayout * dir_layout = new QVBoxLayout( paths ); dir_layout->setSpacing( 0 ); dir_layout->setMargin( 0 ); labelWidget( paths, tr( "Paths" ) ); QLabel * title = new QLabel( tr( "Directories" ), paths ); QFont f = title->font(); f.setBold( true ); title->setFont( pointSize<12>( f ) ); QScrollArea *pathScroll = new QScrollArea( paths ); QWidget *pathSelectors = new QWidget( ws ); QVBoxLayout *pathSelectorLayout = new QVBoxLayout; pathScroll->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); pathScroll->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); pathScroll->resize( 362, pathsHeight - 50 ); pathScroll->move( 0, 30 ); pathSelectors->resize( 360, pathsHeight - 50 ); const int txtLength = 285; const int btnStart = 305; // working-dir TabWidget * lmms_wd_tw = new TabWidget( tr( "LMMS working directory" ).toUpper(), pathSelectors ); lmms_wd_tw->setFixedHeight( 48 ); m_wdLineEdit = new QLineEdit( m_workingDir, lmms_wd_tw ); m_wdLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_wdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setWorkingDir( const QString & ) ) ); QPushButton * workingdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", lmms_wd_tw ); workingdir_select_btn->setFixedSize( 24, 24 ); workingdir_select_btn->move( btnStart, 16 ); connect( workingdir_select_btn, SIGNAL( clicked() ), this, SLOT( openWorkingDir() ) ); // artwork-dir TabWidget * artwork_tw = new TabWidget( tr( "Themes directory" ).toUpper(), pathSelectors ); artwork_tw->setFixedHeight( 48 ); m_adLineEdit = new QLineEdit( m_artworkDir, artwork_tw ); m_adLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_adLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setArtworkDir( const QString & ) ) ); QPushButton * artworkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", artwork_tw ); artworkdir_select_btn->setFixedSize( 24, 24 ); artworkdir_select_btn->move( btnStart, 16 ); connect( artworkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openArtworkDir() ) ); // background artwork file TabWidget * backgroundArtwork_tw = new TabWidget( tr( "Background artwork" ).toUpper(), paths ); backgroundArtwork_tw->setFixedHeight( 48 ); m_baLineEdit = new QLineEdit( m_backgroundArtwork, backgroundArtwork_tw ); m_baLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_baLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setBackgroundArtwork( const QString & ) ) ); QPushButton * backgroundartworkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", backgroundArtwork_tw ); backgroundartworkdir_select_btn->setFixedSize( 24, 24 ); backgroundartworkdir_select_btn->move( btnStart, 16 ); connect( backgroundartworkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openBackgroundArtwork() ) ); // FL Studio-dir TabWidget * fl_tw = new TabWidget( tr( "FL Studio installation directory" ).toUpper(), paths ); fl_tw->setFixedHeight( 48 ); m_fdLineEdit = new QLineEdit( m_flDir, fl_tw ); m_fdLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_fdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setFLDir( const QString & ) ) ); QPushButton * fldir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", fl_tw ); fldir_select_btn->setFixedSize( 24, 24 ); fldir_select_btn->move( btnStart, 16 ); connect( fldir_select_btn, SIGNAL( clicked() ), this, SLOT( openFLDir() ) ); // vst-dir TabWidget * vst_tw = new TabWidget( tr( "VST-plugin directory" ).toUpper(), pathSelectors ); vst_tw->setFixedHeight( 48 ); m_vdLineEdit = new QLineEdit( m_vstDir, vst_tw ); m_vdLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_vdLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setVSTDir( const QString & ) ) ); QPushButton * vstdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", vst_tw ); vstdir_select_btn->setFixedSize( 24, 24 ); vstdir_select_btn->move( btnStart, 16 ); connect( vstdir_select_btn, SIGNAL( clicked() ), this, SLOT( openVSTDir() ) ); // gig-dir TabWidget * gig_tw = new TabWidget( tr( "GIG directory" ).toUpper(), pathSelectors ); gig_tw->setFixedHeight( 48 ); m_gigLineEdit = new QLineEdit( m_gigDir, gig_tw ); m_gigLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_gigLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setGIGDir( const QString & ) ) ); QPushButton * gigdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", gig_tw ); gigdir_select_btn->setFixedSize( 24, 24 ); gigdir_select_btn->move( btnStart, 16 ); connect( gigdir_select_btn, SIGNAL( clicked() ), this, SLOT( openGIGDir() ) ); // sf2-dir TabWidget * sf2_tw = new TabWidget( tr( "SF2 directory" ).toUpper(), pathSelectors ); sf2_tw->setFixedHeight( 48 ); m_sf2LineEdit = new QLineEdit( m_sf2Dir, sf2_tw ); m_sf2LineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_sf2LineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setSF2Dir( const QString & ) ) ); QPushButton * sf2dir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", sf2_tw ); sf2dir_select_btn->setFixedSize( 24, 24 ); sf2dir_select_btn->move( btnStart, 16 ); connect( sf2dir_select_btn, SIGNAL( clicked() ), this, SLOT( openSF2Dir() ) ); // LADSPA-dir TabWidget * lad_tw = new TabWidget( tr( "LADSPA plugin directories" ).toUpper(), paths ); lad_tw->setFixedHeight( 48 ); m_ladLineEdit = new QLineEdit( m_ladDir, lad_tw ); m_ladLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_ladLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setLADSPADir( const QString & ) ) ); QPushButton * laddir_select_btn = new QPushButton( embed::getIconPixmap( "add_folder", 16, 16 ), "", lad_tw ); laddir_select_btn->setFixedSize( 24, 24 ); laddir_select_btn->move( btnStart, 16 ); connect( laddir_select_btn, SIGNAL( clicked() ), this, SLOT( openLADSPADir() ) ); #ifdef LMMS_HAVE_STK // STK-dir TabWidget * stk_tw = new TabWidget( tr( "STK rawwave directory" ).toUpper(), paths ); stk_tw->setFixedHeight( 48 ); m_stkLineEdit = new QLineEdit( m_stkDir, stk_tw ); m_stkLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_stkLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setSTKDir( const QString & ) ) ); QPushButton * stkdir_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", stk_tw ); stkdir_select_btn->setFixedSize( 24, 24 ); stkdir_select_btn->move( btnStart, 16 ); connect( stkdir_select_btn, SIGNAL( clicked() ), this, SLOT( openSTKDir() ) ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH // Soundfont TabWidget * sf_tw = new TabWidget( tr( "Default Soundfont File" ).toUpper(), paths ); sf_tw->setFixedHeight( 48 ); m_sfLineEdit = new QLineEdit( m_defaultSoundfont, sf_tw ); m_sfLineEdit->setGeometry( 10, 20, txtLength, 16 ); connect( m_sfLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( setDefaultSoundfont( const QString & ) ) ); QPushButton * sf_select_btn = new QPushButton( embed::getIconPixmap( "project_open", 16, 16 ), "", sf_tw ); sf_select_btn->setFixedSize( 24, 24 ); sf_select_btn->move( btnStart, 16 ); connect( sf_select_btn, SIGNAL( clicked() ), this, SLOT( openDefaultSoundfont() ) ); #endif pathSelectors->setLayout( pathSelectorLayout ); pathSelectorLayout->addWidget( lmms_wd_tw ); pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( gig_tw ); pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( sf2_tw ); pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( vst_tw ); pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( lad_tw ); #ifdef LMMS_HAVE_STK pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( stk_tw ); #endif #ifdef LMMS_HAVE_FLUIDSYNTH pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( sf_tw ); #endif pathSelectorLayout->addWidget( fl_tw ); pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( artwork_tw ); pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addStretch(); pathSelectorLayout->addWidget( backgroundArtwork_tw ); pathSelectorLayout->addSpacing( 10 ); dir_layout->addWidget( pathSelectors ); pathScroll->setWidget( pathSelectors ); pathScroll->setWidgetResizable( true ); QWidget * performance = new QWidget( ws ); performance->setFixedSize( 360, 240 ); QVBoxLayout * perf_layout = new QVBoxLayout( performance ); perf_layout->setSpacing( 0 ); perf_layout->setMargin( 0 ); labelWidget( performance, tr( "Performance settings" ) ); TabWidget * ui_fx_tw = new TabWidget( tr( "UI effects vs. " "performance" ).toUpper(), performance ); ui_fx_tw->setFixedHeight( 80 ); LedCheckBox * smoothScroll = new LedCheckBox( tr( "Smooth scroll in Song Editor" ), ui_fx_tw ); smoothScroll->move( 10, 20 ); smoothScroll->setChecked( m_smoothScroll ); connect( smoothScroll, SIGNAL( toggled( bool ) ), this, SLOT( toggleSmoothScroll( bool ) ) ); LedCheckBox * autoSave = new LedCheckBox( tr( "Enable auto save feature" ), ui_fx_tw ); autoSave->move( 10, 40 ); autoSave->setChecked( m_enableAutoSave ); connect( autoSave, SIGNAL( toggled( bool ) ), this, SLOT( toggleAutoSave( bool ) ) ); LedCheckBox * animAFP = new LedCheckBox( tr( "Show playback cursor in AudioFileProcessor" ), ui_fx_tw ); animAFP->move( 10, 60 ); animAFP->setChecked( m_animateAFP ); connect( animAFP, SIGNAL( toggled( bool ) ), this, SLOT( toggleAnimateAFP( bool ) ) ); perf_layout->addWidget( ui_fx_tw ); perf_layout->addStretch(); QWidget * audio = new QWidget( ws ); audio->setFixedSize( 360, 200 ); QVBoxLayout * audio_layout = new QVBoxLayout( audio ); audio_layout->setSpacing( 0 ); audio_layout->setMargin( 0 ); labelWidget( audio, tr( "Audio settings" ) ); TabWidget * audioiface_tw = new TabWidget( tr( "AUDIO INTERFACE" ), audio ); audioiface_tw->setFixedHeight( 60 ); m_audioInterfaces = new QComboBox( audioiface_tw ); m_audioInterfaces->setGeometry( 10, 20, 240, 22 ); QPushButton * audio_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", audioiface_tw ); audio_help_btn->setGeometry( 320, 20, 28, 28 ); connect( audio_help_btn, SIGNAL( clicked() ), this, SLOT( displayAudioHelp() ) ); // create ifaces-settings-widget QWidget * asw = new QWidget( audio ); asw->setFixedHeight( 60 ); QHBoxLayout * asw_layout = new QHBoxLayout( asw ); asw_layout->setSpacing( 0 ); asw_layout->setMargin( 0 ); //asw_layout->setAutoAdd( true ); #ifdef LMMS_HAVE_JACK m_audioIfaceSetupWidgets[AudioJack::name()] = new AudioJack::setupWidget( asw ); #endif #ifdef LMMS_HAVE_ALSA m_audioIfaceSetupWidgets[AudioAlsa::name()] = new AudioAlsaSetupWidget( asw ); #endif #ifdef LMMS_HAVE_PULSEAUDIO m_audioIfaceSetupWidgets[AudioPulseAudio::name()] = new AudioPulseAudio::setupWidget( asw ); #endif #ifdef LMMS_HAVE_PORTAUDIO m_audioIfaceSetupWidgets[AudioPortAudio::name()] = new AudioPortAudio::setupWidget( asw ); #endif #ifdef LMMS_HAVE_SDL m_audioIfaceSetupWidgets[AudioSdl::name()] = new AudioSdl::setupWidget( asw ); #endif #ifdef LMMS_HAVE_OSS m_audioIfaceSetupWidgets[AudioOss::name()] = new AudioOss::setupWidget( asw ); #endif m_audioIfaceSetupWidgets[AudioDummy::name()] = new AudioDummy::setupWidget( asw ); for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin(); it != m_audioIfaceSetupWidgets.end(); ++it ) { m_audioIfaceNames[tr( it.key().toLatin1())] = it.key(); } for( trMap::iterator it = m_audioIfaceNames.begin(); it != m_audioIfaceNames.end(); ++it ) { QWidget * audioWidget = m_audioIfaceSetupWidgets[it.value()]; audioWidget->hide(); asw_layout->addWidget( audioWidget ); m_audioInterfaces->addItem( it.key() ); } QString audioDevName = ConfigManager::inst()->value( "mixer", "audiodev" ); if( audioDevName.length() == 0 ) { audioDevName = Engine::mixer()->audioDevName(); ConfigManager::inst()->setValue( "mixer", "audiodev", audioDevName ); } m_audioInterfaces-> setCurrentIndex( m_audioInterfaces->findText( audioDevName ) ); m_audioIfaceSetupWidgets[audioDevName]->show(); connect( m_audioInterfaces, SIGNAL( activated( const QString & ) ), this, SLOT( audioInterfaceChanged( const QString & ) ) ); audio_layout->addWidget( audioiface_tw ); audio_layout->addSpacing( 20 ); audio_layout->addWidget( asw ); audio_layout->addStretch(); QWidget * midi = new QWidget( ws ); QVBoxLayout * midi_layout = new QVBoxLayout( midi ); midi_layout->setSpacing( 0 ); midi_layout->setMargin( 0 ); labelWidget( midi, tr( "MIDI settings" ) ); TabWidget * midiiface_tw = new TabWidget( tr( "MIDI INTERFACE" ), midi ); midiiface_tw->setFixedHeight( 60 ); m_midiInterfaces = new QComboBox( midiiface_tw ); m_midiInterfaces->setGeometry( 10, 20, 240, 22 ); QPushButton * midi_help_btn = new QPushButton( embed::getIconPixmap( "help" ), "", midiiface_tw ); midi_help_btn->setGeometry( 320, 20, 28, 28 ); connect( midi_help_btn, SIGNAL( clicked() ), this, SLOT( displayMIDIHelp() ) ); // create ifaces-settings-widget QWidget * msw = new QWidget( midi ); msw->setFixedHeight( 60 ); QHBoxLayout * msw_layout = new QHBoxLayout( msw ); msw_layout->setSpacing( 0 ); msw_layout->setMargin( 0 ); //msw_layout->setAutoAdd( true ); #ifdef LMMS_HAVE_ALSA m_midiIfaceSetupWidgets[MidiAlsaSeq::name()] = MidiSetupWidget::create<MidiAlsaSeq>( msw ); m_midiIfaceSetupWidgets[MidiAlsaRaw::name()] = MidiSetupWidget::create<MidiAlsaRaw>( msw ); #endif #ifdef LMMS_HAVE_OSS m_midiIfaceSetupWidgets[MidiOss::name()] = MidiSetupWidget::create<MidiOss>( msw ); #endif #ifdef LMMS_BUILD_WIN32 m_midiIfaceSetupWidgets[MidiWinMM::name()] = MidiSetupWidget::create<MidiWinMM>( msw ); #endif #ifdef LMMS_BUILD_APPLE m_midiIfaceSetupWidgets[MidiApple::name()] = MidiSetupWidget::create<MidiApple>( msw ); #endif m_midiIfaceSetupWidgets[MidiDummy::name()] = MidiSetupWidget::create<MidiDummy>( msw ); for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin(); it != m_midiIfaceSetupWidgets.end(); ++it ) { m_midiIfaceNames[tr( it.key().toLatin1())] = it.key(); } for( trMap::iterator it = m_midiIfaceNames.begin(); it != m_midiIfaceNames.end(); ++it ) { QWidget * midiWidget = m_midiIfaceSetupWidgets[it.value()]; midiWidget->hide(); msw_layout->addWidget( midiWidget ); m_midiInterfaces->addItem( it.key() ); } QString midiDevName = ConfigManager::inst()->value( "mixer", "mididev" ); if( midiDevName.length() == 0 ) { midiDevName = Engine::mixer()->midiClientName(); ConfigManager::inst()->setValue( "mixer", "mididev", midiDevName ); } m_midiInterfaces->setCurrentIndex( m_midiInterfaces->findText( midiDevName ) ); m_midiIfaceSetupWidgets[midiDevName]->show(); connect( m_midiInterfaces, SIGNAL( activated( const QString & ) ), this, SLOT( midiInterfaceChanged( const QString & ) ) ); midi_layout->addWidget( midiiface_tw ); midi_layout->addSpacing( 20 ); midi_layout->addWidget( msw ); midi_layout->addStretch(); m_tabBar->addTab( general, tr( "General settings" ), 0, false, true )->setIcon( embed::getIconPixmap( "setup_general" ) ); m_tabBar->addTab( paths, tr( "Paths" ), 1, false, true )->setIcon( embed::getIconPixmap( "setup_directories" ) ); m_tabBar->addTab( performance, tr( "Performance settings" ), 2, false, true )->setIcon( embed::getIconPixmap( "setup_performance" ) ); m_tabBar->addTab( audio, tr( "Audio settings" ), 3, false, true )->setIcon( embed::getIconPixmap( "setup_audio" ) ); m_tabBar->addTab( midi, tr( "MIDI settings" ), 4, true, true )->setIcon( embed::getIconPixmap( "setup_midi" ) ); m_tabBar->setActiveTab( _tab_to_open ); hlayout->addWidget( m_tabBar ); hlayout->addSpacing( 10 ); hlayout->addWidget( ws ); hlayout->addSpacing( 10 ); hlayout->addStretch(); QWidget * buttons = new QWidget( this ); QHBoxLayout * btn_layout = new QHBoxLayout( buttons ); btn_layout->setSpacing( 0 ); btn_layout->setMargin( 0 ); QPushButton * ok_btn = new QPushButton( embed::getIconPixmap( "apply" ), tr( "OK" ), buttons ); connect( ok_btn, SIGNAL( clicked() ), this, SLOT( accept() ) ); QPushButton * cancel_btn = new QPushButton( embed::getIconPixmap( "cancel" ), tr( "Cancel" ), buttons ); connect( cancel_btn, SIGNAL( clicked() ), this, SLOT( reject() ) ); btn_layout->addStretch(); btn_layout->addSpacing( 10 ); btn_layout->addWidget( ok_btn ); btn_layout->addSpacing( 10 ); btn_layout->addWidget( cancel_btn ); btn_layout->addSpacing( 10 ); vlayout->addWidget( settings ); vlayout->addSpacing( 10 ); vlayout->addWidget( buttons ); vlayout->addSpacing( 10 ); vlayout->addStretch(); show(); }