NewLayerDialog::NewLayerDialog(const ImageComponents& original, QWidget* parent) : QDialog(parent) , _imp( new NewLayerDialogPrivate() ) { _imp->mainLayout = new QGridLayout(this); _imp->layerLabel = new Label(tr("Layer Name"), this); _imp->layerEdit = new LineEdit(this); _imp->numCompsLabel = new Label(tr("No. Channels"), this); _imp->numCompsBox = new SpinBox(this, SpinBox::eSpinBoxTypeInt); QObject::connect( _imp->numCompsBox, SIGNAL(valueChanged(double)), this, SLOT(onNumCompsChanged(double)) ); _imp->numCompsBox->setMinimum(1); _imp->numCompsBox->setMaximum(4); _imp->numCompsBox->setValue(4); _imp->rLabel = new Label(tr("1st Channel"), this); _imp->rEdit = new LineEdit(this); _imp->gLabel = new Label(tr("2nd Channel"), this); _imp->gEdit = new LineEdit(this); _imp->bLabel = new Label(tr("3rd Channel"), this); _imp->bEdit = new LineEdit(this); _imp->aLabel = new Label(tr("4th Channel"), this); _imp->aEdit = new LineEdit(this); _imp->setRgbaButton = new Button(this); _imp->setRgbaButton->setText( tr("Set RGBA") ); QObject::connect( _imp->setRgbaButton, SIGNAL(clicked(bool)), this, SLOT(onRGBAButtonClicked()) ); _imp->buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); QObject::connect( _imp->buttons, SIGNAL(accepted()), this, SLOT(accept()) ); QObject::connect( _imp->buttons, SIGNAL(rejected()), this, SLOT(reject()) ); _imp->mainLayout->addWidget(_imp->layerLabel, 0, 0, 1, 1); _imp->mainLayout->addWidget(_imp->layerEdit, 0, 1, 1, 1); _imp->mainLayout->addWidget(_imp->numCompsLabel, 1, 0, 1, 1); _imp->mainLayout->addWidget(_imp->numCompsBox, 1, 1, 1, 1); _imp->mainLayout->addWidget(_imp->rLabel, 2, 0, 1, 1); _imp->mainLayout->addWidget(_imp->rEdit, 2, 1, 1, 1); _imp->mainLayout->addWidget(_imp->gLabel, 3, 0, 1, 1); _imp->mainLayout->addWidget(_imp->gEdit, 3, 1, 1, 1); _imp->mainLayout->addWidget(_imp->bLabel, 4, 0, 1, 1); _imp->mainLayout->addWidget(_imp->bEdit, 4, 1, 1, 1); _imp->mainLayout->addWidget(_imp->aLabel, 5, 0, 1, 1); _imp->mainLayout->addWidget(_imp->aEdit, 5, 1, 1, 1); _imp->mainLayout->addWidget(_imp->setRgbaButton, 6, 0, 1, 2); _imp->mainLayout->addWidget(_imp->buttons, 7, 0, 1, 2); if (original.getNumComponents() != 0) { _imp->layerEdit->setText( QString::fromUtf8( original.getLayerName().c_str() ) ); LineEdit* edits[4] = {_imp->rEdit, _imp->gEdit, _imp->bEdit, _imp->aEdit}; Label* labels[4] = {_imp->rLabel, _imp->gLabel, _imp->bLabel, _imp->aLabel}; const std::vector<std::string>& channels = original.getComponentsNames(); for (int i = 0; i < 4; ++i) { if ( i >= (int)channels.size() ) { edits[i]->setVisible(false); labels[i]->setVisible(false); } else { edits[i]->setText( QString::fromUtf8( channels[i].c_str() ) ); } } _imp->numCompsBox->setValue( (double)channels.size() ); } }