Special Thanks To:

Anatole Tartakovsky and Theodore E Patrick for giving me pointers a
while ago when the flex project I was working on needed tree lines. It
was during Flex Alpha time. 

Shortly after getting tips for the tree lines, we had to drop flex due
to the alpha's data remoting and binding problems.  Now we are back
onto flex and found that we needed the lines again.

The Tips given by both Anatole and Theodore were very helpful.  Thanks
again gentleman.

# Re: [flexcoders] ANY FLEX TREE GURUS? Anatole Tartakovsky
# RE: [flexcoders] ANY FLEX TREE GURUS? Theodore E Patrick

Cheers,

Tim


--- In flexcoders@yahoogroups.com, "sufibaba" <[EMAIL PROTECTED]> wrote:
>
> Fellow Flexors,
>
> Here's an updated Tree with lines.  I have it working in my actual
> Flex App.  It seems that everything is working.
>
> Happy TreeLining.
>
> Note:  The Flex tree without lines has bugs when the scrollbar shows
> up.  So when you are using the tree with lines and you get errors at
> runtime, it could be this bug.  However, there could bugs in my code
> that I am not aware of. 
>
> P.S.  if anyone improves upon this tree, do let us know about it.
>
> All the Best,
>
>
> Tim
>
> -------------- MyTreeItemRenderer.as-----------------------
>
> package com.smartetailing.layoutAssign.view.main{
>
>     import mx.controls.treeClasses.*;
>     import mx.collections.*
>     import flash.display.Sprite;
>   
>
>     public class MyTreeItemRenderer extends TreeItemRenderer {
>
>       private var isLast:Boolean;
>       private var lineArr:Array =new Array();
>         // Define the constructor.
>         public function MyTreeItemRenderer() {
>             super();
>         }
>        
>         // Override the set method for the data property
>         // to set the font color and style of each node.
>         override public function set data(value:Object):void {
>              
>             super.data = ""> >            
>             if (TreeListData(super.listData)){
>                   if(TreeListData(super.listData).hasChildren) {
>                       setStyle("color", 0xff0000);
>                       setStyle("fontWeight", 'bold');
>                   }
>                   else {
>                       setStyle("color", 0x000000);
>                       setStyle("fontWeight", 'normal');
>                   } 
>             }
>            
>         }
>
>       
>           public function makeLastChildArr(node:Object,
> requestedLevel:Number, startLevel:Number):Boolean {
>                
>                       trace("isLastChild = " + node.toXMLString() + "
> requestedLevel = " + requestedLevel + " startLevel = " + startLevel);
>                         var isLastFlag:Boolean = false;
>
>                         var parentNode:XML = node.parent();
>                         var grandParNode:XML = parentNode.parent();
>                        
>                         if (grandParNode){
>                               var children:XMLList = grandParNode.children();
>                               var noOfChildren:Number = children.length();
>      
>                               trace("parentNode = " + parentNode.toXMLString() + "
> grandParNode = " + grandParNode.toXMLString() + " noOfChildren = " +
> noOfChildren);
>                               //trace("foundNode = " + children[noOfChildren -1] + ", Node = "
> + node.toXMLString() );
>                               if ( parentNode == children[noOfChildren -1]){
>                                     trace("foundNode = " + children[noOfChildren -1] + ", Node = " +
> node.toXMLString );
>                                     isLastFlag = true;
>                               }
>
>                               lineArr.push(isLastFlag);
>                              
>                               if (requestedLevel !=  startLevel){
>                                     makeLastChildArr(node.parent(), requestedLevel, startLevel - 1);
>                               }
>                         }
>                        
>                         return isLastFlag;
>             }
>
>         public function drawParentLines(i:Number):void {
>                   graphics.lineStyle(.7, 0x999999,.3,false,"NONE");
>                   var offset:Number = i*17 - 11;
>                   if (i == 2){offset = 23};
>                   graphics.moveTo(offset,-8);
>                   graphics.lineTo(offset,14);
>             }
>            
>         public function drawChildLeafLines(indent:Number):void {
>                   graphics.lineStyle(.7, 0x999999,.3,false,"NONE");
>                   var offset:Number = indent + 6.5;
>                   graphics.moveTo(offset,-8);
>                   graphics.lineTo(offset,10);
>                   graphics.moveTo(offset,10);
>                   graphics.lineTo(offset + 10,10);
>             }
>
>         public function drawChildFolderLines(indent:Number):void {
>                   graphics.lineStyle(.7, 0x999999,.3,false,"NONE");
>                   var offset:Number = indent + 6.5;
>                   graphics.moveTo(offset,-8);
>                   graphics.lineTo(offset,2);
>             }
>
>
>
>         // Override the updateDisplayList() method
>         // to set the text for each tree node.       
>        override protected function
> updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void {
>             super.updateDisplayList(unscaledWidth, unscaledHeight);
>             if(super.data) {
>                   if (TreeListData(super.listData)){
>                   graphics.clear();
>                          var node:Object = TreeListData(super.listData).item;
>
>                         var depth:Number = TreeListData(super.listData).depth;
>                         var indent:Number = TreeListData(super.listData).indent ;
>                        
>                         lineArr =new Array();
>                         
>                 if(TreeListData(super.listData).hasChildren) {
>                     var tmp:XMLList = new
> XMLList(TreeListData(super.listData).item);
>                     var myStr:int = tmp[0].children().length();
>                     super.label.text =
> TreeListData(super.listData).text + "(" + myStr + ")";
>                     graphics.lineStyle(.7, 0x999999,.3,false,"NONE");
>
>                               trace("depth = " + TreeListData(super.listData).depth + ", open =
> " + TreeListData(super.listData).open + ", rowIndex = " +
> TreeListData(super.listData).rowIndex);
>                              
>                               //trace("icon = " + TreeListData(super.listData).icon );
>                              
>                               // makeLastChildArr calls grandparentnode in order to determine
> whether the parent's
>                               // node is the last child.
>                               // if no grandparent node exist, then it will give an error.
>                               if ( depth > 2){
>                                     makeLastChildArr(node,depth,depth);
>                                     if (depth >3){
>                                           makeLastChildArr(node,3,depth);
>                                     }
>                                    
>                                     //trace("isLastChild = " + isLast + " i=" + i);
>                                     trace("lineArrLen = " + lineArr.length );
>            
>                                     lineArr = lineArr.reverse();
>                                     for (var i:Number=0;i< lineArr.length;i++){
>                                           trace("lineArr = " + lineArr[i] + " i=" + i);
>                                          
>                                     }
>                              
>                                     for(var i:Number=1;i<=depth;i++){
>                                          
>                                           var parentDropLine:Boolean = false;
>                                          
>                                           TreeListData(super.listData);
>      
>                                           if(i == depth ){
>                                                 drawChildFolderLines(indent);
>                                           }
>                                           else { // Preceding lines
>                                                 if (i != 1 ){ // don't draw first line
>                                                 // pull out from correct index of lineArray
>                                                       isLast = lineArr[i-2];
>                                                       // draw line if corresponding parent is not lastchild
>                                                       if (!isLast){
>                                                             drawParentLines(i);
>                                                       }//if
>                                                 }//if
>                                           }//else
>                                     }//for
>                               }// > 2
>                              
>                               else if ( depth == 2){
>                                     var offset:Number = 23;
>                                     graphics.moveTo(offset,-8);
>                                     graphics.lineTo(offset,2);
>                                    
>                               }
>                 }
>                 else{
>
>                               makeLastChildArr(node,3,depth);
>                               //trace("isLastChild = " + isLast + " i=" + i);
>                               trace("lineArrLen = " + lineArr.length );
>      
>                               lineArr = lineArr.reverse();
>                               for (var i:Number=0;i< lineArr.length;i++){
>                                     trace("lineArr = " + lineArr[i] + " i=" + i);
>                                    
>                               }
>
>                               for(var i:Number=1;i<=depth;i++){
>                                    
>                                     var parentDropLine:Boolean = false;
>                              
>                                     if(i == depth ){
>                                           drawChildLeafLines(indent);
>                                     }
>                                     else { // Preceding lines
>                                           if (i != 1 ){ // don't draw first line
>                                           // pull out from correct index of lineArray
>                                                 isLast = lineArr[i-2];
>                                                 // draw line if corresponding parent is not lastchild
>                                                 if (!isLast){
>                                                       drawParentLines(i);
>                                                 }//if
>
>
>                                                
>                                           }//if
>                                     }//else
>                               }//for
>                              
>                 }
>                
>                         }//treee
>                              
>             }// super data
>            
>           }
>       }
> }
>
> ------------------------------------------------------------
>







--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com




SPONSORED LINKS
Web site design development Computer software development Software design and development
Macromedia flex Software development best practice


YAHOO! GROUPS LINKS




Reply via email to