Flex/AIR/AS3/Component2010.06.23 08:11

프로젝트시 윈도우 형식의 시스템 트리를 사용할 경우가 생겨서 최대한 비슷하게 만들어보자는 생각으로 만들게된 콤포넌트입니다. 물론 아직 적용 못시킨것도 상당히 많습니다;;

요즘 일도 바쁘고 귀차니즘때문에 근 1년정도 업데이트를 못해서 차라리 공개하고 다른분들이 고쳐주시기를 바라는 마음에 쿨럭;; ㅋㅋ
그럼 소스 공개 하겠습니다. 공부 목적이시던 상용으로 사용하시던 전혀 상관 없습니다. 다만 다른곳에 소스를 재배포 하실때는 출처 한줄 적어주시면 감사할뿐입니다 ㅎㅎ;; 안적어주시면 할 수 없고요 ㅜ_ㅜ




※ Componets 에서 끌어다가 놓으실때 하드디스크의 내용을 읽느라 다소 시간이 걸릴 수 있습니다.
    멈췄다고 생각하지 마시고 잠시 기다리시길;;;

사용법은 따로 만들지 않았습니다. 사용법이 필요하신분들은 주석을 ASDoc 형태로 달아놓았으니 ASDoc 만드셔서 참고하세요~

저작자 표시 비영리
신고
Posted by 코멧'★
Flex/AIR/AS3/Component2009.08.31 17:01

Tree의 내용이 변경되어 스크롤바의 크기가 제대로 적용되지 않을 경우 Tree를 확장하여 크기에 따라 스크롤을 재정의 한다.

Tree크기에 따른 스크롤바 크기 자동설정

package{ 
    import flash.events.Event; 
    import mx.controls.Tree; 
    import mx.core.mx_internal; 
    import mx.core.ScrollPolicy; 
    import mx.events.TreeEvent; 

    public class AutoSizeTree extends Tree { 
          public function AutoSizeTree(){ 
              super(); 
              horizontalScrollPolicy = ScrollPolicy.AUTO; 
          } 
          
          // we need to override maxHorizontalScrollPosition because setting 
          // Tree's maxHorizontalScrollPosition adds an indent value to it, 
          // which we don't need as measureWidthOfItems seems to return exactly 
          // what we need.  Not only that, but getIndent() seems to be broken 
          // anyways (SDK-12578). 
        
          // I hate using mx_internal stuff, but we can't do 
          // super.super.maxHorizontalScrollPosition in AS 3, so we have to 
          // emulate it. 

          override public function get maxHorizontalScrollPosition():Number          { 
              return mx_internal::_maxHorizontalScrollPosition; 
          } 
      
          override public function set maxHorizontalScrollPosition(value:Number):void { 
              mx_internal::_maxHorizontalScrollPosition = value; 
              dispatchEvent(new Event("maxHorizontalScrollPositionChanged")); 
              
              scrollAreaChanged = true; 
              invalidateDisplayList(); 
          } 
          
          override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
          { 
              // we call measureWidthOfItems to get the max width of the item renderers. 
              // then we see how much space we need to scroll, setting maxHorizontalScrollPosition appropriately 
              var diffWidth:Number = measureWidthOfItems(0,0) - (unscaledWidth - viewMetrics.left - viewMetrics.right); 
              
              if (diffWidth <= 0) 
                    maxHorizontalScrollPosition = NaN; 
              else 
                    maxHorizontalScrollPosition = diffWidth; 
              
                    super.updateDisplayList(unscaledWidth, unscaledHeight); 
          } 
    } 
} 
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★

티스토리 툴바