Skip to content

Commit 39ef90e

Browse files
committed
Implement #27869: Recall transpose options
* Stores TransposeOptions as static variable of TransposeDialog. * When applying transpose, saves used options to that static variable * Only applies to mode, direction and interval (there is more complex logic in initialization for other fields)
1 parent ece2c0a commit 39ef90e

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

src/notation/view/widgets/transposedialog.cpp

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

207237
void 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+
}

src/notation/view/widgets/transposedialog.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class TransposeDialog : public QDialog, Ui::TransposeDialogBase, public muse::In
3737
muse::Inject<context::IGlobalContext> context = { this };
3838

3939
public:
40+
4041
TransposeDialog(QWidget* parent = 0);
4142

4243
private slots:
@@ -64,9 +65,20 @@ private slots:
6465
int transposeInterval() const;
6566
TransposeDirection direction() const;
6667
TransposeMode mode() const;
68+
69+
void setMode(TransposeMode& mode);
70+
6771
void setKey(Key k);
6872
bool useDoubleSharpsFlats() const;
6973

74+
void setDirection(TransposeDirection direction);
75+
76+
void setInterval(int interval);
77+
78+
void restorePreviousSettings();
79+
80+
static TransposeOptions& lastUsedOptions();
81+
7082
bool m_allSelected = false;
7183
};
7284
}

0 commit comments

Comments
 (0)