flex 右键菜单管理工具类

本文介绍了一个Flash中实现自定义右键菜单的方法,通过创建ContextMenuManager类来管理菜单项,支持添加、插入和移除菜单项等功能。

/*============使用==========*/

var contextmenu:ContextMenuManager=new ContextMenuManager();

contextmenu.add("最大化",menuHandle);//menuHandle处理函数

 

/**==================ContextMenuManager.as==========================*/

package file
{
    import flash.display.InteractiveObject;
    import flash.events.*;
    import flash.errors.IllegalOperationError;
    import flash.ui.*;
    import flash.utils.getQualifiedClassName;

    public class ContextMenuManager extends EventDispatcher
    {
        protected var menu:ContextMenu;
        protected var target:InteractiveObject;

        public function ContextMenuManager(target:InteractiveObject,hideBuiltInItems:Boolean=true)
        {
            this.target=target;
            menu=new ContextMenu();
            if(hideBuiltInItems)
            {
                menu.hideBuiltInItems();
            }
            this.target.contextMenu=menu;
            menu.addEventListener(ContextMenuEvent.MENU_SELECT,passEvent);
        }

        public function add(caption:String,handler:Function,separatorBefore:Boolean=false,enabled:Boolean=true,visible:Boolean=true):ContextMenuItem
        {
            var result:ContextMenuItem=createItem(caption,handler,separatorBefore,enabled,visible);
            menu.customItems.push(result);
            return result;
        }


        public function insert(id:*,caption:String,handler:Function,separatorBefore:Boolean=false,enabled:Boolean=true,visible:Boolean=true):ContextMenuItem
        {
            var result:ContextMenuItem=createItem(caption,handler,separatorBefore,enabled,visible);
            var index:int=id is String?getIndexByCaption(id):id as int;
            (menu.customItems as Array).splice(index,0,result);
            return result;
        }

        public function remove(id:*):void
        {
            if(id is String)
            {
                id=getIndexByCaption(id);
            }
            customItems.splice(id as Number,1);
        }


        public function hideBuiltInItems():void
        {
            menu.hideBuiltInItems();
        }


        public function getItem(id:*):ContextMenuItem
        {
            if(id is String)
            {
                id=getIndexByCaption(id);
            }
            return menu.customItems[id];
        }


        public function get customItems():Array
        {
            return menu.customItems;
        }



        public function get builtInItems():ContextMenuBuiltInItems
        {
            return menu.builtInItems;
        }


        public function get contextMenu():ContextMenu
        {
            return menu;
        }

        /**         *@private         */

        protected function createItem(caption:String,handler:Function,separatorBefore:Boolean=false,enabled:Boolean=true,visible:Boolean=true):ContextMenuItem
        {
            var result:ContextMenuItem=new ContextMenuItem(caption,separatorBefore,enabled,visible);
            result.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,handler);
            result.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,passEvent);
            return result;
        }

        /**         *@private         */

        protected function getIndexByCaption(caption:String):int
        {
            for(var i:uint=0;i<menu.customItems.length;i++)
            {
                if(menu.customItems[i].caption==caption)
                {
                    return i;
                }
            }
            return-1;
        }

        /**         * @private         */

        protected function passEvent(event:ContextMenuEvent):void
        {
            dispatchEvent(new ContextMenuEvent(event.type,event.bubbles,event.cancelable,event.mouseTarget,event.contextMenuOwner));
        }
    }


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值