Skip to content

Commit 5079132

Browse files
author
Koen Deforche
committed
Several changes:
- fixed a bug where the old session id was kept for file upload - added adjustSize() in WTableView - treeview-dragdrop example: restore numerical sorting - Several WGLWidget and 3D chart improvements and feature additions - Made WCssRule::selector() and WTemplate::templateText() virtual (#3217) - DomElement::removeAttribute() had no effect (#3271) - Fix alternating rowcolors out of sync for zoom != 100% (#1352) - port WServer::post() functionality to JWt - Fixed shift of 5 pixels (to left/top) on drag of WSlider - Fixed #2744 Segfault if slider range is 0 or 1 - Updating slider so that disabled --> enabled transition works - Reimplement WServer::post() to enqueue action in session-specific queue
1 parent 0f10834 commit 5079132

File tree

118 files changed

+6224
-1108
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+6224
-1108
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ SET(CMAKE_MODULE_PATH
1818

1919
SET(VERSION_SERIES 3)
2020
SET(VERSION_MAJOR 3)
21-
SET(VERSION_MINOR 3)
21+
SET(VERSION_MINOR 4)
2222

2323
SET(WT_SOVERSION 38)
2424
SET(WTEXT_SOVERSION 38)

WConfig.h.in

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,3 @@
5050
#endif
5151

5252
#endif
53-

examples/chart3D/DataSettings.C

Lines changed: 253 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <Wt/WLineEdit>
44
#include <Wt/WComboBox>
55
#include <Wt/WCheckBox>
6+
#include <Wt/WSlider>
67
#include <Wt/WTemplate>
78
#include <Wt/WIntValidator>
89
#include <Wt/Chart/WAbstractDataSeries3D>
@@ -16,6 +17,10 @@ DataSettings::DataSettings()
1617
setName_ = new WLineEdit(this);
1718
pointsize_ = new WLineEdit(this);
1819
pointsize_->setValidator(new WIntValidator(1, 10));
20+
pointSprite_ = new WComboBox(this);
21+
pointSprite_->addItem("None");
22+
pointSprite_->addItem("diamond (5x5)");
23+
pointSprite_->addItem("cross (5x5)");
1924
colormap_ = new WComboBox(this);
2025
colormap_->addItem("None");
2126
colormap_->addItem("Continuous");
@@ -35,6 +40,19 @@ DataSettings::DataSettings()
3540
pointsize_->changed().connect(std::bind([&] () {
3641
data_->setPointSize(Wt::asNumber(pointsize_->text()));
3742
}));
43+
pointSprite_->changed().connect(std::bind([&] () {
44+
switch (pointSprite_->currentIndex()) {
45+
case 0:
46+
data_->setPointSprite("");
47+
break;
48+
case 1:
49+
data_->setPointSprite("diamond.png");
50+
break;
51+
case 2:
52+
data_->setPointSprite("cross.png");
53+
break;
54+
}
55+
}));
3856
colormap_->changed().connect(std::bind([&] () {
3957
WStandardColorMap *colMap;
4058
switch (colormap_->currentIndex()) {
@@ -74,6 +92,7 @@ void DataSettings::bindBaseToTemplate(WTemplate* configtemplate)
7492
{
7593
configtemplate->bindWidget("setname", setName_);
7694
configtemplate->bindWidget("ptsize", pointsize_);
95+
configtemplate->bindWidget("ptsprite", pointSprite_);
7796
configtemplate->bindWidget("colormap", colormap_);
7897
configtemplate->bindWidget("showcolormap", showColormap_);
7998
configtemplate->bindWidget("colormapside", colormapSide_);
@@ -89,6 +108,15 @@ void DataSettings::bindBaseDataSet(WAbstractDataSeries3D *data)
89108

90109
pointsize_->setText(Wt::asString(data->pointSize()));
91110

111+
const std::string &sprite = data->pointSprite();
112+
if (sprite == "") {
113+
pointSprite_->setCurrentIndex(0);
114+
} else if (sprite == "diamond.png") {
115+
pointSprite_->setCurrentIndex(1);
116+
} else if (sprite == "cross.png") {
117+
pointSprite_->setCurrentIndex(2);
118+
}
119+
92120
if (data->colorMap() == 0) {
93121
colormap_->setCurrentIndex(0);
94122
} else {
@@ -125,7 +153,13 @@ void DataSettings::bindBaseDataSet(WAbstractDataSeries3D *data)
125153
* Definition of class responsible for configuring numerical grid data-sets
126154
*/
127155
NumGridDataSettings::NumGridDataSettings()
128-
: gridData_(0)
156+
: changeXClippingMin_(1, this),
157+
changeXClippingMax_(1, this),
158+
changeYClippingMin_(1, this),
159+
changeYClippingMax_(1, this),
160+
changeZClippingMin_(1, this),
161+
changeZClippingMax_(1, this),
162+
gridData_(0)
129163
{
130164
WTemplate* template_ = new WTemplate(Wt::WString::tr("numgriddata-template"), this);
131165
bindBaseToTemplate(template_);
@@ -144,10 +178,73 @@ NumGridDataSettings::NumGridDataSettings()
144178
penColor_->addItem("red");
145179
penColor_->addItem("green");
146180
penColor_->addItem("blue");
147-
penColor_->addItem("something");
148181
template_->bindWidget("pencolor", penColor_);
149182

183+
xClippingMin_ = new WSlider(Wt::Horizontal, this);
184+
xClippingMin_->setMinimum(-100);
185+
xClippingMin_->setMaximum(100);
186+
xClippingMin_->setValue(-100);
187+
template_->bindWidget("x-clipping-min", xClippingMin_);
188+
xClippingMax_ = new WSlider(Wt::Horizontal, this);
189+
xClippingMax_->setMinimum(-100);
190+
xClippingMax_->setMaximum(100);
191+
xClippingMax_->setValue(100);
192+
template_->bindWidget("x-clipping-max", xClippingMax_);
193+
yClippingMin_ = new WSlider(Wt::Horizontal, this);
194+
yClippingMin_->setMinimum(-100);
195+
yClippingMin_->setMaximum(100);
196+
yClippingMin_->setValue(-100);
197+
template_->bindWidget("y-clipping-min", yClippingMin_);
198+
yClippingMax_ = new WSlider(Wt::Horizontal, this);
199+
yClippingMax_->setMinimum(-100);
200+
yClippingMax_->setMaximum(100);
201+
yClippingMax_->setValue(100);
202+
template_->bindWidget("y-clipping-max", yClippingMax_);
203+
zClippingMin_ = new WSlider(Wt::Horizontal, this);
204+
zClippingMin_->setMinimum(-100);
205+
zClippingMin_->setMaximum(100);
206+
zClippingMin_->setValue(-100);
207+
template_->bindWidget("z-clipping-min", zClippingMin_);
208+
zClippingMax_ = new WSlider(Wt::Horizontal, this);
209+
zClippingMax_->setMinimum(-100);
210+
zClippingMax_->setMaximum(100);
211+
zClippingMax_->setValue(100);
212+
template_->bindWidget("z-clipping-max", zClippingMax_);
213+
showClippingLines_ = new WCheckBox(this);
214+
template_->bindWidget("clippinglines", showClippingLines_);
215+
clippingLinesColor_ = new WComboBox(this);
216+
clippingLinesColor_->addItem("black");
217+
clippingLinesColor_->addItem("red");
218+
clippingLinesColor_->addItem("green");
219+
clippingLinesColor_->addItem("blue");
220+
clippingLinesColor_->addItem("cyan");
221+
clippingLinesColor_->addItem("magenta");
222+
clippingLinesColor_->addItem("yellow");
223+
template_->bindWidget("clippinglines-color", clippingLinesColor_);
224+
showIsolines_ = new WCheckBox(this);
225+
template_->bindWidget("isolines", showIsolines_);
226+
isolineColormap_ = new WComboBox(this);
227+
isolineColormap_->addItem("None (use surface's colormap)");
228+
isolineColormap_->addItem("Continuous");
229+
isolineColormap_->addItem("Continuous (5 bands)");
230+
isolineColormap_->addItem("Continuous (10 bands)");
231+
template_->bindWidget("isoline-colormap", isolineColormap_);
232+
150233
// make connections
234+
xClippingMin_->sliderMoved().connect(changeXClippingMin_);
235+
xClippingMax_->sliderMoved().connect(changeXClippingMax_);
236+
yClippingMin_->sliderMoved().connect(changeYClippingMin_);
237+
yClippingMax_->sliderMoved().connect(changeYClippingMax_);
238+
zClippingMin_->sliderMoved().connect(changeZClippingMin_);
239+
zClippingMax_->sliderMoved().connect(changeZClippingMax_);
240+
241+
showClippingLines_->checked().connect(std::bind([&] () {
242+
gridData_->setClippingLinesEnabled(true);
243+
}));
244+
showClippingLines_->unChecked().connect(std::bind([&] () {
245+
gridData_->setClippingLinesEnabled(false);
246+
}));
247+
151248
typeSelection_->changed().connect(std::bind([&] () {
152249
switch (typeSelection_->currentIndex()) {
153250
case 0:
@@ -180,26 +277,163 @@ NumGridDataSettings::NumGridDataSettings()
180277
}
181278
gridData_->setPen(pen);
182279
}));
280+
clippingLinesColor_->changed().connect(std::bind([&] () {
281+
switch (clippingLinesColor_->currentIndex()) {
282+
case 0:
283+
gridData_->setClippingLinesColor(black); break;
284+
case 1:
285+
gridData_->setClippingLinesColor(red); break;
286+
case 2:
287+
gridData_->setClippingLinesColor(green); break;
288+
case 3:
289+
gridData_->setClippingLinesColor(blue); break;
290+
case 4:
291+
gridData_->setClippingLinesColor(cyan); break;
292+
case 5:
293+
gridData_->setClippingLinesColor(magenta); break;
294+
case 6:
295+
gridData_->setClippingLinesColor(yellow); break;
296+
}
297+
}));
298+
showIsolines_->checked().connect(std::bind([&] () {
299+
std::vector<double> isoLevels;
300+
for (double z = -20.0; z <= 20.0; z += 0.5) {
301+
isoLevels.push_back(z);
302+
}
303+
gridData_->setIsoLevels(isoLevels);
304+
}));
305+
showIsolines_->unChecked().connect(std::bind([&] () {
306+
gridData_->setIsoLevels(std::vector<double>());
307+
}));
308+
isolineColormap_->changed().connect(std::bind([&] () {
309+
WStandardColorMap *colMap;
310+
switch (isolineColormap_->currentIndex()) {
311+
case 0:
312+
gridData_->setIsoColorMap(0); break;
313+
case 1:
314+
gridData_->setIsoColorMap(new WStandardColorMap(gridData_->minimum(ZAxis_3D), gridData_->maximum(ZAxis_3D), true));
315+
break;
316+
case 2:
317+
colMap = new WStandardColorMap(gridData_->minimum(ZAxis_3D), gridData_->maximum(ZAxis_3D), true);
318+
colMap->discretise(5);
319+
gridData_->setIsoColorMap(colMap);
320+
break;
321+
case 3:
322+
colMap = new WStandardColorMap(gridData_->minimum(ZAxis_3D), gridData_->maximum(ZAxis_3D), true);
323+
colMap->discretise(10);
324+
gridData_->setIsoColorMap(colMap);
325+
break;
326+
}
327+
}));
183328
}
184329

185330
void NumGridDataSettings::bindDataSet(WAbstractGridData *data)
186331
{
332+
for (auto &conn : clippingConnections_) {
333+
conn.disconnect();
334+
}
335+
187336
gridData_ = data;
188337

338+
changeXClippingMin_.setJavaScript(
339+
"function (o,e,pos) { " + gridData_->changeClippingMin(XAxis_3D).execJs("o","e","pos / 5.0") + " }", 1);
340+
changeXClippingMax_.setJavaScript(
341+
"function (o,e,pos) { " + gridData_->changeClippingMax(XAxis_3D).execJs("o","e","pos / 5.0") + " }", 1);
342+
changeYClippingMin_.setJavaScript(
343+
"function (o,e,pos) { " + gridData_->changeClippingMin(YAxis_3D).execJs("o","e","pos / 5.0") + " }", 1);
344+
changeYClippingMax_.setJavaScript(
345+
"function (o,e,pos) { " + gridData_->changeClippingMax(YAxis_3D).execJs("o","e","pos / 5.0") + " }", 1);
346+
changeZClippingMin_.setJavaScript(
347+
"function (o,e,pos) { " + gridData_->changeClippingMin(ZAxis_3D).execJs("o","e","pos / 5.0") + " }", 1);
348+
changeZClippingMax_.setJavaScript(
349+
"function (o,e,pos) { " + gridData_->changeClippingMax(ZAxis_3D).execJs("o","e","pos / 5.0") + " }", 1);
350+
351+
xClippingMin_->setValue(std::max(gridData_->clippingMin(XAxis_3D) * 5, -100.0f));
352+
xClippingMax_->setValue(std::min(gridData_->clippingMax(XAxis_3D) * 5, 100.0f));
353+
yClippingMin_->setValue(std::max(gridData_->clippingMin(YAxis_3D) * 5, -100.0f));
354+
yClippingMax_->setValue(std::min(gridData_->clippingMax(YAxis_3D) * 5, 100.0f));
355+
zClippingMin_->setValue(std::max(gridData_->clippingMin(ZAxis_3D) * 5, -100.0f));
356+
zClippingMax_->setValue(std::min(gridData_->clippingMax(ZAxis_3D) * 5, 100.0f));
357+
358+
clippingConnections_.push_back(xClippingMin_->valueChanged().connect(std::bind([&] () {
359+
gridData_->setClippingMin(XAxis_3D, xClippingMin_->value() / 5.0);
360+
})));
361+
clippingConnections_.push_back(xClippingMax_->valueChanged().connect(std::bind([&] () {
362+
gridData_->setClippingMax(XAxis_3D, xClippingMax_->value() / 5.0);
363+
})));
364+
clippingConnections_.push_back(yClippingMin_->valueChanged().connect(std::bind([&] () {
365+
gridData_->setClippingMin(YAxis_3D, yClippingMin_->value() / 5.0);
366+
})));
367+
clippingConnections_.push_back(yClippingMax_->valueChanged().connect(std::bind([&] () {
368+
gridData_->setClippingMax(YAxis_3D, yClippingMax_->value() / 5.0);
369+
})));
370+
clippingConnections_.push_back(zClippingMin_->valueChanged().connect(std::bind([&] () {
371+
gridData_->setClippingMin(ZAxis_3D, zClippingMin_->value() / 5.0);
372+
})));
373+
clippingConnections_.push_back(zClippingMax_->valueChanged().connect(std::bind([&] () {
374+
gridData_->setClippingMax(ZAxis_3D, zClippingMax_->value() / 5.0);
375+
})));
376+
377+
showClippingLines_->setChecked(gridData_->clippingLinesEnabled());
378+
189379
// update UI fields
190380
DataSettings::bindBaseDataSet(data);
191-
381+
192382
if (gridData_->type() == PointSeries3D)
193383
typeSelection_->setCurrentIndex(0);
194384
else if (gridData_->type() == SurfaceSeries3D)
195385
typeSelection_->setCurrentIndex(1);
196386

197-
enableMesh_->setCheckState(gridData_->isSurfaceMeshEnabled() ?
387+
enableMesh_->setCheckState(gridData_->isSurfaceMeshEnabled() ?
198388
Checked : Unchecked);
199-
389+
200390
penSize_->setText(Wt::asString(gridData_->pen().width().value()));
201391

202-
penColor_->setCurrentIndex(4);
392+
WPen pen = gridData_->pen();
393+
WColor penColor = pen.color();
394+
if (penColor == WColor(black)) {
395+
penColor_->setCurrentIndex(0);
396+
} else if (penColor == WColor(red)) {
397+
penColor_->setCurrentIndex(1);
398+
} else if (penColor == WColor(green)) {
399+
penColor_->setCurrentIndex(2);
400+
} else if (penColor == WColor(blue)) {
401+
penColor_->setCurrentIndex(3);
402+
}
403+
404+
WColor clippingLinesColor = gridData_->clippingLinesColor();
405+
if (clippingLinesColor == black) {
406+
clippingLinesColor_->setCurrentIndex(0);
407+
} else if (clippingLinesColor == red) {
408+
clippingLinesColor_->setCurrentIndex(1);
409+
} else if (clippingLinesColor == green) {
410+
clippingLinesColor_->setCurrentIndex(2);
411+
} else if (clippingLinesColor == blue) {
412+
clippingLinesColor_->setCurrentIndex(3);
413+
} else if (clippingLinesColor == cyan) {
414+
clippingLinesColor_->setCurrentIndex(4);
415+
} else if (clippingLinesColor == magenta) {
416+
clippingLinesColor_->setCurrentIndex(5);
417+
} else if (clippingLinesColor == yellow) {
418+
clippingLinesColor_->setCurrentIndex(6);
419+
}
420+
421+
showIsolines_->setChecked(gridData_->isoLevels().size() > 0);
422+
423+
if (gridData_->isoColorMap() == 0) {
424+
isolineColormap_->setCurrentIndex(0);
425+
} else {
426+
const WStandardColorMap *map = dynamic_cast<const WStandardColorMap*>
427+
(gridData_->isoColorMap());
428+
if (!map->continuous()) {
429+
if (map->colorValuePairs().size() == 5)
430+
isolineColormap_->setCurrentIndex(2);
431+
else if (map->colorValuePairs().size() == 10)
432+
isolineColormap_->setCurrentIndex(3);
433+
} else {
434+
isolineColormap_->setCurrentIndex(1);
435+
}
436+
}
203437
}
204438

205439

@@ -249,15 +483,14 @@ ScatterDataSettings::ScatterDataSettings()
249483
bindBaseToTemplate(template_);
250484

251485
enableDroplines_ = new WCheckBox(this);
252-
template_->bindWidget("enabledroplines", enableDroplines_);
486+
template_->bindWidget("enabledroplines", enableDroplines_);
253487
penSize_ = new WLineEdit(this);
254488
template_->bindWidget("pensize", penSize_);
255489
penColor_ = new WComboBox(this);
256490
penColor_->addItem("black");
257491
penColor_->addItem("red");
258492
penColor_->addItem("green");
259493
penColor_->addItem("blue");
260-
penColor_->addItem("something");
261494
template_->bindWidget("pencolor", penColor_);
262495

263496
enableDroplines_->changed().connect(std::bind([&] () {
@@ -290,11 +523,21 @@ void ScatterDataSettings::bindDataSet(WScatterData *data)
290523

291524
// update the UI
292525
DataSettings::bindBaseDataSet(data);
293-
526+
294527
enableDroplines_->setCheckState(scatterData_->droplinesEnabled() ?
295528
Checked : Unchecked);
296529

297530
penSize_->setText(Wt::asString(scatterData_->droplinesPen().width().value()));
298531

299-
penColor_->setCurrentIndex(4);
532+
WPen pen = scatterData_->droplinesPen();
533+
WColor penColor = pen.color();
534+
if (penColor == WColor(black)) {
535+
penColor_->setCurrentIndex(0);
536+
} else if (penColor == WColor(red)) {
537+
penColor_->setCurrentIndex(1);
538+
} else if (penColor == WColor(green)) {
539+
penColor_->setCurrentIndex(2);
540+
} else if (penColor == WColor(blue)) {
541+
penColor_->setCurrentIndex(3);
542+
}
300543
}

0 commit comments

Comments
 (0)