package com.oxylusflash.book { import caurina.transitions.Tweener; import flash.events.MouseEvent; import flash.display.Sprite; public class DropMenuItem extends Sprite { public var normalState:DropMenuItemState; public var overState:DropMenuItemState; public var sepMc:Sprite; public var initChecked:Boolean = false; private var _label:String; public var id:int; public static const GROUP:String = "group"; public static var selItem:Object = { }; public var groupId:int; /** * Create new drop menu item. * @param pData Data. * @param pRadioLike Behaves like radio button. */ public function DropMenuItem(pData:Object = null, pRadioLike:Boolean = false) { overState.alpha = 0; this.mouseChildren = false; this.buttonMode = true; this.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler, false, 0, true); this.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler, false, 0, true); if (pRadioLike) { normalState.checkEnabled = true; overState.checkEnabled = true; this.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true); } if (pData) { this.label = pData.label; this.id = pData.id; initChecked = !!pData.checked; } } /** * Mouse events handlers. * @param e */ private function clickHandler(e:MouseEvent):void { var crtSel:DropMenuItem = selItem[GROUP + String(groupId)]; if (crtSel) crtSel.unCheck(); initCheck(); } protected function rollOverHandler(e:MouseEvent):void { Tweener.addTween(overState, { alpha: 1, base: Global.baseTween, time: .15 } ); } protected function rollOutHandler(e:MouseEvent):void { Tweener.addTween(overState, { alpha: 0, base: Global.baseTween, time: .15 } ); } /** * Item label. */ public function get label():String { return _label; } public function set label(value:String):void { if (_label != value) { _label = value; normalState.label = _label; overState.label = _label; } } /** * Initial check. */ public function initCheck():void { selItem[GROUP + String(groupId)] = this; normalState.checked = true; overState.checked = true; this.mouseEnabled = false; } /** * Check item. */ public function check():void { var crtSel:DropMenuItem = selItem[GROUP + String(groupId)]; if (crtSel) crtSel.unCheck(); initCheck(); } /** * Uncheck item. */ public function unCheck():void { normalState.checked = false; overState.checked = false; this.mouseEnabled = true; delete selItem[GROUP + String(groupId)]; } /** * Simulate item click. */ public function simulateClick():void { clickHandler(null); } /** * Overrides. */ override public function get mouseEnabled():Boolean { return super.mouseEnabled; } override public function set mouseEnabled(value:Boolean):void { super.mouseEnabled = value; this.buttonMode = value; normalState.disabled = !value; overState.disabled = !value; } override public function get width():Number { return normalState.width; } override public function set width(value:Number):void { normalState.width = value; overState.width = normalState.width; sepMc.width = normalState.width; } override public function get height():Number { return normalState.height + (sepMc.visible ? sepMc.height : 0); } override public function set height(value:Number):void { } } }