annotate widgets/PluginParameterDialog.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 and QMUL.
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 "PluginParameterDialog.h"
lbajardsilogic@0 17
lbajardsilogic@0 18 #include "PluginParameterBox.h"
lbajardsilogic@0 19 #include "WindowTypeSelector.h"
lbajardsilogic@0 20
lbajardsilogic@0 21 #include "vamp-sdk/Plugin.h"
lbajardsilogic@0 22 #include "vamp-sdk/PluginHostAdapter.h"
lbajardsilogic@0 23
lbajardsilogic@0 24 #include <QGridLayout>
lbajardsilogic@0 25 #include <QLabel>
lbajardsilogic@0 26 #include <QGroupBox>
lbajardsilogic@0 27 #include <QHBoxLayout>
lbajardsilogic@0 28 #include <QVBoxLayout>
lbajardsilogic@0 29 #include <QScrollArea>
lbajardsilogic@0 30 #include <QPushButton>
lbajardsilogic@0 31 #include <QMessageBox>
lbajardsilogic@0 32 #include <QComboBox>
lbajardsilogic@0 33 #include <QSettings>
lbajardsilogic@0 34
lbajardsilogic@0 35 PluginParameterDialog::PluginParameterDialog(Vamp::PluginBase *plugin,
lbajardsilogic@0 36 QWidget *parent) :
lbajardsilogic@0 37 QDialog(parent),
lbajardsilogic@0 38 m_plugin(plugin),
lbajardsilogic@0 39 m_channel(-1),
lbajardsilogic@0 40 m_stepSize(0),
lbajardsilogic@0 41 m_blockSize(0),
lbajardsilogic@0 42 m_windowType(HanningWindow),
lbajardsilogic@0 43 m_parameterBox(0)
lbajardsilogic@0 44 {
lbajardsilogic@0 45 setWindowTitle(tr("Plugin Parameters"));
lbajardsilogic@0 46
lbajardsilogic@0 47 QGridLayout *grid = new QGridLayout;
lbajardsilogic@0 48 setLayout(grid);
lbajardsilogic@0 49
lbajardsilogic@0 50 QGroupBox *pluginBox = new QGroupBox;
lbajardsilogic@0 51 pluginBox->setTitle(plugin->getType().c_str());
lbajardsilogic@0 52 grid->addWidget(pluginBox, 0, 0);
lbajardsilogic@0 53
lbajardsilogic@0 54 QGridLayout *subgrid = new QGridLayout;
lbajardsilogic@0 55 pluginBox->setLayout(subgrid);
lbajardsilogic@0 56
lbajardsilogic@0 57 subgrid->setSpacing(0);
lbajardsilogic@0 58 subgrid->setMargin(10);
lbajardsilogic@0 59
lbajardsilogic@0 60 QFont boldFont(pluginBox->font());
lbajardsilogic@0 61 boldFont.setBold(true);
lbajardsilogic@0 62
lbajardsilogic@0 63 QFont italicFont(pluginBox->font());
lbajardsilogic@0 64 italicFont.setItalic(true);
lbajardsilogic@0 65
lbajardsilogic@0 66 QLabel *nameLabel = new QLabel(plugin->getName().c_str());
lbajardsilogic@0 67 nameLabel->setWordWrap(true);
lbajardsilogic@0 68 nameLabel->setFont(boldFont);
lbajardsilogic@0 69
lbajardsilogic@0 70 QLabel *makerLabel = new QLabel(plugin->getMaker().c_str());
lbajardsilogic@0 71 makerLabel->setWordWrap(true);
lbajardsilogic@0 72
lbajardsilogic@0 73 QLabel *versionLabel = new QLabel(QString("%1")
lbajardsilogic@0 74 .arg(plugin->getPluginVersion()));
lbajardsilogic@0 75 versionLabel->setWordWrap(true);
lbajardsilogic@0 76
lbajardsilogic@0 77 QLabel *copyrightLabel = new QLabel(plugin->getCopyright().c_str());
lbajardsilogic@0 78 copyrightLabel->setWordWrap(true);
lbajardsilogic@0 79
lbajardsilogic@0 80 // QLabel *typeLabel = new QLabel(plugin->getType().c_str());
lbajardsilogic@0 81 // typeLabel->setWordWrap(true);
lbajardsilogic@0 82 // typeLabel->setFont(boldFont);
lbajardsilogic@0 83
lbajardsilogic@0 84 QLabel *descriptionLabel = 0;
lbajardsilogic@0 85 if (plugin->getDescription() != "") {
lbajardsilogic@0 86 descriptionLabel = new QLabel(plugin->getDescription().c_str());
lbajardsilogic@0 87 descriptionLabel->setWordWrap(true);
lbajardsilogic@0 88 descriptionLabel->setFont(italicFont);
lbajardsilogic@0 89 }
lbajardsilogic@0 90
lbajardsilogic@0 91 int row = 0;
lbajardsilogic@0 92
lbajardsilogic@0 93 QLabel *label = new QLabel(tr("Name:"));
lbajardsilogic@0 94 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
lbajardsilogic@0 95 subgrid->addWidget(label, row, 0);
lbajardsilogic@0 96 subgrid->addWidget(nameLabel, row, 1);
lbajardsilogic@0 97 row++;
lbajardsilogic@0 98
lbajardsilogic@0 99 if (descriptionLabel) {
lbajardsilogic@0 100 // label = new QLabel(tr("Description:"));
lbajardsilogic@0 101 // label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
lbajardsilogic@0 102 // subgrid->addWidget(label, row, 0);
lbajardsilogic@0 103 subgrid->addWidget(descriptionLabel, row, 1);
lbajardsilogic@0 104 row++;
lbajardsilogic@0 105 }
lbajardsilogic@0 106
lbajardsilogic@0 107 Vamp::PluginHostAdapter *fePlugin =
lbajardsilogic@0 108 dynamic_cast<Vamp::PluginHostAdapter *>(m_plugin);
lbajardsilogic@0 109
lbajardsilogic@0 110 if (fePlugin) {
lbajardsilogic@0 111 label = new QLabel(tr("Version:"));
lbajardsilogic@0 112 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
lbajardsilogic@0 113 subgrid->addWidget(label, row, 0);
lbajardsilogic@0 114 subgrid->addWidget(versionLabel, row, 1);
lbajardsilogic@0 115 row++;
lbajardsilogic@0 116 }
lbajardsilogic@0 117
lbajardsilogic@0 118 // label = new QLabel(tr("Type:"));
lbajardsilogic@0 119 // label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
lbajardsilogic@0 120 // subgrid->addWidget(label, row, 0);
lbajardsilogic@0 121 // subgrid->addWidget(typeLabel, row, 1);
lbajardsilogic@0 122 // row++;
lbajardsilogic@0 123
lbajardsilogic@0 124 label = new QLabel(tr("Maker:"));
lbajardsilogic@0 125 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
lbajardsilogic@0 126 subgrid->addWidget(label, row, 0);
lbajardsilogic@0 127 subgrid->addWidget(makerLabel, row, 1);
lbajardsilogic@0 128 row++;
lbajardsilogic@0 129
lbajardsilogic@0 130 label = new QLabel(tr("Copyright: "));
lbajardsilogic@0 131 label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
lbajardsilogic@0 132 subgrid->addWidget(label, row, 0);
lbajardsilogic@0 133 subgrid->addWidget(copyrightLabel, row, 1);
lbajardsilogic@0 134 row++;
lbajardsilogic@0 135
lbajardsilogic@0 136 m_outputSpacer = new QLabel;
lbajardsilogic@0 137 subgrid->addWidget(m_outputSpacer, row, 0);
lbajardsilogic@0 138 m_outputSpacer->setFixedHeight(7);
lbajardsilogic@0 139 m_outputSpacer->hide();
lbajardsilogic@0 140 row++;
lbajardsilogic@0 141
lbajardsilogic@0 142 m_outputLabel = new QLabel(tr("Output:"));
lbajardsilogic@0 143 m_outputLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);
lbajardsilogic@0 144 subgrid->addWidget(m_outputLabel, row, 0);
lbajardsilogic@0 145 m_outputValue = new QLabel;
lbajardsilogic@0 146 m_outputValue->setFont(boldFont);
lbajardsilogic@0 147 subgrid->addWidget(m_outputValue, row, 1);
lbajardsilogic@0 148 m_outputLabel->hide();
lbajardsilogic@0 149 m_outputValue->hide();
lbajardsilogic@0 150 row++;
lbajardsilogic@0 151
lbajardsilogic@0 152 m_outputDescription = new QLabel;
lbajardsilogic@0 153 m_outputDescription->setFont(italicFont);
lbajardsilogic@0 154 subgrid->addWidget(m_outputDescription, row, 1);
lbajardsilogic@0 155 m_outputDescription->hide();
lbajardsilogic@0 156 row++;
lbajardsilogic@0 157
lbajardsilogic@0 158 subgrid->setColumnStretch(1, 2);
lbajardsilogic@0 159
lbajardsilogic@0 160 m_inputModelBox = new QGroupBox;
lbajardsilogic@0 161 m_inputModelBox->setTitle(tr("Input Source"));
lbajardsilogic@0 162 grid->addWidget(m_inputModelBox, 1, 0);
lbajardsilogic@0 163
lbajardsilogic@0 164 m_inputModels = new QComboBox;
lbajardsilogic@0 165 QHBoxLayout *inputLayout = new QHBoxLayout;
lbajardsilogic@0 166 m_inputModelBox->setLayout(inputLayout);
lbajardsilogic@0 167 inputLayout->addWidget(m_inputModels);
lbajardsilogic@0 168 m_inputModelBox->hide();
lbajardsilogic@0 169
lbajardsilogic@0 170 QGroupBox *paramBox = new QGroupBox;
lbajardsilogic@0 171 paramBox->setTitle(tr("Plugin Parameters"));
lbajardsilogic@0 172 grid->addWidget(paramBox, 2, 0);
lbajardsilogic@0 173 grid->setRowStretch(2, 10);
lbajardsilogic@0 174
lbajardsilogic@0 175 QHBoxLayout *paramLayout = new QHBoxLayout;
lbajardsilogic@0 176 paramLayout->setMargin(0);
lbajardsilogic@0 177 paramBox->setLayout(paramLayout);
lbajardsilogic@0 178
lbajardsilogic@0 179 QScrollArea *scroll = new QScrollArea;
lbajardsilogic@0 180 scroll->setWidgetResizable(true);
lbajardsilogic@0 181 scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
lbajardsilogic@0 182 scroll->setFrameShape(QFrame::NoFrame);
lbajardsilogic@0 183 paramLayout->addWidget(scroll);
lbajardsilogic@0 184
lbajardsilogic@0 185 m_parameterBox = new PluginParameterBox(m_plugin);
lbajardsilogic@0 186 connect(m_parameterBox, SIGNAL(pluginConfigurationChanged(QString)),
lbajardsilogic@0 187 this, SIGNAL(pluginConfigurationChanged(QString)));
lbajardsilogic@0 188 scroll->setWidget(m_parameterBox);
lbajardsilogic@0 189
lbajardsilogic@0 190 m_advanced = new QFrame;
lbajardsilogic@0 191 QVBoxLayout *advancedLayout = new QVBoxLayout;
lbajardsilogic@0 192 advancedLayout->setMargin(0);
lbajardsilogic@0 193 m_advanced->setLayout(advancedLayout);
lbajardsilogic@0 194 grid->addWidget(m_advanced, 3, 0);
lbajardsilogic@0 195
lbajardsilogic@0 196 m_channelBox = new QGroupBox;
lbajardsilogic@0 197 m_channelBox->setTitle(tr("Channels"));
lbajardsilogic@0 198 advancedLayout->addWidget(m_channelBox);
lbajardsilogic@0 199 m_channelBox->setVisible(false);
lbajardsilogic@0 200 m_haveChannelBoxData = false;
lbajardsilogic@0 201
lbajardsilogic@0 202 m_windowBox = new QGroupBox;
lbajardsilogic@0 203 m_windowBox->setTitle(tr("Processing"));
lbajardsilogic@0 204 advancedLayout->addWidget(m_windowBox);
lbajardsilogic@0 205 m_windowBox->setVisible(false);
lbajardsilogic@0 206 m_haveWindowBoxData = false;
lbajardsilogic@0 207
lbajardsilogic@0 208 QHBoxLayout *hbox = new QHBoxLayout;
lbajardsilogic@0 209 grid->addLayout(hbox, 4, 0);
lbajardsilogic@0 210
lbajardsilogic@0 211 m_advancedVisible = false;
lbajardsilogic@0 212
lbajardsilogic@0 213 m_advancedButton = new QPushButton(tr("Advanced >>"));
lbajardsilogic@0 214 m_advancedButton->setCheckable(true);
lbajardsilogic@0 215 connect(m_advancedButton, SIGNAL(clicked()), this, SLOT(advancedToggled()));
lbajardsilogic@0 216
lbajardsilogic@0 217 QSettings settings;
lbajardsilogic@0 218 settings.beginGroup("PluginParameterDialog");
lbajardsilogic@0 219 m_advancedVisible = settings.value("advancedvisible", false).toBool();
lbajardsilogic@0 220 settings.endGroup();
lbajardsilogic@0 221
lbajardsilogic@0 222 m_advanced->setVisible(false);
lbajardsilogic@0 223
lbajardsilogic@0 224 hbox->addWidget(m_advancedButton);
lbajardsilogic@0 225 m_advancedButton->hide();
lbajardsilogic@0 226
lbajardsilogic@0 227 QPushButton *ok = new QPushButton(tr("OK"));
lbajardsilogic@0 228 QPushButton *cancel = new QPushButton(tr("Cancel"));
lbajardsilogic@0 229 hbox->addStretch(10);
lbajardsilogic@0 230 hbox->addWidget(ok);
lbajardsilogic@0 231 hbox->addWidget(cancel);
lbajardsilogic@0 232 connect(ok, SIGNAL(clicked()), this, SLOT(accept()));
lbajardsilogic@0 233 connect(cancel, SIGNAL(clicked()), this, SLOT(reject()));
lbajardsilogic@0 234
lbajardsilogic@0 235 setAdvancedVisible(m_advancedVisible);
lbajardsilogic@0 236 }
lbajardsilogic@0 237
lbajardsilogic@0 238 PluginParameterDialog::~PluginParameterDialog()
lbajardsilogic@0 239 {
lbajardsilogic@0 240 }
lbajardsilogic@0 241
lbajardsilogic@0 242
lbajardsilogic@0 243 void
lbajardsilogic@0 244 PluginParameterDialog::setOutputLabel(QString text,
lbajardsilogic@0 245 QString description)
lbajardsilogic@0 246 {
lbajardsilogic@0 247 if (text == "") {
lbajardsilogic@0 248 m_outputSpacer->hide();
lbajardsilogic@0 249 m_outputLabel->hide();
lbajardsilogic@0 250 m_outputValue->hide();
lbajardsilogic@0 251 m_outputDescription->hide();
lbajardsilogic@0 252 } else {
lbajardsilogic@0 253 m_outputSpacer->show();
lbajardsilogic@0 254 m_outputValue->setText(text);
lbajardsilogic@0 255 m_outputValue->setWordWrap(true);
lbajardsilogic@0 256 m_outputDescription->setText(description);
lbajardsilogic@0 257 m_outputLabel->show();
lbajardsilogic@0 258 m_outputValue->show();
lbajardsilogic@0 259 if (description != "") {
lbajardsilogic@0 260 m_outputDescription->show();
lbajardsilogic@0 261 } else {
lbajardsilogic@0 262 m_outputDescription->hide();
lbajardsilogic@0 263 }
lbajardsilogic@0 264 }
lbajardsilogic@0 265 }
lbajardsilogic@0 266
lbajardsilogic@0 267 void
lbajardsilogic@0 268 PluginParameterDialog::setChannelArrangement(int sourceChannels,
lbajardsilogic@0 269 int targetChannels,
lbajardsilogic@0 270 int defaultChannel)
lbajardsilogic@0 271 {
lbajardsilogic@0 272 m_channel = defaultChannel;
lbajardsilogic@0 273
lbajardsilogic@0 274 if (sourceChannels != targetChannels) {
lbajardsilogic@0 275
lbajardsilogic@0 276 // At the moment we can only cope with the case where
lbajardsilogic@0 277 // sourceChannels > targetChannels and targetChannels == 1
lbajardsilogic@0 278
lbajardsilogic@0 279 if (sourceChannels < targetChannels) {
lbajardsilogic@0 280
lbajardsilogic@0 281 QMessageBox::warning
lbajardsilogic@0 282 (parentWidget(),
lbajardsilogic@0 283 tr("Channel mismatch"),
lbajardsilogic@0 284 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")),
lbajardsilogic@0 285 QMessageBox::Ok,
lbajardsilogic@0 286 QMessageBox::NoButton);
lbajardsilogic@0 287
lbajardsilogic@0 288 } else {
lbajardsilogic@0 289
lbajardsilogic@0 290 if (m_haveChannelBoxData) {
lbajardsilogic@0 291 std::cerr << "WARNING: PluginParameterDialog::setChannelArrangement: Calling more than once on same dialog is not currently implemented" << std::endl;
lbajardsilogic@0 292 return;
lbajardsilogic@0 293 }
lbajardsilogic@0 294
lbajardsilogic@0 295 QVBoxLayout *channelLayout = new QVBoxLayout;
lbajardsilogic@0 296 m_channelBox->setLayout(channelLayout);
lbajardsilogic@0 297
lbajardsilogic@0 298 if (targetChannels != 1) {
lbajardsilogic@0 299
lbajardsilogic@0 300 channelLayout->addWidget
lbajardsilogic@0 301 (new QLabel(tr("This plugin accepts no more than %1 input channels,\nbut %2 are available. Only the first %3 will be used.\n")
lbajardsilogic@0 302 .arg(targetChannels)
lbajardsilogic@0 303 .arg(sourceChannels)
lbajardsilogic@0 304 .arg(targetChannels)));
lbajardsilogic@0 305
lbajardsilogic@0 306 } else {
lbajardsilogic@0 307
lbajardsilogic@0 308 channelLayout->addWidget(new QLabel(tr("This plugin only has a single channel input,\nbut the source has %1 channels.").arg(sourceChannels)));
lbajardsilogic@0 309
lbajardsilogic@0 310 QComboBox *channelCombo = new QComboBox;
lbajardsilogic@0 311 channelCombo->addItem(tr("Use mean of source channels"));
lbajardsilogic@0 312 for (int i = 0; i < sourceChannels; ++i) {
lbajardsilogic@0 313 channelCombo->addItem(tr("Use channel %1 only").arg(i + 1));
lbajardsilogic@0 314 }
lbajardsilogic@0 315
lbajardsilogic@0 316 connect(channelCombo, SIGNAL(activated(int)),
lbajardsilogic@0 317 this, SLOT(channelComboChanged(int)));
lbajardsilogic@0 318
lbajardsilogic@0 319 channelLayout->addWidget(channelCombo);
lbajardsilogic@0 320 }
lbajardsilogic@0 321
lbajardsilogic@0 322 m_channelBox->setVisible(true);
lbajardsilogic@0 323 m_haveChannelBoxData = true;
lbajardsilogic@0 324 m_advancedButton->show();
lbajardsilogic@0 325 }
lbajardsilogic@0 326 }
lbajardsilogic@0 327
lbajardsilogic@0 328 setAdvancedVisible(m_advancedVisible);
lbajardsilogic@0 329 }
lbajardsilogic@0 330
lbajardsilogic@0 331 void
lbajardsilogic@0 332 PluginParameterDialog::setShowProcessingOptions(bool showWindowSize,
lbajardsilogic@0 333 bool showFrequencyDomainOptions)
lbajardsilogic@0 334 {
lbajardsilogic@0 335 if (m_haveWindowBoxData) {
lbajardsilogic@0 336 std::cerr << "WARNING: PluginParameterDialog::setShowProcessingOptions: Calling more than once on same dialog is not currently implemented" << std::endl;
lbajardsilogic@0 337 return;
lbajardsilogic@0 338 }
lbajardsilogic@0 339
lbajardsilogic@0 340 if (showWindowSize) {
lbajardsilogic@0 341
lbajardsilogic@0 342 Vamp::PluginHostAdapter *fePlugin = dynamic_cast<Vamp::PluginHostAdapter *>(m_plugin);
lbajardsilogic@0 343 int size = 1024;
lbajardsilogic@0 344 int increment = 1024;
lbajardsilogic@0 345 if (fePlugin) {
lbajardsilogic@0 346 size = fePlugin->getPreferredBlockSize();
lbajardsilogic@0 347 std::cerr << "Feature extraction plugin \"" << fePlugin->getName() << "\" reports preferred block size as " << size << std::endl;
lbajardsilogic@0 348 if (size == 0) size = 1024;
lbajardsilogic@0 349 increment = fePlugin->getPreferredStepSize();
lbajardsilogic@0 350 if (increment == 0) {
lbajardsilogic@0 351 if (fePlugin->getInputDomain() == Vamp::Plugin::TimeDomain) {
lbajardsilogic@0 352 increment = size;
lbajardsilogic@0 353 } else {
lbajardsilogic@0 354 increment = size/2;
lbajardsilogic@0 355 }
lbajardsilogic@0 356 }
lbajardsilogic@0 357 }
lbajardsilogic@0 358
lbajardsilogic@0 359 QGridLayout *windowLayout = new QGridLayout;
lbajardsilogic@0 360 m_windowBox->setLayout(windowLayout);
lbajardsilogic@0 361
lbajardsilogic@0 362 if (showFrequencyDomainOptions) {
lbajardsilogic@0 363 windowLayout->addWidget(new QLabel(tr("Window size:")), 0, 0);
lbajardsilogic@0 364 } else {
lbajardsilogic@0 365 windowLayout->addWidget(new QLabel(tr("Audio frames per block:")), 0, 0);
lbajardsilogic@0 366 }
lbajardsilogic@0 367
lbajardsilogic@0 368 std::cerr << "size: " << size << ", increment: " << increment << std::endl;
lbajardsilogic@0 369
lbajardsilogic@0 370 QComboBox *blockSizeCombo = new QComboBox;
lbajardsilogic@0 371 blockSizeCombo->setEditable(true);
lbajardsilogic@0 372 bool found = false;
lbajardsilogic@0 373 for (int i = 0; i < 14; ++i) {
lbajardsilogic@0 374 int val = 1 << (i + 3);
lbajardsilogic@0 375 blockSizeCombo->addItem(QString("%1").arg(val));
lbajardsilogic@0 376 if (val == size) {
lbajardsilogic@0 377 blockSizeCombo->setCurrentIndex(i);
lbajardsilogic@0 378 found = true;
lbajardsilogic@0 379 }
lbajardsilogic@0 380 }
lbajardsilogic@0 381 if (!found) {
lbajardsilogic@0 382 blockSizeCombo->addItem(QString("%1").arg(size));
lbajardsilogic@0 383 blockSizeCombo->setCurrentIndex(blockSizeCombo->count() - 1);
lbajardsilogic@0 384 }
lbajardsilogic@0 385 blockSizeCombo->setValidator(new QIntValidator(1, pow(2.0, 18), this));
lbajardsilogic@0 386 connect(blockSizeCombo, SIGNAL(editTextChanged(const QString &)),
lbajardsilogic@0 387 this, SLOT(blockSizeComboChanged(const QString &)));
lbajardsilogic@0 388 windowLayout->addWidget(blockSizeCombo, 0, 1);
lbajardsilogic@0 389
lbajardsilogic@0 390 windowLayout->addWidget(new QLabel(tr("Window increment:")), 1, 0);
lbajardsilogic@0 391
lbajardsilogic@0 392 QComboBox *incrementCombo = new QComboBox;
lbajardsilogic@0 393 incrementCombo->setEditable(true);
lbajardsilogic@0 394 found = false;
lbajardsilogic@0 395 for (int i = 0; i < 14; ++i) {
lbajardsilogic@0 396 int val = 1 << (i + 3);
lbajardsilogic@0 397 incrementCombo->addItem(QString("%1").arg(val));
lbajardsilogic@0 398 if (val == increment) {
lbajardsilogic@0 399 incrementCombo->setCurrentIndex(i);
lbajardsilogic@0 400 found = true;
lbajardsilogic@0 401 }
lbajardsilogic@0 402 }
lbajardsilogic@0 403 if (!found) {
lbajardsilogic@0 404 incrementCombo->addItem(QString("%1").arg(increment));
lbajardsilogic@0 405 incrementCombo->setCurrentIndex(incrementCombo->count() - 1);
lbajardsilogic@0 406 }
lbajardsilogic@0 407 incrementCombo->setValidator(new QIntValidator(1, pow(2.0, 18), this));
lbajardsilogic@0 408 connect(incrementCombo, SIGNAL(editTextChanged(const QString &)),
lbajardsilogic@0 409 this, SLOT(incrementComboChanged(const QString &)));
lbajardsilogic@0 410 windowLayout->addWidget(incrementCombo, 1, 1);
lbajardsilogic@0 411
lbajardsilogic@0 412 if (showFrequencyDomainOptions) {
lbajardsilogic@0 413
lbajardsilogic@0 414 windowLayout->addWidget(new QLabel(tr("Window shape:")), 2, 0);
lbajardsilogic@0 415 WindowTypeSelector *windowTypeSelector = new WindowTypeSelector;
lbajardsilogic@0 416 connect(windowTypeSelector, SIGNAL(windowTypeChanged(WindowType)),
lbajardsilogic@0 417 this, SLOT(windowTypeChanged(WindowType)));
lbajardsilogic@0 418 windowLayout->addWidget(windowTypeSelector, 2, 1);
lbajardsilogic@0 419 }
lbajardsilogic@0 420
lbajardsilogic@0 421 m_windowBox->setVisible(true);
lbajardsilogic@0 422 m_haveWindowBoxData = true;
lbajardsilogic@0 423 m_advancedButton->show();
lbajardsilogic@0 424 }
lbajardsilogic@0 425
lbajardsilogic@0 426 setAdvancedVisible(m_advancedVisible);
lbajardsilogic@0 427 }
lbajardsilogic@0 428
lbajardsilogic@0 429 void
lbajardsilogic@0 430 PluginParameterDialog::setCandidateInputModels(const QStringList &models)
lbajardsilogic@0 431 {
lbajardsilogic@0 432 m_inputModels->clear();
lbajardsilogic@0 433 m_inputModels->insertItems(0, models);
lbajardsilogic@0 434 connect(m_inputModels, SIGNAL(activated(const QString &)),
lbajardsilogic@0 435 this, SIGNAL(inputModelChanged(QString)));
lbajardsilogic@0 436 m_inputModelBox->show();
lbajardsilogic@0 437 }
lbajardsilogic@0 438
lbajardsilogic@0 439 QString
lbajardsilogic@0 440 PluginParameterDialog::getInputModel() const
lbajardsilogic@0 441 {
lbajardsilogic@0 442 return m_inputModels->currentText();
lbajardsilogic@0 443 }
lbajardsilogic@0 444
lbajardsilogic@0 445 void
lbajardsilogic@0 446 PluginParameterDialog::getProcessingParameters(size_t &blockSize) const
lbajardsilogic@0 447 {
lbajardsilogic@0 448 blockSize = m_blockSize;
lbajardsilogic@0 449 return;
lbajardsilogic@0 450 }
lbajardsilogic@0 451
lbajardsilogic@0 452 void
lbajardsilogic@0 453 PluginParameterDialog::getProcessingParameters(size_t &stepSize,
lbajardsilogic@0 454 size_t &blockSize,
lbajardsilogic@0 455 WindowType &windowType) const
lbajardsilogic@0 456 {
lbajardsilogic@0 457 stepSize = m_stepSize;
lbajardsilogic@0 458 blockSize = m_blockSize;
lbajardsilogic@0 459 windowType = m_windowType;
lbajardsilogic@0 460 return;
lbajardsilogic@0 461 }
lbajardsilogic@0 462
lbajardsilogic@0 463 void
lbajardsilogic@0 464 PluginParameterDialog::blockSizeComboChanged(const QString &text)
lbajardsilogic@0 465 {
lbajardsilogic@0 466 m_blockSize = text.toInt();
lbajardsilogic@0 467 std::cerr << "Block size changed to " << m_blockSize << std::endl;
lbajardsilogic@0 468 }
lbajardsilogic@0 469
lbajardsilogic@0 470 void
lbajardsilogic@0 471 PluginParameterDialog::incrementComboChanged(const QString &text)
lbajardsilogic@0 472 {
lbajardsilogic@0 473 m_stepSize = text.toInt();
lbajardsilogic@0 474 //!!! rename increment to step size throughout
lbajardsilogic@0 475 std::cerr << "Increment changed to " << m_stepSize << std::endl;
lbajardsilogic@0 476 }
lbajardsilogic@0 477
lbajardsilogic@0 478 void
lbajardsilogic@0 479 PluginParameterDialog::windowTypeChanged(WindowType type)
lbajardsilogic@0 480 {
lbajardsilogic@0 481 m_windowType = type;
lbajardsilogic@0 482 }
lbajardsilogic@0 483
lbajardsilogic@0 484 void
lbajardsilogic@0 485 PluginParameterDialog::advancedToggled()
lbajardsilogic@0 486 {
lbajardsilogic@0 487 setAdvancedVisible(!m_advancedVisible);
lbajardsilogic@0 488 }
lbajardsilogic@0 489
lbajardsilogic@0 490 void
lbajardsilogic@0 491 PluginParameterDialog::setAdvancedVisible(bool visible)
lbajardsilogic@0 492 {
lbajardsilogic@0 493 m_advanced->setVisible(visible);
lbajardsilogic@0 494
lbajardsilogic@0 495 if (visible) {
lbajardsilogic@0 496 m_advancedButton->setText(tr("Advanced <<"));
lbajardsilogic@0 497 m_advancedButton->setChecked(true);
lbajardsilogic@0 498 } else {
lbajardsilogic@0 499 m_advancedButton->setText(tr("Advanced >>"));
lbajardsilogic@0 500 m_advancedButton->setChecked(false);
lbajardsilogic@0 501 }
lbajardsilogic@0 502
lbajardsilogic@0 503 QSettings settings;
lbajardsilogic@0 504 settings.beginGroup("PluginParameterDialog");
lbajardsilogic@0 505 settings.setValue("advancedvisible", visible);
lbajardsilogic@0 506 settings.endGroup();
lbajardsilogic@0 507
lbajardsilogic@0 508 // std::cerr << "resize to " << sizeHint().width() << " x " << sizeHint().height() << std::endl;
lbajardsilogic@0 509
lbajardsilogic@0 510 setMinimumHeight(sizeHint().height());
lbajardsilogic@0 511 adjustSize();
lbajardsilogic@0 512
lbajardsilogic@0 513 m_advancedVisible = visible;
lbajardsilogic@0 514
lbajardsilogic@0 515 // if (visible) setMaximumHeight(sizeHint().height());
lbajardsilogic@0 516 // adjustSize();
lbajardsilogic@0 517 }
lbajardsilogic@0 518
lbajardsilogic@0 519 void
lbajardsilogic@0 520 PluginParameterDialog::channelComboChanged(int index)
lbajardsilogic@0 521 {
lbajardsilogic@0 522 m_channel = index - 1;
lbajardsilogic@0 523 }
lbajardsilogic@0 524