TWaver - 专注UI技术

http://twaver.servasoft.com/
posts - 171, comments - 191, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

如何实现link多层bundle

Posted on 2013-07-22 15:33 TWaver 阅读(1706) 评论(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,&nbsp;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

只有注册用户登录后才能发表评论。


网站导航: