Posted on 2013-07-22 15:33
TWaver 阅读(1718)
评论(0) 编辑 收藏
TWaver默认的Link只能分组bundle,没有分层bundle(也就是展开一层后,再展开一层,或合并一层后,再合并一层),因为在多层bundle中,在中间层中,无法自动分辨是想合并还是展开。这里写个例子,屏蔽了默认的双击Link展开或者合并LinkBundle,通过按钮实现多层bundle(这里实现了两层的合并或展开)。
TWaver中相同Styles.LINK_BUNDLE_ID才能bundle,所以第一层Link分组设置Styles.LINK_BUNDLE_ID
1 for(var i:int=0; i<4; i++){
2 var link:Link = new Link(node, node2);
3 link.name = "link " + i;
4 if(i%2 == 0){
5 link.setStyle(Styles.LINK_BUNDLE_ID, "bundle1");
6 link.setStyle(Styles.LINK_COLOR, 0xFF0000);
7 }else{
8 link.setStyle(Styles.LINK_BUNDLE_ID, "bundle2");
9 link.setStyle(Styles.LINK_COLOR, 0x0000FF);
10 }
11 box.add(link);
12 }
第一层合并或展开,可以直接使用TWaver方法
1 link.reverseBundleExpanded();
第二层合并,需要记录上一层的Styles.LINK_BUNDLE_ID,因为在展开时需要恢复原本的Styles.LINK_BUNDLE_ID,并需要设置Styles.LINK_BUNDLE_EXPANDED为false,最后重新设置所有Link的Styles.LINK_BUNDLE_ID为相同的值
1 e.setStyle(Styles.LINK_BUNDLE_ID, e.getClient("original_bundle_id"));
2 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
3 e.setStyle(Styles.LINK_BUNDLE_ID, "bundle");
从完全合并第一次展开的时候,需要恢复原本的
Styles.LINK_BUNDLE_ID,并将所有Link的original_bundle_id设置为null,设置e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);(展开后为第一层的合并状态)
1 e.setStyle(Styles.LINK_BUNDLE_ID, e.getClient("original_bundle_id"));
2 e.setClient("original_bundle_id", null);
3 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
见实现方法
1 private function bundle(expand:Boolean):void {
2 var link:Link = network.selectionModel.lastData as Link;
3 if(link == null){
4 return;
5 }
6 if(link.getStyle(Styles.LINK_BUNDLE_EXPANDED)){
7 if(!expand){
8 link.reverseBundleExpanded();
9 }
10 }else{
11 if(expand){
12 if(link.getClient("original_bundle_id") == null){
13 link.reverseBundleExpanded();
14 }else{
15 getSharedLinks(link.fromNode,
16 link.toNode).forEach(function(e:IElement):void {
17 e.setStyle(Styles.LINK_BUNDLE_ID,
18 e.getClient("original_bundle_id"));
19 e.setClient("original_bundle_id", null);
20 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
21 });
22 }
23 }else{
24 getSharedLinks(link.fromNode,
25 link.toNode).forEach(function(e:IElement):void {
26 e.setClient("original_bundle_id",
27 e.getStyle(Styles.LINK_BUNDLE_ID));
28 e.setStyle(Styles.LINK_BUNDLE_ID, "bundle");
29 e.setStyle(Styles.LINK_BUNDLE_EXPANDED, false);
30 });
31 }
32 }
33 }
可以执行文件下载
LinkBundleDemo