package com.oxylusflash.book { import flash.display.Sprite; import flash.filters.BlurFilter; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class MessageBox extends FadeInOutItem { public var bgMc:Sprite; public var textTf:TextField; private var _label:String = ""; private static const BLUR:Number = 8; private var blurFilter:BlurFilter = new BlurFilter(BLUR, BLUR, 3); private var trained:Boolean = false; private var oInTime:Number; /** * Popup message box. */ public function MessageBox() { bgMc.cacheAsBitmap = true; textTf.text = _label; textTf.multiline = true; textTf.autoSize = TextFieldAutoSize.LEFT; textTf.wordWrap = false; textTf.condenseWhite = true; textTf.styleSheet = Global.styleSheet; bgMc.filters = [Global.SHADOW]; oInTime = inTime; } /** * Message box label. */ public function get label():String { return _label; } public function set label(value:String):void { if (this.state == FadeInOutItem.INVISIBLE) { trained = false; this.state = FadeInOutItem.VISIBLE; } if (_label != value) { _label = value; textTf.htmlText = _label; if (!trained) { bgMc.width = Math.round(textTf.width); bgMc.height = Math.round(textTf.height + 2 * textTf.y); centerAlign(); } } } /** * Show message box and train its size. * @param trainStr */ public function show(trainStr:String = null):void { if (trainStr) sizeTrain(trainStr); this.state = FadeInOutItem.VISIBLE; } /** * Hide message box. */ public function hide():void { trained = false; this.state = FadeInOutItem.INVISIBLE; } /** * Train message box size. * @param trainStr */ public function sizeTrain(trainStr:String):void { trained = true; textTf.htmlText = trainStr; bgMc.width = Math.round(textTf.width); bgMc.height = Math.round(textTf.height + 2 * textTf.y); textTf.htmlText = ""; centerAlign(); } /** * Align message box on the stage. */ private function centerAlign():void { if (Global.layout) { this.x = (Global.layout.width - bgMc.width) * 0.5; this.y = (Global.layout.height - bgMc.height) * 0.5; } } /** * Overrides. */ override public function get width():Number { return bgMc.width; } override public function set width(value:Number):void { } override public function get height():Number { return bgMc.height; } override public function set height(value:Number):void { } override public function get x():Number { return super.x; } override public function set x(value:Number):void { super.x = Math.round(value); } override public function get y():Number { return super.y; } override public function set y(value:Number):void { super.y = Math.round(value); } override public function get alpha():Number { return super.alpha; } override public function set alpha(value:Number):void { super.alpha = value; blurFilter.blurX = blurFilter.blurY = (1 - value) * BLUR; this.filters = this.visible ? [blurFilter] : []; } } }