C_PropertyEditor.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. /*
  2. IBM Confidential
  3. OCO Source Materials
  4. IBM Cognos Products: uipe
  5. (C) Copyright IBM Corp. 2014
  6. The source code for this program is not published or otherwise divested of its trade secrets, irrespective of what has been deposited with the U.S. Copyright Office.
  7. */
  8. function C_PropertyEditor( v_divPropertyGroup, v_nPropertyGroup, v_nObjects, v_nNamedSets )
  9. {
  10. this.m_doc = document;
  11. this.m_divPropertiesDiv = v_divPropertyGroup.appendChild( document.createElement( "div" ) );
  12. this.m_divPropertiesDiv.style.height = "226px";
  13. this.m_divPropertiesDiv.className = "clsTreeView";
  14. var v_sLabel = v_divPropertyGroup.getAttribute( "aria-label" );
  15. if ( v_sLabel )
  16. {
  17. this.m_divPropertiesDiv.setAttribute( "aria-label", v_sLabel );
  18. }
  19. this.m_divObjectsDiv = v_divPropertyGroup.appendChild( document.createElement( "div" ) );
  20. this.m_divObjectsDiv.style.width = "298px";
  21. var v_nTreeView = v_nPropertyGroup.ownerDocument.createElement( "treeView" );
  22. v_nTreeView.setAttribute( "showCheckboxes", "true" );
  23. this.m_oPropertyTreeView = new C_TreeView( this.m_divPropertiesDiv, v_nTreeView, this );
  24. this.m_nProertyGroup = v_nPropertyGroup;
  25. this.m_nObjects = v_nObjects;
  26. this.m_nNamedSets = v_nNamedSets;
  27. this.m_aObjectViews = {};
  28. this.m_aNamedSetViews = {};
  29. this.f_readProperties();
  30. this.m_oPropertyTreeView.F_SelectNode( v_nTreeView.selectSingleNode( "./treeNode" ), false, true );
  31. };
  32. C_PropertyEditor.prototype.f_readProperties = function()
  33. {
  34. var v_nProperties = this.m_nProertyGroup.selectNodes( ".//property" );
  35. var v_nPropTreeViewNode = this.m_oPropertyTreeView.F_GetTreeViewNode();
  36. var doc = v_nPropTreeViewNode.ownerDocument;
  37. for( var i = 0; i < v_nProperties.length; i++ )
  38. {
  39. var v_nProperty = v_nProperties.item( i );
  40. var v_nPropTreeNode = doc.createElement( "treeNode" );
  41. var v_nPropertyName = v_nProperty.getAttribute( "name" );
  42. v_nPropTreeNode.setAttribute( "value", v_nPropertyName );
  43. U_Utils.F_GetCopyLabel( v_nProperty, v_nPropTreeNode );
  44. v_nPropTreeViewNode.appendChild( v_nPropTreeNode );
  45. var v_nObjectsDiv = this.m_divObjectsDiv.appendChild( this.m_doc.createElement( "div" ) );
  46. v_nObjectsDiv.style.margin = "5px 0px 0px 0px";
  47. var v_tabObjectsTabboxTable = v_nObjectsDiv.appendChild( this.m_doc.createElement( "div" ) );
  48. var v_sObjectsTabName = v_nPropertyName + "_tabMain";
  49. var v_sObjectsTableHTML =
  50. "<table id='" + v_sObjectsTabName + "' HAL_tabOrientation='top'>" +
  51. "<tr>" +
  52. "<td HAL_ids='IDS_UIPE_PROPERTY_OBJECTS'></td>" +
  53. "<td HAL_ids='IDS_UIPE_PROPERTY_ADVANCED'></td>" +
  54. "</tr>" +
  55. "</table>";
  56. v_tabObjectsTabboxTable.innerHTML = v_sObjectsTableHTML;
  57. G_ResManager.F_ApplyResStrings( v_tabObjectsTabboxTable );
  58. var v_divObjectPanels = v_nObjectsDiv.appendChild( this.m_doc.createElement( "div" ) );
  59. v_divObjectPanels.setAttribute( "id", v_sObjectsTabName + "_Panels" );
  60. v_divObjectPanels.style.padding = "0px";
  61. var v_divNormalObjectTab = v_divObjectPanels.appendChild( this.m_doc.createElement( "div" ) );
  62. v_divNormalObjectTab.id = v_sObjectsTabName + "_Panel0";
  63. v_divNormalObjectTab.className = "clsListView";
  64. v_divNormalObjectTab.style.border = "medium none";
  65. v_divNormalObjectTab.style.height = "140px";
  66. var v_divAdvancedObjectTab = v_divObjectPanels.appendChild( this.m_doc.createElement( "div" ) );
  67. v_divAdvancedObjectTab.setAttribute( "id", v_sObjectsTabName + "_Panel1" );
  68. v_divAdvancedObjectTab.className = "clsTreeView";
  69. v_divAdvancedObjectTab.style.border = "medium none";
  70. v_divAdvancedObjectTab.style.height = "140px";
  71. var v_oObjectsTab = new C_Tab( v_sObjectsTabName );
  72. v_divNormalObjectTab.removeAttribute("role");
  73. //build object list view
  74. var v_oObjectListView = new C_ListView( v_divNormalObjectTab, null, this );
  75. v_oObjectListView.F_GetListViewNode().setAttribute("view", "checkbox");
  76. v_oObjectListView.F_GetListViewNode().setAttribute("propertyName", v_nPropertyName );
  77. var v_oObjectListItems = v_oObjectListView.F_GetListItemsNode();
  78. this.m_aObjectViews[v_nPropertyName] = v_oObjectListView;
  79. var v_nObjects = v_nProperty.selectNodes( ".//objectRef" );
  80. for( var j = 0; j < v_nObjects.length; j++ )
  81. {
  82. var v_nObject = v_nObjects.item( j );
  83. var v_nObjectListItem = doc.createElement( "listItem" );
  84. var v_sObjectName = v_nObject.getAttribute( "name" );
  85. v_nObjectListItem.setAttribute( "value", v_sObjectName );
  86. var v_nObjectTemplate = this.m_nObjects.selectSingleNode( ".//object[@name='" + v_sObjectName + "']" )
  87. U_Utils.F_GetCopyLabel( v_nObjectTemplate, v_nObjectListItem );
  88. v_nObjectListItem.setAttribute( "value", v_sObjectName );
  89. v_oObjectListItems.appendChild( v_nObjectListItem );
  90. }
  91. v_oObjectListView.F_Draw();
  92. //build advanced tree view
  93. var v_nTreeViewNode = doc.createElement( "treeView" );
  94. v_nTreeViewNode.setAttribute( "showCheckboxes", "true" );
  95. v_nTreeViewNode.setAttribute( "propertyName", v_nPropertyName );
  96. var v_oAdvancedTreeView = new C_TreeView( v_divAdvancedObjectTab, v_nTreeViewNode, this );
  97. var v_oNamedSets = v_nProperty.selectNodes( ".//namedSetRef" );
  98. for ( var k = 0; k < v_oNamedSets.length; k++ )
  99. {
  100. this.f_appendNamedSetNode( v_nTreeViewNode, v_oNamedSets.item( k ).getAttribute( "name" ) );
  101. }
  102. v_oAdvancedTreeView.F_Draw();
  103. this.m_aNamedSetViews[v_nPropertyName] = v_oAdvancedTreeView;
  104. }
  105. this.m_oObjectsDeck = new C_Deck( this.m_divObjectsDiv );
  106. this.f_drawPropertyTree();
  107. };
  108. C_PropertyEditor.prototype.f_hideAllExpandImages = function()
  109. {
  110. //Hide all the expand images.
  111. var v_nExpandImages = this.m_divPropertiesDiv.getElementsByTagName( "IMG" );
  112. for( var k = 0; k < v_nExpandImages.length; k++ )
  113. {
  114. if( v_nExpandImages.item( k ).getAttribute("alt") == "+" )
  115. {
  116. v_nExpandImages.item( k ).style.display = "none";
  117. }
  118. }
  119. };
  120. C_PropertyEditor.prototype.f_appendNamedSetNode = function( v_nParentNode, v_nNamedSetName )
  121. {
  122. var v_doc = this.m_nProertyGroup.ownerDocument;
  123. var v_nNamedSetNode = this.m_nNamedSets.selectSingleNode( ".//namedSet[@name='" + v_nNamedSetName + "']" );
  124. var v_nNameSetTreeNode = v_doc.createElement( "treeNode" );
  125. v_nNameSetTreeNode.setAttribute( "value", v_nNamedSetNode.getAttribute( "name" ) );
  126. U_Utils.F_GetCopyLabel( v_nNamedSetNode, v_nNameSetTreeNode );
  127. v_nNameSetTreeNode.setAttribute( "expandable", "true" );
  128. if( v_nParentNode.nodeName != "treeView" )
  129. {
  130. v_nNameSetTreeNode.setAttribute( "hideCheckbox", "true" );
  131. }
  132. v_nParentNode.appendChild( v_nNameSetTreeNode );
  133. var v_oNamedSetChildren = v_nNamedSetNode.selectNodes( "./*" );
  134. for( var i = 0; i < v_oNamedSetChildren.length; i++ )
  135. {
  136. var v_nChild = v_oNamedSetChildren.item( i );
  137. if( v_nChild.nodeName == "objectRef" )
  138. {
  139. var v_nChildObject = this.m_nObjects.selectSingleNode( ".//object[@name='" + v_nChild.getAttribute( "name" ) + "']" );
  140. var v_nChildObjectTreeNode = v_doc.createElement( "treeNode" );
  141. v_nChildObjectTreeNode.setAttribute( "value", v_nChildObject.getAttribute( "name" ) );
  142. v_nChildObjectTreeNode.setAttribute( "hideCheckbox", "true" );
  143. U_Utils.F_GetCopyLabel( v_nChildObject, v_nChildObjectTreeNode );
  144. v_nNameSetTreeNode.appendChild( v_nChildObjectTreeNode );
  145. }
  146. else
  147. {
  148. this.f_appendNamedSetNode( v_nNameSetTreeNode, v_nChild.getAttribute( "name" ) );
  149. }
  150. }
  151. };
  152. C_PropertyEditor.prototype.F_GetPropertyTreeView = function()
  153. {
  154. return this.m_oPropertyTreeView;
  155. };
  156. C_PropertyEditor.prototype.F_TreeView_OnNodeClick = function( v_oTreeView, v_nTreeNode, v_iMouseButton )
  157. {
  158. switch( v_oTreeView )
  159. {
  160. case this.m_oPropertyTreeView :
  161. var v_sPropName = v_nTreeNode.getAttribute( "value" );
  162. var v_iIndex = 0;
  163. for ( var o in this.m_aObjectViews )
  164. {
  165. if( o == v_sPropName )
  166. {
  167. break;
  168. }
  169. v_iIndex++;
  170. }
  171. this.m_oObjectsDeck.F_SetIndex( v_iIndex );
  172. }
  173. };
  174. C_PropertyEditor.prototype.F_TreeView_OnNodeCheck = function( v_oTreeView, v_nTreeNode )
  175. {
  176. var v_sCheckStatus = v_nTreeNode.getAttribute( "checked" ) == "true" ? "false" : "true";
  177. switch( v_oTreeView )
  178. {
  179. case this.m_oPropertyTreeView :
  180. var v_sPropertyName = v_nTreeNode.getAttribute( "value" );
  181. if( v_sCheckStatus == "true" )
  182. {
  183. this.F_SetObjectsChecked( v_sPropertyName, this.F_GetUncheckedObjectNames( v_sPropertyName ), true );
  184. this.F_SetNamedSetsChecked( v_sPropertyName, this.F_GetUncheckedNamedSetNames( v_sPropertyName ), true );
  185. }
  186. else
  187. {
  188. this.F_SetObjectsChecked( v_sPropertyName, this.F_GetCheckedObjectNames( v_sPropertyName ), true, true );
  189. this.F_SetNamedSetsChecked( v_sPropertyName, this.F_GetCheckedNamedSetNames( v_sPropertyName ), true, true );
  190. }
  191. this.f_highlightPropertyNodeByCheck( v_oTreeView, v_nTreeNode, v_sCheckStatus );
  192. break;
  193. default :
  194. var v_bHighlight = Boolean( v_sCheckStatus == "true" ) != Boolean( v_nTreeNode.getAttribute( "oriChecked" ) );
  195. G_UIPE.F_HighlightTreeNode( v_oTreeView, v_nTreeNode, v_bHighlight );
  196. v_nTreeNode.setAttribute( "checked", v_sCheckStatus );
  197. v_oTreeView.F_UpdateNode( v_nTreeNode );
  198. var v_sPropertyName = v_oTreeView.F_GetTreeViewNode().getAttribute( "propertyName" );
  199. var v_nPropertyNode = this.m_oPropertyTreeView.F_GetTreeViewNode().selectSingleNode( ".//treeNode[@value='" + v_sPropertyName + "']" );
  200. this.f_updatePropertyByClick( v_sPropertyName, v_nPropertyNode, v_sCheckStatus );
  201. this.f_highlightPropertyNodeByCheck( this.m_oPropertyTreeView, v_nPropertyNode );
  202. return false;
  203. }
  204. };
  205. C_PropertyEditor.prototype.F_ListView_OnCheckboxClick = function( v_oListView, v_nListItem )
  206. {
  207. G_UIPE.F_HighlightListItem( v_oListView, v_nListItem );
  208. var v_sPropertyName = v_oListView.F_GetListViewNode().getAttribute( "propertyName" );
  209. var v_nPropertyNode = this.m_oPropertyTreeView.F_GetTreeViewNode().selectSingleNode( ".//treeNode[@value='" + v_sPropertyName + "']" );
  210. this.f_updatePropertyByClick( v_sPropertyName, v_nPropertyNode, v_nListItem.getAttribute( "checked" ) );
  211. this.f_highlightPropertyNodeByCheck( this.m_oPropertyTreeView, v_nPropertyNode );
  212. };
  213. C_PropertyEditor.prototype.f_updatePropertyByClick = function( v_sPropertyName, v_nPropertyNode, v_sCheckStatus )
  214. {
  215. if( v_sCheckStatus == "false" )
  216. {
  217. if( this.F_GetCheckedObjectNames( v_sPropertyName ).length == 0 &&
  218. this.F_GetCheckedNamedSetNames( v_sPropertyName ).length == 0 )
  219. {
  220. v_nPropertyNode.setAttribute( "checked", "false" );
  221. }
  222. }
  223. else
  224. {
  225. v_nPropertyNode.setAttribute( "checked", "true" );
  226. }
  227. this.m_oPropertyTreeView.F_UpdateNode( v_nPropertyNode );
  228. };
  229. C_PropertyEditor.prototype.f_highlightPropertyNodeByCheck = function( v_oTreeView, v_nTreeNode, v_sCheckStatus )
  230. {
  231. if( !v_sCheckStatus )
  232. {
  233. v_sCheckStatus = v_nTreeNode.getAttribute( "checked" );
  234. }
  235. var v_bHighlight = Boolean( v_sCheckStatus == "true" ) != Boolean( v_nTreeNode.getAttribute( "oriChecked" ) );
  236. if( !v_bHighlight )
  237. {
  238. // check all the objects and namedsets.
  239. var v_sPropertyName = v_nTreeNode.getAttribute( "value" );
  240. var v_oObjectsListView = this.m_aObjectViews[v_sPropertyName];
  241. v_bHighlight = Boolean( v_oObjectsListView.F_GetListViewNode().selectSingleNode( ".//listItem[@highlight]" ) );
  242. if( !v_bHighlight )
  243. {
  244. var v_oNamedSetView = this.m_aNamedSetViews[v_sPropertyName];
  245. v_bHighlight = Boolean( v_oNamedSetView.F_GetTreeViewNode().selectSingleNode( ".//treeNode[@highlight]" ) );
  246. }
  247. }
  248. this.f_highlightPropertyNode( v_oTreeView, v_nTreeNode, v_bHighlight );
  249. };
  250. C_PropertyEditor.prototype.f_highlightPropertyNode = function( v_oTreeView, v_nTreeNode, v_bHighlight )
  251. {
  252. G_UIPE.F_HighlightTreeNode( v_oTreeView, v_nTreeNode, v_bHighlight );
  253. if( v_bHighlight )
  254. {
  255. G_UIPE.F_HighlightSelectedTreeNode( true );
  256. }
  257. else
  258. {
  259. G_UIPE.F_HighlightSelectedTreeNode( v_oTreeView.F_GetTreeViewNode().selectSingleNode( ".//treeNode[@highlight]" ) );
  260. }
  261. };
  262. C_PropertyEditor.prototype.F_CheckAll = function()
  263. {
  264. this.f_setCheckboxStatus( "true" );
  265. };
  266. C_PropertyEditor.prototype.F_UncheckAll = function()
  267. {
  268. this.f_setCheckboxStatus( "false" );
  269. };
  270. C_PropertyEditor.prototype.f_setCheckboxStatus = function( v_sStatus )
  271. {
  272. var v_oTreeNodes = this.f_getPropertyNodes();
  273. for( var i = 0; i < v_oTreeNodes.length; i++ )
  274. {
  275. v_oTreeNodes.item( i ).setAttribute( "checked", v_sStatus );
  276. }
  277. this.f_drawPropertyTree();
  278. for( var i = 0; i < v_oTreeNodes.length; i++ )
  279. {
  280. this.f_highlightPropertyNodeByCheck( this.m_oPropertyTreeView, v_oTreeNodes.item( i ) );
  281. }
  282. };
  283. C_PropertyEditor.prototype.f_setNodesChecked = function( v_oNodes, v_aNames, v_bOri, v_bUnchecked )
  284. {
  285. if( !v_aNames || v_aNames.length == 0)
  286. {
  287. return;
  288. }
  289. for( var i = 0; i < v_oNodes.length; i++ )
  290. {
  291. var v_nNode = v_oNodes.item( i );
  292. if( v_aNames.indexOf( v_nNode.getAttribute( "value" ) ) != -1 )
  293. {
  294. var v_sChecked = v_bUnchecked ? "false" : "true";
  295. v_nNode.setAttribute( "checked", v_sChecked );
  296. if( v_bOri )
  297. {
  298. v_nNode.setAttribute( "oriChecked", "true" );
  299. }
  300. }
  301. }
  302. };
  303. C_PropertyEditor.prototype.F_SetPropertiesChecked = function( v_aNames )
  304. {
  305. this.f_setNodesChecked( this.f_getPropertyNodes(), v_aNames, true );
  306. this.f_drawPropertyTree();
  307. };
  308. C_PropertyEditor.prototype.F_SetObjectsChecked = function( v_sPropertyName, v_aNames, v_bNotOri, v_bUnchecked )
  309. {
  310. var v_nObjectView = this.m_aObjectViews[v_sPropertyName];
  311. var v_oAllListItems = v_nObjectView.F_GetListItems();
  312. this.f_setNodesChecked( v_oAllListItems, v_aNames, !v_bNotOri, v_bUnchecked, "Object" );
  313. v_nObjectView.F_Draw();
  314. for( var i = 0; i < v_oAllListItems.length; i++ )
  315. {
  316. G_UIPE.F_HighlightListItem( v_nObjectView, v_oAllListItems.item( i ) );
  317. }
  318. };
  319. C_PropertyEditor.prototype.F_SetNamedSetsChecked = function( v_sPropertyName, v_aNames, v_bNotOri, v_bUnchecked )
  320. {
  321. var v_nNamedSetView = this.m_aNamedSetViews[v_sPropertyName];
  322. var v_oAllNamedSetNodes = v_nNamedSetView.F_GetTreeViewNode().selectNodes( "./*" );
  323. this.f_setNodesChecked( v_oAllNamedSetNodes, v_aNames, !v_bNotOri, v_bUnchecked, "NamedSet", v_nNamedSetView );
  324. v_nNamedSetView.F_Draw();
  325. for( var i = 0; i < v_oAllNamedSetNodes.length; i++ )
  326. {
  327. var v_nNamedSetNode = v_oAllNamedSetNodes.item( i );
  328. var v_sCheckStatus = v_nNamedSetNode.getAttribute( "checked" ) ;
  329. var v_bHighlight = Boolean( v_sCheckStatus == "true" ) != Boolean( v_nNamedSetNode.getAttribute( "oriChecked" ) );
  330. G_UIPE.F_HighlightTreeNode( v_nNamedSetView, v_nNamedSetNode, v_bHighlight );
  331. }
  332. };
  333. C_PropertyEditor.prototype.f_drawPropertyTree = function()
  334. {
  335. this.m_oPropertyTreeView.F_Draw();
  336. this.f_hideAllExpandImages();
  337. }
  338. C_PropertyEditor.prototype.f_getPropertyNodes = function()
  339. {
  340. return this.m_oPropertyTreeView.F_GetTreeViewNode().selectNodes( "./treeNode" );
  341. };
  342. C_PropertyEditor.prototype.F_GetPropertyNames = function()
  343. {
  344. return U_XML.F_AppendValues( null, this.m_oPropertyTreeView.F_GetTreeViewNode().selectNodes( "./treeNode/@value" ) );
  345. };
  346. C_PropertyEditor.prototype.F_GetCheckedPropertyNames = function()
  347. {
  348. return this.f_getChildNamesByCheckStatus( this.m_oPropertyTreeView.F_GetTreeViewNode(), true);
  349. };
  350. C_PropertyEditor.prototype.F_GetUncheckedPropertyNames = function()
  351. {
  352. return this.f_getChildNamesByCheckStatus( this.m_oPropertyTreeView.F_GetTreeViewNode(), false);
  353. };
  354. C_PropertyEditor.prototype.F_GetCheckedObjectNames = function( v_sPropertyName )
  355. {
  356. var v_nObjectView = this.m_aObjectViews[v_sPropertyName];
  357. return this.f_getChildNamesByCheckStatus( v_nObjectView.F_GetListItemsNode(), true );
  358. };
  359. C_PropertyEditor.prototype.F_GetUncheckedObjectNames = function( v_sPropertyName )
  360. {
  361. var v_nObjectView = this.m_aObjectViews[v_sPropertyName];
  362. return this.f_getChildNamesByCheckStatus( v_nObjectView.F_GetListItemsNode(), false );
  363. };
  364. C_PropertyEditor.prototype.F_GetCheckedNamedSetNames = function( v_sPropertyName )
  365. {
  366. var v_nNamedSetView = this.m_aNamedSetViews[v_sPropertyName];
  367. return this.f_getChildNamesByCheckStatus( v_nNamedSetView.F_GetTreeViewNode(), true );
  368. };
  369. C_PropertyEditor.prototype.F_GetUncheckedNamedSetNames = function( v_sPropertyName )
  370. {
  371. var v_nNamedSetView = this.m_aNamedSetViews[v_sPropertyName];
  372. return this.f_getChildNamesByCheckStatus( v_nNamedSetView.F_GetTreeViewNode(), false );
  373. };
  374. C_PropertyEditor.prototype.f_getChildNamesByCheckStatus = function( v_nParentNode, v_bChecked )
  375. {
  376. var v_sPath = v_bChecked ? "./*[@checked='true']/@value" : "./*[not(@checked) or @checked='false']/@value";
  377. return U_XML.F_AppendValues( null, v_nParentNode.selectNodes( v_sPath ) );
  378. };