@@ -62,7 +62,7 @@ TransposeDialog::TransposeDialog(QWidget* parent)
6262 });
6363 setEnableTransposeChordNames (hasChordNames);
6464
65- setKey ( firstPitchedStaffKey () );
65+ restorePreviousState ( );
6666
6767 connect (this , &TransposeDialog::accepted, this , &TransposeDialog::apply);
6868
@@ -147,7 +147,6 @@ void TransposeDialog::setEnableTransposeToKey(bool val)
147147void TransposeDialog::setEnableTransposeChordNames (bool val)
148148{
149149 transposeChordNames->setEnabled (val);
150- transposeChordNames->setChecked (val);
151150}
152151
153152// ---------------------------------------------------------
@@ -219,6 +218,8 @@ void TransposeDialog::apply()
219218 options.needTransposeChordNames = getTransposeChordNames ();
220219 options.needTransposeDoubleSharpsFlats = useDoubleSharpsFlats ();
221220
221+ saveState ();
222+
222223 interaction ()->transpose (options);
223224
224225 MScoreErrorsController (iocContext ()).checkAndShowMScoreError ();
@@ -228,39 +229,6 @@ void TransposeDialog::apply()
228229 }
229230}
230231
231- Key TransposeDialog::firstPitchedStaffKey () const
232- {
233- mu::engraving::staff_idx_t startStaffIdx = 0 ;
234- mu::engraving::staff_idx_t endStaffIdx = 0 ;
235- Fraction startTick = Fraction (0 , 1 );
236- INotationSelectionRangePtr range = selection ()->range ();
237-
238- if (selection ()->isRange ()) {
239- startStaffIdx = range->startStaffIndex ();
240- endStaffIdx = range->endStaffIndex ();
241- startTick = range->startTick ();
242- }
243-
244- Key key = Key::C;
245-
246- muse::async::NotifyList<const Part*> partList = notation ()->parts ()->partList ();
247- for (const Part* part : partList) {
248- for (const Staff* staff : part->staves ()) {
249- if (staff->idx () < startStaffIdx || staff->idx () > endStaffIdx) {
250- continue ;
251- }
252-
253- if (staff->isPitchedStaff (startTick)) {
254- key = staff->concertKey (startTick);
255-
256- break ;
257- }
258- }
259- }
260-
261- return key;
262- }
263-
264232void TransposeDialog::setEnableTransposeKeys (bool val)
265233{
266234 transposeKeys->setEnabled (val);
@@ -290,12 +258,62 @@ int TransposeDialog::transposeInterval() const
290258 : degreeList->currentIndex () + 1 ;
291259}
292260
293- void TransposeDialog::setKey (Key k)
261+ bool TransposeDialog::useDoubleSharpsFlats () const
294262{
295- keyList-> setCurrentIndex ( int (k) + 7 ) ;
263+ return accidentalOptions-> currentIndex () == 1 ;
296264}
297265
298- bool TransposeDialog::useDoubleSharpsFlats () const
266+ TransposeDialogState& TransposeDialog::previousState ()
299267{
300- return accidentalOptions->currentIndex () == 1 ;
268+ static TransposeDialogState options;
269+ return options;
270+ }
271+
272+ void TransposeDialog::restorePreviousState ()
273+ {
274+ const TransposeDialogState& state = previousState ();
275+
276+ chromaticBox->setChecked (state.chromaticChecked );
277+ diatonicBox->setChecked (!state.chromaticChecked );
278+
279+ transposeByKey->setChecked (state.transposeByKeyChecked );
280+ transposeByInterval->setChecked (!state.transposeByKeyChecked );
281+
282+ keyList->setCurrentIndex (state.keyListIdx );
283+ closestKey->setChecked (state.closestKeyChecked );
284+ upKey->setChecked (state.upKeyChecked );
285+ downKey->setChecked (!state.closestKeyChecked && !state.upKeyChecked );
286+
287+ intervalList->setCurrentIndex (state.chromaticIntervalIdx );
288+ upInterval->setChecked (state.upIntervalChecked );
289+ downInterval->setChecked (!state.upIntervalChecked );
290+
291+ transposeKeys->setChecked (state.needTransposeKeysChecked );
292+
293+ degreeList->setCurrentIndex (state.diatonicIntervalIdx );
294+ upDiatonic->setChecked (state.upDiatonicChecked );
295+ downDiatonic->setChecked (!state.upDiatonicChecked );
296+ keepDegreeAlterations->setChecked (state.keepDegreeAlterationsChecked );
297+
298+ transposeChordNames->setChecked (state.needTransposeChordNamesChecked );
299+ accidentalOptions->setCurrentIndex (state.needTransposeDoubleSharpsFlatsIdx );
300+ }
301+
302+ void TransposeDialog::saveState ()
303+ {
304+ TransposeDialogState& state = previousState ();
305+
306+ state.chromaticChecked = chromaticBox->isChecked ();
307+ state.transposeByKeyChecked = transposeByKey->isChecked ();
308+ state.closestKeyChecked = closestKey->isChecked ();
309+ state.upKeyChecked = upKey->isChecked ();
310+ state.keyListIdx = keyList->currentIndex ();
311+ state.upIntervalChecked = upInterval->isChecked ();
312+ state.chromaticIntervalIdx = intervalList->currentIndex ();
313+ state.upDiatonicChecked = upDiatonic->isChecked ();
314+ state.diatonicIntervalIdx = degreeList->currentIndex ();
315+ state.keepDegreeAlterationsChecked = keepDegreeAlterations->isChecked ();
316+ state.needTransposeKeysChecked = transposeKeys->isChecked ();
317+ state.needTransposeChordNamesChecked = transposeChordNames->isChecked ();
318+ state.needTransposeDoubleSharpsFlatsIdx = accidentalOptions->currentIndex ();
301319}
0 commit comments