GraphNode.as 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package iTop
  2. {
  3. import flash.display.*;
  4. import flash.geom.*;
  5. import flash.net.*;
  6. import flash.events.*;
  7. import flash.text.*;
  8. import flash.xml.*;
  9. import flash.filters.*;
  10. import flash.ui.ContextMenu;
  11. import flash.ui.ContextMenuItem;
  12. import iTop.ToolTip;
  13. import iTop.Navigator;
  14. // Items to load on the main chart
  15. public class GraphNode extends Sprite
  16. {
  17. private var m_oIcon:Loader;
  18. private var m_sClass:String;
  19. private var m_sClassName:String;
  20. private var m_iId:int;
  21. private var m_sParentKey:String;
  22. private var m_oToolTip:ToolTip;
  23. private var m_fZoom:Number;
  24. private var m_oParent:Navigator;
  25. private var m_bRoot:Boolean;
  26. private static const ROUND:Number = 20;
  27. private static const PADDING:Number = 5;
  28. public var m_speed_x:Number = 0;
  29. public var m_speed_y:Number = 0;
  30. public var m_bInDrag:Boolean = false;
  31. public function GraphNode(oParent:Navigator, oPt:Point, sClass:String, sClassName:String, iId:Number, sLabel:String, sIconPath:String, sParentKey:String, fZoom:Number, oDetails:Object)
  32. {
  33. x = oPt.x;
  34. y = oPt.y;
  35. m_fZoom = fZoom;
  36. m_sClass = sClass;
  37. m_sClassName = sClassName;
  38. m_iId = iId;
  39. m_bRoot = false;
  40. m_sLabel.autoSize = TextFieldAutoSize.LEFT;
  41. m_sLabel.multiline = false;
  42. m_sLabel.text = sLabel;
  43. m_sLabel.width = m_sLabel.textWidth;
  44. m_sLabel.x = -m_sLabel.width/2;
  45. m_sLabel.height = m_sLabel.textHeight;
  46. // Draw the background
  47. graphics.beginFill( 0xf1f1f6, 0.8 );
  48. graphics.drawRoundRect( m_sLabel.x -PADDING, m_sLabel.y - PADDING, m_sLabel.width+PADDING*2, m_sLabel.height+PADDING*2, ROUND );
  49. graphics.endFill();
  50. m_sParentKey = sParentKey;
  51. var sTooltipText:String = "<p><b>"+m_sClassName+"</b></p><p>"+sLabel+"</p>";
  52. for (var s:String in oDetails)
  53. {
  54. sTooltipText += '<p>'+s+': '+oDetails[s]+'</p>';
  55. }
  56. trace('Tooltip text: '+sTooltipText);
  57. m_oToolTip = new ToolTip(sTooltipText);
  58. m_oToolTip.scaleX = 1 / m_fZoom;
  59. m_oToolTip.scaleY = 1 / m_fZoom;
  60. m_oParent = oParent;
  61. if (!m_oParent.DEBUG)
  62. {
  63. var myURL:URLRequest = new URLRequest(sIconPath);
  64. m_oIcon = new Loader();
  65. m_oIcon.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
  66. m_oIcon.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onLoadError);
  67. m_oIcon.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
  68. m_oIcon.load(myURL);
  69. }
  70. //addChild(m_oIcon);
  71. addEventListener(MouseEvent.MOUSE_DOWN, mouseDown)
  72. addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
  73. addEventListener( MouseEvent.MOUSE_OVER, mouseOver );
  74. var oContextMenu:ContextMenu = new ContextMenu();
  75. oContextMenu.hideBuiltInItems();
  76. var oCMI:ContextMenuItem = new ContextMenuItem('Details...');
  77. oCMI.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, navigateToObjectDetails);
  78. oContextMenu.customItems.push(oCMI);
  79. this.contextMenu = oContextMenu;
  80. }
  81. public function MarkAsRoot()
  82. {
  83. m_bRoot = true;
  84. SetGlowFilter();
  85. }
  86. protected function SetGlowFilter()
  87. {
  88. var glow:GlowFilter = new GlowFilter();
  89. glow.color = 0x3333FF;
  90. glow.blurX = 15;
  91. glow.blurY = 15;
  92. glow.inner = false;
  93. filters = [glow];
  94. }
  95. public function GetKey()
  96. {
  97. return m_sClass+'/'+m_iId;
  98. }
  99. public function GetParentKey()
  100. {
  101. return m_sParentKey;
  102. }
  103. function onLoadError(event:ErrorEvent):void
  104. {
  105. // Display error message to user in case of loading error.
  106. trace ("Sorry that there is an error during the loading of an external image. The error is:" + "\n" + event);
  107. }
  108. function onLoadComplete(event:Event):void
  109. {
  110. // Add the Loader on the Sprite when the loading is completed
  111. m_oIcon.x = -m_oIcon.width / 2;
  112. m_oIcon.y = -m_oIcon.height + 8; // Slightly shifted downward
  113. // Construct a tooltip
  114. addChild(m_oToolTip);
  115. addChild(m_oIcon);
  116. //hitArea = m_oIcon; // Drag only by the icon...
  117. trace('m_sLabel, getChildIndex:'+getChildIndex(m_sLabel));
  118. trace('m_oToolTip, getChildIndex:'+getChildIndex(m_oToolTip));
  119. trace('m_oIcon, getChildIndex:'+getChildIndex(m_oIcon));
  120. //swapChildren(m_oToolTip, );
  121. // Start the tooltip
  122. m_oToolTip.start();
  123. }
  124. function mouseDown(event:MouseEvent):void
  125. {
  126. trace("Click in Node");
  127. m_oParent.m_bChildDragging = true;
  128. m_oParent.m_bAutoPanAndZoom = false;
  129. m_oParent.m_bHighFrictionMode = true;
  130. m_oParent.m_bComputationNeeded = true;
  131. m_bInDrag = true;
  132. var shadow:DropShadowFilter = new DropShadowFilter();
  133. shadow.distance = 5;
  134. shadow.angle = 45;
  135. shadow.alpha = 0.5;
  136. filters = [shadow];
  137. if ((m_oToolTip) && (m_oToolTip.timer))
  138. {
  139. m_oToolTip.timer.stop(); // Don't show the tooltip while dragging
  140. }
  141. startDrag();
  142. }
  143. function mouseReleased(event:MouseEvent):void
  144. {
  145. m_bInDrag = false;
  146. stopDrag();
  147. m_oParent.m_bChildDragging = false;
  148. if (m_bRoot)
  149. {
  150. SetGlowFilter(); // Apply the glow filter
  151. }
  152. else
  153. {
  154. filters = []; // Remove the drop shadow
  155. }
  156. }
  157. public function mouseOver( e:MouseEvent ):void
  158. {
  159. // Move to the top
  160. parent.setChildIndex( this, this.parent.numChildren-1 );
  161. }
  162. private function navigateToObjectDetails(evt:ContextMenuEvent):void
  163. {
  164. var sUrl:String = ReadParam('drillUrl', 'http://localhost/pages/UI.php?operation=details');
  165. sUrl += '&class='+m_sClass+'&id='+m_iId;
  166. var oReq:URLRequest = new URLRequest(sUrl);
  167. navigateToURL(oReq, '_top');
  168. }
  169. public function ReadParam(sName:String, sDefaultValue:String)
  170. {
  171. var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
  172. if (paramObj.hasOwnProperty(sName))
  173. {
  174. return unescape(paramObj[sName]);
  175. }
  176. else
  177. {
  178. return sDefaultValue;
  179. }
  180. }
  181. public function GetLabelWidth():Number
  182. {
  183. return m_sLabel.width;
  184. }
  185. }
  186. }