123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- /// <reference path="raphael.js" />
- /// <reference path="actionKinds.js" />
- /// <reference path="viewer.js" />
- var AB;
- (function (AB) {
- var ParametersManager = (function () {
- function ParametersManager(viewer) {
- // Members
- this.viewer = viewer;
- this.parametersElement = document.getElementById("Parameters");
- }
- // Clears the parameters view (right side)
- ParametersManager.prototype.clearParameters = function () {
- if (this.divHelpText) {
- this.divHelpText.parentNode.removeChild(this.divHelpText);
- this.divHelpText = null;
- }
- while (this.parametersElement.childNodes.length)
- this.parametersElement.removeChild(this.parametersElement.firstChild);
- }
- // Creates the help section
- ParametersManager.prototype.createHelpSection = function (element) {
- var divHelpText = document.createElement("div");
- divHelpText.className = "parametersHelp";
- this.parametersElement.appendChild(divHelpText);
- var helpText = document.createElement("a");
- helpText.innerHTML = AB.ActionsBuilder.GetDescriptionFromActionName(element.action.name);
- helpText.className = "parametersClass";
- divHelpText.appendChild(helpText);
- }
- // Creates parameters for the given element (node / action)
- ParametersManager.prototype.createParameters = function (element) {
- // Events
- var onInputChange = function (input, propertyID) {
- return function () {
- var value = input.value;
- element.action.propertiesResults[propertyID] = value;
- };
- };
- var onTargetTypeChanged = function (targetTypeSelect, propertyPathSelect, targetNameSelect, propertyID) {
- return function () {
- var selected = targetTypeSelect.selectedIndex;
- var value = targetTypeSelect.options[selected].value;
- if (targetNameSelect != null && value != "SceneProperties") {
- var array = null;
- // Keep target name value
- var nameValue = targetNameSelect.value;
- targetNameSelect.length = 0;
- if (value == "MeshProperties") array = AB.ActionsBuilder.MeshesList;
- else if (value == "LightProperties") array = AB.ActionsBuilder.LightsList;
- else if (value == "CameraProperties") array = AB.ActionsBuilder.CamerasList;
- for (var i = 0; i < array.length; i++) {
- var option = document.createElement("option");
- option.value = array[i];
- option.innerHTML = array[i];
- targetNameSelect.add(option);
- }
- targetNameSelect.value = nameValue;
- }
- if (propertyPathSelect != null) {
- // Get array of properties for selected object type (scene, camera, light, mesh, ...)
- var array = AB.ActionsBuilder[targetTypeSelect.options[selected].value];
- propertyPathSelect.length = 0;
- for (var j = 0; j < array.length; j++) {
- var option = document.createElement("option");
- option.value = array[j].name;
- option.innerHTML = array[j].name;
- propertyPathSelect.add(option);
- }
- }
- element.action.properties[propertyPathSelect != null ? propertyID - 1 : propertyID].targetType = targetTypeSelect.options[selected].value;
- };
- };
- var onTargetNameChanged = function (targetNameSelect, propertyID) {
- return function () {
- element.action.propertiesResults[propertyID] = targetNameSelect.options[targetNameSelect.selectedIndex].value;
- }
- }
- var onPropertyPathChanged = function (propertyPathSelect, additionalInput, propertyID) {
- return function () {
- additionalInput.value = "";
- element.action.propertiesResults[propertyID] = propertyPathSelect.options[propertyPathSelect.selectedIndex].value;
- };
- };
- var onAdditionalPropertyPathChanged = function (propertyPathSelect, additionalInput, propertyID) {
- return function () {
- var propertyPath = propertyPathSelect.options[propertyPathSelect.selectedIndex].value;
- if (additionalInput.value != "")
- propertyPath += "." + additionalInput.value;
- element.action.propertiesResults[propertyID] = propertyPath;
- };
- };
- var onConditionOperatorChanged = function (conditionOperatorSelect, propertyID) {
- return function () {
- element.action.propertiesResults[propertyID] = conditionOperatorSelect.options[conditionOperatorSelect.selectedIndex].value;
- };
- };
- // Special Elements
- var targetTypeSelect = null;
- var targetNameSelect = null;
- var propertyPathSelect = null;
- var soundNameSelect = null;
- // Clear view (div)
- this.clearParameters();
- // Get properties
- var p = element.action.properties;
- var pr = element.action.propertiesResults;
- // Create edition presentation
- var divEditedNode = document.createElement("div");
- divEditedNode.className = "parametersEditedNode";
- divEditedNode.style.backgroundColor = this.viewer.getSelectedNodeColor(element.action, this.viewer.isParentDetached(element.action));
- divEditedNode.style.border = "2px solid white";
- var textEditedNode = document.createElement("a");
- textEditedNode.className = "parametersEditedNode";
- textEditedNode.innerHTML = element.action.name;
- textEditedNode.style.verticalAlign = "middle";
- textEditedNode.style.textAlign = "center";
- if (element.action.type == AB.ActionsBuilder.Type.ACTION)
- textEditedNode.style.color = "black";
- else
- textEditedNode.style.color = "white";
- textEditedNode.style.width = textEditedNode.style.height = "100%";
- divEditedNode.appendChild(textEditedNode);
- this.parametersElement.appendChild(divEditedNode);
- if (p.length == 0) {
- this.createHelpSection(element);
- return;
- }
- // Create parameters
- for (var i = 0; i < p.length; i++) {
- // Create separator
- var separator = document.createElement("hr");
- separator.noShade = true;
- separator.style.width = "90%";
- this.parametersElement.appendChild(separator);
- // Parameter text
- var propertyText = document.createElement("a");
- propertyText.text = p[i].text;
- this.parametersElement.appendChild(propertyText);
- // If target, add the input element + combo box with target type
- if (p[i].text == "sound") {
- soundNameSelect = document.createElement("select");
- soundNameSelect.className = "parametersClass";
- for (var j = 0; j < AB.ActionsBuilder.SoundsList.length; j++) {
- var name = AB.ActionsBuilder.SoundsList[j];
- var option = document.createElement("option");
- option.value = option.innerHTML = name;
- option.className = "parametersClass";
- soundNameSelect.add(option);
- }
- soundNameSelect.value = pr[i];
- this.parametersElement.appendChild(document.createElement("br"));
- this.parametersElement.appendChild(soundNameSelect);
- soundNameSelect.onchange = onInputChange(soundNameSelect, i);
- continue;
- }
- else if (p[i].text == "target"
- || (element.action.type == AB.ActionsBuilder.Type.TRIGGER && p[i].text == "parameter")
- || p[i].text == "parent")
- {
- targetTypeSelect = document.createElement("select");
- targetTypeSelect.className = "parametersClass";
- for (var j = 0; j < AB.ActionsBuilder.DataTypesNames.length; j++) {
- var data = AB.ActionsBuilder.DataTypesNames[j];
- var option = document.createElement("option");
- option.value = data.data;
- option.innerHTML = data.name;
- option.className = "parametersClass";
- targetTypeSelect.add(option);
- }
- targetTypeSelect.value = p[i].targetType;
- this.parametersElement.appendChild(document.createElement("br"));
- this.parametersElement.appendChild(targetTypeSelect);
- // List names
- targetNameSelect = document.createElement("select");
- targetNameSelect.className = "parametersClass";
- this.parametersElement.appendChild(document.createElement("br"));
- this.parametersElement.appendChild(targetNameSelect);
- onTargetTypeChanged(targetTypeSelect, null, targetNameSelect, i)();
- targetNameSelect.value = pr[i];
- targetTypeSelect.onchange = onTargetTypeChanged(targetTypeSelect, null, targetNameSelect, i);
- targetNameSelect.onchange = onTargetNameChanged(targetNameSelect, i);
- continue;
- }
- // If propertyPath, add the combox box to select the property and input element for additional property
- else if (p[i].text == "propertyPath") {
- propertyPathSelect = document.createElement("select");
- propertyPathSelect.className = "parametersClass";
- this.parametersElement.appendChild(document.createElement("br"));
- this.parametersElement.appendChild(propertyPathSelect);
- // Special input, then continue after its creation
- var additionalInput = document.createElement("input");
- additionalInput.setAttribute("value", "");
- additionalInput.className = "parametersClass";
- this.parametersElement.appendChild(document.createElement("br"));
- this.parametersElement.appendChild(additionalInput);
- // If propertyPath exists, then target exists
- targetTypeSelect.onchange = onTargetTypeChanged(targetTypeSelect, propertyPathSelect, targetNameSelect, i);
- propertyPathSelect.onchange = onPropertyPathChanged(propertyPathSelect, additionalInput, i);
- additionalInput.onkeyup = onAdditionalPropertyPathChanged(propertyPathSelect, additionalInput, i);
- // Fill propertyPath combo box
- onTargetTypeChanged(targetTypeSelect, propertyPathSelect, targetNameSelect, i)();
- // Set selected property
- var propertyName = pr[i].split(".");
- propertyPathSelect.value = propertyName[0];
- var additionPropertyName = "";
- for (var j = 1; j < propertyName.length; j++)
- additionPropertyName += propertyName[j];
- additionalInput.setAttribute("value", additionPropertyName);
- // Finish
- continue;
- }
- // Value condition, add combo box for operator type
- else if (p[i].text == "operator") {
- var conditionOperatorSelect = document.createElement("select");
- conditionOperatorSelect.className = "parametersClass";
- for (var j = 0; j < AB.ActionsBuilder.FlowActionOperators.length; j++) {
- var option = document.createElement("option");
- option.value = AB.ActionsBuilder.FlowActionOperators[j];
- option.innerHTML = AB.ActionsBuilder.FlowActionOperators[j];
- conditionOperatorSelect.add(option);
- }
- conditionOperatorSelect.value = pr[i];
- conditionOperatorSelect.onchange = onConditionOperatorChanged(conditionOperatorSelect, i);
- this.parametersElement.appendChild(document.createElement("br"));
- this.parametersElement.appendChild(conditionOperatorSelect);
- continue;
- }
- var propertyInput = document.createElement("input");
- propertyInput.setAttribute("value", pr[i]);
- propertyInput.onkeyup = onInputChange(propertyInput, i);
- propertyInput.className = "parametersClass";
- //this.parametersElement.appendChild(document.createElement("br"));
- this.parametersElement.appendChild(propertyInput);
- }
- // Create help text (bottom)
- this.createHelpSection(element);
- }
- return ParametersManager;
- })();
- AB.ParametersManager = ParametersManager;
- })(AB || (AB = {}));
|