annotate widgets/PluginParameterDialog.cpp @ 1274:97d977091d4e

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