parametersManager.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. /// <reference path="raphael.js" />
  2. /// <reference path="actionKinds.js" />
  3. /// <reference path="viewer.js" />
  4. var AB;
  5. (function (AB) {
  6. var ParametersManager = (function () {
  7. function ParametersManager(viewer) {
  8. // Members
  9. this.viewer = viewer;
  10. this.parametersElement = document.getElementById("Parameters");
  11. }
  12. // Clears the parameters view (right side)
  13. ParametersManager.prototype.clearParameters = function () {
  14. if (this.divHelpText) {
  15. this.divHelpText.parentNode.removeChild(this.divHelpText);
  16. this.divHelpText = null;
  17. }
  18. while (this.parametersElement.childNodes.length)
  19. this.parametersElement.removeChild(this.parametersElement.firstChild);
  20. }
  21. // Creates the help section
  22. ParametersManager.prototype.createHelpSection = function (element) {
  23. var divHelpText = document.createElement("div");
  24. divHelpText.className = "parametersHelp";
  25. this.parametersElement.appendChild(divHelpText);
  26. var helpText = document.createElement("a");
  27. helpText.innerHTML = AB.ActionsBuilder.GetDescriptionFromActionName(element.action.name);
  28. helpText.className = "parametersClass";
  29. divHelpText.appendChild(helpText);
  30. }
  31. // Creates parameters for the given element (node / action)
  32. ParametersManager.prototype.createParameters = function (element) {
  33. // Events
  34. var onInputChange = function (input, propertyID) {
  35. return function () {
  36. var value = input.value;
  37. element.action.propertiesResults[propertyID] = value;
  38. };
  39. };
  40. var onTargetTypeChanged = function (targetTypeSelect, propertyPathSelect, targetNameSelect, propertyID) {
  41. return function () {
  42. var selected = targetTypeSelect.selectedIndex;
  43. var value = targetTypeSelect.options[selected].value;
  44. if (targetNameSelect != null && value != "SceneProperties") {
  45. var array = null;
  46. // Keep target name value
  47. var nameValue = targetNameSelect.value;
  48. targetNameSelect.length = 0;
  49. if (value == "MeshProperties") array = AB.ActionsBuilder.MeshesList;
  50. else if (value == "LightProperties") array = AB.ActionsBuilder.LightsList;
  51. else if (value == "CameraProperties") array = AB.ActionsBuilder.CamerasList;
  52. for (var i = 0; i < array.length; i++) {
  53. var option = document.createElement("option");
  54. option.value = array[i];
  55. option.innerHTML = array[i];
  56. targetNameSelect.add(option);
  57. }
  58. targetNameSelect.value = nameValue;
  59. }
  60. if (propertyPathSelect != null) {
  61. // Get array of properties for selected object type (scene, camera, light, mesh, ...)
  62. var array = AB.ActionsBuilder[targetTypeSelect.options[selected].value];
  63. propertyPathSelect.length = 0;
  64. for (var j = 0; j < array.length; j++) {
  65. var option = document.createElement("option");
  66. option.value = array[j].name;
  67. option.innerHTML = array[j].name;
  68. propertyPathSelect.add(option);
  69. }
  70. }
  71. element.action.properties[propertyPathSelect != null ? propertyID - 1 : propertyID].targetType = targetTypeSelect.options[selected].value;
  72. };
  73. };
  74. var onTargetNameChanged = function (targetNameSelect, propertyID) {
  75. return function () {
  76. element.action.propertiesResults[propertyID] = targetNameSelect.options[targetNameSelect.selectedIndex].value;
  77. }
  78. }
  79. var onPropertyPathChanged = function (propertyPathSelect, additionalInput, propertyID) {
  80. return function () {
  81. additionalInput.value = "";
  82. element.action.propertiesResults[propertyID] = propertyPathSelect.options[propertyPathSelect.selectedIndex].value;
  83. };
  84. };
  85. var onAdditionalPropertyPathChanged = function (propertyPathSelect, additionalInput, propertyID) {
  86. return function () {
  87. var propertyPath = propertyPathSelect.options[propertyPathSelect.selectedIndex].value;
  88. if (additionalInput.value != "")
  89. propertyPath += "." + additionalInput.value;
  90. element.action.propertiesResults[propertyID] = propertyPath;
  91. };
  92. };
  93. var onConditionOperatorChanged = function (conditionOperatorSelect, propertyID) {
  94. return function () {
  95. element.action.propertiesResults[propertyID] = conditionOperatorSelect.options[conditionOperatorSelect.selectedIndex].value;
  96. };
  97. };
  98. // Special Elements
  99. var targetTypeSelect = null;
  100. var targetNameSelect = null;
  101. var propertyPathSelect = null;
  102. var soundNameSelect = null;
  103. // Clear view (div)
  104. this.clearParameters();
  105. // Get properties
  106. var p = element.action.properties;
  107. var pr = element.action.propertiesResults;
  108. // Create edition presentation
  109. var divEditedNode = document.createElement("div");
  110. divEditedNode.className = "parametersEditedNode";
  111. divEditedNode.style.backgroundColor = this.viewer.getSelectedNodeColor(element.action, this.viewer.isParentDetached(element.action));
  112. divEditedNode.style.border = "2px solid white";
  113. var textEditedNode = document.createElement("a");
  114. textEditedNode.className = "parametersEditedNode";
  115. textEditedNode.innerHTML = element.action.name;
  116. textEditedNode.style.verticalAlign = "middle";
  117. textEditedNode.style.textAlign = "center";
  118. if (element.action.type == AB.ActionsBuilder.Type.ACTION)
  119. textEditedNode.style.color = "black";
  120. else
  121. textEditedNode.style.color = "white";
  122. textEditedNode.style.width = textEditedNode.style.height = "100%";
  123. divEditedNode.appendChild(textEditedNode);
  124. this.parametersElement.appendChild(divEditedNode);
  125. if (p.length == 0) {
  126. this.createHelpSection(element);
  127. return;
  128. }
  129. // Create parameters
  130. for (var i = 0; i < p.length; i++) {
  131. // Create separator
  132. var separator = document.createElement("hr");
  133. separator.noShade = true;
  134. separator.style.width = "90%";
  135. this.parametersElement.appendChild(separator);
  136. // Parameter text
  137. var propertyText = document.createElement("a");
  138. propertyText.text = p[i].text;
  139. this.parametersElement.appendChild(propertyText);
  140. // If target, add the input element + combo box with target type
  141. if (p[i].text == "sound") {
  142. soundNameSelect = document.createElement("select");
  143. soundNameSelect.className = "parametersClass";
  144. for (var j = 0; j < AB.ActionsBuilder.SoundsList.length; j++) {
  145. var name = AB.ActionsBuilder.SoundsList[j];
  146. var option = document.createElement("option");
  147. option.value = option.innerHTML = name;
  148. option.className = "parametersClass";
  149. soundNameSelect.add(option);
  150. }
  151. soundNameSelect.value = pr[i];
  152. this.parametersElement.appendChild(document.createElement("br"));
  153. this.parametersElement.appendChild(soundNameSelect);
  154. soundNameSelect.onchange = onInputChange(soundNameSelect, i);
  155. continue;
  156. }
  157. else if (p[i].text == "target"
  158. || (element.action.type == AB.ActionsBuilder.Type.TRIGGER && p[i].text == "parameter")
  159. || p[i].text == "parent")
  160. {
  161. targetTypeSelect = document.createElement("select");
  162. targetTypeSelect.className = "parametersClass";
  163. for (var j = 0; j < AB.ActionsBuilder.DataTypesNames.length; j++) {
  164. var data = AB.ActionsBuilder.DataTypesNames[j];
  165. var option = document.createElement("option");
  166. option.value = data.data;
  167. option.innerHTML = data.name;
  168. option.className = "parametersClass";
  169. targetTypeSelect.add(option);
  170. }
  171. targetTypeSelect.value = p[i].targetType;
  172. this.parametersElement.appendChild(document.createElement("br"));
  173. this.parametersElement.appendChild(targetTypeSelect);
  174. // List names
  175. targetNameSelect = document.createElement("select");
  176. targetNameSelect.className = "parametersClass";
  177. this.parametersElement.appendChild(document.createElement("br"));
  178. this.parametersElement.appendChild(targetNameSelect);
  179. onTargetTypeChanged(targetTypeSelect, null, targetNameSelect, i)();
  180. targetNameSelect.value = pr[i];
  181. targetTypeSelect.onchange = onTargetTypeChanged(targetTypeSelect, null, targetNameSelect, i);
  182. targetNameSelect.onchange = onTargetNameChanged(targetNameSelect, i);
  183. continue;
  184. }
  185. // If propertyPath, add the combox box to select the property and input element for additional property
  186. else if (p[i].text == "propertyPath") {
  187. propertyPathSelect = document.createElement("select");
  188. propertyPathSelect.className = "parametersClass";
  189. this.parametersElement.appendChild(document.createElement("br"));
  190. this.parametersElement.appendChild(propertyPathSelect);
  191. // Special input, then continue after its creation
  192. var additionalInput = document.createElement("input");
  193. additionalInput.setAttribute("value", "");
  194. additionalInput.className = "parametersClass";
  195. this.parametersElement.appendChild(document.createElement("br"));
  196. this.parametersElement.appendChild(additionalInput);
  197. // If propertyPath exists, then target exists
  198. targetTypeSelect.onchange = onTargetTypeChanged(targetTypeSelect, propertyPathSelect, targetNameSelect, i);
  199. propertyPathSelect.onchange = onPropertyPathChanged(propertyPathSelect, additionalInput, i);
  200. additionalInput.onkeyup = onAdditionalPropertyPathChanged(propertyPathSelect, additionalInput, i);
  201. // Fill propertyPath combo box
  202. onTargetTypeChanged(targetTypeSelect, propertyPathSelect, targetNameSelect, i)();
  203. // Set selected property
  204. var propertyName = pr[i].split(".");
  205. propertyPathSelect.value = propertyName[0];
  206. var additionPropertyName = "";
  207. for (var j = 1; j < propertyName.length; j++)
  208. additionPropertyName += propertyName[j];
  209. additionalInput.setAttribute("value", additionPropertyName);
  210. // Finish
  211. continue;
  212. }
  213. // Value condition, add combo box for operator type
  214. else if (p[i].text == "operator") {
  215. var conditionOperatorSelect = document.createElement("select");
  216. conditionOperatorSelect.className = "parametersClass";
  217. for (var j = 0; j < AB.ActionsBuilder.FlowActionOperators.length; j++) {
  218. var option = document.createElement("option");
  219. option.value = AB.ActionsBuilder.FlowActionOperators[j];
  220. option.innerHTML = AB.ActionsBuilder.FlowActionOperators[j];
  221. conditionOperatorSelect.add(option);
  222. }
  223. conditionOperatorSelect.value = pr[i];
  224. conditionOperatorSelect.onchange = onConditionOperatorChanged(conditionOperatorSelect, i);
  225. this.parametersElement.appendChild(document.createElement("br"));
  226. this.parametersElement.appendChild(conditionOperatorSelect);
  227. continue;
  228. }
  229. var propertyInput = document.createElement("input");
  230. propertyInput.setAttribute("value", pr[i]);
  231. propertyInput.onkeyup = onInputChange(propertyInput, i);
  232. propertyInput.className = "parametersClass";
  233. //this.parametersElement.appendChild(document.createElement("br"));
  234. this.parametersElement.appendChild(propertyInput);
  235. }
  236. // Create help text (bottom)
  237. this.createHelpSection(element);
  238. }
  239. return ParametersManager;
  240. })();
  241. AB.ParametersManager = ParametersManager;
  242. })(AB || (AB = {}));