import mx.transitions.Tween; import mx.transitions.easing.*; class GenericMenuItem extends MovieClip { // Settings public var miWidth:Number; public var miHeight:Number; private var showDelay:Number; private var hideDelay:Number; private var fadeInTime:Number; private var fadeOutTime:Number; private var innerSpace:Number; private var roundCorners:Boolean; private var hSpace:Number; private var useAlt:Boolean; // Other private var type:String = "alt"; private var mAni:Tween; private var subMenu:MovieClip; private var _hasSubMenu:Boolean; private var interval:Number; private var aniItems:Array; private var _node_:XMLNode; private var _parent_:MovieClip; private var _url_:String; // Asstes private var prefix:String = ""; private var mcArrow:MovieClip; private var mcBackground:MovieClip; private var mcLight:MovieClip; private var mcShadow:MovieClip; private var mcLabel:MovieClip; private var tfLabel:TextField; // Methods public function GenericMenuItem() { setGlobals(); //===================================== // SETTINGS - edit only here bellow //===================================== showDelay = .1; // Number of seconds before the menu will be displayed hideDelay = .1; // Number of seconds before the menu will disappear fadeInTime = .1; // Number of seconds for menu fade in fadeOutTime = .1; // Number of seconds for menu fade out innerSpace = 3; //Pixels; the menu will be move by this ammount to the left and top roundCorners = false; //set to true if you want that submenus to have round corners; you can edit the shapes in the library hSpace = 5; // Horizontal space is some sort of left and right padding for the label useAlt = false; //set to true if you want to alternate submenu skins //===================================== // END OF SETTINGS - no more editing //===================================== var ph:MovieClip = eval(this._target+"/placeHolder_mc"); var w:Number = ph._width; var h:Number = ph._height; mcBackground = this.attachMovie(prefix+"Background", "_bg_symbol", this.getNextHighestDepth()); mcLight = this.attachMovie(prefix+"Light", "_Light_symbol", this.getNextHighestDepth()); mcShadow = this.attachMovie(prefix+"Shadow", "_Shadow_symbol", this.getNextHighestDepth()); mcLabel = this.attachMovie(prefix+"Label", "_Label_symbol", this.getNextHighestDepth()); mcArrow = this.attachMovie(prefix+"Arrow", "_Arrow_symbol", this.getNextHighestDepth()); tfLabel = mcLabel.tf_mc.tf_txt; mcArrow._visible = false; aniItems = [mcBackground, mcArrow, mcLabel]; for (var i in aniItems) { aniItems[i].stop(); } // init _hasSubMenu = false; subMenu = null; _parent_ = null; _url_ = ""; miWidth = w; miHeight = h; this._xscale = this._yscale=100; ph._visible = false; arrange(); } private function setGlobals() { if (_global.idx == undefined) { _global.idx = 0; } if (_global.gMC == undefined) { _global.gMC = this._parent; } } private function arrange() { var w = miWidth; var h = miHeight; mcBackground._width = w; mcBackground._height = h; mcLight._width = w; mcLight._y = 0; mcShadow._width = w; mcShadow._y = h; tfLabel._width = w-2*hSpace; mcLabel._y = h/2; mcLabel._x = hSpace; mcArrow._x = w-hSpace; mcArrow._y = Math.round(h/2); } private function setHasSubMenu(b:Boolean) { _hasSubMenu = b; if (b) { mcArrow._visible = true; tfLabel._width = miWidth-3*hSpace-mcArrow._width; } else { mcArrow._visible = false; } } private function setTimeout(f:Function, t:Number) { if (interval != undefined) { clearInterval(interval); } interval = setInterval(function (m) { clearInterval(m.interval); f.call(m); }, t*1000, this); } private function playTo(mc:MovieClip, fr:Number) { mc.onEnterFrame = function() { if (this._currentframe == fr) { delete this.onEnterFrame; } else if (this._currentframe0); } public function get Node():XMLNode { return _node_; } public function onRollOver() { setOnState(); if (_parent_ != null) { _parent_.onRollOver(); } if (_hasSubMenu) { setTimeout(showSubMenu, showDelay); } } public function onRollOut() { if (subMenu == null) { setOffState(); } if (_parent_ != null) { _parent_.onRollOut(); } if (_hasSubMenu) { setTimeout(hideSubMenu, hideDelay); } } public function onDragOut() { onRollOut(); } public function onDragOver() { onRollOver(); } public function onRelease() { if (_url_ != "") { getURL(_url_, "_self"); } } private function createSubMenu() { var a:Array = _node_.childNodes; subMenu = _global.gMC.createEmptyMovieClip("sm"+(++_global.idx), _global.gMC.getNextHighestDepth()); for (var i in a) { if (useAlt) { if (type == "alt") { var mc = subMenu.attachMovie("defaultMenuItem", "mi"+i, subMenu.getNextHighestDepth()); } else { var mc = subMenu.attachMovie("altDefaultMenuItem", "mi"+i, subMenu.getNextHighestDepth()); } } else { var mc = subMenu.attachMovie("defaultMenuItem", "mi"+i, subMenu.getNextHighestDepth()); } mc._y = i*mc.miHeight; mc.Node = a[i]; mc.Parent = this; } if (roundCorners) { with (subMenu) { var msk:MovieClip = createEmptyMovieClip("MASK", getNextHighestDepth()); var tl:MovieClip = msk.attachMovie("LeftTop", "tl_", msk.getNextHighestDepth(), {_x:0, _y:0}); var tr:MovieClip = msk.attachMovie("RightTop", "tr_", msk.getNextHighestDepth(), {_x:_width, _y:0}); var bl:MovieClip = msk.attachMovie("LeftBottom", "bl_", msk.getNextHighestDepth(), {_x:0, _y:_height}); var br:MovieClip = msk.attachMovie("RightBottom", "br_", msk.getNextHighestDepth(), {_x:_width, _y:_height}); var midh:MovieClip = msk.attachMovie("Mid", "midh_", msk.getNextHighestDepth(), {_x:tl._width, _y:0, _width:_width-2*tl._width, _height:_height}); var midv:MovieClip = msk.attachMovie("Mid", "midv_", msk.getNextHighestDepth(), {_x:0, _y:tl._height, _width:_width, _height:_height-2*tl._height}); setMask(msk); } } subMenu._visible = false; subMenu._alpha = 0; if (this._parent != _global.gMC) { subMenu._x = this._parent._x+miWidth-Math.abs(innerSpace); subMenu._y = this._parent._y+this._y-Math.abs(innerSpace); } else { subMenu._x = this._x+miWidth-Math.abs(innerSpace); subMenu._y = this._y-Math.abs(innerSpace); } if (subMenu._x+subMenu._width>Stage.width) { subMenu._x = this._parent._x-subMenu._width+Math.abs(innerSpace); } if (subMenu._y+subMenu._height>Stage.height) { subMenu._y = this._parent._y+this._y-subMenu._height+Math.abs(innerSpace)+subMenu.mi0._height; } } private function showSubMenu() { if (String(subMenu) == "") { subMenu = null; } if (subMenu == null) { createSubMenu(); } subMenu._visible = true; mAni.stop(); mAni = new Tween(subMenu, "_alpha", Regular.easeOut, subMenu._alpha, 100, fadeInTime, true); mAni.onMotionFinished = function() { }; } private function hideSubMenu() { setOffState(); if (subMenu == null) { return; } mAni.stop(); mAni = new Tween(subMenu, "_alpha", Regular.easeIn, subMenu._alpha, 0, fadeOutTime, true); mAni.onMotionFinished = function() { this.obj.removeMovieClip(); }; } }