View unanswered posts | View active topics It is currently 2022-07-06 9:15



This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
 如果让相关的link始终在一起 
Author Message
TWaver开发组
User avatar

Joined: 2009-04-20 18:37
Posts: 3115
Post 如果让相关的link始终在一起
设置Styles.LINK_BUNDLE_ID后,LINK_BUNDLE_ID一样的link会在一起,但是LINK_BUNDLE_ID不一样的link就无法合并了。
可以考虑监听link bundle事件(InteractionEvent.BUNDLE_LINK),link bundle合并时resetBundleLinks,展开时,重新调整link的顺序
完整demo:
Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
            xmlns:tw="http://www.servasoftware.com/2009/twaver/flex"
            addedToStage="init();">
   <mx:Script>
      <![CDATA[
         import twaver.Defaults;
         import twaver.ElementBox;
         import twaver.ICollection;
         import twaver.IElement;
         import twaver.Link;
         import twaver.Node;
         import twaver.Styles;
         import twaver.network.interaction.InteractionEvent;
         
         private var box:ElementBox = new ElementBox();
         private var from:Node = new Node();
         private var to:Node = new Node();
         private var index:int = 1;
         
         private function init():void {
            Styles.setStyle(Styles.LINK_BUNDLE_GAP, 30);
            Defaults.LINK_BUNDLE_AGENT_FUNCTION = function(links:ICollection):Link {
               var result:Link = null;
               links.forEach(function(link:Link):void {
                  if(result == null){
                     result = link;
                  }else{
                     var level1:String = link.getClient("level");
                     var level2:String = result.getClient("level");
                     if(level1 > level2){
                        result = link;
                     }
                  }
               });
               return result;
            };
            network.addInteractionListener(function(e:InteractionEvent):void {
               if(InteractionEvent.BUNDLE_LINK == e.kind){
                  if(e.element.getStyle(Styles.LINK_BUNDLE_EXPANDED)){
                     adjustLinkOrder();
                  }else{
                     box.resetBundleLinks();
                  }
               }
            });
            initBox();
            network.elementBox = box;
            tree.dataBox = box;
            table.dataBox = box;
         }
         
         private function initBox():void {
            from.name = "From";
            from.location = new Point(100, 100);
            box.add(from);
            
            to.name = "To";
            to.location = new Point(300, 300);
            box.add(to);
            
            for(index=1; index<=3; index++){
               var link:Link = new Link(from, to);
               var group:String = index==2 ? "group1" : "group2";
               var level:String = "level" + index;
               link.name = "link" + index + ":" + group + ":" + level;
               link.setClient("level", level);
               link.setClient("group", group);
               box.add(link);
            }
            adjustLinkOrder();
         }
         
         private function adjustLinkOrder():void {
            var links:Dictionary = new Dictionary();
            box.forEach(function(e:IElement):void {
               if(e is Link){
                  if(!links[e.id]){
                     var link:Link = e as Link;
                     if(link.bundleLinks != null){
                        link.bundleLinks.links.forEach(function(bundleLink:Link):void {
                           links[bundleLink.id] = bundleLink;
                           network.invalidateElementUI(bundleLink);
                        });
                        link.bundleLinks.links.sort(function(link1:Link, link2:Link):int {
                           var group1:String = link1.getClient("group");
                           var group2:String = link2.getClient("group");
                           if(group1 == group2){
                              return 0;
                           }else if(group1 > group2){
                              return 1;
                           }else{
                              return -1;
                           }
                        });
                     }
                  }
               }
            });
         }
         
         private function addLink():void {
            var link:Link = new Link(from, to);
            var group:String = txtGroup.text;
            var level:String = txtLevel.text;
            link.name = "link" + index++ + ":" + group + ":" + level;
            link.setClient("level", level);
            link.setClient("group", group);
            box.add(link);
            if(link.getStyle(Styles.LINK_BUNDLE_EXPANDED)){
               adjustLinkOrder();
            }else{
               box.resetBundleLinks();
            }
            txtGroup.text = "group1" == group ? "group2" : "group1";
            txtLevel.text = "level" + index;
         }
      ]]>
   </mx:Script>
   <mx:HDividedBox width="100%" height="100%">
      <tw:Tree id="tree" width="30%" height="100%"/>
      <mx:VDividedBox width="70%" height="100%">
         <mx:VBox width="100%" height="70%">
            <mx:HBox width="100%">
               <mx:Button label="Zoom In" height="20" click="network.zoomIn();"/>
               <mx:Button label="Zoom Out" height="20" click="network.zoomOut();"/>
               <mx:Button label="Zoom Overview" height="20" click="network.zoomOverview();"/>
               <mx:Button label="Zoom Reset" height="20" click="network.zoomReset();"/>
               <mx:TextInput id="txtGroup" text="group1"/>
               <mx:TextInput id="txtLevel" text="level4"/>
               <mx:Button label="Add Link" height="20" click="addLink();"/>
            </mx:HBox>
            <tw:Network id="network" width="100%" height="100%"/>
         </mx:VBox>
         <tw:Table id="table" width="100%" height="30%">
            <tw:columns>
               <tw:TableColumn headerText="Name" dataField="name"/>
            </tw:columns>
         </tw:Table>
      </mx:VDividedBox>
   </mx:HDividedBox>
</mx:Application>

展开:
Attachment:
Screen Shot 2013-06-20 at 4.11.50 PM.png
Screen Shot 2013-06-20 at 4.11.50 PM.png [ 33.48 KiB | Viewed 4747 times ]

合并:
Attachment:
Screen Shot 2013-06-20 at 4.12.01 PM.png
Screen Shot 2013-06-20 at 4.12.01 PM.png [ 9.86 KiB | Viewed 4747 times ]


2013-06-20 16:08
Profile
Display posts from previous:  Sort by  
This topic is locked, you cannot edit posts or make further replies.   [ 1 post ] 

Who is online

Users browsing this forum: No registered users and 21 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: