Flex/AIR/AS3/AIR2009.10.09 14:27


제작툴 : Adobe Flash Builder 4
사용언어 : ActionScript 3.0 & AIR 1.5

미해결 문제
  * 1. USB나 기타 저장장치 자동 인식
  * 2. 스타일 적용
  * 3. 폴더 복사, 이동, 삭제
  * 4. 오른쪽 마우스 버튼 메뉴
  * 5. 로컬 디스크 새로 읽어올시 프로그램 어는 문제 미해결;

작동원리
  * Tree 콤포넌트 확장
  * Renderer 사용
  * 비동기식 폴더내역 검색과 동기식 Local Disk 검색
  * 폴더 아이콘, 선택되었을때 Dot border, Dot line 이미지로 구현
  * 혹시나 모를 다국어 버젼을 위한 내 컴퓨터/로컬 디스크 부분 한글은 public 으로 선언
     - 원본 폴더명을 전부 쓰려고 하였으나 내 컴퓨터/로컬 디스크는 Window OS만 사용하므로 배제
  * Node 간 높이 간격 18px (변경시 코드의 수정과 이미지 수정이 불가피)
  * Font Size 12px (변경시 코드의 수정과 이미지 수정이 불가피)

저작자 표시 비영리 변경 금지
신고
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 코멧'★

티스토리 툴바