Mercurial > hg > svgui
diff widgets/RangeInputDialog.cpp @ 188:dd573e090eed
* Add range input dialog
* Make Panner support middle-click/ctrl-left-click to reset and emit
doubleClicked when doubleClicked instead of resetting
* Use range input dialog to enter new values for panner on double-click
author | Chris Cannam |
---|---|
date | Fri, 12 Jan 2007 21:52:56 +0000 |
parents | |
children | 4edaff85875d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgets/RangeInputDialog.cpp Fri Jan 12 21:52:56 2007 +0000 @@ -0,0 +1,134 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2007 QMUL. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "RangeInputDialog.h" + +#include <QDoubleSpinBox> +#include <QGridLayout> +#include <QLabel> +#include <QHBoxLayout> +#include <QPushButton> + +RangeInputDialog::RangeInputDialog(QString title, QString message, + QString unit, float min, float max, + QWidget *parent) : + QDialog(parent) +{ + QGridLayout *grid = new QGridLayout; + setLayout(grid); + + setWindowTitle(title); + + QLabel *messageLabel = new QLabel; + messageLabel->setText(message); + grid->addWidget(messageLabel, 0, 0, 1, 5); + + m_rangeStart = new QDoubleSpinBox; + m_rangeStart->setDecimals(4); + m_rangeStart->setMinimum(min); + m_rangeStart->setMaximum(max); + m_rangeStart->setSuffix(unit); + grid->addWidget(m_rangeStart, 1, 1); + connect(m_rangeStart, SIGNAL(valueChanged(double)), + this, SLOT(rangeStartChanged(double))); + + grid->addWidget(new QLabel(tr(" to ")), 1, 2); + + m_rangeEnd = new QDoubleSpinBox; + m_rangeEnd->setDecimals(4); + m_rangeEnd->setMinimum(min); + m_rangeEnd->setMaximum(max); + m_rangeEnd->setSuffix(unit); + grid->addWidget(m_rangeEnd, 1, 3); + connect(m_rangeEnd, SIGNAL(valueChanged(double)), + this, SLOT(rangeEndChanged(double))); + + QHBoxLayout *hbox = new QHBoxLayout; + grid->addLayout(hbox, 2, 0, 1, 5); + + QPushButton *ok = new QPushButton(tr("OK"), this); + ok->setDefault(true); + + QPushButton *cancel = new QPushButton(tr("Cancel"), this); + + QSize bs = ok->sizeHint().expandedTo(cancel->sizeHint()); + ok->setFixedSize(bs); + cancel->setFixedSize(bs); + + hbox->addStretch(); + hbox->addWidget(ok); + hbox->addWidget(cancel); + + QObject::connect(ok, SIGNAL(clicked()), this, SLOT(accept())); + QObject::connect(cancel, SIGNAL(clicked()), this, SLOT(reject())); +} + +RangeInputDialog::~RangeInputDialog() +{ +} + +void +RangeInputDialog::getRange(float &min, float &max) +{ + min = float(m_rangeStart->value()); + max = float(m_rangeEnd->value()); + + if (min > max) { + float tmp = min; + min = max; + max = tmp; + } +} + +void +RangeInputDialog::setRange(float start, float end) +{ + if (start > end) { + float tmp = start; + start = end; + end = tmp; + } + + blockSignals(true); + m_rangeStart->setValue(start); + m_rangeEnd->setValue(end); + blockSignals(false); +} + +void +RangeInputDialog::rangeStartChanged(double min) +{ + double max = m_rangeEnd->value(); + if (min > max) { + double tmp = min; + min = max; + max = tmp; + } + emit rangeChanged(float(min), float(max)); +} + + +void +RangeInputDialog::rangeEndChanged(double max) +{ + double min = m_rangeStart->value(); + if (min > max) { + double tmp = min; + min = max; + max = tmp; + } + emit rangeChanged(float(min), float(max)); +} +