如何给TWaver中的Node对象加右键菜单项
选中树节点,多出一个按钮,可以用tree.iconsComponentsFunction(用法参考AlarmMappingDemo)。
菜单用Menu.createMenu(用法参考Flex如何定制Menu的Icon)
如果右键点击树节点时,让此节点选中最好,不过现在还没有通过ContextMenuEvent或者MouseEvent获得TreeData的方法,可以考虑先自己继承twaver.Tree,添加如下方法(TWaver Flex 1.5版本将添加):
代码:
public function getTreeDataByContextMenuEvent(event:ContextMenuEvent):TreeData{
var itemRenderer:IListItemRenderer;
var target:DisplayObject = event.mouseTarget;
while (target && target != this) {
if (target is IListItemRenderer && target.parent == listContent) {
if (target.visible) {
itemRenderer = IListItemRenderer(target);
}
break;
}
if (target is IUIComponent){
target = IUIComponent(target).owner;
} else {
target = target.parent;
}
}
if(itemRenderer != null){
return this.getTreeDataByIndex(this.itemRendererToIndex(itemRenderer));
}
return null;
}
public function getTreeDataByMouseEvent(event:MouseEvent):TreeData{
var itemRenderer:IListItemRenderer = this.mouseEventToItemRenderer(event);
if(itemRenderer != null){
return this.getTreeDataByIndex(this.itemRendererToIndex(itemRenderer));
}
return null;
}
默认Menu上的Icon必须通过iconField和iconFunction去指定,但是这两种方式都必须用嵌入资源Class名字去指定Icon,如果想用动态的图片(比如URL)作为Menu的Icon,就必须定制一把MenuItemRenderer。
首先写个类CustomMenuItemRenderer继承MenuItemRenderer,里面增加一个如下变量作为自定义Icon的组件:
1
private var image:UIComponent = new UIComponent();
然后里面重写measure方法(计算MenuItem的宽高):
01
override protected function measure():void {
02
super.measure();
03
04
if (separatorIcon || listData == null) {
05
return;
06
}
07
08
var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
09
if(imageAsset == null){
10
return;
11
}
12
measuredWidth += imageAsset.width;
13
if(imageAsset.height > measuredHeight){
14
measuredHeight = imageAsset.height;
15
}
16
}
重写commitProperties方法(重画并增加Icon,指定Icon宽高):
查看源代码打印帮助