SeExpr

ExprControlCollection.cpp
Go to the documentation of this file.
1 /*
2 * Copyright Disney Enterprises, Inc. All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License
6 * and the following modification to it: Section 6 Trademarks.
7 * deleted and replaced with:
8 *
9 * 6. Trademarks. This License does not grant permission to use the
10 * trade names, trademarks, service marks, or product names of the
11 * Licensor and its affiliates, except as required for reproducing
12 * the content of the NOTICE file.
13 *
14 * You may obtain a copy of the License at
15 * http://www.apache.org/licenses/LICENSE-2.0
16 *
17 * @file ExprControlCollection.cpp
18 * @brief Manages/creates a bunch of ExprControls by using expression text
19 * @author aselle
20 */
21 #include <QVBoxLayout>
22 #include <QHBoxLayout>
23 #include <QToolButton>
24 #include <QPushButton>
25 #include <QRadioButton>
26 #include <QFormLayout>
27 #include <QDialogButtonBox>
28 #include <QColorDialog>
29 #include <QLabel>
30 #include "ExprEditor.h"
31 #include "ExprHighlighter.h"
32 #include "ExprCompletionModel.h"
33 #include "ExprCurve.h"
34 #include "ExprColorCurve.h"
35 #include "ExprControl.h"
36 #include "ExprControlCollection.h"
37 #include "EditableExpression.h"
38 #include "Editable.h"
39
40 ExprControlCollection::ExprControlCollection(QWidget* parent, bool showAddButton)
41 : QWidget(parent), count(0), showAddButton(showAddButton), editableExpression(0) {
42 controlLayout = new QVBoxLayout();
43 controlLayout->setMargin(0);
44 controlLayout->setSpacing(0);
45 controlLayout->insertStretch(-1, 100);
46
47 if (showAddButton) {
48 QPushButton* button = new QPushButton("Add Widget");
49 button->setFocusPolicy(Qt::NoFocus);
50 QHBoxLayout* buttonLayout = new QHBoxLayout();
51 buttonLayout->insertStretch(-1, 100);
52 buttonLayout->addWidget(button, 0);
53 controlLayout->addLayout(buttonLayout);
54 connect(button, SIGNAL(clicked()), SLOT(addControlDialog()));
55 }
56 setLayout(controlLayout);
57 }
58
59 ExprControlCollection::~ExprControlCollection() { delete editableExpression; }
60
61 ExprAddDialog::ExprAddDialog(int& count, QWidget* parent) : QDialog(parent) {
62 QVBoxLayout* verticalLayout;
63 verticalLayout = new QVBoxLayout();
64 verticalLayout->setSpacing(3);
65 verticalLayout->setMargin(3);
66 setLayout(verticalLayout);
67 QHBoxLayout* horizontalLayout = new QHBoxLayout();
68
69 horizontalLayout->addWidget(new QLabel("Variable"));
70 // TODO would be nice to unique this over multiple sessions
71 variableName = new QLineEdit(QString("$var%1").arg(count++));
72
73 horizontalLayout->addWidget(variableName);
74 verticalLayout->addLayout(horizontalLayout);
75
76 tabWidget = new QTabWidget();
77
78 // Curve
79 {
80 QWidget* curveTab = new QWidget();
81 QFormLayout* curveLayout = new QFormLayout(curveTab);
82 curveLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Lookup"));
83 curveLookup = new QLineEdit("$u");
84 curveLayout->setWidget(0, QFormLayout::FieldRole, curveLookup);
85 tabWidget->addTab(curveTab, QString("Curve"));
86 }
87
88 // Color Curve
89 {
90 QWidget* colorCurveTab = new QWidget();
91 QFormLayout* colorCurveLayout = new QFormLayout(colorCurveTab);
92 colorCurveLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Lookup"));
93 colorCurveLookup = new QLineEdit("$u");
94 colorCurveLayout->setWidget(0, QFormLayout::FieldRole, colorCurveLookup);
95 tabWidget->addTab(colorCurveTab, QString("Color Curve"));
96 }
97
98 // Integer
99 {
100 QWidget* intTab = new QWidget();
101 QFormLayout* intFormLayout = new QFormLayout(intTab);
102 intFormLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Default"));
103 intFormLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("Min"));
104 intFormLayout->setWidget(2, QFormLayout::LabelRole, new QLabel("Max"));
105 intDefault = new QLineEdit("0");
106 intFormLayout->setWidget(0, QFormLayout::FieldRole, intDefault);
107 intMin = new QLineEdit("0");
108 intFormLayout->setWidget(1, QFormLayout::FieldRole, intMin);
109 intMax = new QLineEdit("10");
110 intFormLayout->setWidget(2, QFormLayout::FieldRole, intMax);
111 tabWidget->addTab(intTab, QString("Int"));
112 }
113
114 // Float
115 {
116 QWidget* floatTab = new QWidget();
117 QFormLayout* floatFormLayout = new QFormLayout(floatTab);
118 floatFormLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Default"));
119 floatFormLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("Min"));
120 floatFormLayout->setWidget(2, QFormLayout::LabelRole, new QLabel("Max"));
121 floatDefault = new QLineEdit("0");
122 floatFormLayout->setWidget(0, QFormLayout::FieldRole, floatDefault);
123 floatMin = new QLineEdit("0");
124 floatFormLayout->setWidget(1, QFormLayout::FieldRole, floatMin);
125 floatMax = new QLineEdit("1");
126 floatFormLayout->setWidget(2, QFormLayout::FieldRole, floatMax);
127
128 tabWidget->addTab(floatTab, QString("Float"));
129 }
130
131 // Vector
132 {
133 QWidget* vectorTab = new QWidget();
134 QFormLayout* vectorFormLayout = new QFormLayout(vectorTab);
135 vectorFormLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Default"));
136 vectorFormLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("Min"));
137 vectorFormLayout->setWidget(2, QFormLayout::LabelRole, new QLabel("Max"));
138 vectorDefault0 = new QLineEdit("0");
139 vectorDefault1 = new QLineEdit("0");
140 vectorDefault2 = new QLineEdit("0");
141 QHBoxLayout* compLayout = new QHBoxLayout();
142 compLayout->addWidget(vectorDefault0);
143 compLayout->addWidget(vectorDefault1);
144 compLayout->addWidget(vectorDefault2);
145 vectorFormLayout->setLayout(0, QFormLayout::FieldRole, compLayout);
146 vectorMin = new QLineEdit("0");
147 vectorFormLayout->setWidget(1, QFormLayout::FieldRole, vectorMin);
148 vectorMax = new QLineEdit("1");
149 vectorFormLayout->setWidget(2, QFormLayout::FieldRole, vectorMax);
150
151 tabWidget->addTab(vectorTab, QString("Vector"));
152 }
153
154 // Color
155 {
156 QWidget* colorTab = new QWidget();
157 QFormLayout* colorLayout = new QFormLayout(colorTab);
158 colorWidget = new QPushButton();
159 colorWidget->setFixedWidth(30);
160 colorWidget->setFixedWidth(30);
161 colorLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Color"));
162 colorLayout->setWidget(0, QFormLayout::FieldRole, colorWidget);
163 color = Qt::red;
164 QPixmap colorPix(30, 30);
165 colorPix.fill(color);
166 colorWidget->setIcon(QIcon(colorPix));
167 tabWidget->addTab(colorTab, QString("Color"));
168
169 connect(colorWidget, SIGNAL(clicked()), this, SLOT(colorChooseClicked()));
170 }
171
172 // Color Swatch
173 {
174 QWidget* swatchTab = new QWidget();
175 QFormLayout* swatchLayout = new QFormLayout(swatchTab);
176 swatchLookup = new QLineEdit("$u");
177 swatchLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Lookup"));
178 swatchLayout->setWidget(0, QFormLayout::FieldRole, swatchLookup);
179 rainbowPaletteBtn = new QRadioButton("Rainbow");
180 rainbowPaletteBtn->setChecked(true);
181 grayPaletteBtn = new QRadioButton("Shades of Gray");
182 swatchLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("Colors"));
183 swatchLayout->setWidget(1, QFormLayout::FieldRole, rainbowPaletteBtn);
184 swatchLayout->setWidget(2, QFormLayout::LabelRole, new QLabel(""));
185 swatchLayout->setWidget(2, QFormLayout::FieldRole, grayPaletteBtn);
186 tabWidget->addTab(swatchTab, QString("Swatch"));
187 }
188
189 // String literal
190 {
191 QWidget* stringTab = new QWidget();
192 QFormLayout* stringLayout = new QFormLayout(stringTab);
193 stringTypeWidget = new QComboBox();
194 stringTypeWidget->addItem("string");
195 stringTypeWidget->addItem("file");
196 stringTypeWidget->addItem("directory");
197 stringDefaultWidget = new QLineEdit();
198 stringNameWidget = new QLineEdit("str1");
199
200 stringLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("String Name"));
201 stringLayout->setWidget(0, QFormLayout::FieldRole, stringNameWidget);
202 stringLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("String Type"));
203 stringLayout->setWidget(1, QFormLayout::FieldRole, stringTypeWidget);
204 stringLayout->setWidget(2, QFormLayout::LabelRole, new QLabel("String Default"));
205 stringLayout->setWidget(3, QFormLayout::FieldRole, stringDefaultWidget);
206
207 tabWidget->addTab(stringTab, QString("String"));
208 }
209
210 // Anim Curve
211 {
212 QWidget* curveTab = new QWidget();
213 QFormLayout* curveLayout = new QFormLayout(curveTab);
214 curveLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Lookup"));
215 curveLayout->setWidget(1, QFormLayout::LabelRole, new QLabel("Link"));
216 animCurveLookup = new QLineEdit("$frame");
217 animCurveLink = new QLineEdit("");
218 curveLayout->setWidget(0, QFormLayout::FieldRole, animCurveLookup);
219 curveLayout->setWidget(1, QFormLayout::FieldRole, animCurveLink);
220 tabWidget->addTab(curveTab, QString("AnimCurve"));
221 }
222
223 // DeepWater
224 {
225 QWidget* deepWaterTab = new QWidget();
226 QFormLayout* deepWaterLayout = new QFormLayout(deepWaterTab);
227 deepWaterLayout->setWidget(0, QFormLayout::LabelRole, new QLabel("Lookup"));
228 deepWaterLookup = new QLineEdit("$u");
229 deepWaterLayout->setWidget(0, QFormLayout::FieldRole, deepWaterLookup);
230 tabWidget->addTab(deepWaterTab, QString("Deep Water"));
231 }
232
233 verticalLayout->addWidget(tabWidget);
234
235 QDialogButtonBox* buttonBox = new QDialogButtonBox();
236 buttonBox->setOrientation(Qt::Horizontal);
237 buttonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
238
239 verticalLayout->addWidget(buttonBox);
240
241 QObject::connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
242 QObject::connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
243
244 tabWidget->setCurrentIndex(0);
245 }
246
247 void ExprAddDialog::colorChooseClicked() {
248 color = QColorDialog::getColor(color);
249 if (color.isValid()) {
250 QPixmap colorPix(30, 30);
251 colorPix.fill(color);
252 ((QPushButton*)sender())->setIcon(QIcon(colorPix));
253 }
254 }
255
256 const char* ExprAddDialog::initSwatch() {
257 if (rainbowPaletteBtn->isChecked())
258 return ("[1,0,0],[1,.6,0],[1,1,0],[0,1,0],[0,1,1],[0,0,1],[.6,.1,.6],[1,0,1],[1,1,1],[0,0,0]");
259 else if (grayPaletteBtn->isChecked())
260 return (
261 "[1,1,1],[.9,.9,.9],[.8,.8,.8],[.7,.7,.7],[.6,.6,.6],[.5,.5,.5],[.4,.4,.4],[.3,.3,.3],[.2,.2,.2],[0,0,0]");
262 else
263 return ("[1,1,1],[.5,.5,.5],[0,0,0]");
264 }
265
266 void ExprControlCollection::addControlDialog() {
267 ExprAddDialog* dialog = new ExprAddDialog(count, this);
268 if (dialog->exec()) {
269 QString s;
270 switch (dialog->tabWidget->currentIndex()) {
271 case 0:
272 s = QString("%1 = curve(%2,0,0,4,1,1,4);\n").arg(dialog->variableName->text()).arg(
273 dialog->curveLookup->text());
274 break;
275 case 1:
276 s = QString("%1 = ccurve(%2,0,[0,0,0],4,1,[1,1,1],4);\n").arg(dialog->variableName->text()).arg(
277 dialog->colorCurveLookup->text());
278 break;
279 case 2:
280 s = dialog->variableName->text() + " = " + dialog->intDefault->text() + "; # " +
281 dialog->intMin->text() + "," + dialog->intMax->text() + "\n";
282 break;
283 case 3:
284 s = QString("%1 = %2; # %3, %4\n")
285 .arg(dialog->variableName->text())
286 .arg(dialog->floatDefault->text())
287 .arg(atof(dialog->floatMin->text().toStdString().c_str()), 0, 'f', 3)
288 .arg(atof(dialog->floatMax->text().toStdString().c_str()), 0, 'f', 3);
289 break;
290 case 4:
291 s = QString("%1 = [%2,%3,%4]; # %5, %6\n")
292 .arg(dialog->variableName->text())
293 .arg(dialog->vectorDefault0->text())
294 .arg(dialog->vectorDefault1->text())
295 .arg(dialog->vectorDefault2->text())
296 .arg(atof(dialog->vectorMin->text().toStdString().c_str()), 0, 'f', 3)
297 .arg(atof(dialog->vectorMax->text().toStdString().c_str()), 0, 'f', 3);
298 break;
299 case 5:
300 s = QString("%1 = [%2,%3,%4];\n")
301 .arg(dialog->variableName->text())
302 .arg(dialog->color.redF())
303 .arg(dialog->color.greenF())
304 .arg(dialog->color.blueF());
305 break;
306 case 6:
307 s = QString("%1 = swatch(%2,%3);\n")
308 .arg(dialog->variableName->text())
309 .arg(dialog->swatchLookup->text())
310 .arg(dialog->initSwatch());
311 break;
312 case 7:
313 s = QString("\"%1\" #%2 %3\n")
314 .arg(dialog->stringDefaultWidget->text())
315 .arg(dialog->stringTypeWidget->currentText())
316 .arg(dialog->stringNameWidget->text());
317 break;
318 case 8:
319 s = QString("%1 = animCurve(%2,\"constant\",\"constant\",0,\"%3\");")
320 .arg(dialog->variableName->text())
321 .arg(dialog->animCurveLookup->text())
322 .arg(dialog->animCurveLink->text());
323 break;
324 case 9:
325 s = QString("%1 = deepWater(%2,9,30,0,1,0,5,0,0,[0,0,0],0,0,0);\n")
326 .arg(dialog->variableName->text())
327 .arg(dialog->deepWaterLookup->text());
328 break;
329 }
330 emit insertString(s.toStdString());
331 }
332 }
333
334 bool ExprControlCollection::rebuildControls(const QString& expressionText, std::vector<QString>& variables) {
335 // parse a new editable expression so we can check if we need to make new controls
336 EditableExpression* newEditable = new EditableExpression;
337 newEditable->setExpr(expressionText.toStdString());
338
339 // check for new variables
340
341 bool newVariables = true;
342 if (editableExpression && editableExpression->getVariables() == newEditable->getVariables()) newVariables = false;
343 if (newVariables) {
344 const std::vector<std::string>& vars = newEditable->getVariables();
345 variables.clear();
346 for (size_t k = 0; k < vars.size(); k++) {
347 variables.push_back(("$" + vars[k]).c_str());
348 }
349 }
350
351 if (newEditable->size() == 0 && !editableExpression) return false;
352
353 if (editableExpression && editableExpression->controlsMatch(*newEditable)) {
354 // controls match so we only need to update positions (i.e. if the user typed and shifted some controls)
355 editableExpression->updateString(*newEditable);
356 delete newEditable;
357 } else {
358 // controls did not match
359
360 // delete old controls
361 for (unsigned int i = 0; i < _controls.size(); i++) {
362 controlLayout->removeWidget(_controls[i]);
363 delete _controls[i];
364 }
365 _linkedId = -1;
366 _controls.clear();
367
368 // swap to new editable expression
369 delete editableExpression;
370 editableExpression = newEditable;
371
372 // build new controls
373 for (size_t i = 0; i < editableExpression->size(); i++) {
374 Editable* editable = (*editableExpression)[i];
375 ExprControl* widget = 0;
376 // Create control "factory" (but since its only used here...)
377 if (NumberEditable* x = dynamic_cast<NumberEditable*>(editable))
378 widget = new NumberControl(i, x);
379 else if (VectorEditable* x = dynamic_cast<VectorEditable*>(editable))
380 widget = new VectorControl(i, x);
381 else if (StringEditable* x = dynamic_cast<StringEditable*>(editable))
382 widget = new StringControl(i, x);
383 else if (CurveEditable* x = dynamic_cast<CurveEditable*>(editable))
384 widget = new CurveControl(i, x);
385 else if (ColorCurveEditable* x = dynamic_cast<ColorCurveEditable*>(editable))
386 widget = new CCurveControl(i, x);
387 else if (AnimCurveEditable* x = dynamic_cast<AnimCurveEditable*>(editable)) {
388 widget = new AnimCurveControl(i, x);
389 } else if (ColorSwatchEditable* x = dynamic_cast<ColorSwatchEditable*>(editable))
390 widget = new ColorSwatchControl(i, x);
391 else if (DeepWaterEditable* x = dynamic_cast<DeepWaterEditable*>(editable))
392 widget = new DeepWaterControl(i, x);
393 else {
394 std::cerr << "SeExpr editor logic error, cannot find a widget for the given editable" << std::endl;
395 }
396 if (widget) {
397 // successfully made widget
398 int insertPoint = controlLayout->count() - 1;
399 if (showAddButton) insertPoint--;
400 controlLayout->insertWidget(insertPoint, widget);
401 _controls.push_back(widget);
402 connect(widget, SIGNAL(controlChanged(int)), SLOT(singleControlChanged(int)));
403 connect(widget, SIGNAL(linkColorEdited(int, QColor)), SLOT(linkColorEdited(int, QColor)));
404 connect(widget, SIGNAL(linkColorLink(int)), SLOT(linkColorLink(int)));
405 } else {
406 std::cerr << "Expr Editor Logic ERROR did not make widget" << std::endl;
407 }
408 }
409 }
410 return newVariables;
411 }
412
413 void ExprControlCollection::showEditor(int idx) {
414 if (idx < 0 || idx >= (int)_controls.size()) return;
415
416 /* Right now we only launch the anim curve editor.
417 * It would be better to launch them generically. */
418 AnimCurveControl* control = dynamic_cast<AnimCurveControl*>(_controls[idx]);
419 if (!control) return;
420
421 control->editGraphClicked();
422 }
423
424 void ExprControlCollection::linkColorLink(int id) {
425 _linkedId = id;
426 for (unsigned int i = 0; i < _controls.size(); i++) {
427 _controls[i]->linkDisconnect(_linkedId);
428 }
429 }
430
431 void ExprControlCollection::linkColorEdited(int id, QColor color) {
432 if (id == _linkedId) emit linkColorOutput(color);
433 }
434
435 void ExprControlCollection::linkColorInput(QColor color) {
436 // TODO: fix
437 if (_linkedId < 0 || _linkedId >= (int)_controls.size()) return;
438 _controls[_linkedId]->setColor(color);
439 }
440
441 void ExprControlCollection::updateText(const int id, QString& text) {
442 Q_UNUSED(id);
443 if (editableExpression) text = QString(editableExpression->getEditedExpr().c_str());
444 }
445
446 void ExprControlCollection::singleControlChanged(int id) { emit controlChanged(id); }
ExprControlCollection::_controls
std::vector< ExprControl * > _controls
Definition: ExprControlCollection.h:97
EditableExpression::setExpr
void setExpr(const std::string &expr)
Set's expressions and parses it into "control editable form".
Definition: EditableExpression.cpp:30
ExprAddDialog::grayPaletteBtn
QRadioButton * grayPaletteBtn
Definition: ExprControlCollection.h:64
AnimCurveEditable
Definition: Editable.h:211
ExprCurve.h
ExprAddDialog::vectorDefault0
QLineEdit * vectorDefault0
Definition: ExprControlCollection.h:52
VectorEditable
Definition: Editable.h:101
Editable
Definition: Editable.h:40
EditableExpression
Factors a SeExpr into an editable expression with controls (i.e. value boxes, curve boxes)
Definition: EditableExpression.h:29
ExprAddDialog::rainbowPaletteBtn
QRadioButton * rainbowPaletteBtn
Definition: ExprControlCollection.h:63
Editable.h
ColorSwatchEditable
Definition: Editable.h:274
ExprAddDialog::initSwatch
const char * initSwatch()
Definition: ExprControlCollection.cpp:256
ExprControlCollection::ExprControlCollection
ExprControlCollection(QWidget *parent=0, bool showAddButton=true)
Definition: ExprControlCollection.cpp:40
variables
</pre > Once we have this we need an instance to store our variable and provide a reference to that We make it because it may be useful to use the same ExprVarRef from multiple expressions ! For if you have expressions that all have access to the same variables
Definition: tutorial.txt:128
AnimCurveControl
Definition: ExprControl.h:283
ExprAddDialog::color
QColor color
Definition: ExprControlCollection.h:65
ExprControlCollection::showEditor
void showEditor(int idx)
Definition: ExprControlCollection.cpp:413
ExprControlCollection::_linkedId
int _linkedId
Definition: ExprControlCollection.h:82
ExprControlCollection::linkColorOutput
void linkColorOutput(QColor color)
Gives information about when a link color was changed.
DeepWaterControl
Control for displaying a deep water spectrum.
Definition: ExprControl.h:329
ExprAddDialog::vectorMax
QLineEdit * vectorMax
Definition: ExprControlCollection.h:56
ExprAddDialog::variableName
QLineEdit * variableName
Definition: ExprControlCollection.h:41
ExprAddDialog::colorCurveLookup
QLineEdit * colorCurveLookup
Definition: ExprControlCollection.h:58
ExprAddDialog::floatDefault
QLineEdit * floatDefault
Definition: ExprControlCollection.h:49
AnimCurveControl::editGraphClicked
void editGraphClicked()
Definition: ExprControl.cpp:637
CCurveControl
Control for editing a color ramp curve.
Definition: ExprControl.h:264
ExprControlCollection::linkColorLink
void linkColorLink(int id)
Notification by a control that a new color link is desired.
Definition: ExprControlCollection.cpp:424
EditableExpression::size
size_t size() const
Return the count of editable parameters.
Definition: EditableExpression.h:55
ExprHighlighter.h
ExprControlCollection::count
int count
Definition: ExprControlCollection.h:85
ExprControlCollection::controlLayout
QVBoxLayout * controlLayout
Definition: ExprControlCollection.h:98
EditableExpression::controlsMatch
bool controlsMatch(const EditableExpression &other) const
Check if the other editable expression has editables that all match i.e. the controls are same.
Definition: EditableExpression.cpp:95
ExprAddDialog::vectorMin
QLineEdit * vectorMin
Definition: ExprControlCollection.h:55
ExprAddDialog::vectorDefault1
QLineEdit * vectorDefault1
Definition: ExprControlCollection.h:53
ExprControlCollection::insertString
void insertString(const std::string &controlString)
ExprAddDialog::stringTypeWidget
QComboBox * stringTypeWidget
Definition: ExprControlCollection.h:67
ExprAddDialog::colorChooseClicked
void colorChooseClicked()
Definition: ExprControlCollection.cpp:247
ExprAddDialog::swatchLookup
QLineEdit * swatchLookup
Definition: ExprControlCollection.h:61
ExprAddDialog::floatMin
QLineEdit * floatMin
Definition: ExprControlCollection.h:50
NumberEditable
Definition: Editable.h:60
EditableExpression::getVariables
const std::vector< std::string > & getVariables() const
Get list of commentsø
Definition: EditableExpression.h:58
ExprControlCollection::editableExpression
EditableExpression * editableExpression
Definition: ExprControlCollection.h:89
ExprControlCollection::updateText
void updateText(const int id, QString &text)
Request new text, given taking into account control id's new values.
Definition: ExprControlCollection.cpp:441
ColorSwatchControl
A control for editing color swatches.
Definition: ExprControl.h:307
ExprAddDialog::curveLookup
QLineEdit * curveLookup
Definition: ExprControlCollection.h:57
ExprColorCurve.h
ExprAddDialog::tabWidget
QTabWidget * tabWidget
Definition: ExprControlCollection.h:45
ExprControlCollection::rebuildControls
bool rebuildControls(const QString &expressionText, std::vector< QString > &variables)
Rebuild the controls given the new expressionText. Return any local variables found.
Definition: ExprControlCollection.cpp:334
DeepWaterEditable
Definition: Editable.h:327
ExprControlCollection::linkColorEdited
void linkColorEdited(int id, QColor color)
Notification by a control that a color is edited (when it is linked)
Definition: ExprControlCollection.cpp:431
CurveControl
Control for editing a normal curve ramp.
Definition: ExprControl.h:248
ExprAddDialog::intMax
QLineEdit * intMax
Definition: ExprControlCollection.h:48
StringControl
A control for editing strings, filenames, and directories.
Definition: ExprControl.h:227
ExprAddDialog::intMin
QLineEdit * intMin
Definition: ExprControlCollection.h:47
EditableExpression::updateString
void updateString(const EditableExpression &other)
Update the string refered to into the controls (this is only valid if controlsmatch)
Definition: EditableExpression.cpp:82
ExprAddDialog::animCurveLookup
QLineEdit * animCurveLookup
Definition: ExprControlCollection.h:59
ExprControlCollection::showAddButton
bool showAddButton
Definition: ExprControlCollection.h:86
ExprControl.h
NumberControl
Number slider for either float or int data.
Definition: ExprControl.h:171
EditableExpression::getEditedExpr
std::string getEditedExpr() const
Return a reconstructed expression using all the editable's current values.
Definition: EditableExpression.cpp:69
ExprAddDialog::colorWidget
QPushButton * colorWidget
Definition: ExprControlCollection.h:66
ExprCompletionModel.h
ExprControlCollection::~ExprControlCollection
~ExprControlCollection()
Definition: ExprControlCollection.cpp:59
ExprAddDialog
This class is the UI for adding widgets.
Definition: ExprControlCollection.h:40
ExprAddDialog::ExprAddDialog
ExprAddDialog(int &count, QWidget *parent=0)
Definition: ExprControlCollection.cpp:61
ExprControl
Base class for all controls for Expressions.
Definition: ExprControl.h:54
ExprAddDialog::deepWaterLookup
QLineEdit * deepWaterLookup
Definition: ExprControlCollection.h:62
StringEditable
Definition: Editable.h:134
GenericCurveEditable
Definition: Editable.h:170
ExprEditor.h
ExprAddDialog::stringDefaultWidget
QLineEdit * stringDefaultWidget
Definition: ExprControlCollection.h:68
EditableExpression.h
ExprAddDialog::vectorDefault2
QLineEdit * vectorDefault2
Definition: ExprControlCollection.h:54
ExprAddDialog::floatMax
QLineEdit * floatMax
Definition: ExprControlCollection.h:51
ExprControlCollection::addControlDialog
void addControlDialog()
When a user clicks "Add Widget" button.
Definition: ExprControlCollection.cpp:266
ExprControlCollection.h
ExprControlCollection::singleControlChanged
void singleControlChanged(int id)
Notification when by a control whenever it is edited.
Definition: ExprControlCollection.cpp:446
ExprAddDialog::stringNameWidget
QLineEdit * stringNameWidget
Definition: ExprControlCollection.h:69
VectorControl
A vector or color control (named vector because it edits a SeExpr2::Vec3d literal)
Definition: ExprControl.h:196
x
</pre >< h3 > A simple variable reference</h3 > This is not a very interesting subclass of expression until we add some additional variables Variables on some applications may be very dynamic In this we only need x
Definition: tutorial.txt:108
ExprAddDialog::intDefault
QLineEdit * intDefault
Definition: ExprControlCollection.h:46
ExprControlCollection::controlChanged
void controlChanged(int id)
Notification that a specific control was changed.
ExprAddDialog::animCurveLink
QLineEdit * animCurveLink
Definition: ExprControlCollection.h:60
ExprControlCollection::linkColorInput
void linkColorInput(QColor color)
Definition: ExprControlCollection.cpp:435