void SeExprEdColorSwatchWidget::addSwatch(SeVec3d &val, int index) { if(index == -1 || index > _gridLayout->count()) index = _gridLayout->count(); SeExprEdColorWidget *widget = new SeExprEdColorWidget(val, index, _indexLabel, this); SeExprEdColorFrame *swatchFrame = widget->getColorFrame(); _gridLayout->addWidget(widget,index/_columns,index%_columns); connect(swatchFrame,SIGNAL(swatchChanged(QColor)), this,SLOT(internalSwatchChanged(QColor))); connect(swatchFrame,SIGNAL(deleteSwatch(SeExprEdColorFrame *)), this,SLOT(removeSwatch(SeExprEdColorFrame *))); emit swatchAdded(index, val); }
ExprColorCurve::ExprColorCurve(QWidget* parent, QString pLabel, QString vLabel, QString iLabel, bool expandable) : QWidget(parent), _scene(0), _selPosEdit(0), _selValEdit(0), _interpComboBox(0) { Q_UNUSED(iLabel); QHBoxLayout *mainLayout = new QHBoxLayout(); mainLayout->setSpacing(2); mainLayout->setMargin(5); QWidget *edits = new QWidget; QVBoxLayout *editsLayout = new QVBoxLayout; editsLayout->setAlignment(Qt::AlignTop); editsLayout->setSpacing(0); editsLayout->setMargin(0); edits->setLayout(editsLayout); QWidget *selPos = new QWidget; QHBoxLayout *selPosLayout = new QHBoxLayout; selPosLayout->setSpacing(1); selPosLayout->setMargin(1); selPos->setLayout(selPosLayout); _selPosEdit = new QLineEdit; QDoubleValidator *posValidator = new QDoubleValidator(0.0,1.0,6,_selPosEdit); _selPosEdit->setValidator(posValidator); _selPosEdit->setFixedWidth(38); _selPosEdit->setFixedHeight(20); selPosLayout->addStretch(50); QLabel *posLabel; if (pLabel.isEmpty()) { posLabel = new QLabel("Selected Position: "); } else { posLabel = new QLabel(pLabel); } selPosLayout->addWidget(posLabel); selPosLayout->addWidget(_selPosEdit); QWidget *selVal = new QWidget; QBoxLayout *selValLayout = new QHBoxLayout; selValLayout->setSpacing(1); selValLayout->setMargin(1); selVal->setLayout(selValLayout); _selValEdit = new ExprCSwatchFrame(SeExpr2::Vec3d(.5)); _selValEdit->setFixedWidth(38); _selValEdit->setFixedHeight(20); selValLayout->addStretch(50); QLabel *valLabel; if (vLabel.isEmpty()) { valLabel = new QLabel("Selected Color: "); } else { valLabel = new QLabel(vLabel); } selValLayout->addWidget(valLabel); selValLayout->addWidget(_selValEdit); _interpComboBox = new QComboBox; _interpComboBox->addItem("None"); _interpComboBox->addItem("Linear"); _interpComboBox->addItem("Smooth"); _interpComboBox->addItem("Spline"); _interpComboBox->addItem("MSpline"); _interpComboBox->setCurrentIndex(4); _interpComboBox->setFixedWidth(70); _interpComboBox->setFixedHeight(20); editsLayout->addWidget(selPos); editsLayout->addWidget(selVal); editsLayout->addWidget(_interpComboBox); QFrame *curveFrame = new QFrame; curveFrame->setFrameShape(QFrame::Panel); curveFrame->setFrameShadow(QFrame::Sunken); curveFrame->setLineWidth(1); QHBoxLayout *curveFrameLayout = new QHBoxLayout; curveFrameLayout->setMargin(0); CurveGraphicsView *curveView = new CurveGraphicsView; curveView->setFrameShape(QFrame::Panel); curveView->setFrameShadow(QFrame::Sunken); curveView->setLineWidth(1); curveView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); curveView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); _scene = new CCurveScene; curveView->setScene(_scene); curveView->setTransform(QTransform().scale(1, -1)); curveView->setRenderHints(QPainter::Antialiasing); curveFrameLayout->addWidget(curveView); curveFrame->setLayout(curveFrameLayout); mainLayout->addWidget(edits); mainLayout->addWidget(curveFrame); if(expandable){ QPushButton* expandButton=new QPushButton(">"); expandButton->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding); expandButton->setFixedWidth(15); mainLayout->addWidget(expandButton); // open a the detail widget when clicked connect(expandButton, SIGNAL(clicked()), this, SLOT(openDetail())); } mainLayout->setStretchFactor(curveFrame,100); setLayout(mainLayout); // SIGNALS // when a user selects a cv, update the fields on left connect(_scene, SIGNAL(cvSelected(double, SeExpr2::SeExpr2::Vec3d, T_INTERP)), this, SLOT(cvSelectedSlot(double, SeExpr2::SeExpr2::Vec3d, T_INTERP))); // when a user selects a different interp, the curve has to redraw connect(_interpComboBox, SIGNAL(activated(int)), _scene, SLOT(interpChanged(int))); // when a user types a different position, the curve has to redraw connect(_selPosEdit, SIGNAL(returnPressed()), this, SLOT(selPosChanged())); connect(this, SIGNAL(selPosChangedSignal(double)), _scene, SLOT(selPosChanged(double))); // when a user selects a different color, the ramp has to redraw connect(_selValEdit, SIGNAL(selValChangedSignal(SeExpr2::SeExpr2::Vec3d)), _scene, SLOT(selValChanged(SeExpr2::SeExpr2::Vec3d))); connect(_selValEdit, SIGNAL(swatchChanged(QColor)), this, SLOT(internalSwatchChanged(QColor))); // when the widget is resized, resize the curve widget connect(curveView, SIGNAL(resizeSignal(int, int)), _scene, SLOT(resize(int, int))); }