annotate widgets/PluginParameterDialog.cpp @ 333:e74b56f07c73

* Some work on correct alignment when moving panes during playback * Overhaul alignment for playback frame values (view manager now always refers to reference-timeline values, only the play source deals in playback model timeline values) * When making a selection, ensure the selection regions shown in other panes (and used for playback constraints if appropriate) are aligned correctly. This may be the coolest feature ever implemented in any program ever.
author Chris Cannam
date Thu, 22 Nov 2007 14:17:19 +0000
parents b7d45fed8146
children 4a542ba875c2
rev   line source
Chris@62 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@62 2
Chris@62 3 /*
Chris@62 4 Sonic Visualiser
Chris@62 5 An audio file viewer and annotation editor.
Chris@62 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@62 8
Chris@62 9 This program is free software; you can redistribute it and/or
Chris@62 10 modify it under the terms of the GNU General Public License as
Chris@62 11 published by the Free Software Foundation; either version 2 of the
Chris@62 12 License, or (at your option) any later version. See the file
Chris@62 13 COPYING included with this distribution for more information.
Chris@62 14 */
Chris@62 15
Chris@62 16 #include "PluginParameterDialog.h"
Chris@62 17
Chris@62 18 #include "PluginParameterBox.h"
Chris@140 19 #include "WindowTypeSelector.h"
Chris@62 20
Chris@294 21 #include "base/TextAbbrev.h"
Chris@294 22
Chris@106 23 #include "vamp-sdk/Plugin.h"
Chris@147 24 #include "vamp-sdk/PluginHostAdapter.h"
Chris@309 25 #include "vamp-sdk/hostext/PluginWrapper.h"
Chris@106 26
Chris@62 27 #include <QGridLayout>
Chris@62 28 #include <QLabel>
Chris@62 29 #include <QGroupBox>
Chris@62 30 #include <QHBoxLayout>
Chris@143 31 #include <QVBoxLayout>
Chris@149 32 #include <QScrollArea>
Chris@62 33 #include <QPushButton>
Chris@69 34 #include <QMessageBox>
Chris@69 35 #include <QComboBox>
Chris@302 36 #include <QCheckBox>
Chris@143 37 #include <QSettings>
Chris@282 38 #include <QDialogButtonBox>
Chris@62 39
Chris@71 40 PluginParameterDialog::PluginParameterDialog(Vamp::PluginBase *plugin,
Chris@62 41 QWidget *parent) :
Chris@62 42 QDialog(parent),
Chris@62 43 m_plugin(plugin),
Chris@163 44 m_channel(-1),
Chris@145 45 m_stepSize(0),
Chris@145 46 m_blockSize(0),
Chris@145 47 m_windowType(HanningWindow),
Chris@302 48 m_parameterBox(0),
Chris@302 49 m_selectionOnly(false)
Chris@62 50 {
Chris@122 51 setWindowTitle(tr("Plugin Parameters"));
Chris@122 52
Chris@62 53 QGridLayout *grid = new QGridLayout;
Chris@62 54 setLayout(grid);
Chris@62 55
Chris@62 56 QGroupBox *pluginBox = new QGroupBox;
Chris@208 57 pluginBox->setTitle(plugin->getType().c_str());
Chris@62 58 grid->addWidget(pluginBox, 0, 0);
Chris@62 59
Chris@62 60 QGridLayout *subgrid = new QGridLayout;
Chris@62 61 pluginBox->setLayout(subgrid);
Chris@62 62
Chris@63 63 subgrid->setSpacing(0);
Chris@63 64 subgrid->setMargin(10);
Chris@63 65
Chris@208 66 QFont boldFont(pluginBox->font());
Chris@208 67 boldFont.setBold(true);
Chris@208 68
Chris@208 69 QFont italicFont(pluginBox->font());
Chris@208 70 italicFont.setItalic(true);
Chris@62 71
Chris@207 72 QLabel *nameLabel = new QLabel(plugin->getName().c_str());
Chris@146 73 nameLabel->setWordWrap(true);
Chris@208 74 nameLabel->setFont(boldFont);
Chris@62 75
Chris@62 76 QLabel *makerLabel = new QLabel(plugin->getMaker().c_str());
Chris@146 77 makerLabel->setWordWrap(true);
Chris@62 78
Chris@62 79 QLabel *versionLabel = new QLabel(QString("%1")
Chris@62 80 .arg(plugin->getPluginVersion()));
Chris@146 81 versionLabel->setWordWrap(true);
Chris@62 82
Chris@62 83 QLabel *copyrightLabel = new QLabel(plugin->getCopyright().c_str());
Chris@146 84 copyrightLabel->setWordWrap(true);
Chris@62 85
Chris@208 86 // QLabel *typeLabel = new QLabel(plugin->getType().c_str());
Chris@208 87 // typeLabel->setWordWrap(true);
Chris@208 88 // typeLabel->setFont(boldFont);
Chris@208 89
Chris@208 90 QLabel *descriptionLabel = 0;
Chris@208 91 if (plugin->getDescription() != "") {
Chris@208 92 descriptionLabel = new QLabel(plugin->getDescription().c_str());
Chris@208 93 descriptionLabel->setWordWrap(true);
Chris@208 94 descriptionLabel->setFont(italicFont);
Chris@208 95 }
Chris@63 96
Chris@163 97 int row = 0;
Chris@163 98
Chris@147 99 QLabel *label = new QLabel(tr("Name:"));
Chris@147 100 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
Chris@163 101 subgrid->addWidget(label, row, 0);
Chris@163 102 subgrid->addWidget(nameLabel, row, 1);
Chris@163 103 row++;
Chris@62 104
Chris@208 105 if (descriptionLabel) {
Chris@208 106 // label = new QLabel(tr("Description:"));
Chris@208 107 // label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
Chris@208 108 // subgrid->addWidget(label, row, 0);
Chris@208 109 subgrid->addWidget(descriptionLabel, row, 1);
Chris@208 110 row++;
Chris@208 111 }
Chris@208 112
Chris@208 113 Vamp::PluginHostAdapter *fePlugin =
Chris@208 114 dynamic_cast<Vamp::PluginHostAdapter *>(m_plugin);
Chris@208 115
Chris@208 116 if (fePlugin) {
Chris@208 117 label = new QLabel(tr("Version:"));
Chris@208 118 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
Chris@208 119 subgrid->addWidget(label, row, 0);
Chris@208 120 subgrid->addWidget(versionLabel, row, 1);
Chris@208 121 row++;
Chris@208 122 }
Chris@208 123
Chris@208 124 // label = new QLabel(tr("Type:"));
Chris@208 125 // label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
Chris@208 126 // subgrid->addWidget(label, row, 0);
Chris@208 127 // subgrid->addWidget(typeLabel, row, 1);
Chris@208 128 // row++;
Chris@62 129
Chris@147 130 label = new QLabel(tr("Maker:"));
Chris@147 131 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
Chris@163 132 subgrid->addWidget(label, row, 0);
Chris@163 133 subgrid->addWidget(makerLabel, row, 1);
Chris@163 134 row++;
Chris@63 135
Chris@147 136 label = new QLabel(tr("Copyright: "));
Chris@147 137 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
Chris@163 138 subgrid->addWidget(label, row, 0);
Chris@163 139 subgrid->addWidget(copyrightLabel, row, 1);
Chris@163 140 row++;
Chris@208 141
Chris@208 142 m_outputSpacer = new QLabel;
Chris@208 143 subgrid->addWidget(m_outputSpacer, row, 0);
Chris@208 144 m_outputSpacer->setFixedHeight(7);
Chris@208 145 m_outputSpacer->hide();
Chris@208 146 row++;
Chris@106 147
Chris@208 148 m_outputLabel = new QLabel(tr("Output:"));
Chris@208 149 m_outputLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);
Chris@208 150 subgrid->addWidget(m_outputLabel, row, 0);
Chris@208 151 m_outputValue = new QLabel;
Chris@208 152 m_outputValue->setFont(boldFont);
Chris@208 153 subgrid->addWidget(m_outputValue, row, 1);
Chris@208 154 m_outputLabel->hide();
Chris@208 155 m_outputValue->hide();
Chris@208 156 row++;
Chris@208 157
Chris@208 158 m_outputDescription = new QLabel;
Chris@208 159 m_outputDescription->setFont(italicFont);
Chris@208 160 subgrid->addWidget(m_outputDescription, row, 1);
Chris@208 161 m_outputDescription->hide();
Chris@163 162 row++;
Chris@62 163
Chris@62 164 subgrid->setColumnStretch(1, 2);
Chris@62 165
Chris@164 166 m_inputModelBox = new QGroupBox;
Chris@302 167 m_inputModelBox->setTitle(tr("Input Material"));
Chris@164 168 grid->addWidget(m_inputModelBox, 1, 0);
Chris@164 169
Chris@164 170 m_inputModels = new QComboBox;
Chris@302 171 QVBoxLayout *inputLayout = new QVBoxLayout;
Chris@164 172 m_inputModelBox->setLayout(inputLayout);
Chris@164 173 inputLayout->addWidget(m_inputModels);
Chris@302 174 m_inputModels->hide();
Chris@302 175
Chris@302 176 m_selectionOnly = new QCheckBox(tr("Restrict to selection extents"));
Chris@302 177 inputLayout->addWidget(m_selectionOnly);
Chris@302 178 m_selectionOnly->hide();
Chris@302 179
Chris@164 180 m_inputModelBox->hide();
Chris@164 181
Chris@62 182 QGroupBox *paramBox = new QGroupBox;
Chris@62 183 paramBox->setTitle(tr("Plugin Parameters"));
Chris@164 184 grid->addWidget(paramBox, 2, 0);
Chris@164 185 grid->setRowStretch(2, 10);
Chris@62 186
Chris@62 187 QHBoxLayout *paramLayout = new QHBoxLayout;
Chris@63 188 paramLayout->setMargin(0);
Chris@62 189 paramBox->setLayout(paramLayout);
Chris@62 190
Chris@149 191 QScrollArea *scroll = new QScrollArea;
Chris@149 192 scroll->setWidgetResizable(true);
Chris@149 193 scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
Chris@149 194 scroll->setFrameShape(QFrame::NoFrame);
Chris@149 195 paramLayout->addWidget(scroll);
Chris@149 196
Chris@62 197 m_parameterBox = new PluginParameterBox(m_plugin);
Chris@64 198 connect(m_parameterBox, SIGNAL(pluginConfigurationChanged(QString)),
Chris@64 199 this, SIGNAL(pluginConfigurationChanged(QString)));
Chris@149 200 scroll->setWidget(m_parameterBox);
Chris@62 201
Chris@143 202 m_advanced = new QFrame;
Chris@143 203 QVBoxLayout *advancedLayout = new QVBoxLayout;
Chris@143 204 advancedLayout->setMargin(0);
Chris@143 205 m_advanced->setLayout(advancedLayout);
Chris@164 206 grid->addWidget(m_advanced, 3, 0);
Chris@143 207
Chris@163 208 m_channelBox = new QGroupBox;
Chris@163 209 m_channelBox->setTitle(tr("Channels"));
Chris@163 210 advancedLayout->addWidget(m_channelBox);
Chris@163 211 m_channelBox->setVisible(false);
Chris@163 212 m_haveChannelBoxData = false;
Chris@163 213
Chris@163 214 m_windowBox = new QGroupBox;
Chris@163 215 m_windowBox->setTitle(tr("Processing"));
Chris@163 216 advancedLayout->addWidget(m_windowBox);
Chris@163 217 m_windowBox->setVisible(false);
Chris@163 218 m_haveWindowBoxData = false;
Chris@163 219
Chris@163 220 QHBoxLayout *hbox = new QHBoxLayout;
Chris@163 221 grid->addLayout(hbox, 4, 0);
Chris@163 222
Chris@163 223 m_advancedVisible = false;
Chris@163 224
Chris@163 225 m_advancedButton = new QPushButton(tr("Advanced >>"));
Chris@163 226 m_advancedButton->setCheckable(true);
Chris@163 227 connect(m_advancedButton, SIGNAL(clicked()), this, SLOT(advancedToggled()));
Chris@163 228
Chris@163 229 QSettings settings;
Chris@163 230 settings.beginGroup("PluginParameterDialog");
Chris@163 231 m_advancedVisible = settings.value("advancedvisible", false).toBool();
Chris@163 232 settings.endGroup();
Chris@163 233
Chris@163 234 m_advanced->setVisible(false);
Chris@163 235
Chris@163 236 hbox->addWidget(m_advancedButton);
Chris@163 237 m_advancedButton->hide();
Chris@163 238
Chris@282 239 QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok |
Chris@282 240 QDialogButtonBox::Cancel);
Chris@282 241 hbox->addWidget(bb);
Chris@294 242 connect(bb, SIGNAL(accepted()), this, SLOT(dialogAccepted()));
Chris@282 243 connect(bb, SIGNAL(rejected()), this, SLOT(reject()));
Chris@163 244
Chris@163 245 setAdvancedVisible(m_advancedVisible);
Chris@163 246 }
Chris@163 247
Chris@163 248 PluginParameterDialog::~PluginParameterDialog()
Chris@163 249 {
Chris@163 250 }
Chris@163 251
Chris@163 252
Chris@163 253 void
Chris@208 254 PluginParameterDialog::setOutputLabel(QString text,
Chris@208 255 QString description)
Chris@163 256 {
Chris@163 257 if (text == "") {
Chris@208 258 m_outputSpacer->hide();
Chris@163 259 m_outputLabel->hide();
Chris@163 260 m_outputValue->hide();
Chris@208 261 m_outputDescription->hide();
Chris@163 262 } else {
Chris@208 263 m_outputSpacer->show();
Chris@163 264 m_outputValue->setText(text);
Chris@163 265 m_outputValue->setWordWrap(true);
Chris@208 266 m_outputDescription->setText(description);
Chris@309 267 m_outputDescription->setWordWrap(true);
Chris@163 268 m_outputLabel->show();
Chris@163 269 m_outputValue->show();
Chris@208 270 if (description != "") {
Chris@208 271 m_outputDescription->show();
Chris@208 272 } else {
Chris@208 273 m_outputDescription->hide();
Chris@208 274 }
Chris@163 275 }
Chris@163 276 }
Chris@163 277
Chris@163 278 void
Chris@163 279 PluginParameterDialog::setChannelArrangement(int sourceChannels,
Chris@163 280 int targetChannels,
Chris@163 281 int defaultChannel)
Chris@163 282 {
Chris@163 283 m_channel = defaultChannel;
Chris@163 284
Chris@69 285 if (sourceChannels != targetChannels) {
Chris@69 286
Chris@69 287 // At the moment we can only cope with the case where
Chris@69 288 // sourceChannels > targetChannels and targetChannels == 1
Chris@69 289
Chris@69 290 if (sourceChannels < targetChannels) {
Chris@69 291
Chris@69 292 QMessageBox::warning
Chris@163 293 (parentWidget(),
Chris@69 294 tr("Channel mismatch"),
Chris@69 295 tr("This plugin requires at least %1 input channels, but only %2 %3 available. The plugin probably will not work correctly.").arg(targetChannels).arg(sourceChannels).arg(sourceChannels != 1 ? tr("are") : tr("is")),
Chris@69 296 QMessageBox::Ok,
Chris@69 297 QMessageBox::NoButton);
Chris@69 298
Chris@69 299 } else {
Chris@69 300
Chris@163 301 if (m_haveChannelBoxData) {
Chris@163 302 std::cerr << "WARNING: PluginParameterDialog::setChannelArrangement: Calling more than once on same dialog is not currently implemented" << std::endl;
Chris@163 303 return;
Chris@163 304 }
Chris@69 305
Chris@69 306 QVBoxLayout *channelLayout = new QVBoxLayout;
Chris@163 307 m_channelBox->setLayout(channelLayout);
Chris@69 308
Chris@69 309 if (targetChannels != 1) {
Chris@69 310
Chris@69 311 channelLayout->addWidget
Chris@69 312 (new QLabel(tr("This plugin accepts no more than %1 input channels,\nbut %2 are available. Only the first %3 will be used.\n")
Chris@69 313 .arg(targetChannels)
Chris@69 314 .arg(sourceChannels)
Chris@69 315 .arg(targetChannels)));
Chris@69 316
Chris@69 317 } else {
Chris@69 318
Chris@69 319 channelLayout->addWidget(new QLabel(tr("This plugin only has a single channel input,\nbut the source has %1 channels.").arg(sourceChannels)));
Chris@69 320
Chris@69 321 QComboBox *channelCombo = new QComboBox;
Chris@76 322 channelCombo->addItem(tr("Use mean of source channels"));
Chris@69 323 for (int i = 0; i < sourceChannels; ++i) {
Chris@69 324 channelCombo->addItem(tr("Use channel %1 only").arg(i + 1));
Chris@69 325 }
Chris@69 326
Chris@69 327 connect(channelCombo, SIGNAL(activated(int)),
Chris@69 328 this, SLOT(channelComboChanged(int)));
Chris@69 329
Chris@69 330 channelLayout->addWidget(channelCombo);
Chris@69 331 }
Chris@163 332
Chris@163 333 m_channelBox->setVisible(true);
Chris@163 334 m_haveChannelBoxData = true;
Chris@163 335 m_advancedButton->show();
Chris@69 336 }
Chris@69 337 }
Chris@69 338
Chris@163 339 setAdvancedVisible(m_advancedVisible);
Chris@163 340 }
Chris@163 341
Chris@163 342 void
Chris@163 343 PluginParameterDialog::setShowProcessingOptions(bool showWindowSize,
Chris@163 344 bool showFrequencyDomainOptions)
Chris@163 345 {
Chris@163 346 if (m_haveWindowBoxData) {
Chris@163 347 std::cerr << "WARNING: PluginParameterDialog::setShowProcessingOptions: Calling more than once on same dialog is not currently implemented" << std::endl;
Chris@163 348 return;
Chris@163 349 }
Chris@163 350
Chris@140 351 if (showWindowSize) {
Chris@140 352
Chris@309 353 Vamp::Plugin *fePlugin = dynamic_cast<Vamp::Plugin *>(m_plugin);
Chris@309 354 if (!fePlugin) fePlugin = dynamic_cast<Vamp::PluginHostAdapter *>(m_plugin);
Chris@309 355 if (!fePlugin) fePlugin = dynamic_cast<Vamp::HostExt::PluginWrapper *>(m_plugin);
Chris@140 356 int size = 1024;
Chris@140 357 int increment = 1024;
Chris@140 358 if (fePlugin) {
Chris@140 359 size = fePlugin->getPreferredBlockSize();
Chris@207 360 std::cerr << "Feature extraction plugin \"" << fePlugin->getName() << "\" reports preferred block size as " << size << std::endl;
Chris@140 361 if (size == 0) size = 1024;
Chris@140 362 increment = fePlugin->getPreferredStepSize();
Chris@146 363 if (increment == 0) {
Chris@146 364 if (fePlugin->getInputDomain() == Vamp::Plugin::TimeDomain) {
Chris@146 365 increment = size;
Chris@146 366 } else {
Chris@146 367 increment = size/2;
Chris@146 368 }
Chris@146 369 }
Chris@140 370 }
Chris@140 371
Chris@140 372 QGridLayout *windowLayout = new QGridLayout;
Chris@163 373 m_windowBox->setLayout(windowLayout);
Chris@140 374
Chris@140 375 if (showFrequencyDomainOptions) {
Chris@140 376 windowLayout->addWidget(new QLabel(tr("Window size:")), 0, 0);
Chris@140 377 } else {
Chris@140 378 windowLayout->addWidget(new QLabel(tr("Audio frames per block:")), 0, 0);
Chris@140 379 }
Chris@140 380
Chris@143 381 std::cerr << "size: " << size << ", increment: " << increment << std::endl;
Chris@143 382
Chris@140 383 QComboBox *blockSizeCombo = new QComboBox;
Chris@140 384 blockSizeCombo->setEditable(true);
Chris@147 385 bool found = false;
Chris@143 386 for (int i = 0; i < 14; ++i) {
Chris@249 387 int val = 1 << (i + 3);
Chris@140 388 blockSizeCombo->addItem(QString("%1").arg(val));
Chris@147 389 if (val == size) {
Chris@147 390 blockSizeCombo->setCurrentIndex(i);
Chris@147 391 found = true;
Chris@147 392 }
Chris@147 393 }
Chris@147 394 if (!found) {
Chris@147 395 blockSizeCombo->addItem(QString("%1").arg(size));
Chris@147 396 blockSizeCombo->setCurrentIndex(blockSizeCombo->count() - 1);
Chris@140 397 }
Chris@282 398 blockSizeCombo->setValidator(new QIntValidator(1, int(pow(2, 18)), this));
Chris@155 399 connect(blockSizeCombo, SIGNAL(editTextChanged(const QString &)),
Chris@155 400 this, SLOT(blockSizeComboChanged(const QString &)));
Chris@140 401 windowLayout->addWidget(blockSizeCombo, 0, 1);
Chris@140 402
Chris@148 403 windowLayout->addWidget(new QLabel(tr("Window increment:")), 1, 0);
Chris@148 404
Chris@148 405 QComboBox *incrementCombo = new QComboBox;
Chris@148 406 incrementCombo->setEditable(true);
Chris@148 407 found = false;
Chris@148 408 for (int i = 0; i < 14; ++i) {
Chris@249 409 int val = 1 << (i + 3);
Chris@148 410 incrementCombo->addItem(QString("%1").arg(val));
Chris@148 411 if (val == increment) {
Chris@148 412 incrementCombo->setCurrentIndex(i);
Chris@148 413 found = true;
Chris@148 414 }
Chris@148 415 }
Chris@148 416 if (!found) {
Chris@148 417 incrementCombo->addItem(QString("%1").arg(increment));
Chris@148 418 incrementCombo->setCurrentIndex(incrementCombo->count() - 1);
Chris@148 419 }
Chris@282 420 incrementCombo->setValidator(new QIntValidator(1, int(pow(2, 18)), this));
Chris@155 421 connect(incrementCombo, SIGNAL(editTextChanged(const QString &)),
Chris@155 422 this, SLOT(incrementComboChanged(const QString &)));
Chris@148 423 windowLayout->addWidget(incrementCombo, 1, 1);
Chris@148 424
Chris@140 425 if (showFrequencyDomainOptions) {
Chris@140 426
Chris@140 427 windowLayout->addWidget(new QLabel(tr("Window shape:")), 2, 0);
Chris@140 428 WindowTypeSelector *windowTypeSelector = new WindowTypeSelector;
Chris@171 429 connect(windowTypeSelector, SIGNAL(windowTypeChanged(WindowType)),
Chris@171 430 this, SLOT(windowTypeChanged(WindowType)));
Chris@140 431 windowLayout->addWidget(windowTypeSelector, 2, 1);
Chris@140 432 }
Chris@163 433
Chris@163 434 m_windowBox->setVisible(true);
Chris@163 435 m_haveWindowBoxData = true;
Chris@163 436 m_advancedButton->show();
Chris@140 437 }
Chris@140 438
Chris@163 439 setAdvancedVisible(m_advancedVisible);
Chris@62 440 }
Chris@62 441
Chris@69 442 void
Chris@164 443 PluginParameterDialog::setCandidateInputModels(const QStringList &models)
Chris@164 444 {
Chris@164 445 m_inputModels->clear();
Chris@294 446
Chris@294 447 QSettings settings;
Chris@294 448 settings.beginGroup("PluginParameterDialog");
Chris@294 449 QString lastModel = settings.value("lastinputmodel").toString();
Chris@294 450 settings.endGroup();
Chris@294 451
Chris@302 452 m_inputModels->show();
Chris@302 453
Chris@294 454 m_inputModelList = models;
Chris@294 455 m_inputModels->addItems(TextAbbrev::abbreviate(models, 80));
Chris@296 456 m_inputModels->setCurrentIndex(0);
Chris@294 457
Chris@294 458 if (lastModel != "") {
Chris@294 459 for (int i = 0; i < models.size(); ++i) {
Chris@294 460 if (lastModel == models[i]) {
Chris@294 461 m_inputModels->setCurrentIndex(i);
Chris@296 462 m_currentInputModel = models[i];
Chris@294 463 break;
Chris@294 464 }
Chris@294 465 }
Chris@294 466 }
Chris@294 467
Chris@294 468 connect(m_inputModels, SIGNAL(activated(int)),
Chris@294 469 this, SLOT(inputModelComboChanged(int)));
Chris@164 470 m_inputModelBox->show();
Chris@164 471 }
Chris@164 472
Chris@302 473 void
Chris@302 474 PluginParameterDialog::setShowSelectionOnlyOption(bool show)
Chris@302 475 {
Chris@302 476 if (!show) {
Chris@302 477 m_selectionOnly->hide();
Chris@302 478 if (!m_inputModels->isVisible()) m_inputModelBox->hide();
Chris@302 479 return;
Chris@302 480 }
Chris@302 481
Chris@302 482 QSettings settings;
Chris@302 483 settings.beginGroup("PluginParameterDialog");
Chris@302 484 bool lastSelectionOnly = settings.value("lastselectiononly", false).toBool();
Chris@302 485 settings.endGroup();
Chris@302 486
Chris@302 487 m_selectionOnly->setChecked(lastSelectionOnly);
Chris@309 488 m_currentSelectionOnly = lastSelectionOnly;
Chris@302 489
Chris@302 490 connect(m_selectionOnly, SIGNAL(stateChanged(int)),
Chris@302 491 this, SLOT(selectionOnlyChanged(int)));
Chris@302 492
Chris@302 493 m_selectionOnly->show();
Chris@302 494 m_inputModelBox->show();
Chris@302 495 }
Chris@302 496
Chris@164 497 QString
Chris@164 498 PluginParameterDialog::getInputModel() const
Chris@164 499 {
Chris@296 500 return m_currentInputModel;
Chris@164 501 }
Chris@164 502
Chris@302 503 bool
Chris@302 504 PluginParameterDialog::getSelectionOnly() const
Chris@302 505 {
Chris@309 506 return m_currentSelectionOnly;
Chris@302 507 }
Chris@302 508
Chris@164 509 void
Chris@145 510 PluginParameterDialog::getProcessingParameters(size_t &blockSize) const
Chris@145 511 {
Chris@145 512 blockSize = m_blockSize;
Chris@145 513 return;
Chris@145 514 }
Chris@145 515
Chris@145 516 void
Chris@145 517 PluginParameterDialog::getProcessingParameters(size_t &stepSize,
Chris@145 518 size_t &blockSize,
Chris@145 519 WindowType &windowType) const
Chris@145 520 {
Chris@145 521 stepSize = m_stepSize;
Chris@145 522 blockSize = m_blockSize;
Chris@145 523 windowType = m_windowType;
Chris@146 524 return;
Chris@145 525 }
Chris@145 526
Chris@145 527 void
Chris@155 528 PluginParameterDialog::blockSizeComboChanged(const QString &text)
Chris@145 529 {
Chris@145 530 m_blockSize = text.toInt();
Chris@146 531 std::cerr << "Block size changed to " << m_blockSize << std::endl;
Chris@145 532 }
Chris@145 533
Chris@145 534 void
Chris@155 535 PluginParameterDialog::incrementComboChanged(const QString &text)
Chris@145 536 {
Chris@145 537 m_stepSize = text.toInt();
Chris@146 538 //!!! rename increment to step size throughout
Chris@147 539 std::cerr << "Increment changed to " << m_stepSize << std::endl;
Chris@145 540 }
Chris@145 541
Chris@145 542 void
Chris@145 543 PluginParameterDialog::windowTypeChanged(WindowType type)
Chris@145 544 {
Chris@145 545 m_windowType = type;
Chris@145 546 }
Chris@145 547
Chris@145 548 void
Chris@143 549 PluginParameterDialog::advancedToggled()
Chris@143 550 {
Chris@163 551 setAdvancedVisible(!m_advancedVisible);
Chris@163 552 }
Chris@143 553
Chris@163 554 void
Chris@163 555 PluginParameterDialog::setAdvancedVisible(bool visible)
Chris@163 556 {
Chris@143 557 m_advanced->setVisible(visible);
Chris@143 558
Chris@163 559 if (visible) {
Chris@163 560 m_advancedButton->setText(tr("Advanced <<"));
Chris@163 561 m_advancedButton->setChecked(true);
Chris@163 562 } else {
Chris@163 563 m_advancedButton->setText(tr("Advanced >>"));
Chris@163 564 m_advancedButton->setChecked(false);
Chris@163 565 }
Chris@143 566
Chris@143 567 QSettings settings;
Chris@143 568 settings.beginGroup("PluginParameterDialog");
Chris@143 569 settings.setValue("advancedvisible", visible);
Chris@143 570 settings.endGroup();
Chris@143 571
Chris@213 572 // std::cerr << "resize to " << sizeHint().width() << " x " << sizeHint().height() << std::endl;
Chris@143 573
Chris@149 574 setMinimumHeight(sizeHint().height());
Chris@163 575 adjustSize();
Chris@163 576
Chris@163 577 m_advancedVisible = visible;
Chris@163 578
Chris@163 579 // if (visible) setMaximumHeight(sizeHint().height());
Chris@163 580 // adjustSize();
Chris@143 581 }
Chris@143 582
Chris@143 583 void
Chris@69 584 PluginParameterDialog::channelComboChanged(int index)
Chris@69 585 {
Chris@69 586 m_channel = index - 1;
Chris@69 587 }
Chris@69 588
Chris@294 589 void
Chris@294 590 PluginParameterDialog::inputModelComboChanged(int index)
Chris@294 591 {
Chris@294 592 if (index >= m_inputModelList.size()) return;
Chris@296 593 m_currentInputModel = m_inputModelList[index];
Chris@296 594 emit inputModelChanged(m_currentInputModel);
Chris@294 595 }
Chris@294 596
Chris@294 597 void
Chris@302 598 PluginParameterDialog::selectionOnlyChanged(int state)
Chris@302 599 {
Chris@302 600 if (state == Qt::Checked) {
Chris@302 601 m_currentSelectionOnly = true;
Chris@302 602 } else {
Chris@302 603 m_currentSelectionOnly = false;
Chris@302 604 }
Chris@302 605 }
Chris@302 606
Chris@302 607 void
Chris@294 608 PluginParameterDialog::dialogAccepted()
Chris@294 609 {
Chris@294 610 QSettings settings;
Chris@294 611 settings.beginGroup("PluginParameterDialog");
Chris@302 612
Chris@302 613 if (m_inputModels->isVisible()) {
Chris@302 614 settings.setValue("lastinputmodel", getInputModel());
Chris@302 615 }
Chris@302 616
Chris@302 617 if (m_selectionOnly->isVisible()) {
Chris@302 618 settings.setValue("lastselectiononly", getSelectionOnly());
Chris@302 619 }
Chris@302 620
Chris@294 621 settings.endGroup();
Chris@294 622
Chris@294 623 accept();
Chris@294 624 }
Chris@294 625