lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2007 QMUL. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #include "RangeInputDialog.h" lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: RangeInputDialog::RangeInputDialog(QString title, QString message, lbajardsilogic@0: QString unit, float min, float max, lbajardsilogic@0: QWidget *parent) : lbajardsilogic@0: QDialog(parent) lbajardsilogic@0: { lbajardsilogic@0: QGridLayout *grid = new QGridLayout; lbajardsilogic@0: setLayout(grid); lbajardsilogic@0: lbajardsilogic@0: setWindowTitle(title); lbajardsilogic@0: lbajardsilogic@0: QLabel *messageLabel = new QLabel; lbajardsilogic@0: messageLabel->setText(message); lbajardsilogic@0: grid->addWidget(messageLabel, 0, 0, 1, 5); lbajardsilogic@0: lbajardsilogic@0: m_rangeStart = new QDoubleSpinBox; lbajardsilogic@0: m_rangeStart->setDecimals(4); lbajardsilogic@0: m_rangeStart->setMinimum(min); lbajardsilogic@0: m_rangeStart->setMaximum(max); lbajardsilogic@0: m_rangeStart->setSuffix(unit); lbajardsilogic@0: grid->addWidget(m_rangeStart, 1, 1); lbajardsilogic@0: connect(m_rangeStart, SIGNAL(valueChanged(double)), lbajardsilogic@0: this, SLOT(rangeStartChanged(double))); lbajardsilogic@0: lbajardsilogic@0: grid->addWidget(new QLabel(tr(" to ")), 1, 2); lbajardsilogic@0: lbajardsilogic@0: m_rangeEnd = new QDoubleSpinBox; lbajardsilogic@0: m_rangeEnd->setDecimals(4); lbajardsilogic@0: m_rangeEnd->setMinimum(min); lbajardsilogic@0: m_rangeEnd->setMaximum(max); lbajardsilogic@0: m_rangeEnd->setSuffix(unit); lbajardsilogic@0: grid->addWidget(m_rangeEnd, 1, 3); lbajardsilogic@0: connect(m_rangeEnd, SIGNAL(valueChanged(double)), lbajardsilogic@0: this, SLOT(rangeEndChanged(double))); lbajardsilogic@0: lbajardsilogic@0: QHBoxLayout *hbox = new QHBoxLayout; lbajardsilogic@0: grid->addLayout(hbox, 2, 0, 1, 5); lbajardsilogic@0: lbajardsilogic@0: QPushButton *ok = new QPushButton(tr("OK"), this); lbajardsilogic@0: ok->setDefault(true); lbajardsilogic@0: lbajardsilogic@0: QPushButton *cancel = new QPushButton(tr("Cancel"), this); lbajardsilogic@0: lbajardsilogic@0: QSize bs = ok->sizeHint().expandedTo(cancel->sizeHint()); lbajardsilogic@0: ok->setFixedSize(bs); lbajardsilogic@0: cancel->setFixedSize(bs); lbajardsilogic@0: lbajardsilogic@0: hbox->addStretch(); lbajardsilogic@0: hbox->addWidget(ok); lbajardsilogic@0: hbox->addWidget(cancel); lbajardsilogic@0: lbajardsilogic@0: QObject::connect(ok, SIGNAL(clicked()), this, SLOT(accept())); lbajardsilogic@0: QObject::connect(cancel, SIGNAL(clicked()), this, SLOT(reject())); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: RangeInputDialog::~RangeInputDialog() lbajardsilogic@0: { lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RangeInputDialog::getRange(float &min, float &max) lbajardsilogic@0: { lbajardsilogic@0: min = float(m_rangeStart->value()); lbajardsilogic@0: max = float(m_rangeEnd->value()); lbajardsilogic@0: lbajardsilogic@0: if (min > max) { lbajardsilogic@0: float tmp = min; lbajardsilogic@0: min = max; lbajardsilogic@0: max = tmp; lbajardsilogic@0: } lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RangeInputDialog::setRange(float start, float end) lbajardsilogic@0: { lbajardsilogic@0: if (start > end) { lbajardsilogic@0: float tmp = start; lbajardsilogic@0: start = end; lbajardsilogic@0: end = tmp; lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: blockSignals(true); lbajardsilogic@0: m_rangeStart->setValue(start); lbajardsilogic@0: m_rangeEnd->setValue(end); lbajardsilogic@0: blockSignals(false); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RangeInputDialog::rangeStartChanged(double min) lbajardsilogic@0: { lbajardsilogic@0: double max = m_rangeEnd->value(); lbajardsilogic@0: if (min > max) { lbajardsilogic@0: double tmp = min; lbajardsilogic@0: min = max; lbajardsilogic@0: max = tmp; lbajardsilogic@0: } lbajardsilogic@0: emit rangeChanged(float(min), float(max)); lbajardsilogic@0: } lbajardsilogic@0: lbajardsilogic@0: lbajardsilogic@0: void lbajardsilogic@0: RangeInputDialog::rangeEndChanged(double max) lbajardsilogic@0: { lbajardsilogic@0: double min = m_rangeStart->value(); lbajardsilogic@0: if (min > max) { lbajardsilogic@0: double tmp = min; lbajardsilogic@0: min = max; lbajardsilogic@0: max = tmp; lbajardsilogic@0: } lbajardsilogic@0: emit rangeChanged(float(min), float(max)); lbajardsilogic@0: } lbajardsilogic@0: