# HG changeset patch # User Chris Cannam # Date 1418659706 0 # Node ID 78ae34f388f63dec2c5d8d9410407293358ebca5 # Parent af63372e90021085ab50f9a8d09fcd1f25e5beff Tidy up layout and ranges for unit conversion dialog, highlight in red any out-of-range values diff -r af63372e9002 -r 78ae34f388f6 widgets/UnitConverter.cpp --- a/widgets/UnitConverter.cpp Tue Dec 09 13:53:44 2014 +0000 +++ b/widgets/UnitConverter.cpp Mon Dec 15 16:08:26 2014 +0000 @@ -59,7 +59,7 @@ m_freq->setMaximum(1e6); m_freq->setValue(440); connect(m_freq, SIGNAL(valueChanged(double)), - this, SLOT(freqChanged(double))); + this, SLOT(freqChanged())); // The min and max range values for all the remaining controls are // determined by the min and max Hz above @@ -68,20 +68,20 @@ m_midi->setMinimum(-156); m_midi->setMaximum(203); connect(m_midi, SIGNAL(valueChanged(int)), - this, SLOT(midiChanged(int))); + this, SLOT(midiChanged())); m_note = new QComboBox; for (int i = 0; i < 12; ++i) { m_note->addItem(pianoNotes[i]); } connect(m_note, SIGNAL(currentIndexChanged(int)), - this, SLOT(noteChanged(int))); + this, SLOT(noteChanged())); m_octave = new QSpinBox; m_octave->setMinimum(-14); m_octave->setMaximum(15); connect(m_octave, SIGNAL(valueChanged(int)), - this, SLOT(octaveChanged(int))); + this, SLOT(octaveChanged())); m_cents = new QDoubleSpinBox; m_cents->setSuffix(tr(" cents")); @@ -89,9 +89,17 @@ m_cents->setMinimum(-50); m_cents->setMaximum(50); connect(m_cents, SIGNAL(valueChanged(double)), - this, SLOT(centsChanged(double))); + this, SLOT(centsChanged())); - int row = 1; + int row = 0; + + grid->addWidget(new QLabel(tr("In 12-tone Equal Temperament:")), row, 0, 1, 9); + + ++row; + + grid->setRowMinimumHeight(row, 8); + + ++row; grid->addWidget(m_freq, row, 0, 2, 1, Qt::AlignRight | Qt::AlignVCenter); grid->addWidget(new QLabel(tr("=")), row, 1, 2, 1, Qt::AlignHCenter | Qt::AlignVCenter); @@ -111,6 +119,11 @@ ++row; + grid->setRowStretch(row, 20); + grid->setRowMinimumHeight(row, 8); + + ++row; + m_pitchPrefsLabel = new QLabel; grid->addWidget(m_pitchPrefsLabel, row, 0, 1, 9); @@ -131,21 +144,21 @@ m_samples = new QDoubleSpinBox; m_samples->setSuffix(QString(" samples")); - m_samples->setDecimals(3); - m_samples->setMinimum(2); - m_samples->setMaximum(1e10); + m_samples->setDecimals(2); + m_samples->setMinimum(1); + m_samples->setMaximum(1e8); m_samples->setValue(22050); connect(m_samples, SIGNAL(valueChanged(double)), - this, SLOT(samplesChanged(double))); + this, SLOT(samplesChanged())); m_period = new QDoubleSpinBox; m_period->setSuffix(QString(" ms")); m_period->setDecimals(4); - m_period->setMinimum(1e-10); - m_period->setMaximum(1000); + m_period->setMinimum(1e-3); + m_period->setMaximum(100000); m_period->setValue(500); connect(m_period, SIGNAL(valueChanged(double)), - this, SLOT(periodChanged(double))); + this, SLOT(periodChanged())); m_bpm = new QDoubleSpinBox; m_bpm->setSuffix(QString(" bpm")); @@ -154,16 +167,17 @@ m_bpm->setMaximum(1e6); m_bpm->setValue(120); connect(m_bpm, SIGNAL(valueChanged(double)), - this, SLOT(bpmChanged(double))); + this, SLOT(bpmChanged())); m_tempofreq = new QDoubleSpinBox; m_tempofreq->setSuffix(QString(" beats/sec")); m_tempofreq->setDecimals(4); - m_tempofreq->setMinimum(1e-4); - m_tempofreq->setMaximum(1e6); + m_tempofreq->setMinimum(1e-3); + m_tempofreq->setMaximum(1e5); m_tempofreq->setValue(0.5); + connect(m_tempofreq, SIGNAL(valueChanged(double)), - this, SLOT(tempofreqChanged(double))); + this, SLOT(tempofreqChanged())); m_samplerate = new QComboBox; QList rates; @@ -174,33 +188,40 @@ foreach (int r, rates) { m_samplerate->addItem(QString("%1 Hz").arg(r)); } - connect(m_samplerate, SIGNAL(currentItemChanged(QString)), - this, SLOT(samplerateChanged(QString))); + connect(m_samplerate, SIGNAL(currentIndexChanged(int)), + this, SLOT(samplerateChanged())); m_samplerate->setCurrentText("44100 Hz"); connect(Preferences::getInstance(), SIGNAL(propertyChanged(PropertyContainer::PropertyName)), this, SLOT(preferenceChanged(PropertyContainer::PropertyName))); - row = 1; + row = 0; - grid->addWidget(new QLabel(tr("Beat period")), row, 0); + grid->setRowStretch(row, 20); + grid->setRowMinimumHeight(row, 8); + + ++row; + + grid->addWidget(new QLabel(tr("Beat period")), row, 0, 2, 1, Qt::AlignVCenter); + grid->addWidget(m_period, row, 1); + grid->addWidget(new QLabel(tr("=")), row, 2, 2, 1, Qt::AlignVCenter); + + grid->addWidget(m_tempofreq, row, 3); + + grid->addWidget(new QLabel(tr("at")), row, 4, 2, 1, Qt::AlignVCenter); + grid->addWidget(m_samplerate, row, 5, 2, 1, Qt::AlignVCenter); + + ++row; + grid->addWidget(m_samples, row, 1); - grid->addWidget(new QLabel(tr("=")), row, 2); - - grid->addWidget(new QLabel(tr("at sample rate")), row, 4); - grid->addWidget(m_samplerate, row, 5); - grid->addWidget(m_bpm, row, 3); ++row; - grid->addWidget(m_period, row, 3); - - ++row; + grid->setRowStretch(row, 20); + grid->setRowMinimumHeight(row, 8); - grid->addWidget(m_tempofreq, row, 3); - updatePitchesFromFreq(); updatePitchPrefsLabel(); updateTempiFromSamples(); @@ -211,6 +232,36 @@ } void +UnitConverter::setTo(QSpinBox *box, int value) +{ + box->blockSignals(true); + if (value < box->minimum() || value > box->maximum()) { + QPalette p; + p.setColor(QPalette::Text, Qt::red); + box->setPalette(p); + } else { + box->setPalette(QPalette()); + } + box->setValue(value); + box->blockSignals(false); +} + +void +UnitConverter::setTo(QDoubleSpinBox *box, double value) +{ + box->blockSignals(true); + if (value < box->minimum() || value > box->maximum()) { + QPalette p; + p.setColor(QPalette::Text, Qt::red); + box->setPalette(p); + } else { + box->setPalette(QPalette()); + } + box->setValue(value); + box->blockSignals(false); +} + +void UnitConverter::preferenceChanged(PropertyContainer::PropertyName) { updatePitchesFromFreq(); @@ -229,49 +280,40 @@ } void -UnitConverter::freqChanged(double freq) +UnitConverter::freqChanged() { - cerr << "freqChanged: " << freq << endl; updatePitchesFromFreq(); } void -UnitConverter::midiChanged(int midi) +UnitConverter::midiChanged() { - cerr << "midiChanged: " << midi << endl; double freq = Pitch::getFrequencyForPitch(m_midi->value(), m_cents->value()); - cerr << "freq -> " << freq << endl; m_freq->setValue(freq); } void -UnitConverter::noteChanged(int note) +UnitConverter::noteChanged() { - cerr << "noteChanged: " << note << endl; int pitch = Pitch::getPitchForNoteAndOctave(m_note->currentIndex(), m_octave->value()); double freq = Pitch::getFrequencyForPitch(pitch, m_cents->value()); - cerr << "freq -> " << freq << endl; m_freq->setValue(freq); } void -UnitConverter::octaveChanged(int oct) +UnitConverter::octaveChanged() { - cerr << "octaveChanged: " << oct << endl; int pitch = Pitch::getPitchForNoteAndOctave(m_note->currentIndex(), m_octave->value()); double freq = Pitch::getFrequencyForPitch(pitch, m_cents->value()); - cerr << "freq -> " << freq << endl; m_freq->setValue(freq); } void -UnitConverter::centsChanged(double cents) +UnitConverter::centsChanged() { - cerr << "centsChanged: " << cents << endl; double freq = Pitch::getFrequencyForPitch(m_midi->value(), m_cents->value()); - cerr << "freq -> " << freq << endl; m_freq->setValue(freq); } @@ -284,31 +326,24 @@ Pitch::getNoteAndOctaveForPitch(pitch, note, octave); cerr << "pitch " << pitch << " note " << note << " octave " << octave << " cents " << cents << endl; - - m_midi->blockSignals(true); - m_cents->blockSignals(true); + + setTo(m_midi, pitch); + setTo(m_cents, cents); + setTo(m_octave, octave); + m_note->blockSignals(true); - m_octave->blockSignals(true); - - m_midi->setValue(pitch); - m_cents->setValue(cents); m_note->setCurrentIndex(note); - m_octave->setValue(octave); - - m_midi->blockSignals(false); - m_cents->blockSignals(false); m_note->blockSignals(false); - m_octave->blockSignals(false); } void -UnitConverter::samplesChanged(double) +UnitConverter::samplesChanged() { updateTempiFromSamples(); } void -UnitConverter::periodChanged(double) +UnitConverter::periodChanged() { double rate = getSampleRate(); double sec = m_period->value() / 1000.0; @@ -317,7 +352,7 @@ } void -UnitConverter::bpmChanged(double) +UnitConverter::bpmChanged() { double rate = getSampleRate(); double sec = 60.0 / m_bpm->value(); @@ -326,7 +361,7 @@ } void -UnitConverter::tempofreqChanged(double) +UnitConverter::tempofreqChanged() { double rate = getSampleRate(); double samples = rate / m_tempofreq->value(); @@ -334,9 +369,10 @@ } void -UnitConverter::samplerateChanged(QString) +UnitConverter::samplerateChanged() { - updateTempiFromSamples(); + // Preserve the beat period in seconds, here, not in samples + periodChanged(); } double @@ -357,17 +393,9 @@ double hz = rate / samples; double bpm = 60.0 / sec; - m_bpm->blockSignals(true); - m_period->blockSignals(true); - m_tempofreq->blockSignals(true); - - m_bpm->setValue(bpm); - m_period->setValue(sec * 1000.0); - m_tempofreq->setValue(hz); - - m_bpm->blockSignals(false); - m_period->blockSignals(false); - m_tempofreq->blockSignals(false); + setTo(m_bpm, bpm); + setTo(m_period, sec * 1000.0); + setTo(m_tempofreq, hz); } diff -r af63372e9002 -r 78ae34f388f6 widgets/UnitConverter.h --- a/widgets/UnitConverter.h Tue Dec 09 13:53:44 2014 +0000 +++ b/widgets/UnitConverter.h Mon Dec 15 16:08:26 2014 +0000 @@ -33,17 +33,17 @@ virtual ~UnitConverter(); private slots: - void freqChanged(double); - void midiChanged(int); - void noteChanged(int); - void octaveChanged(int); - void centsChanged(double); + void freqChanged(); + void midiChanged(); + void noteChanged(); + void octaveChanged(); + void centsChanged(); - void samplesChanged(double); - void periodChanged(double); - void bpmChanged(double); - void tempofreqChanged(double); - void samplerateChanged(QString); + void samplesChanged(); + void periodChanged(); + void bpmChanged(); + void tempofreqChanged(); + void samplerateChanged(); void preferenceChanged(PropertyContainer::PropertyName); @@ -65,6 +65,9 @@ void updateTempiFromSamples(); double getSampleRate(); + + void setTo(QSpinBox *, int); + void setTo(QDoubleSpinBox *, double); }; #endif