From 06da1bd5665e69aa5442945da03fc14340fcf2f5 Mon Sep 17 00:00:00 2001 From: Stojce Slavkovski Date: Thu, 6 Nov 2014 20:41:08 +0100 Subject: [PATCH] add checkbox support in scripting interface --- examples/libraries/entityPropertyDialogBox.js | 17 ++++++------ examples/newEditEntities.js | 4 +-- .../scripting/WindowScriptingInterface.cpp | 26 +++++++++++++++++++ .../src/scripting/WindowScriptingInterface.h | 1 + 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/examples/libraries/entityPropertyDialogBox.js b/examples/libraries/entityPropertyDialogBox.js index 01e0c76e0d..4315089e50 100644 --- a/examples/libraries/entityPropertyDialogBox.js +++ b/examples/libraries/entityPropertyDialogBox.js @@ -38,15 +38,15 @@ EntityPropertyDialogBox = (function () { array.push({ label: "Entity Type:" + properties.type, type: "header" }); index++; - array.push({ label: "Locked:", value: properties.locked }); + array.push({ label: "Locked:", type: "checkbox", value: properties.locked }); index++; - + if (properties.type == "Model") { array.push({ label: "Model URL:", value: properties.modelURL }); index++; array.push({ label: "Animation URL:", value: properties.animationURL }); index++; - array.push({ label: "Animation is playing:", value: properties.animationIsPlaying }); + array.push({ label: "Animation is playing:", type: "checkbox", value: properties.animationIsPlaying }); index++; array.push({ label: "Animation FPS:", value: properties.animationFPS }); index++; @@ -130,20 +130,20 @@ EntityPropertyDialogBox = (function () { index++; array.push({ label: "Mass:", value: properties.mass.toFixed(decimals) }); index++; - array.push({ label: "Ignore for Collisions:", value: properties.ignoreForCollisions }); + array.push({ label: "Ignore for Collisions:", type: "checkbox", value: properties.ignoreForCollisions }); index++; - array.push({ label: "Collisions Will Move:", value: properties.collisionsWillMove }); + array.push({ label: "Collisions Will Move:", type: "checkbox", value: properties.collisionsWillMove }); index++; array.push({ label: "Lifetime:", value: properties.lifetime.toFixed(decimals) }); index++; - array.push({ label: "Visible:", value: properties.visible }); + array.push({ label: "Visible:", type: "checkbox", value: properties.visible }); index++; array.push({ label: "Script:", value: properties.script }); index++; - + if (properties.type == "Box" || properties.type == "Sphere") { array.push({ label: "Color:", type: "header" }); index++; @@ -215,7 +215,7 @@ EntityPropertyDialogBox = (function () { var rescaledX = peekX * peekRescale / 100.0; var rescaledY = peekY * peekRescale / 100.0; var rescaledZ = peekZ * peekRescale / 100.0; - + Window.reloadNonBlockingForm([ { value: rescaledX.toFixed(decimals), oldIndex: dimensionX }, { value: rescaledY.toFixed(decimals), oldIndex: dimensionY }, @@ -323,4 +323,3 @@ EntityPropertyDialogBox = (function () { return that; }()); - diff --git a/examples/newEditEntities.js b/examples/newEditEntities.js index 57f3f29670..0d896cfa69 100644 --- a/examples/newEditEntities.js +++ b/examples/newEditEntities.js @@ -344,7 +344,7 @@ var toolBar = (function () { var position = Vec3.sum(MyAvatar.position, Vec3.multiply(Quat.getFront(MyAvatar.orientation), SPAWN_DISTANCE)); if (position.x > 0 && position.y > 0 && position.z > 0) { - Entities.addEntity({ + Entities.addEntity({ type: "Light", position: position, dimensions: { x: DEFAULT_DIMENSION, y: DEFAULT_DIMENSION, z: DEFAULT_DIMENSION }, @@ -699,7 +699,7 @@ function handeMenuEvent(menuItem) { var selectedModel = form[0].value; if (form[1].value == "Properties") { editModelID = selectedModel; - showPropertiesForm(editModelID); + entityPropertyDialogBox.openDialog(editModelID); } else if (form[1].value == "Delete") { Entities.deleteEntity(selectedModel); } else if (form[1].value == "Teleport") { diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index ed6f0cf600..9390a83358 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -248,6 +248,7 @@ QScriptValue WindowScriptingInterface::doPeekNonBlockingFormResult(QScriptValue int e = -1; int d = -1; int c = -1; + int h = -1; for (int i = 0; i < _form.property("length").toInt32(); ++i) { QScriptValue item = _form.property(i); QScriptValue value = item.property("value"); @@ -271,6 +272,11 @@ QScriptValue WindowScriptingInterface::doPeekNonBlockingFormResult(QScriptValue array.engine()->undefinedValue() ); _form.setProperty(i, item); + } else if (item.property("type").toString() == "checkbox") { + h++; + value = _checks.at(h)->checkState() == Qt::Checked; + item.setProperty("value", value); + _form.setProperty(i, item); } else { e += 1; bool ok = true; @@ -305,6 +311,7 @@ QScriptValue WindowScriptingInterface::doGetNonBlockingFormResult(QScriptValue a int e = -1; int d = -1; int c = -1; + int h = -1; for (int i = 0; i < _form.property("length").toInt32(); ++i) { QScriptValue item = _form.property(i); QScriptValue value = item.property("value"); @@ -328,6 +335,11 @@ QScriptValue WindowScriptingInterface::doGetNonBlockingFormResult(QScriptValue a array.engine()->undefinedValue() ); _form.setProperty(i, item); + } else if (item.property("type").toString() == "checkbox") { + h++; + value = _checks.at(h)->checkState() == Qt::Checked; + item.setProperty("value", value); + _form.setProperty(i, item); } else { e += 1; bool ok = true; @@ -358,6 +370,7 @@ QScriptValue WindowScriptingInterface::doGetNonBlockingFormResult(QScriptValue a _edits.clear(); _directories.clear(); _combos.clear(); + _checks.clear(); array = _form; return (_formResult == QDialog::Accepted); @@ -383,6 +396,7 @@ QScriptValue WindowScriptingInterface::showForm(const QString& title, QScriptVal int e = -1; int d = -1; int c = -1; + int h = -1; for (int i = 0; i < form.property("length").toInt32(); ++i) { QScriptValue item = form.property(i); QScriptValue value = item.property("value"); @@ -406,6 +420,11 @@ QScriptValue WindowScriptingInterface::showForm(const QString& title, QScriptVal form.engine()->undefinedValue() ); form.setProperty(i, item); + } else if (item.property("type").toString() == "checkbox") { + h++; + value = _checks.at(h)->checkState() == Qt::Checked; + item.setProperty("value", value); + form.setProperty(i, item); } else { e += 1; bool ok = true; @@ -432,6 +451,7 @@ QScriptValue WindowScriptingInterface::showForm(const QString& title, QScriptVal delete editDialog; _combos.clear(); + _checks.clear(); _edits.clear(); _directories.clear(); return (result == QDialog::Accepted); @@ -518,6 +538,12 @@ QDialog* WindowScriptingInterface::createForm(const QString& title, QScriptValue } _combos.push_back(combo); formLayout->addRow(new QLabel(item.property("label").toString()), combo); + } else if (item.property("type").toString() == "checkbox") { + QCheckBox* check = new QCheckBox(); + check->setTristate(false); + check->setCheckState(item.property("value").toString() == "true" ? Qt::Checked : Qt::Unchecked); + _checks.push_back(check); + formLayout->addRow(new QLabel(item.property("label").toString()), check); } else { QLineEdit* edit = new QLineEdit(item.property("value").toString()); edit->setMinimumWidth(200); diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 24c21765b5..7c21e75795 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -83,6 +83,7 @@ private: bool _nonBlockingFormActive; int _formResult; QVector _combos; + QVector _checks; QVector _edits; QVector _directories; };