Mercurial > hg > svgui
changeset 1515:0fa49a6ce64f time-frequency-boxes
Item-editing updates needed for time-frequency box layer
author | Chris Cannam |
---|---|
date | Fri, 20 Sep 2019 14:19:17 +0100 |
parents | e453053a44dc |
children | e4629d449688 |
files | layer/FlexiNoteLayer.cpp layer/NoteLayer.cpp layer/TimeFrequencyBoxLayer.cpp widgets/ItemEditDialog.cpp widgets/ItemEditDialog.h |
diffstat | 5 files changed, 105 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/layer/FlexiNoteLayer.cpp Fri Sep 20 11:25:47 2019 +0100 +++ b/layer/FlexiNoteLayer.cpp Fri Sep 20 14:19:17 2019 +0100 @@ -1604,13 +1604,12 @@ Event note(0); if (!getPointToDrag(v, e->x(), e->y(), note)) return false; -// Event note = *points.begin(); - ItemEditDialog *dialog = new ItemEditDialog (model->getSampleRate(), ItemEditDialog::ShowTime | ItemEditDialog::ShowDuration | ItemEditDialog::ShowValue | + ItemEditDialog::ShowLevel | ItemEditDialog::ShowText, getScaleUnits());
--- a/layer/NoteLayer.cpp Fri Sep 20 11:25:47 2019 +0100 +++ b/layer/NoteLayer.cpp Fri Sep 20 14:19:17 2019 +0100 @@ -1062,13 +1062,12 @@ Event note(0); if (!getPointToDrag(v, e->x(), e->y(), note)) return false; -// Event note = *points.begin(); - ItemEditDialog *dialog = new ItemEditDialog (model->getSampleRate(), ItemEditDialog::ShowTime | ItemEditDialog::ShowDuration | ItemEditDialog::ShowValue | + ItemEditDialog::ShowLevel | ItemEditDialog::ShowText, getScaleUnits());
--- a/layer/TimeFrequencyBoxLayer.cpp Fri Sep 20 11:25:47 2019 +0100 +++ b/layer/TimeFrequencyBoxLayer.cpp Fri Sep 20 14:19:17 2019 +0100 @@ -939,16 +939,24 @@ Event region(0); if (!getPointToDrag(v, e->x(), e->y(), region)) return false; + ItemEditDialog::LabelOptions labelOptions; + labelOptions.valueLabel = tr("Minimum Frequency"); + labelOptions.levelLabel = tr("Frequency Extent"); + labelOptions.valueUnits = getScaleUnits(); + labelOptions.levelUnits = getScaleUnits(); + ItemEditDialog *dialog = new ItemEditDialog (model->getSampleRate(), ItemEditDialog::ShowTime | ItemEditDialog::ShowDuration | ItemEditDialog::ShowValue | + ItemEditDialog::ShowLevel | ItemEditDialog::ShowText, - getScaleUnits()); + labelOptions); dialog->setFrameTime(region.getFrame()); dialog->setValue(region.getValue()); + dialog->setLevel(region.getLevel()); dialog->setFrameDuration(region.getDuration()); dialog->setText(region.getLabel()); @@ -957,6 +965,7 @@ Event newTimeFrequencyBox = region .withFrame(dialog->getFrameTime()) .withValue(dialog->getValue()) + .withLevel(dialog->getLevel()) .withDuration(dialog->getFrameDuration()) .withLabel(dialog->getText()); @@ -1143,12 +1152,11 @@ void TimeFrequencyBoxLayer::toXml(QTextStream &stream, - QString indent, QString extraAttributes) const + QString indent, QString extraAttributes) const { QString s; - s += QString("verticalScale=\"%1\" ") - .arg(m_verticalScale); + s += QString("verticalScale=\"%1\" ").arg(m_verticalScale); SingleColourLayer::toXml(stream, indent, extraAttributes + " " + s); }
--- a/widgets/ItemEditDialog.cpp Fri Sep 20 11:25:47 2019 +0100 +++ b/widgets/ItemEditDialog.cpp Fri Sep 20 14:19:17 2019 +0100 @@ -28,13 +28,30 @@ #include <float.h> // for FLT_MIN/MAX +ItemEditDialog::LabelOptions::LabelOptions() : + valueLabel(tr("Value")), + levelLabel(tr("Level")) +{ +} + ItemEditDialog::ItemEditDialog(sv_samplerate_t sampleRate, int options, - QString valueUnits, QWidget *parent) : + QString scaleUnits, QWidget *parent) : + ItemEditDialog(sampleRate, options, + [] (QString units) { + ItemEditDialog::LabelOptions options; + options.valueUnits = units; + return options; + }(scaleUnits), + parent) {}; + +ItemEditDialog::ItemEditDialog(sv_samplerate_t sampleRate, int options, + LabelOptions labelOptions, QWidget *parent) : QDialog(parent), m_sampleRate(sampleRate), m_defaultFrame(0), m_defaultDuration(0), m_defaultValue(0), + m_defaultLevel(0), m_frameTimeSpinBox(nullptr), m_realTimeSecsSpinBox(nullptr), m_realTimeUSecsSpinBox(nullptr), @@ -42,6 +59,7 @@ m_realDurationSecsSpinBox(nullptr), m_realDurationUSecsSpinBox(nullptr), m_valueSpinBox(nullptr), + m_levelSpinBox(nullptr), m_textField(nullptr) { QGridLayout *grid = new QGridLayout; @@ -129,7 +147,9 @@ ++subrow; } - if ((options & ShowValue) || (options & ShowText)) { + if ((options & ShowValue) || + (options & ShowLevel) || + (options & ShowText)) { valueBox = new QGroupBox; valueBox->setTitle(tr("Properties")); @@ -145,10 +165,11 @@ if (options & ShowValue) { - subgrid->addWidget(new QLabel(tr("Value:")), subrow, 0); + subgrid->addWidget(new QLabel(tr("%1:").arg(labelOptions.valueLabel)), + subrow, 0); m_valueSpinBox = new QDoubleSpinBox; - m_valueSpinBox->setSuffix(QString(" %1").arg(valueUnits)); + m_valueSpinBox->setSuffix(QString(" %1").arg(labelOptions.valueUnits)); m_valueSpinBox->setDecimals(10); m_valueSpinBox->setMinimum(-1e10); m_valueSpinBox->setMaximum(1e10); @@ -159,6 +180,23 @@ ++subrow; } + if (options & ShowLevel) { + + subgrid->addWidget(new QLabel(tr("%1:").arg(labelOptions.levelLabel)), + subrow, 0); + + m_levelSpinBox = new QDoubleSpinBox; + m_levelSpinBox->setSuffix(QString(" %1").arg(labelOptions.levelUnits)); + m_levelSpinBox->setDecimals(10); + m_levelSpinBox->setMinimum(-1e10); + m_levelSpinBox->setMaximum(1e10); + connect(m_levelSpinBox, SIGNAL(levelChanged(double)), + this, SLOT(levelChanged(double))); + subgrid->addWidget(m_levelSpinBox, subrow, 1); + + ++subrow; + } + if (options & ShowText) { subgrid->addWidget(new QLabel(tr("Text:")), subrow, 0); @@ -175,6 +213,8 @@ m_textField->setFocus(Qt::OtherFocusReason); } else if (options & ShowValue) { m_valueSpinBox->setFocus(Qt::OtherFocusReason); + } else if (options & ShowLevel) { + m_levelSpinBox->setFocus(Qt::OtherFocusReason); } QDialogButtonBox *bb = new QDialogButtonBox(Qt::Horizontal); @@ -271,6 +311,22 @@ } void +ItemEditDialog::setLevel(float v) +{ + if (!m_levelSpinBox) return; + + m_levelSpinBox->setValue(v); + m_defaultLevel = v; + m_resetButton->setEnabled(false); +} + +float +ItemEditDialog::getLevel() const +{ + return float(m_levelSpinBox->value()); +} + +void ItemEditDialog::setText(QString text) { if (!m_textField) return; @@ -363,6 +419,12 @@ } void +ItemEditDialog::levelChanged(double) +{ + m_resetButton->setEnabled(true); +} + +void ItemEditDialog::textChanged(QString) { m_resetButton->setEnabled(true); @@ -374,6 +436,7 @@ setFrameTime(m_defaultFrame); setFrameDuration(m_defaultDuration); setValue(m_defaultValue); + setLevel(m_defaultLevel); setText(m_defaultText); m_resetButton->setEnabled(false); }
--- a/widgets/ItemEditDialog.h Fri Sep 20 11:25:47 2019 +0100 +++ b/widgets/ItemEditDialog.h Fri Sep 20 14:19:17 2019 +0100 @@ -34,10 +34,26 @@ ShowTime = 1 << 0, ShowDuration = 1 << 1, ShowValue = 1 << 2, - ShowText = 1 << 3 + ShowText = 1 << 3, + ShowLevel = 1 << 4 }; - ItemEditDialog(sv_samplerate_t sampleRate, int options, QString valueUnits = "", + struct LabelOptions { + LabelOptions(); + QString valueLabel; + QString levelLabel; + QString valueUnits; + QString levelUnits; + }; + + ItemEditDialog(sv_samplerate_t sampleRate, + int options, + LabelOptions labelOptions = {}, + QWidget *parent = 0); + + ItemEditDialog(sv_samplerate_t sampleRate, + int options, + QString scaleUnits, QWidget *parent = 0); void setFrameTime(sv_frame_t frame); @@ -55,6 +71,9 @@ void setValue(float value); float getValue() const; + void setLevel(float level); + float getLevel() const; + void setText(QString text); QString getText() const; @@ -66,6 +85,7 @@ void realDurationSecsChanged(int); void realDurationUSecsChanged(int); void valueChanged(double); + void levelChanged(double); void textChanged(QString); void reset(); @@ -74,6 +94,7 @@ sv_frame_t m_defaultFrame; sv_frame_t m_defaultDuration; float m_defaultValue; + float m_defaultLevel; QString m_defaultText; QSpinBox *m_frameTimeSpinBox; QSpinBox *m_realTimeSecsSpinBox; @@ -82,6 +103,7 @@ QSpinBox *m_realDurationSecsSpinBox; QSpinBox *m_realDurationUSecsSpinBox; QDoubleSpinBox *m_valueSpinBox; + QDoubleSpinBox *m_levelSpinBox; QLineEdit *m_textField; QPushButton *m_resetButton; };