137 , m_pCurrentColor( nullptr )
140 , m_bMidiTableChanged( false ) {
146 setWindowTitle( tr(
"Preferences" ) );
148 setMinimumSize( width(), height() );
159 QSize generalTabWidgetSize( 60, 24 );
174 useLashCheckbox->setChecked( pPref->
m_bsetLash );
176 sBcountOffset->setSize( generalTabWidgetSize );
178 sBstartOffset->setSize( generalTabWidgetSize );
181 sBmaxBars->setSize( generalTabWidgetSize );
183 sBmaxLayers->setSize( generalTabWidgetSize );
185 autosaveSpinBox->setSize( generalTabWidgetSize );
189 rubberbandLineEdit->setText( pathtoRubberband );
191#ifdef H2CORE_HAVE_RUBBERBAND
192 pathToRubberbandExLable->hide();
193 rubberbandLineEdit->hide();
197 languageComboBox->setSize( QSize( 310, 24 ) );
199 QLocale loc( sLang );
200 QString sLabel = loc.nativeLanguageName() +
" (" + loc.nativeCountryName() +
')';
201 languageComboBox->addItem( sLabel, QVariant( sLang ) );
204 QStringList languages;
206 if ( !sPreferredLanguage.isNull() ) {
207 languages << sPreferredLanguage;
209 languages << QLocale::system().uiLanguages();
212 int nLanguage = languageComboBox->findData( QVariant( sLanguage ) );
213 if ( nLanguage != -1 ) {
214 languageComboBox->setCurrentIndex( nLanguage );
221 QSize audioTabWidgetSizeTop( 240, 24 );
223 QSize audioTabWidgetSizeBottom( 184, 24 );
225 driverComboBox->setSize( audioTabWidgetSizeTop );
226 driverComboBox->clear();
227 driverComboBox->addItem(
"Auto" );
228 for (
const QString& ssDriver : pHydrogen->getAudioEngine()->getSupportedAudioDrivers() ) {
229 driverComboBox->addItem( ssDriver );
233 driverComboBox->setCurrentIndex(driverComboBox->findText(pPref->
m_sAudioDriver));
237 driverInfoLbl->setText( tr(
"Select your Audio Driver" ));
240 connect( driverComboBox, SIGNAL(activated(
int)),
this,
245 portaudioHostAPIComboBox->setSize( audioTabWidgetSizeTop );
247 connect( portaudioHostAPIComboBox, SIGNAL(activated(
int)),
this,
250 m_pAudioDeviceTxt->setSize( audioTabWidgetSizeTop );
252 connect( m_pAudioDeviceTxt, SIGNAL(currentTextChanged(
const QString&)),
255 latencyTargetSpinBox->setSize( QSize( 55, 23 ) );
257 connect( latencyTargetSpinBox, SIGNAL(valueChanged(
int)),
this,
260 bufferSizeSpinBox->setSize( audioTabWidgetSizeTop );
262 connect( bufferSizeSpinBox, SIGNAL(valueChanged(
int)),
this,
265 sampleRateComboBox->setSize( audioTabWidgetSizeTop );
268 sampleRateComboBox->setCurrentIndex( 0 );
271 sampleRateComboBox->setCurrentIndex( 1 );
274 sampleRateComboBox->setCurrentIndex( 2 );
277 sampleRateComboBox->setCurrentIndex( 3 );
282 connect( sampleRateComboBox, SIGNAL(editTextChanged(
const QString&)),
this,
292 trackOutputComboBox->setSize( audioTabWidgetSizeTop );
294 case Preferences::JackTrackOutputMode::postFader:
295 trackOutputComboBox->setCurrentIndex( 0 );
297 case Preferences::JackTrackOutputMode::preFader:
298 trackOutputComboBox->setCurrentIndex( 1 );
301 ERRORLOG( QString(
"Unknown JACK track output mode [%1]" )
305 jackBBTSyncComboBox->setSize( audioTabWidgetSizeTop );
307 case Preferences::JackBBTSyncMethod::constMeasure:
308 jackBBTSyncComboBox->setCurrentIndex( 0 );
310 case Preferences::JackBBTSyncMethod::identicalBars:
311 jackBBTSyncComboBox->setCurrentIndex( 1 );
314 ERRORLOG( QString(
"Unknown JACK BBT synchronization method [%1]" )
320 metronomeVolumeSpinBox->setSize( audioTabWidgetSizeBottom );
322 metronomeVolumeSpinBox->setValue(metronomeVol);
325 maxVoicesTxt->setSize( audioTabWidgetSizeBottom );
328 resampleComboBox->setSize( audioTabWidgetSizeBottom );
329 resampleComboBox->setCurrentIndex(
static_cast<int>(pHydrogen->getAudioEngine()->getSampler()->getInterpolateMode() ) );
336 QSize midiTabWidgetSize = QSize( 309, 24 );
337 m_pMidiDriverComboBox->setSize( midiTabWidgetSize );
338 m_pMidiDriverComboBox->clear();
339#ifdef H2CORE_HAVE_ALSA
340 m_pMidiDriverComboBox->addItem(
"ALSA" );
342#ifdef H2CORE_HAVE_PORTMIDI
343 m_pMidiDriverComboBox->addItem(
"PortMidi" );
345#ifdef H2CORE_HAVE_COREMIDI
346 m_pMidiDriverComboBox->addItem(
"CoreMIDI" );
348#ifdef H2CORE_HAVE_JACK
349 m_pMidiDriverComboBox->addItem(
"JACK-MIDI" );
352 if ( m_pMidiDriverComboBox->findText(pPref->
m_sMidiDriver) > -1 ) {
353 m_pMidiDriverComboBox->setCurrentIndex(m_pMidiDriverComboBox->findText(pPref->
m_sMidiDriver));
355 driverInfoLbl->setText( tr(
"Select your MIDI Driver" ) );
358 connect(m_pMidiDriverComboBox, SIGNAL(currentIndexChanged(
int)),
361 midiPortChannelComboBox->setSize( midiTabWidgetSize );
362 midiPortChannelComboBox->setEnabled(
false );
363 midiPortComboBox->setSize( midiTabWidgetSize );
364 midiPortComboBox->setEnabled(
false );
365 connect( midiPortComboBox, SIGNAL(activated(
int)),
this,
369 midiPortComboBox->clear();
370 midiPortComboBox->addItem( pCommonStrings->getPreferencesNone() );
371 if ( pHydrogen->getMidiInput() !=
nullptr ) {
372 std::vector<QString> midiOutList = pHydrogen->getMidiInput()->getOutputPortList();
374 if ( midiOutList.size() != 0 ) {
375 midiPortComboBox->setEnabled(
true );
376 midiPortChannelComboBox->setEnabled(
true );
378 for (uint i = 0; i < midiOutList.size(); i++) {
379 QString sPortName = midiOutList[i];
380 midiPortComboBox->addItem( sPortName );
383 midiPortComboBox->setCurrentIndex( i + 1 );
389 midiOutportComboBox->setSize( midiTabWidgetSize );
390 midiOutportComboBox->clear();
391 midiOutportComboBox->addItem( pCommonStrings->getPreferencesNone() );
392 if ( pHydrogen->getMidiOutput() !=
nullptr ) {
393 std::vector<QString> midiOutList = pHydrogen->getMidiOutput()->getInputPortList();
395 if ( midiOutList.size() != 0 ) {
396 midiOutportComboBox->setEnabled(
true );
397 midiPortChannelComboBox->setEnabled(
true );
399 for (uint i = 0; i < midiOutList.size(); i++) {
400 QString sPortName = midiOutList[i];
401 midiOutportComboBox->addItem( sPortName );
404 midiOutportComboBox->setCurrentIndex( i + 1 );
408 connect( midiOutportComboBox, SIGNAL(activated(
int)),
this,
412 midiPortChannelComboBox->setCurrentIndex( 0 );
435 connect(enableOscCheckbox, SIGNAL(toggled(
bool)),
this, SLOT(
toggleOscCheckBox(
bool )));
436 incomingOscPortSpinBox->setSize( QSize( 66, 24 ) );
440 oscTemporaryPortLabel->show();
441 oscTemporaryPortLabel->setText( QString(
"<b><i><font color=" )
444 .append( tr(
"The select port is unavailable. This instance uses the following temporary port instead:" ) )
445 .append(
"</font></i></b>" ) );
446 oscTemporaryPort->show();
447 oscTemporaryPort->setEnabled(
false );
450 oscTemporaryPortLabel->hide();
451 oscTemporaryPort->hide();
455 enableOscFeedbackCheckbox->hide();
456 incomingOscPortSpinBox->hide();
457 incomingOscPortLabel->hide();
458 oscTemporaryPortLabel->hide();
459 oscTemporaryPort->hide();
464 QSize appearanceTabWidgetSize = QSize( 277, 24 );
465 connect( importThemeButton, SIGNAL(clicked(
bool)), SLOT(
importTheme()));
466 connect( exportThemeButton, SIGNAL(clicked(
bool)), SLOT(
exportTheme()));
467 connect( resetThemeButton, SIGNAL(clicked(
bool)),
this, SLOT(
resetTheme()));
470 fontSizeComboBox->setSize( appearanceTabWidgetSize );
474 connect( fontSizeComboBox, SIGNAL( currentIndexChanged(
int) ),
478 UIChangeWarningLabel->hide();
479 UIChangeWarningLabel->setText( QString(
"<b><i><font color=" )
482 .append( tr(
"For changes of the interface layout to take effect Hydrogen must be restarted." ) )
483 .append(
"</font></i></b>" ) );
485 styleComboBox->setSize( appearanceTabWidgetSize );
486 mixerFalloffComboBox->setSize( appearanceTabWidgetSize );
487 uiLayoutComboBox->setSize( appearanceTabWidgetSize );
488 uiScalingPolicyComboBox->setSize( appearanceTabWidgetSize );
489 iconColorComboBox->setSize( appearanceTabWidgetSize );
490 coloringMethodAuxSpinBox->setSize( appearanceTabWidgetSize );
492 connect( styleComboBox, SIGNAL( activated(
int) ),
this,
494 connect( uiLayoutComboBox, SIGNAL( currentIndexChanged(
int) ),
this,
496 connect( uiScalingPolicyComboBox, SIGNAL( currentIndexChanged(
int) ),
this,
498 connect( mixerFalloffComboBox, SIGNAL( currentIndexChanged(
int) ),
this,
500 connect( iconColorComboBox, SIGNAL(currentIndexChanged(
int)),
this,
502 connect( coloringMethodAuxSpinBox, SIGNAL( valueChanged(
int)),
this, SLOT(
onColorNumberChanged(
int ) ) );
505 int nButtonSize = fontSizeComboBox->height();
509 float fLineWidth = 308;
510 int nButtonsPerLine = std::floor( fLineWidth /
static_cast<float>(nButtonSize + 6) );
512 colorSelectionGrid->setHorizontalSpacing( 4 );
520 colorSelectionGrid->addWidget( bbutton,
521 std::floor(
static_cast<float>( ii ) /
522 static_cast<float>( nButtonsPerLine ) ),
523 (ii % nButtonsPerLine) + 1);
527 coloringMethodCombo->setSize( appearanceTabWidgetSize );
528 coloringMethodCombo->clear();
529 coloringMethodCombo->addItem(tr(
"Automatic"));
530 coloringMethodCombo->addItem(tr(
"Custom"));
531 connect( coloringMethodCombo, SIGNAL( currentIndexChanged(
int) ),
this, SLOT(
onColoringMethodChanged(
int) ) );
534 colorButton->setAutoFillBackground(
true);
541 pTopLevelItem =
new ColorTreeItem( 0x000, colorTree, tr(
"General" ) );
543 new ColorTreeItem( 0x101, pTopLevelItem, tr(
"Window Text" ) );
545 new ColorTreeItem( 0x103, pTopLevelItem, tr(
"Alternate Base" ) );
548 new ColorTreeItem( 0x106, pTopLevelItem, tr(
"Button Text" ) );
550 new ColorTreeItem( 0x108, pTopLevelItem, tr(
"Mid Light" ) );
553 new ColorTreeItem( 0x10b, pTopLevelItem, tr(
"Shadow Text" ) );
554 new ColorTreeItem( 0x10c, pTopLevelItem, tr(
"Highlight" ) );
555 new ColorTreeItem( 0x10d, pTopLevelItem, tr(
"Highlight Text" ) );
556 new ColorTreeItem( 0x10e, pTopLevelItem, tr(
"Selection Highlight" ) );
557 new ColorTreeItem( 0x10f, pTopLevelItem, tr(
"Selection Inactive" ) );
558 new ColorTreeItem( 0x110, pTopLevelItem, tr(
"Tool Tip Base" ) );
559 new ColorTreeItem( 0x111, pTopLevelItem, tr(
"Tool Tip Text" ) );
561 auto pWidgetItem =
new ColorTreeItem( 0x000, colorTree, tr(
"Widgets" ) );
562 auto pDefaultItem =
new ColorTreeItem( 0x200, pWidgetItem, tr(
"Widget" ) );
563 new ColorTreeItem( 0x201, pWidgetItem, tr(
"Widget Text" ) );
565 new ColorTreeItem( 0x203, pWidgetItem, tr(
"Accent Text" ) );
567 new ColorTreeItem( 0x205, pWidgetItem, tr(
"Button Red Text" ) );
569 new ColorTreeItem( 0x207, pWidgetItem, tr(
"Spin Box Text" ) );
573 pTopLevelItem =
new ColorTreeItem( 0x000, colorTree, tr(
"Song Editor" ) );
574 new ColorTreeItem( 0x300, pTopLevelItem, tr(
"Background" ) );
575 new ColorTreeItem( 0x301, pTopLevelItem, tr(
"Alternate Row" ) );
576 new ColorTreeItem( 0x302, pTopLevelItem, tr(
"Virtual Row" ) );
577 new ColorTreeItem( 0x303, pTopLevelItem, tr(
"Selected Row" ) );
578 new ColorTreeItem( 0x304, pTopLevelItem, tr(
"Selected Row Text" ) );
581 new ColorTreeItem( 0x307, pTopLevelItem, tr(
"Automation Background" ) );
582 new ColorTreeItem( 0x308, pTopLevelItem, tr(
"Automation Line" ) );
583 new ColorTreeItem( 0x309, pTopLevelItem, tr(
"Automation Node" ) );
584 new ColorTreeItem( 0x30a, pTopLevelItem, tr(
"Stacked Mode On" ) );
585 new ColorTreeItem( 0x30b, pTopLevelItem, tr(
"Stacked Mode On Next" ) );
586 new ColorTreeItem( 0x30c, pTopLevelItem, tr(
"Stacked Mode Off Next" ) );
588 pTopLevelItem =
new ColorTreeItem( 0x000, colorTree, tr(
"Pattern Editor" ) );
589 new ColorTreeItem( 0x400, pTopLevelItem, tr(
"Background" ) );
590 new ColorTreeItem( 0x401, pTopLevelItem, tr(
"Alternate Row" ) );
591 new ColorTreeItem( 0x402, pTopLevelItem, tr(
"Selected Row" ) );
592 new ColorTreeItem( 0x403, pTopLevelItem, tr(
"Selected Row Text" ) );
593 new ColorTreeItem( 0x404, pTopLevelItem, tr(
"Octave Row" ) );
595 new ColorTreeItem( 0x406, pTopLevelItem, tr(
"Note (Full Velocity)" ) );
596 new ColorTreeItem( 0x407, pTopLevelItem, tr(
"Note (Default Velocity)" ) );
597 new ColorTreeItem( 0x408, pTopLevelItem, tr(
"Note (Half Velocity)" ) );
598 new ColorTreeItem( 0x409, pTopLevelItem, tr(
"Note (Zero Velocity)" ) );
600 new ColorTreeItem( 0x40b, pTopLevelItem, tr(
"Grid Line 1" ) );
601 new ColorTreeItem( 0x40c, pTopLevelItem, tr(
"Grid Line 2" ) );
602 new ColorTreeItem( 0x40d, pTopLevelItem, tr(
"Grid Line 3" ) );
603 new ColorTreeItem( 0x40e, pTopLevelItem, tr(
"Grid Line 4" ) );
604 new ColorTreeItem( 0x40f, pTopLevelItem, tr(
"Grid Line 5" ) );
605 new ColorTreeItem( 0x410, pTopLevelItem, tr(
"Grid Line 6" ) );
607 colorButton->setEnabled(
false );
609 connect( colorTree, SIGNAL(itemSelectionChanged()),
611 connect( colorButton, SIGNAL(colorChanged()),
613 connect(rslider, SIGNAL(valueChanged(
int)), SLOT(
rsliderChanged(
int)));
614 connect(gslider, SIGNAL(valueChanged(
int)), SLOT(
gsliderChanged(
int)));
615 connect(bslider, SIGNAL(valueChanged(
int)), SLOT(
bsliderChanged(
int)));
616 connect(hslider, SIGNAL(valueChanged(
int)), SLOT(
hsliderChanged(
int)));
617 connect(sslider, SIGNAL(valueChanged(
int)), SLOT(
ssliderChanged(
int)));
618 connect(vslider, SIGNAL(valueChanged(
int)), SLOT(
vsliderChanged(
int)));
620 connect(rval, SIGNAL(valueChanged(
int)), SLOT(
rsliderChanged(
int)));
621 connect(gval, SIGNAL(valueChanged(
int)), SLOT(
gsliderChanged(
int)));
622 connect(bval, SIGNAL(valueChanged(
int)), SLOT(
bsliderChanged(
int)));
623 connect(hval, SIGNAL(valueChanged(
int)), SLOT(
hsliderChanged(
int)));
624 connect(sval, SIGNAL(valueChanged(
int)), SLOT(
ssliderChanged(
int)));
625 connect(vval, SIGNAL(valueChanged(
int)), SLOT(
vsliderChanged(
int)));
630 colorTree->expandItem( pWidgetItem );
631 colorTree->setCurrentItem( pDefaultItem );
813 auto pCommonStrings = pH2App->getCommonStrings();
820 bool bAudioOptionAltered =
false;
825 int res = QMessageBox::information(
this,
"Hydrogen",
826 tr(
"Driver restart required.\n Restart driver?"),
827 pCommonStrings->getButtonOk(),
828 pCommonStrings->getButtonCancel(),
837 if ( pHydrogen->getAudioOutput() ==
nullptr ||
838 dynamic_cast<NullDriver*
>(pHydrogen->getAudioOutput()) !=
nullptr ) {
839 int nRes = QMessageBox::warning(
this,
"Hydrogen",
841 .arg( pCommonStrings->getAudioDriverNotPresent() )
842 .append( tr(
"Are you sure you want to proceed?" ) ),
843 pCommonStrings->getButtonOk(),
844 pCommonStrings->getButtonCancel(),
851 if ( pPref->m_fMetronomeVolume != metronomeVolumeSpinBox->value() / 100.0 ) {
852 pPref->m_fMetronomeVolume = metronomeVolumeSpinBox->value() / 100.0;
853 bAudioOptionAltered =
true;
857 if ( pPref->m_nMaxNotes != maxVoicesTxt->value() ) {
858 pPref->m_nMaxNotes = maxVoicesTxt->value();
859 bAudioOptionAltered =
true;
863 if (
static_cast<int>( pHydrogen->getAudioEngine()->getSampler()->getInterpolateMode() ) !=
864 resampleComboBox->currentIndex() ) {
865 switch ( resampleComboBox->currentIndex() ){
882 bAudioOptionAltered =
true;
885 if ( bAudioOptionAltered ) {
894 bool bMidiOptionAltered =
false;
899 midiTable->saveMidiTable();
904 if ( m_pMidiDriverComboBox->currentText() ==
"ALSA" &&
905 pPref->m_sMidiDriver !=
"ALSA" ) {
906 pPref->m_sMidiDriver =
"ALSA";
907 bMidiOptionAltered =
true;
909 else if ( m_pMidiDriverComboBox->currentText() ==
"PortMidi" &&
910 pPref->m_sMidiDriver !=
"PortMidi" ) {
911 pPref->m_sMidiDriver =
"PortMidi";
912 bMidiOptionAltered =
true;
914 else if ( m_pMidiDriverComboBox->currentText() ==
"CoreMIDI" &&
915 pPref->m_sMidiDriver !=
"CoreMIDI" ) {
916 pPref->m_sMidiDriver =
"CoreMIDI";
917 bMidiOptionAltered =
true;
919 else if ( m_pMidiDriverComboBox->currentText() ==
"JACK-MIDI" &&
920 pPref->m_sMidiDriver !=
"JACK-MIDI" ) {
921 pPref->m_sMidiDriver =
"JACK-MIDI";
922 bMidiOptionAltered =
true;
925 if ( pPref->m_bMidiNoteOffIgnore != m_pIgnoreNoteOffCheckBox->isChecked() ) {
926 pPref->m_bMidiNoteOffIgnore = m_pIgnoreNoteOffCheckBox->isChecked();
927 bMidiOptionAltered =
true;
930 if ( pPref->m_bMidiFixedMapping != m_pFixedMapping->isChecked() ) {
931 pPref->m_bMidiFixedMapping = m_pFixedMapping->isChecked();
932 bMidiOptionAltered =
true;
935 if ( pPref->m_bMidiDiscardNoteAfterAction !=
936 m_pDiscardMidiMsgCheckbox->isChecked() ) {
937 pPref->m_bMidiDiscardNoteAfterAction = m_pDiscardMidiMsgCheckbox->isChecked();
938 bMidiOptionAltered =
true;
941 if ( pPref->m_bEnableMidiFeedback !=
942 m_pEnableMidiFeedbackCheckBox->isChecked() ) {
943 pPref->m_bEnableMidiFeedback = m_pEnableMidiFeedbackCheckBox->isChecked();
944 bMidiOptionAltered =
true;
947 QString sNewMidiPortName = midiPortComboBox->currentText();
948 if ( midiPortComboBox->currentIndex() == 0 ) {
951 if ( pPref->m_sMidiPortName != sNewMidiPortName ) {
952 pPref->m_sMidiPortName = sNewMidiPortName;
953 bMidiOptionAltered =
true;
957 QString sNewMidiOutputPortName = midiOutportComboBox->currentText();
958 if ( midiOutportComboBox->currentIndex() == 0 ) {
961 if ( pPref->m_sMidiOutputPortName != sNewMidiOutputPortName ) {
962 pPref->m_sMidiOutputPortName = sNewMidiOutputPortName;
963 bMidiOptionAltered =
true;
967 if ( pPref->m_nMidiChannelFilter !=
968 midiPortChannelComboBox->currentIndex() - 1 ) {
969 pPref->m_nMidiChannelFilter = midiPortChannelComboBox->currentIndex() - 1;
970 bMidiOptionAltered =
true;
973 if ( bMidiOptionAltered ) {
982 bool bOscOptionAltered =
false;
984 if ( enableOscCheckbox->isChecked() != pPref->getOscServerEnabled() ) {
985 pPref->setOscServerEnabled( enableOscCheckbox->isChecked() );
986 pHydrogen->toggleOscServer( enableOscCheckbox->isChecked() );
987 bOscOptionAltered =
true;
990 if ( pPref->getOscFeedbackEnabled() !=
991 enableOscFeedbackCheckbox->isChecked() ) {
992 pPref->setOscFeedbackEnabled( enableOscFeedbackCheckbox->isChecked() );
993 bOscOptionAltered =
true;
996 if ( incomingOscPortSpinBox->value() != pPref->getOscServerPort() ) {
997 pPref->setOscServerPort( incomingOscPortSpinBox->value() );
998 pHydrogen->recreateOscServer();
999 bOscOptionAltered =
true;
1002 if ( bOscOptionAltered ) {
1011 bool bGeneralOptionAltered =
false;
1013 if ( pPref->isRestoreLastSongEnabled() !=
1014 restoreLastUsedSongCheckbox->isChecked() ) {
1015 pPref->setRestoreLastSongEnabled( restoreLastUsedSongCheckbox->isChecked() );
1016 bGeneralOptionAltered =
true;
1019 if ( pPref->isRestoreLastPlaylistEnabled() !=
1020 restoreLastUsedPlaylistCheckbox->isChecked() ) {
1021 pPref->setRestoreLastPlaylistEnabled( restoreLastUsedPlaylistCheckbox->isChecked() );
1022 bGeneralOptionAltered =
true;
1025 if ( pPref->isPlaylistUsingRelativeFilenames() !=
1026 useRelativePlaylistPathsCheckbox->isChecked() ) {
1027 pPref->setUseRelativeFilenamesForPlaylists( useRelativePlaylistPathsCheckbox->isChecked() );
1028 bGeneralOptionAltered =
true;
1031 if ( pPref->m_bsetLash != useLashCheckbox->isChecked() ) {
1032 pPref->m_bsetLash = useLashCheckbox->isChecked();
1033 bGeneralOptionAltered =
true;
1036 if ( pPref->hideKeyboardCursor() != hideKeyboardCursor->isChecked() ) {
1037 pPref->setHideKeyboardCursor( hideKeyboardCursor->isChecked() );
1038 bGeneralOptionAltered =
true;
1042 if ( pPref->m_rubberBandCLIexecutable != rubberbandLineEdit->text() ) {
1043 pPref->m_rubberBandCLIexecutable = rubberbandLineEdit->text();
1044 bGeneralOptionAltered =
true;
1048 if ( pPref->m_brestartLash ==
true ){
1049 pPref->m_bsetLash = true ;
1052 if ( pPref->m_countOffset != sBcountOffset->value() ) {
1053 pPref->m_countOffset = sBcountOffset->value();
1054 pHydrogen->setBcOffsetAdjust();
1055 bGeneralOptionAltered =
true;
1058 if ( pPref->m_startOffset != sBstartOffset->value() ) {
1059 pPref->m_startOffset = sBstartOffset->value();
1060 pHydrogen->setBcOffsetAdjust();
1061 bGeneralOptionAltered =
true;
1064 if ( pPref->getMaxBars() != sBmaxBars->value() ) {
1065 pPref->setMaxBars( sBmaxBars->value() );
1066 bGeneralOptionAltered =
true;
1069 if ( pPref->getMaxLayers() != sBmaxLayers->value() ) {
1070 pPref->setMaxLayers( sBmaxLayers->value() );
1071 bGeneralOptionAltered =
true;
1074 if ( pPref->m_nAutosavesPerHour != autosaveSpinBox->value() ) {
1075 pPref->m_nAutosavesPerHour = autosaveSpinBox->value();
1081 QString sPreferredLanguage = languageComboBox->currentData().toString();
1083 QMessageBox::information(
this,
"Hydrogen", tr(
"Hydrogen must be restarted for language change to take effect" ));
1084 pPref->setPreferredLanguage( sPreferredLanguage );
1085 bGeneralOptionAltered =
true;
1088 if ( bGeneralOptionAltered ) {
1101 QApplication::setOverrideCursor( Qt::WaitCursor );
1102 pHydrogen->restartDrivers();
1103 QApplication::restoreOverrideCursor();
1108 pPref->savePreferences();
1836 case 0x100:
return &pColorTheme->m_windowColor;
1837 case 0x101:
return &pColorTheme->m_windowTextColor;
1838 case 0x102:
return &pColorTheme->m_baseColor;
1839 case 0x103:
return &pColorTheme->m_alternateBaseColor;
1840 case 0x104:
return &pColorTheme->m_textColor;
1841 case 0x105:
return &pColorTheme->m_buttonColor;
1842 case 0x106:
return &pColorTheme->m_buttonTextColor;
1843 case 0x107:
return &pColorTheme->m_lightColor;
1844 case 0x108:
return &pColorTheme->m_midLightColor;
1845 case 0x109:
return &pColorTheme->m_midColor;
1846 case 0x10a:
return &pColorTheme->m_darkColor;
1847 case 0x10b:
return &pColorTheme->m_shadowTextColor;
1848 case 0x10c:
return &pColorTheme->m_highlightColor;
1849 case 0x10d:
return &pColorTheme->m_highlightedTextColor;
1850 case 0x10e:
return &pColorTheme->m_selectionHighlightColor;
1851 case 0x10f:
return &pColorTheme->m_selectionInactiveColor;
1852 case 0x110:
return &pColorTheme->m_toolTipBaseColor;
1853 case 0x111:
return &pColorTheme->m_toolTipTextColor;
1854 case 0x200:
return &pColorTheme->m_widgetColor;
1855 case 0x201:
return &pColorTheme->m_widgetTextColor;
1856 case 0x202:
return &pColorTheme->m_accentColor;
1857 case 0x203:
return &pColorTheme->m_accentTextColor;
1858 case 0x204:
return &pColorTheme->m_buttonRedColor;
1859 case 0x205:
return &pColorTheme->m_buttonRedTextColor;
1860 case 0x206:
return &pColorTheme->m_spinBoxColor;
1861 case 0x207:
return &pColorTheme->m_spinBoxTextColor;
1862 case 0x208:
return &pColorTheme->m_playheadColor;
1863 case 0x209:
return &pColorTheme->m_cursorColor;
1864 case 0x300:
return &pColorTheme->m_songEditor_backgroundColor;
1865 case 0x301:
return &pColorTheme->m_songEditor_alternateRowColor;
1866 case 0x302:
return &pColorTheme->m_songEditor_virtualRowColor;
1867 case 0x303:
return &pColorTheme->m_songEditor_selectedRowColor;
1868 case 0x304:
return &pColorTheme->m_songEditor_selectedRowTextColor;
1869 case 0x305:
return &pColorTheme->m_songEditor_lineColor;
1870 case 0x306:
return &pColorTheme->m_songEditor_textColor;
1871 case 0x307:
return &pColorTheme->m_songEditor_automationBackgroundColor;
1872 case 0x308:
return &pColorTheme->m_songEditor_automationLineColor;
1873 case 0x309:
return &pColorTheme->m_songEditor_automationNodeColor;
1874 case 0x30a:
return &pColorTheme->m_songEditor_stackedModeOnColor;
1875 case 0x30b:
return &pColorTheme->m_songEditor_stackedModeOnNextColor;
1876 case 0x30c:
return &pColorTheme->m_songEditor_stackedModeOffNextColor;
1877 case 0x400:
return &pColorTheme->m_patternEditor_backgroundColor;
1878 case 0x401:
return &pColorTheme->m_patternEditor_alternateRowColor;
1879 case 0x402:
return &pColorTheme->m_patternEditor_selectedRowColor;
1880 case 0x403:
return &pColorTheme->m_patternEditor_selectedRowTextColor;
1881 case 0x404:
return &pColorTheme->m_patternEditor_octaveRowColor;
1882 case 0x405:
return &pColorTheme->m_patternEditor_textColor;
1883 case 0x406:
return &pColorTheme->m_patternEditor_noteVelocityFullColor;
1884 case 0x407:
return &pColorTheme->m_patternEditor_noteVelocityDefaultColor;
1885 case 0x408:
return &pColorTheme->m_patternEditor_noteVelocityHalfColor;
1886 case 0x409:
return &pColorTheme->m_patternEditor_noteVelocityZeroColor;
1887 case 0x40a:
return &pColorTheme->m_patternEditor_noteOffColor;
1888 case 0x40b:
return &pColorTheme->m_patternEditor_lineColor;
1889 case 0x40c:
return &pColorTheme->m_patternEditor_line1Color;
1890 case 0x40d:
return &pColorTheme->m_patternEditor_line2Color;
1891 case 0x40e:
return &pColorTheme->m_patternEditor_line3Color;
1892 case 0x40f:
return &pColorTheme->m_patternEditor_line4Color;
1893 case 0x410:
return &pColorTheme->m_patternEditor_line5Color;
1894 default:
return nullptr;
1901 std::shared_ptr<H2Core::ColorTheme> pColorTheme ) {
1903 case 0x100: pColorTheme->m_windowColor = color;
1905 case 0x101: pColorTheme->m_windowTextColor = color;
1907 case 0x102: pColorTheme->m_baseColor = color;
1909 case 0x103: pColorTheme->m_alternateBaseColor = color;
1911 case 0x104: pColorTheme->m_textColor = color;
1913 case 0x105: pColorTheme->m_buttonColor = color;
1915 case 0x106: pColorTheme->m_buttonTextColor = color;
1917 case 0x107: pColorTheme->m_lightColor = color;
1919 case 0x108: pColorTheme->m_midLightColor = color;
1921 case 0x109: pColorTheme->m_midColor = color;
1923 case 0x10a: pColorTheme->m_darkColor = color;
1925 case 0x10b: pColorTheme->m_shadowTextColor = color;
1927 case 0x10c: pColorTheme->m_highlightColor = color;
1929 case 0x10d: pColorTheme->m_highlightedTextColor = color;
1931 case 0x10e: pColorTheme->m_selectionHighlightColor = color;
1933 case 0x10f: pColorTheme->m_selectionInactiveColor = color;
1935 case 0x110: pColorTheme->m_toolTipBaseColor = color;
1937 case 0x111: pColorTheme->m_toolTipTextColor = color;
1939 case 0x200: pColorTheme->m_widgetColor = color;
1941 case 0x201: pColorTheme->m_widgetTextColor = color;
1943 case 0x202: pColorTheme->m_accentColor = color;
1945 case 0x203: pColorTheme->m_accentTextColor = color;
1947 case 0x204: pColorTheme->m_buttonRedColor = color;
1949 case 0x205: pColorTheme->m_buttonRedTextColor = color;
1951 case 0x206: pColorTheme->m_spinBoxColor = color;
1953 case 0x207: pColorTheme->m_spinBoxTextColor = color;
1955 case 0x208: pColorTheme->m_playheadColor = color;
1957 case 0x209: pColorTheme->m_cursorColor = color;
1959 case 0x300: pColorTheme->m_songEditor_backgroundColor = color;
1961 case 0x301: pColorTheme->m_songEditor_alternateRowColor = color;
1963 case 0x302: pColorTheme->m_songEditor_virtualRowColor = color;
1965 case 0x303: pColorTheme->m_songEditor_selectedRowColor = color;
1967 case 0x304: pColorTheme->m_songEditor_selectedRowTextColor = color;
1969 case 0x305: pColorTheme->m_songEditor_lineColor = color;
1971 case 0x306: pColorTheme->m_songEditor_textColor = color;
1973 case 0x307: pColorTheme->m_songEditor_automationBackgroundColor = color;
1975 case 0x308: pColorTheme->m_songEditor_automationLineColor = color;
1977 case 0x309: pColorTheme->m_songEditor_automationNodeColor = color;
1979 case 0x30a: pColorTheme->m_songEditor_stackedModeOnColor = color;
1981 case 0x30b: pColorTheme->m_songEditor_stackedModeOnNextColor = color;
1983 case 0x30c: pColorTheme->m_songEditor_stackedModeOffNextColor = color;
1985 case 0x400: pColorTheme->m_patternEditor_backgroundColor = color;
1987 case 0x401: pColorTheme->m_patternEditor_alternateRowColor = color;
1989 case 0x402: pColorTheme->m_patternEditor_selectedRowColor = color;
1991 case 0x403: pColorTheme->m_patternEditor_selectedRowTextColor = color;
1993 case 0x404: pColorTheme->m_patternEditor_octaveRowColor = color;
1995 case 0x405: pColorTheme->m_patternEditor_textColor = color;
1997 case 0x406: pColorTheme->m_patternEditor_noteVelocityFullColor = color;
1999 case 0x407: pColorTheme->m_patternEditor_noteVelocityDefaultColor = color;
2001 case 0x408: pColorTheme->m_patternEditor_noteVelocityHalfColor = color;
2003 case 0x409: pColorTheme->m_patternEditor_noteVelocityZeroColor = color;
2005 case 0x40a: pColorTheme->m_patternEditor_noteOffColor = color;
2007 case 0x40b: pColorTheme->m_patternEditor_lineColor = color;
2009 case 0x40c: pColorTheme->m_patternEditor_line1Color = color;
2011 case 0x40d: pColorTheme->m_patternEditor_line2Color = color;
2013 case 0x40e: pColorTheme->m_patternEditor_line3Color = color;
2015 case 0x40f: pColorTheme->m_patternEditor_line4Color = color;
2017 case 0x410: pColorTheme->m_patternEditor_line5Color = color;