@@ -60,6 +60,7 @@ TransposeDialog::TransposeDialog(QWidget* parent)
6060 setEnableTransposeChordNames (hasChordNames);
6161
6262 setKey (firstPitchedStaffKey ());
63+ restorePreviousSettings ();
6364
6465 connect (this , &TransposeDialog::accepted, this , &TransposeDialog::apply);
6566
@@ -126,6 +127,35 @@ TransposeMode TransposeDialog::mode() const
126127 : TransposeMode::DIATONICALLY;
127128}
128129
130+ void TransposeDialog::setMode (TransposeMode& mode)
131+ {
132+ // revert the logic of getter
133+ switch (mode) {
134+ case TransposeMode::TO_KEY: {
135+ chromaticBox->setChecked (true );
136+ diatonicBox->setChecked (false );
137+ transposeByKey->setChecked (true );
138+ transposeByInterval->setChecked (false );
139+ break ;
140+ }
141+ case TransposeMode::BY_INTERVAL: {
142+ chromaticBox->setChecked (true );
143+ diatonicBox->setChecked (false );
144+ transposeByKey->setChecked (false );
145+ transposeByInterval->setChecked (true );
146+ break ;
147+ }
148+ case TransposeMode::DIATONICALLY: {
149+ chromaticBox->setChecked (false );
150+ diatonicBox->setChecked (true );
151+ break ;
152+ }
153+ default :
154+ {
155+ }
156+ }
157+ }
158+
129159// ---------------------------------------------------------
130160// enableTransposeByKey
131161// ---------------------------------------------------------
@@ -206,7 +236,7 @@ INotationSelectionPtr TransposeDialog::selection() const
206236
207237void TransposeDialog::apply ()
208238{
209- TransposeOptions options;
239+ TransposeOptions& options = lastUsedOptions () ;
210240
211241 options.mode = mode ();
212242 options.direction = direction ();
@@ -293,3 +323,51 @@ bool TransposeDialog::useDoubleSharpsFlats() const
293323{
294324 return accidentalOptions->currentIndex () == 1 ;
295325}
326+
327+ void TransposeDialog::setDirection (TransposeDirection direction)
328+ {
329+ switch (mode ()) {
330+ case TransposeMode::TO_KEY: {
331+ if (direction == TransposeDirection::CLOSEST) {
332+ closestKey->setChecked (true );
333+ } else {
334+ upKey->setChecked (direction == TransposeDirection::UP);
335+ }
336+ break ;
337+ }
338+ case TransposeMode::BY_INTERVAL: {
339+ upInterval->setChecked (direction == TransposeDirection::UP);
340+ break ;
341+ }
342+ case TransposeMode::DIATONICALLY: {
343+ upDiatonic->setChecked (direction == TransposeDirection::UP);
344+ break ;
345+ }
346+ default : {
347+ }
348+ }
349+ }
350+
351+ void TransposeDialog::setInterval (int interval)
352+ {
353+ if (chromaticBox->isChecked ()) {
354+ intervalList->setCurrentIndex (interval);
355+ } else {
356+ degreeList->setCurrentIndex (interval - 1 );
357+ }
358+ }
359+
360+ void TransposeDialog::restorePreviousSettings ()
361+ {
362+ TransposeOptions& options = lastUsedOptions ();
363+
364+ setMode (options.mode );
365+ setDirection (options.direction );
366+ setInterval (options.interval );
367+ }
368+
369+ TransposeOptions& TransposeDialog::lastUsedOptions ()
370+ {
371+ static TransposeOptions options;
372+ return options;
373+ }
0 commit comments