annotate widgets/ItemEditDialog.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents fc9323a41f5a
children
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 Chris Cannam.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #include "ItemEditDialog.h"
lbajardsilogic@0 17
lbajardsilogic@0 18 #include <QLineEdit>
lbajardsilogic@0 19 #include <QDoubleSpinBox>
lbajardsilogic@0 20 #include <QSpinBox>
lbajardsilogic@0 21 #include <QGridLayout>
lbajardsilogic@0 22 #include <QHBoxLayout>
lbajardsilogic@0 23 #include <QLabel>
lbajardsilogic@0 24 #include <QPushButton>
lbajardsilogic@0 25 #include <QGroupBox>
lbajardsilogic@0 26
lbajardsilogic@0 27 #include <float.h> // for FLT_MIN/MAX
lbajardsilogic@0 28
lbajardsilogic@0 29
lbajardsilogic@0 30 ItemEditDialog::ItemEditDialog(size_t sampleRate, int options,
lbajardsilogic@0 31 QString valueUnits, QWidget *parent) :
lbajardsilogic@0 32 QDialog(parent),
lbajardsilogic@0 33 m_sampleRate(sampleRate),
lbajardsilogic@0 34 m_frameTimeSpinBox(0),
lbajardsilogic@0 35 m_realTimeSecsSpinBox(0),
lbajardsilogic@0 36 m_realTimeUSecsSpinBox(0),
lbajardsilogic@0 37 m_frameDurationSpinBox(0),
lbajardsilogic@0 38 m_realDurationSecsSpinBox(0),
lbajardsilogic@0 39 m_realDurationUSecsSpinBox(0),
lbajardsilogic@0 40 m_valueSpinBox(0),
lbajardsilogic@0 41 m_textField(0)
lbajardsilogic@0 42 {
lbajardsilogic@0 43 QGridLayout *grid = new QGridLayout;
lbajardsilogic@0 44 setLayout(grid);
lbajardsilogic@0 45
lbajardsilogic@0 46 QGroupBox *timeBox = 0;
lbajardsilogic@0 47 QGroupBox *valueBox = 0;
lbajardsilogic@0 48 QGridLayout *subgrid = 0;
lbajardsilogic@0 49
lbajardsilogic@0 50 int row = 0, subrow = 0;
lbajardsilogic@0 51
lbajardsilogic@0 52 size_t singleStep = RealTime::frame2RealTime(2, sampleRate).usec() - 1;
lbajardsilogic@0 53
lbajardsilogic@0 54 if ((options & ShowTime) || (options & ShowDuration)) {
lbajardsilogic@0 55
lbajardsilogic@0 56 timeBox = new QGroupBox;
lbajardsilogic@0 57 timeBox->setTitle(tr("Timing"));
lbajardsilogic@0 58 grid->addWidget(timeBox, row, 0);
lbajardsilogic@0 59
lbajardsilogic@0 60 subgrid = new QGridLayout;
lbajardsilogic@0 61 timeBox->setLayout(subgrid);
lbajardsilogic@0 62
lbajardsilogic@0 63 ++row;
lbajardsilogic@0 64 }
lbajardsilogic@0 65
lbajardsilogic@0 66 if (options & ShowTime) {
lbajardsilogic@0 67
lbajardsilogic@0 68 subgrid->addWidget(new QLabel(tr("Time:")), subrow, 0);
lbajardsilogic@0 69
lbajardsilogic@0 70 m_frameTimeSpinBox = new QSpinBox;
lbajardsilogic@0 71 m_frameTimeSpinBox->setMaximum(INT_MAX);
lbajardsilogic@0 72 m_frameTimeSpinBox->setSuffix(tr(" frames"));
lbajardsilogic@0 73 subgrid->addWidget(m_frameTimeSpinBox, subrow, 1, 1, 2);
lbajardsilogic@0 74 connect(m_frameTimeSpinBox, SIGNAL(valueChanged(int)),
lbajardsilogic@0 75 this, SLOT(frameTimeChanged(int)));
lbajardsilogic@0 76
lbajardsilogic@0 77 ++subrow;
lbajardsilogic@0 78
lbajardsilogic@0 79 m_realTimeSecsSpinBox = new QSpinBox;
lbajardsilogic@0 80 m_realTimeSecsSpinBox->setMaximum(999999);
lbajardsilogic@0 81 m_realTimeSecsSpinBox->setSuffix(tr(" sec"));
lbajardsilogic@0 82 subgrid->addWidget(m_realTimeSecsSpinBox, subrow, 1);
lbajardsilogic@0 83 connect(m_realTimeSecsSpinBox, SIGNAL(valueChanged(int)),
lbajardsilogic@0 84 this, SLOT(realTimeSecsChanged(int)));
lbajardsilogic@0 85
lbajardsilogic@0 86 m_realTimeUSecsSpinBox = new QSpinBox;
lbajardsilogic@0 87 m_realTimeUSecsSpinBox->setMaximum(999999);
lbajardsilogic@0 88 m_realTimeUSecsSpinBox->setSuffix(tr(" usec"));
lbajardsilogic@0 89 m_realTimeUSecsSpinBox->setSingleStep(singleStep);
lbajardsilogic@0 90 subgrid->addWidget(m_realTimeUSecsSpinBox, subrow, 2);
lbajardsilogic@0 91 connect(m_realTimeUSecsSpinBox, SIGNAL(valueChanged(int)),
lbajardsilogic@0 92 this, SLOT(realTimeUSecsChanged(int)));
lbajardsilogic@0 93
lbajardsilogic@0 94 ++subrow;
lbajardsilogic@0 95 }
lbajardsilogic@0 96
lbajardsilogic@0 97 if (options & ShowDuration) {
lbajardsilogic@0 98
lbajardsilogic@0 99 subgrid->addWidget(new QLabel(tr("Duration:")), subrow, 0);
lbajardsilogic@0 100
lbajardsilogic@0 101 m_frameDurationSpinBox = new QSpinBox;
lbajardsilogic@0 102 m_frameDurationSpinBox->setMaximum(INT_MAX);
lbajardsilogic@0 103 m_frameDurationSpinBox->setSuffix(tr(" frames"));
lbajardsilogic@0 104 subgrid->addWidget(m_frameDurationSpinBox, subrow, 1, 1, 2);
lbajardsilogic@0 105 connect(m_frameDurationSpinBox, SIGNAL(valueChanged(int)),
lbajardsilogic@0 106 this, SLOT(frameDurationChanged(int)));
lbajardsilogic@0 107
lbajardsilogic@0 108 ++subrow;
lbajardsilogic@0 109
lbajardsilogic@0 110 m_realDurationSecsSpinBox = new QSpinBox;
lbajardsilogic@0 111 m_realDurationSecsSpinBox->setMaximum(999999);
lbajardsilogic@0 112 m_realDurationSecsSpinBox->setSuffix(tr(" sec"));
lbajardsilogic@0 113 subgrid->addWidget(m_realDurationSecsSpinBox, subrow, 1);
lbajardsilogic@0 114 connect(m_realDurationSecsSpinBox, SIGNAL(valueChanged(int)),
lbajardsilogic@0 115 this, SLOT(realDurationSecsChanged(int)));
lbajardsilogic@0 116
lbajardsilogic@0 117 m_realDurationUSecsSpinBox = new QSpinBox;
lbajardsilogic@0 118 m_realDurationUSecsSpinBox->setMaximum(999999);
lbajardsilogic@0 119 m_realDurationUSecsSpinBox->setSuffix(tr(" usec"));
lbajardsilogic@0 120 m_realDurationUSecsSpinBox->setSingleStep(singleStep);
lbajardsilogic@0 121 subgrid->addWidget(m_realDurationUSecsSpinBox, subrow, 2);
lbajardsilogic@0 122 connect(m_realDurationUSecsSpinBox, SIGNAL(valueChanged(int)),
lbajardsilogic@0 123 this, SLOT(realDurationUSecsChanged(int)));
lbajardsilogic@0 124
lbajardsilogic@0 125 ++subrow;
lbajardsilogic@0 126 }
lbajardsilogic@0 127
lbajardsilogic@0 128 if ((options & ShowValue) || (options & ShowText)) {
lbajardsilogic@0 129
lbajardsilogic@0 130 valueBox = new QGroupBox;
lbajardsilogic@0 131 valueBox->setTitle(tr("Properties"));
lbajardsilogic@0 132 grid->addWidget(valueBox, row, 0);
lbajardsilogic@0 133
lbajardsilogic@0 134 subgrid = new QGridLayout;
lbajardsilogic@0 135 valueBox->setLayout(subgrid);
lbajardsilogic@0 136
lbajardsilogic@0 137 ++row;
lbajardsilogic@0 138 }
lbajardsilogic@0 139
lbajardsilogic@0 140 subrow = 0;
lbajardsilogic@0 141
lbajardsilogic@0 142 if (options & ShowValue) {
lbajardsilogic@0 143
lbajardsilogic@0 144 subgrid->addWidget(new QLabel(tr("Value:")), subrow, 0);
lbajardsilogic@0 145
lbajardsilogic@0 146 m_valueSpinBox = new QDoubleSpinBox;
lbajardsilogic@0 147 m_valueSpinBox->setSuffix(QString(" %1").arg(valueUnits));
lbajardsilogic@0 148 m_valueSpinBox->setDecimals(10);
lbajardsilogic@0 149 m_valueSpinBox->setMinimum(-1e100);
lbajardsilogic@0 150 m_valueSpinBox->setMaximum(1e100);
lbajardsilogic@0 151 connect(m_valueSpinBox, SIGNAL(valueChanged(double)),
lbajardsilogic@0 152 this, SLOT(valueChanged(double)));
lbajardsilogic@0 153 subgrid->addWidget(m_valueSpinBox, subrow, 1);
lbajardsilogic@0 154
lbajardsilogic@0 155 ++subrow;
lbajardsilogic@0 156 }
lbajardsilogic@0 157
lbajardsilogic@0 158 if (options & ShowText) {
lbajardsilogic@0 159
lbajardsilogic@0 160 subgrid->addWidget(new QLabel(tr("Text:")), subrow, 0);
lbajardsilogic@0 161
lbajardsilogic@0 162 m_textField = new QLineEdit;
lbajardsilogic@0 163 connect(m_textField, SIGNAL(textChanged(QString)),
lbajardsilogic@0 164 this, SLOT(textChanged(QString)));
lbajardsilogic@0 165 subgrid->addWidget(m_textField, subrow, 1);
lbajardsilogic@0 166
lbajardsilogic@0 167 ++subrow;
lbajardsilogic@0 168 }
lbajardsilogic@0 169
lbajardsilogic@0 170 if (options & ShowText) {
lbajardsilogic@0 171 m_textField->setFocus(Qt::OtherFocusReason);
lbajardsilogic@0 172 } else if (options & ShowValue) {
lbajardsilogic@0 173 m_valueSpinBox->setFocus(Qt::OtherFocusReason);
lbajardsilogic@0 174 }
lbajardsilogic@0 175
lbajardsilogic@0 176 QHBoxLayout *hbox = new QHBoxLayout;
lbajardsilogic@0 177 grid->addLayout(hbox, row, 0, 1, 2);
lbajardsilogic@0 178
lbajardsilogic@0 179 QPushButton *ok = new QPushButton(tr("OK"));
lbajardsilogic@0 180 m_resetButton = new QPushButton(tr("Reset"));
lbajardsilogic@0 181 QPushButton *cancel = new QPushButton(tr("Cancel"));
lbajardsilogic@0 182 hbox->addStretch(10);
lbajardsilogic@0 183 hbox->addWidget(ok);
lbajardsilogic@0 184 hbox->addWidget(m_resetButton);
lbajardsilogic@0 185 hbox->addWidget(cancel);
lbajardsilogic@0 186 ok->setDefault(true);
lbajardsilogic@0 187 connect(ok, SIGNAL(clicked()), this, SLOT(accept()));
lbajardsilogic@0 188 connect(m_resetButton, SIGNAL(clicked()), this, SLOT(reset()));
lbajardsilogic@0 189 connect(cancel, SIGNAL(clicked()), this, SLOT(reject()));
lbajardsilogic@0 190 m_resetButton->setEnabled(false);
lbajardsilogic@0 191 }
lbajardsilogic@0 192
lbajardsilogic@0 193 void
lbajardsilogic@0 194 ItemEditDialog::setFrameTime(long frame)
lbajardsilogic@0 195 {
lbajardsilogic@0 196 if (!m_frameTimeSpinBox) return;
lbajardsilogic@0 197
lbajardsilogic@0 198 RealTime rt(RealTime::frame2RealTime(frame, m_sampleRate));
lbajardsilogic@0 199 m_realTimeSecsSpinBox->setValue(rt.sec);
lbajardsilogic@0 200 m_realTimeUSecsSpinBox->setValue(rt.usec());
lbajardsilogic@0 201 m_frameTimeSpinBox->setValue(frame);
lbajardsilogic@0 202 m_defaultFrame = frame;
lbajardsilogic@0 203 m_resetButton->setEnabled(false);
lbajardsilogic@0 204 }
lbajardsilogic@0 205
lbajardsilogic@0 206 long
lbajardsilogic@0 207 ItemEditDialog::getFrameTime() const
lbajardsilogic@0 208 {
lbajardsilogic@0 209 return m_frameTimeSpinBox->value();
lbajardsilogic@0 210 }
lbajardsilogic@0 211
lbajardsilogic@0 212 void
lbajardsilogic@0 213 ItemEditDialog::setRealTime(RealTime rt)
lbajardsilogic@0 214 {
lbajardsilogic@0 215 setFrameTime(RealTime::realTime2Frame(rt, m_sampleRate));
lbajardsilogic@0 216 }
lbajardsilogic@0 217
lbajardsilogic@0 218 RealTime
lbajardsilogic@0 219 ItemEditDialog::getRealTime() const
lbajardsilogic@0 220 {
lbajardsilogic@0 221 return RealTime::frame2RealTime(getFrameTime(), m_sampleRate);
lbajardsilogic@0 222 }
lbajardsilogic@0 223
lbajardsilogic@0 224 void
lbajardsilogic@0 225 ItemEditDialog::setFrameDuration(long duration)
lbajardsilogic@0 226 {
lbajardsilogic@0 227 if (!m_frameDurationSpinBox) return;
lbajardsilogic@0 228
lbajardsilogic@0 229 RealTime rt(RealTime::frame2RealTime(duration, m_sampleRate));
lbajardsilogic@0 230 m_realDurationSecsSpinBox->setValue(rt.sec);
lbajardsilogic@0 231 m_realDurationUSecsSpinBox->setValue(rt.usec());
lbajardsilogic@0 232 m_frameDurationSpinBox->setValue(duration);
lbajardsilogic@0 233 m_defaultDuration = duration;
lbajardsilogic@0 234 m_resetButton->setEnabled(false);
lbajardsilogic@0 235 }
lbajardsilogic@0 236
lbajardsilogic@0 237 long
lbajardsilogic@0 238 ItemEditDialog::getFrameDuration() const
lbajardsilogic@0 239 {
lbajardsilogic@0 240 return m_frameDurationSpinBox->value();
lbajardsilogic@0 241 }
lbajardsilogic@0 242
lbajardsilogic@0 243 void
lbajardsilogic@0 244 ItemEditDialog::setRealDuration(RealTime rt)
lbajardsilogic@0 245 {
lbajardsilogic@0 246 setFrameDuration(RealTime::realTime2Frame(rt, m_sampleRate));
lbajardsilogic@0 247 }
lbajardsilogic@0 248
lbajardsilogic@0 249 RealTime
lbajardsilogic@0 250 ItemEditDialog::getRealDuration() const
lbajardsilogic@0 251 {
lbajardsilogic@0 252 return RealTime::frame2RealTime(getFrameDuration(), m_sampleRate);
lbajardsilogic@0 253 }
lbajardsilogic@0 254
lbajardsilogic@0 255 void
lbajardsilogic@0 256 ItemEditDialog::setValue(float v)
lbajardsilogic@0 257 {
lbajardsilogic@0 258 if (!m_valueSpinBox) return;
lbajardsilogic@0 259
lbajardsilogic@0 260 m_valueSpinBox->setValue(v);
lbajardsilogic@0 261 m_defaultValue = v;
lbajardsilogic@0 262 m_resetButton->setEnabled(false);
lbajardsilogic@0 263 }
lbajardsilogic@0 264
lbajardsilogic@0 265 float
lbajardsilogic@0 266 ItemEditDialog::getValue() const
lbajardsilogic@0 267 {
lbajardsilogic@0 268 return m_valueSpinBox->value();
lbajardsilogic@0 269 }
lbajardsilogic@0 270
lbajardsilogic@0 271 void
lbajardsilogic@0 272 ItemEditDialog::setText(QString text)
lbajardsilogic@0 273 {
lbajardsilogic@0 274 if (!m_textField) return;
lbajardsilogic@0 275
lbajardsilogic@0 276 m_textField->setText(text);
lbajardsilogic@0 277 m_defaultText = text;
lbajardsilogic@0 278 m_resetButton->setEnabled(false);
lbajardsilogic@0 279 }
lbajardsilogic@0 280
lbajardsilogic@0 281 QString
lbajardsilogic@0 282 ItemEditDialog::getText() const
lbajardsilogic@0 283 {
lbajardsilogic@0 284 return m_textField->text();
lbajardsilogic@0 285 }
lbajardsilogic@0 286
lbajardsilogic@0 287 void
lbajardsilogic@0 288 ItemEditDialog::frameTimeChanged(int i)
lbajardsilogic@0 289 {
lbajardsilogic@0 290 m_realTimeSecsSpinBox->blockSignals(true);
lbajardsilogic@0 291 m_realTimeUSecsSpinBox->blockSignals(true);
lbajardsilogic@0 292
lbajardsilogic@0 293 RealTime rt(RealTime::frame2RealTime(i, m_sampleRate));
lbajardsilogic@0 294 m_realTimeSecsSpinBox->setValue(rt.sec);
lbajardsilogic@0 295 m_realTimeUSecsSpinBox->setValue(rt.usec());
lbajardsilogic@0 296
lbajardsilogic@0 297 m_realTimeSecsSpinBox->blockSignals(false);
lbajardsilogic@0 298 m_realTimeUSecsSpinBox->blockSignals(false);
lbajardsilogic@0 299 m_resetButton->setEnabled(true);
lbajardsilogic@0 300 }
lbajardsilogic@0 301
lbajardsilogic@0 302 void
lbajardsilogic@0 303 ItemEditDialog::realTimeSecsChanged(int i)
lbajardsilogic@0 304 {
lbajardsilogic@0 305 RealTime rt = getRealTime();
lbajardsilogic@0 306 rt.sec = i;
lbajardsilogic@0 307 size_t frame = RealTime::realTime2Frame(rt, m_sampleRate);
lbajardsilogic@0 308 m_frameTimeSpinBox->setValue(frame);
lbajardsilogic@0 309 m_resetButton->setEnabled(true);
lbajardsilogic@0 310 }
lbajardsilogic@0 311
lbajardsilogic@0 312 void
lbajardsilogic@0 313 ItemEditDialog::realTimeUSecsChanged(int i)
lbajardsilogic@0 314 {
lbajardsilogic@0 315 RealTime rt = getRealTime();
lbajardsilogic@0 316 rt.nsec = i * 1000;
lbajardsilogic@0 317 size_t frame = RealTime::realTime2Frame(rt, m_sampleRate);
lbajardsilogic@0 318 m_frameTimeSpinBox->setValue(frame);
lbajardsilogic@0 319 m_resetButton->setEnabled(true);
lbajardsilogic@0 320 }
lbajardsilogic@0 321
lbajardsilogic@0 322 void
lbajardsilogic@0 323 ItemEditDialog::frameDurationChanged(int i)
lbajardsilogic@0 324 {
lbajardsilogic@0 325 m_realDurationSecsSpinBox->blockSignals(true);
lbajardsilogic@0 326 m_realDurationUSecsSpinBox->blockSignals(true);
lbajardsilogic@0 327
lbajardsilogic@0 328 RealTime rt(RealTime::frame2RealTime(i, m_sampleRate));
lbajardsilogic@0 329 m_realDurationSecsSpinBox->setValue(rt.sec);
lbajardsilogic@0 330 m_realDurationUSecsSpinBox->setValue(rt.usec());
lbajardsilogic@0 331
lbajardsilogic@0 332 m_realDurationSecsSpinBox->blockSignals(false);
lbajardsilogic@0 333 m_realDurationUSecsSpinBox->blockSignals(false);
lbajardsilogic@0 334 m_resetButton->setEnabled(true);
lbajardsilogic@0 335 }
lbajardsilogic@0 336
lbajardsilogic@0 337 void
lbajardsilogic@0 338 ItemEditDialog::realDurationSecsChanged(int i)
lbajardsilogic@0 339 {
lbajardsilogic@0 340 RealTime rt = getRealDuration();
lbajardsilogic@0 341 rt.sec = i;
lbajardsilogic@0 342 size_t frame = RealTime::realTime2Frame(rt, m_sampleRate);
lbajardsilogic@0 343 m_frameDurationSpinBox->setValue(frame);
lbajardsilogic@0 344 m_resetButton->setEnabled(true);
lbajardsilogic@0 345 }
lbajardsilogic@0 346
lbajardsilogic@0 347 void
lbajardsilogic@0 348 ItemEditDialog::realDurationUSecsChanged(int i)
lbajardsilogic@0 349 {
lbajardsilogic@0 350 RealTime rt = getRealDuration();
lbajardsilogic@0 351 rt.nsec = i * 1000;
lbajardsilogic@0 352 size_t frame = RealTime::realTime2Frame(rt, m_sampleRate);
lbajardsilogic@0 353 m_frameDurationSpinBox->setValue(frame);
lbajardsilogic@0 354 m_resetButton->setEnabled(true);
lbajardsilogic@0 355 }
lbajardsilogic@0 356
lbajardsilogic@0 357 void
lbajardsilogic@0 358 ItemEditDialog::valueChanged(double)
lbajardsilogic@0 359 {
lbajardsilogic@0 360 m_resetButton->setEnabled(true);
lbajardsilogic@0 361 }
lbajardsilogic@0 362
lbajardsilogic@0 363 void
lbajardsilogic@0 364 ItemEditDialog::textChanged(QString)
lbajardsilogic@0 365 {
lbajardsilogic@0 366 m_resetButton->setEnabled(true);
lbajardsilogic@0 367 }
lbajardsilogic@0 368
lbajardsilogic@0 369 void
lbajardsilogic@0 370 ItemEditDialog::reset()
lbajardsilogic@0 371 {
lbajardsilogic@0 372 setFrameTime(m_defaultFrame);
lbajardsilogic@0 373 setFrameDuration(m_defaultDuration);
lbajardsilogic@0 374 setValue(m_defaultValue);
lbajardsilogic@0 375 setText(m_defaultText);
lbajardsilogic@0 376 m_resetButton->setEnabled(false);
lbajardsilogic@0 377 }
lbajardsilogic@0 378