GraphNode.as 5.1 KB

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