/src/FMECursor.as

https://github.com/niuliwei/FlashFormulaEditor
ActionScript | 123 lines | 121 code | 2 blank | 0 comment | 13 complexity | b4e8d19d6fd985c90ed1cb051433401f MD5 | raw file
  1. package
  2. {
  3. import flash.display.LineScaleMode;
  4. import flash.display.Sprite;
  5. public class FMECursor extends Sprite
  6. {
  7. private var bc:FMEContainer;
  8. private var ec:FMEContainer;
  9. private var bidx:int;
  10. private var eidx:int;
  11. public var mouseMoveEnabled:Boolean = false;
  12. private function update():void{
  13. var c:FMEContainer = getContainer();
  14. var lidx:int = getBeginIdx();
  15. var ridx:int = getEndIdx();
  16. if(lidx>ridx){
  17. var temp:int = lidx;
  18. lidx = ridx;
  19. ridx = temp;
  20. }
  21. x = c.ax(lidx);
  22. y = c.ay(lidx,ridx);
  23. graphics.clear();
  24. graphics.lineStyle(0,0x0000FF,1,false,LineScaleMode.NONE);
  25. var h:Number = c.aheight(lidx,ridx);
  26. if(!isArea()){
  27. graphics.moveTo(0,0);
  28. graphics.lineTo(0,h);
  29. }else{
  30. var w:Number = c.awidth(lidx,ridx);
  31. graphics.beginFill(0x0000FF,0.3);
  32. graphics.drawRect(0,0,w,h);
  33. graphics.endFill();
  34. }
  35. c.addChildAt(this,0);
  36. }
  37. private function beginAt():int{
  38. var c:FMEContainer = getContainer();
  39. if(bc==c)
  40. return bidx;
  41. var beg:FMEContainer = bc;
  42. while(beg.getUplvlC()!=c)
  43. beg = beg.getUplvlC();
  44. return beg.getParent().index;
  45. }
  46. private function endAt():int{
  47. var c:FMEContainer = getContainer();
  48. if(ec==c)
  49. return eidx;
  50. var end:FMEContainer = ec;
  51. while(end.getUplvlC()!=c)
  52. end = end.getUplvlC();
  53. return end.getParent().index;
  54. }
  55. public function setBegin(c:FMEContainer,index:int):void{
  56. bc = c;
  57. bidx = index;
  58. update();
  59. }
  60. public function setEnd(c:FMEContainer,index:int):void{
  61. ec = c;
  62. eidx = index;
  63. update();
  64. }
  65. public function setCursor(bc:FMEContainer,bidx:int,ec:FMEContainer,eidx:int):void{
  66. this.bc = bc;
  67. this.bidx = bidx;
  68. this.ec = ec;
  69. this.eidx = eidx;
  70. update();
  71. }
  72. public function getContainer():FMEContainer{
  73. var beg:FMEContainer = bc;
  74. var end:FMEContainer = ec;
  75. while(beg.level!=end.level){
  76. if(beg.level>end.level)
  77. beg = beg.getUplvlC();
  78. else
  79. end = end.getUplvlC();
  80. }
  81. while(beg!=end){
  82. beg = beg.getUplvlC();
  83. end = end.getUplvlC();
  84. }
  85. return beg;
  86. }
  87. public function getBeginIdx():int{
  88. var c:FMEContainer = getContainer();
  89. if(bc==c){
  90. return bidx;
  91. }else{
  92. var bat:int = beginAt();
  93. var eat:int = endAt();
  94. if(ec==c&&eat==bat)
  95. return bat+1;
  96. else if(bat<=eat)
  97. return bat;
  98. else
  99. return bat+1;
  100. }
  101. }
  102. public function getEndIdx():int{
  103. var c:FMEContainer = getContainer();
  104. if(ec==c){
  105. return eidx;
  106. }else{
  107. var bat:int = beginAt();
  108. var eat:int = endAt();
  109. if(bc==c&&eat==bat)
  110. return eat+1;
  111. else if(eat<bat)
  112. return eat;
  113. else
  114. return eat+1;
  115. }
  116. }
  117. public function isArea():Boolean{
  118. return getBeginIdx()!=getEndIdx();
  119. }
  120. }
  121. }