/core/as3/lib/com/xjsfl/ui/controls/tree/items/TreeFolderItem.as

https://github.com/daevid/xJSFL
ActionScript | 156 lines | 93 code | 36 blank | 27 comment | 6 complexity | ba091997b3ee0d81f2c6c57bdc20adea MD5 | raw file
  1. package com.xjsfl.ui.controls.tree.items
  2. {
  3. import flash.display.DisplayObject;
  4. import flash.display.DisplayObjectContainer;
  5. import flash.display.InteractiveObject;
  6. import flash.display.MovieClip;
  7. import flash.display.SimpleButton;
  8. import flash.display.Sprite;
  9. import flash.events.Event;
  10. import flash.events.MouseEvent;
  11. import flash.text.TextField;
  12. import com.xjsfl.utils.debugging.Output;
  13. import com.xjsfl.ui.controls.tree.items.TreeItem
  14. import com.xjsfl.ui.controls.tree.icons.TreeFolderItemIcon;
  15. import com.xjsfl.ui.controls.tree.events.*;
  16. /**
  17. * ...
  18. * @author Dave Stewart
  19. */
  20. public class TreeFolderItem extends TreeItem
  21. {
  22. // ---------------------------------------------------------------------------------------------------------------------
  23. // { region: Variables
  24. // stage instances
  25. protected var button :SimpleButton;
  26. protected var folderIcon :TreeFolderItemIcon;
  27. // protected
  28. protected var _state :Boolean;
  29. protected var _length :int;
  30. // ---------------------------------------------------------------------------------------------------------------------
  31. // { region: Instantiation
  32. public function TreeFolderItem(data:Object)
  33. {
  34. // super
  35. _type = TreeItem.FOLDER;
  36. super(data);
  37. // create
  38. initialize();
  39. }
  40. override protected function initialize():void
  41. {
  42. // super
  43. super.initialize();
  44. // button
  45. button = foreground.addChild(new TreeFolderItemButton()) as SimpleButton;
  46. button.useHandCursor = false;
  47. button.x = 9;
  48. button.y = 9;
  49. // icon
  50. icon.y = 1;
  51. folderIcon = icon.addChild(new TreeFolderItemIcon()) as TreeFolderItemIcon;
  52. updateFolderIcon();
  53. // interaction
  54. button.addEventListener(MouseEvent.CLICK, onButtonClick);
  55. // start
  56. invalidate();
  57. }
  58. // ---------------------------------------------------------------------------------------------------------------------
  59. // { region: Public Methods
  60. // ---------------------------------------------------------------------------------------------------------------------
  61. // { region: Accessors
  62. override public function set data(data:Object):void
  63. {
  64. _length = data.length || 0;
  65. _state = data.state || true;
  66. super.data = data;
  67. }
  68. public function get state():Boolean { return _state; }
  69. public function set state(state:Boolean):void
  70. {
  71. _state = state;
  72. updateFolderIcon();
  73. }
  74. public function get length():int { return _length; }
  75. public function set length(value:int):void
  76. {
  77. _length = value;
  78. updateFolderIcon();
  79. }
  80. override public function set filtered(value:Boolean):void
  81. {
  82. super.filtered = value;
  83. if (length)
  84. {
  85. button.visible = ! filtered;
  86. }
  87. }
  88. protected function updateFolderIcon():void
  89. {
  90. if (length == 0)
  91. {
  92. folderIcon.gotoAndStop(1);
  93. }
  94. else
  95. {
  96. folderIcon.gotoAndStop(state ? 3 : 2);
  97. }
  98. }
  99. // ---------------------------------------------------------------------------------------------------------------------
  100. // { region: Protected Methods
  101. // ---------------------------------------------------------------------------------------------------------------------
  102. // { region: Handlers
  103. override protected function onDoubleClick(event:MouseEvent):void
  104. {
  105. onButtonClick(event);
  106. }
  107. protected function onButtonClick(event:MouseEvent):void
  108. {
  109. if (!_filtered)
  110. {
  111. state = ! state;
  112. button.rotation = state ? 0 : -90;
  113. event.stopImmediatePropagation();
  114. dispatchEvent(new TreeItemEvent(TreeItemEvent.FOLDER_TOGGLE));
  115. }
  116. }
  117. // ---------------------------------------------------------------------------------------------------------------------
  118. // { region: Utilities
  119. }
  120. }