|
|
|||||
ContextMenuEvent и Tree
Возможно ли отследить на каком конкретно элементе дерева был вызван ContextMenuEvent? Повешал так:
private function initContextMenu():void { this.contextMenu = new ContextMenu(); this.contextMenu.hideBuiltInItems(); this.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, this.contextMenuAddEvent); contextMenuAdd = new ContextMenuItem("Добавить подкатегорию"); this.contextMenu.customItems.push(contextMenuAdd); //contextMenuAdd.addEventListener(ContextMenuEvent.MENU_SELECT, contextMenuAddEvent); } public function contextMenuAddEvent(event:ContextMenuEvent):void { trace(event.mouseTarget); } Или придется инициализировать контекстное меню для ItemRenderer-a? |
|
|||||
Написал рендерер:
package CellRenderers { import mx.controls.treeClasses.*; import mx.collections.*; import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.ui.ContextMenuBuiltInItems; import flash.events.ContextMenuEvent; import flash.events.ContextMenuEvent; public class ETreeItemRenderer extends TreeItemRenderer { private var contextMenuAdd:ContextMenuItem; public function ETreeItemRenderer() { super(); mouseEnabled = false; initContextMenu(); } public function contextMenuAddEvent(event:ContextMenuEvent):void { trace(1); } private function initContextMenu():void { this.contextMenu = new ContextMenu(); this.contextMenu.hideBuiltInItems(); this.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, this.contextMenuAddEvent); contextMenuAdd = new ContextMenuItem("Добавить подкатегорию"); this.contextMenu.customItems.push(contextMenuAdd); contextMenuAdd.addEventListener(ContextMenuEvent.MENU_SELECT, this.contextMenuAddEvent); } } } |
|
|||||
Неа. Где могу - сам ищу. Если не получается найти здесь спрашиваю.
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Везде не получается
|
|
|||||
Вроде как вот это забыл добавить callTree.contextMenu=m; (callTree просто id дерева )
|
|
|||||
Регистрация: Sep 2006
Сообщений: 2
|
Используй ContextMenuManager, написанный by Nirth - http://orangeflash.eu/?p=90, хорошая вещь
|
|
|||||
Ну и причем тут контекст меню манагер??? И Нирт тоже молодца, как что ничего-непонятно-делай-приятель-сам-свой-проект или форум-для-того-чтобы-общаться-а-не-решать-проблемы
Сабж топика злой - приходиться повторить - люди кто знает как отловить возможно отследить на каком конкретно элементе дерева был вызван ContextMenuEvent? Потому как полный писец. |
|
|||||
Решил проблему.
1. Пишем свой итемрендерер. 2. Отлавливаем маусовер и записываем в какею-либо переменную дерева данный элемент. 3. В дереве при вызове контекстного меню проверяем эту переменную Код итемрендерера: package CellRenderers.Classes { import mx.controls.treeClasses.*; import mx.collections.*; import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.ui.ContextMenuBuiltInItems; import flash.events.ContextMenuEvent; import flash.events.ContextMenuEvent; import flash.events.MouseEvent; import editor.ETree; public class ETreeItemRenderer extends TreeItemRenderer { public function ETreeItemRenderer() { super(); this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverEvent); } public function mouseOverEvent(event:MouseEvent):void { var myListData:TreeListData = TreeListData(listData); var eTree:ETree = ETree(this.listData.owner); eTree.setOverItem(myListData); } } } Обработка в дереве: public class ETree extends Tree { ... public var overItem:TreeListData; ... public function treeContextMenuEvent(event:ContextMenuEvent):void { selectedItem = overItem.item; //If toplevel category then disable first menu item if (TreeListData(overItem).depth==1) { contextMenu.customItems[0].enabled = false; } } } |
Часовой пояс GMT +4, время: 00:37. |
|
« Предыдущая тема | Следующая тема » |
|
|