package com.jwopitz.containers { import flash.events.Event; import flash.events.FocusEvent; import flash.events.MouseEvent; import mx.controls.LinkButton; import mx.core.EventPriority; import mx.controls.Alert; [Style(name="titleLinkButtonStyle", type="String", inherit="no")] [Style(name="titleStyleOver", type="String", inherit="no")] [Event (name='titleClick', type='flash.events.MouseEvent')] public class LinkTitlePod extends Pod { protected var _titleLinkBtn:LinkButton; protected var _isTitleActive:Boolean = true; protected var _titleStyle:Object; public var allowTitleEvtPassThru:Boolean = false override protected function createChildren ():void { super.createChildren(); titleTextField.mouseEnabled = false; if (!_titleLinkBtn){ _titleLinkBtn = new LinkButton(); _titleLinkBtn.buttonMode = isTitleActive; _titleLinkBtn.enabled = isTitleActive; _titleLinkBtn.mouseEnabled = isTitleActive; _titleLinkBtn.owner = this; _titleLinkBtn.styleName = getStyle("titleLinkButtonStyle"); _titleLinkBtn.addEventListener(MouseEvent.CLICK, titleLinkBtn_onClick, false, EventPriority.DEFAULT_HANDLER); _titleLinkBtn.addEventListener(MouseEvent.MOUSE_DOWN, titleLinkBtn_onMouseDown, false, EventPriority.DEFAULT_HANDLER); _titleLinkBtn.addEventListener(MouseEvent.MOUSE_UP, titleLinkBtn_onMouseUp, false, EventPriority.DEFAULT_HANDLER); _titleLinkBtn.addEventListener(MouseEvent.MOUSE_OUT, titleLinkBtn_onMouseOut, false, EventPriority.DEFAULT_HANDLER); _titleLinkBtn.addEventListener(MouseEvent.MOUSE_OVER, titleLinkBtn_onMouseOver, false, EventPriority.DEFAULT_HANDLER); _titleLinkBtn.addEventListener(FocusEvent.FOCUS_IN, titleLinkBtn_onFocusIn, false, EventPriority.DEFAULT_HANDLER); _titleLinkBtn.addEventListener(FocusEvent.FOCUS_OUT, titleLinkBtn_onFocusOut, false, EventPriority.DEFAULT_HANDLER); var i:int = titleBar.getChildIndex(titleTextField) - 1; titleBar.addChildAt(_titleLinkBtn, i); } } override protected function layoutChrome (unscaledWidth:Number, unscaledHeight:Number):void { super.layoutChrome(unscaledWidth, unscaledHeight); _titleLinkBtn.setActualSize(titleTextField.getExplicitOrMeasuredWidth(), titleTextField.getExplicitOrMeasuredHeight()); _titleLinkBtn.move(titleTextField.x, titleTextField.y); } // // title link button evt handlers //-----------------------------------------------------------// protected function titleLinkBtn_onClick (evt:MouseEvent):void { evt.stopPropagation(); if (isTitleActive) dispatchEvent(createTitleBarMouseEvent('titleClick', evt)); } protected function titleLinkBtn_onMouseDown (evt:MouseEvent):void { if (!allowTitleEvtPassThru) evt.stopPropagation(); } protected function titleLinkBtn_onMouseUp (evt:MouseEvent):void { if (!allowTitleEvtPassThru) evt.stopPropagation(); } protected function titleLinkBtn_onMouseOut (evt:MouseEvent):void { evt.stopPropagation(); _titleStyle = getStyle("titleStyleName"); titleTextField.styleName = _titleStyle; } protected function titleLinkBtn_onMouseOver (evt:MouseEvent):void { evt.stopPropagation(); _titleStyle = getStyle("titleStyleOver"); if (_titleStyle == null) _titleStyle = getStyle("titleStyleName"); if (isTitleActive) titleTextField.styleName = _titleStyle; } protected function titleLinkBtn_onFocusIn (evt:FocusEvent):void { _titleStyle = getStyle("titleStyleOver"); if (_titleStyle == null) _titleStyle = getStyle("titleStyleName"); if (isTitleActive) titleTextField.styleName = _titleStyle; } protected function titleLinkBtn_onFocusOut (evt:FocusEvent):void { _titleStyle = getStyle("titleStyleName"); titleTextField.styleName = _titleStyle; } // // getters/setters //-----------------------------------------------------------// /** * Flag indicating whether the Pod's title is interactive or not. */ public function get isTitleActive ():Boolean { return _isTitleActive; } /** * @private */ public function set isTitleActive (value:Boolean):void { _isTitleActive = value; if (_titleLinkBtn){ _titleLinkBtn.buttonMode = value; _titleLinkBtn.enabled = value; _titleLinkBtn.mouseEnabled = value; } dispatchEvent(new Event('titleActiveChange')); } } }