package Shadow { import flash.display.Sprite; import flash.display.Stage; import flash.events.*; import flash.events.Event; import flash.events.MouseEvent; import flash.system.IME; import flash.text.*; import flash.text.Font; import flash.text.TextLineMetrics; import mx.controls.Alert; import mx.controls.TextInput; import mx.core.UIComponent; import mx.events.FlexEvent; import mx.managers.IFocusManager; import spark.components.Label; public class MyLabel extends UIComponent { public var ti:TextInput; public var _label:String; public var lbl:Label; public var isEdit:Boolean; [Embed(source="../MenksoftHawang_mirror.ttf", fontName="dongsheng",fontWeight="bold", mimeType="application/x-font")] private var LogoFont:Class public function MyLabel() { super(); ti=new TextInput; ti.setStyle("themeColor", 0); lbl=new Label; // lbl.setStyle("themeColor", 0); lbl.rotationX=180; lbl.rotationZ=90; ti.rotationX=180; ti.rotationZ=90; isEdit=false; lbl.doubleClickEnabled=true lbl.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler); ti.addEventListener(FlexEvent.ENTER, enterHandler); } private function enterHandler(event:FlexEvent):void { isEdit=!isEdit; this._label=ti.text; invalidateProperties(); // focusManager.setFocus(lbl); focusManager.hideFocus(); stage.removeEventListener(MouseEvent.MOUSE_UP, stageUpHandler); } private function stageUpHandler(event:Event):void { if (event.target.parent == ti) return; if (isEdit) { isEdit=!isEdit; this._label=ti.text; invalidateProperties(); // focusManager.setFocus(lbl); focusManager.hideFocus(); } stage.removeEventListener(MouseEvent.MOUSE_UP, stageUpHandler); } private function doubleClickHandler(event:MouseEvent):void { isEdit=!isEdit; ti.setFocus(); stage.addEventListener(MouseEvent.MOUSE_UP, stageUpHandler); invalidateProperties(); } protected override function createChildren():void { super.createChildren(); addChild(ti); addChild(lbl); } protected override function commitProperties():void { super.commitProperties(); lbl.text=this._label; ti.text=this._label; invalidateSize(); invalidateDisplayList(); } protected override function measure():void { super.measure(); var lineMetrics:TextLineMetrics; var font:Font=new Font(); lineMetrics=ti.measureText(ti.text); this.measuredHeight=lineMetrics.height + 4 > 20 ? lineMetrics.height + 4 : 20; var temp:int=lineMetrics.width + lbl.getStyle("paddingLeft") + lbl.getStyle("paddingRight") + 15; this.measuredWidth=temp > 50 ? temp : 50; } protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); if (!isEdit) { this.graphics.clear(); ti.move(0, 0); lbl.move(0, 0); lbl.setActualSize(unscaledWidth, unscaledHeight); ti.setActualSize(0, 0); } else { ti.move(4, 4); lbl.move(0, 0); this.graphics.clear(); this.graphics.beginFill(0); this.graphics.drawRect(0, 0, unscaledWidth, unscaledHeight); ti.setActualSize(unscaledWidth, unscaledHeight); lbl.setActualSize(unscaledWidth, unscaledHeight); this.graphics.moveTo(4, 4); this.graphics.drawRect(4, 4, unscaledWidth, unscaledHeight); this.setChildIndex(lbl, 0); } } public function set label(value:String):void { this._label=value; this.invalidateProperties(); } public function get label():String { return this._label; } } }