home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / controls / Label.as < prev    next >
Encoding:
Text File  |  2010-06-23  |  14.3 KB  |  502 lines

  1. package mx.controls
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.Event;
  5.    import flash.geom.Rectangle;
  6.    import flash.text.StyleSheet;
  7.    import flash.text.TextLineMetrics;
  8.    import mx.controls.listClasses.BaseListData;
  9.    import mx.controls.listClasses.IDropInListItemRenderer;
  10.    import mx.controls.listClasses.IListItemRenderer;
  11.    import mx.core.FlexVersion;
  12.    import mx.core.IDataRenderer;
  13.    import mx.core.IFlexModuleFactory;
  14.    import mx.core.IFontContextComponent;
  15.    import mx.core.IUITextField;
  16.    import mx.core.UIComponent;
  17.    import mx.core.UITextField;
  18.    import mx.core.mx_internal;
  19.    import mx.events.FlexEvent;
  20.    
  21.    use namespace mx_internal;
  22.    
  23.    public class Label extends UIComponent implements IDataRenderer, IDropInListItemRenderer, IListItemRenderer, IFontContextComponent
  24.    {
  25.       mx_internal static const VERSION:String = "3.5.0.12683";
  26.       
  27.       private var _selectable:Boolean = false;
  28.       
  29.       private var _text:String = "";
  30.       
  31.       private var _data:Object;
  32.       
  33.       mx_internal var htmlTextChanged:Boolean = false;
  34.       
  35.       private var _tabIndex:int = -1;
  36.       
  37.       private var styleSheetChanged:Boolean = false;
  38.       
  39.       private var explicitHTMLText:String = null;
  40.       
  41.       private var _textWidth:Number;
  42.       
  43.       private var enabledChanged:Boolean = false;
  44.       
  45.       private var condenseWhiteChanged:Boolean = false;
  46.       
  47.       private var _listData:BaseListData;
  48.       
  49.       protected var textField:IUITextField;
  50.       
  51.       private var _htmlText:String = "";
  52.       
  53.       private var _condenseWhite:Boolean = false;
  54.       
  55.       private var _textHeight:Number;
  56.       
  57.       private var _styleSheet:StyleSheet;
  58.       
  59.       mx_internal var textChanged:Boolean = false;
  60.       
  61.       public var truncateToFit:Boolean = true;
  62.       
  63.       private var textSet:Boolean;
  64.       
  65.       private var selectableChanged:Boolean;
  66.       
  67.       private var toolTipSet:Boolean = false;
  68.       
  69.       public function Label()
  70.       {
  71.          super();
  72.          tabChildren = true;
  73.       }
  74.       
  75.       override public function set enabled(param1:Boolean) : void
  76.       {
  77.          if(param1 == enabled)
  78.          {
  79.             return;
  80.          }
  81.          super.enabled = param1;
  82.          enabledChanged = true;
  83.          invalidateProperties();
  84.       }
  85.       
  86.       private function textField_textFieldStyleChangeHandler(param1:Event) : void
  87.       {
  88.          textFieldChanged(true);
  89.       }
  90.       
  91.       override public function get baselinePosition() : Number
  92.       {
  93.          var _loc1_:String = null;
  94.          var _loc2_:TextLineMetrics = null;
  95.          if(FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
  96.          {
  97.             if(!textField)
  98.             {
  99.                return NaN;
  100.             }
  101.             validateNow();
  102.             _loc1_ = isHTML ? explicitHTMLText : text;
  103.             if(_loc1_ == "")
  104.             {
  105.                _loc1_ = " ";
  106.             }
  107.             _loc2_ = isHTML ? measureHTMLText(_loc1_) : measureText(_loc1_);
  108.             return textField.y + _loc2_.ascent;
  109.          }
  110.          if(!mx_internal::validateBaselinePosition())
  111.          {
  112.             return NaN;
  113.          }
  114.          return textField.y + textField.baselinePosition;
  115.       }
  116.       
  117.       private function textField_textModifiedHandler(param1:Event) : void
  118.       {
  119.          textFieldChanged(false);
  120.       }
  121.       
  122.       public function set condenseWhite(param1:Boolean) : void
  123.       {
  124.          if(param1 == _condenseWhite)
  125.          {
  126.             return;
  127.          }
  128.          _condenseWhite = param1;
  129.          condenseWhiteChanged = true;
  130.          if(isHTML)
  131.          {
  132.             mx_internal::htmlTextChanged = true;
  133.          }
  134.          invalidateProperties();
  135.          invalidateSize();
  136.          invalidateDisplayList();
  137.          dispatchEvent(new Event("condenseWhiteChanged"));
  138.       }
  139.       
  140.       public function get textWidth() : Number
  141.       {
  142.          return _textWidth;
  143.       }
  144.       
  145.       override protected function createChildren() : void
  146.       {
  147.          super.createChildren();
  148.          if(!textField)
  149.          {
  150.             mx_internal::createTextField(-1);
  151.          }
  152.       }
  153.       
  154.       mx_internal function getTextField() : IUITextField
  155.       {
  156.          return textField;
  157.       }
  158.       
  159.       private function measureTextFieldBounds(param1:String) : Rectangle
  160.       {
  161.          var _loc2_:TextLineMetrics = isHTML ? measureHTMLText(param1) : measureText(param1);
  162.          return new Rectangle(0,0,_loc2_.width + UITextField.mx_internal::TEXT_WIDTH_PADDING,_loc2_.height + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  163.       }
  164.       
  165.       mx_internal function getMinimumText(param1:String) : String
  166.       {
  167.          if(!param1 || param1.length < 2)
  168.          {
  169.             param1 = "Wj";
  170.          }
  171.          return param1;
  172.       }
  173.       
  174.       private function textFieldChanged(param1:Boolean) : void
  175.       {
  176.          var _loc2_:* = false;
  177.          var _loc3_:* = false;
  178.          if(!param1)
  179.          {
  180.             _loc2_ = _text != textField.text;
  181.             _text = textField.text;
  182.          }
  183.          _loc3_ = _htmlText != textField.htmlText;
  184.          _htmlText = textField.htmlText;
  185.          if(_loc2_)
  186.          {
  187.             dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  188.          }
  189.          if(_loc3_)
  190.          {
  191.             dispatchEvent(new Event("htmlTextChanged"));
  192.          }
  193.          _textWidth = textField.textWidth;
  194.          _textHeight = textField.textHeight;
  195.       }
  196.       
  197.       [Bindable("dataChange")]
  198.       public function get data() : Object
  199.       {
  200.          return _data;
  201.       }
  202.       
  203.       [Bindable("valueCommit")]
  204.       public function get text() : String
  205.       {
  206.          return _text;
  207.       }
  208.       
  209.       public function get textHeight() : Number
  210.       {
  211.          return _textHeight;
  212.       }
  213.       
  214.       public function get styleSheet() : StyleSheet
  215.       {
  216.          return _styleSheet;
  217.       }
  218.       
  219.       public function set selectable(param1:Boolean) : void
  220.       {
  221.          if(param1 == selectable)
  222.          {
  223.             return;
  224.          }
  225.          _selectable = param1;
  226.          selectableChanged = true;
  227.          invalidateProperties();
  228.       }
  229.       
  230.       override public function get tabIndex() : int
  231.       {
  232.          return _tabIndex;
  233.       }
  234.       
  235.       public function set fontContext(param1:IFlexModuleFactory) : void
  236.       {
  237.          this.moduleFactory = param1;
  238.       }
  239.       
  240.       mx_internal function removeTextField() : void
  241.       {
  242.          if(textField)
  243.          {
  244.             textField.removeEventListener("textFieldStyleChange",textField_textFieldStyleChangeHandler);
  245.             textField.removeEventListener("textInsert",textField_textModifiedHandler);
  246.             textField.removeEventListener("textReplace",textField_textModifiedHandler);
  247.             removeChild(DisplayObject(textField));
  248.             textField = null;
  249.          }
  250.       }
  251.       
  252.       override public function set toolTip(param1:String) : void
  253.       {
  254.          super.toolTip = param1;
  255.          toolTipSet = param1 != null;
  256.       }
  257.       
  258.       mx_internal function createTextField(param1:int) : void
  259.       {
  260.          if(!textField)
  261.          {
  262.             textField = IUITextField(createInFontContext(UITextField));
  263.             textField.enabled = enabled;
  264.             textField.ignorePadding = true;
  265.             textField.selectable = selectable;
  266.             textField.styleName = this;
  267.             textField.addEventListener("textFieldStyleChange",textField_textFieldStyleChangeHandler);
  268.             textField.addEventListener("textInsert",textField_textModifiedHandler);
  269.             textField.addEventListener("textReplace",textField_textModifiedHandler);
  270.             if(param1 == -1)
  271.             {
  272.                addChild(DisplayObject(textField));
  273.             }
  274.             else
  275.             {
  276.                addChildAt(DisplayObject(textField),param1);
  277.             }
  278.          }
  279.       }
  280.       
  281.       override protected function commitProperties() : void
  282.       {
  283.          super.commitProperties();
  284.          if(hasFontContextChanged() && textField != null)
  285.          {
  286.             mx_internal::removeTextField();
  287.             condenseWhiteChanged = true;
  288.             enabledChanged = true;
  289.             selectableChanged = true;
  290.             mx_internal::textChanged = true;
  291.          }
  292.          if(!textField)
  293.          {
  294.             mx_internal::createTextField(-1);
  295.          }
  296.          if(condenseWhiteChanged)
  297.          {
  298.             textField.condenseWhite = _condenseWhite;
  299.             condenseWhiteChanged = false;
  300.          }
  301.          textField.tabIndex = tabIndex;
  302.          if(enabledChanged)
  303.          {
  304.             textField.enabled = enabled;
  305.             enabledChanged = false;
  306.          }
  307.          if(selectableChanged)
  308.          {
  309.             textField.selectable = _selectable;
  310.             selectableChanged = false;
  311.          }
  312.          if(styleSheetChanged)
  313.          {
  314.             textField.styleSheet = _styleSheet;
  315.             styleSheetChanged = false;
  316.          }
  317.          if(mx_internal::textChanged || mx_internal::htmlTextChanged)
  318.          {
  319.             if(isHTML)
  320.             {
  321.                textField.htmlText = explicitHTMLText;
  322.             }
  323.             else
  324.             {
  325.                textField.text = _text;
  326.             }
  327.             textFieldChanged(false);
  328.             mx_internal::textChanged = false;
  329.             mx_internal::htmlTextChanged = false;
  330.          }
  331.       }
  332.       
  333.       [Bindable("condenseWhiteChanged")]
  334.       public function get condenseWhite() : Boolean
  335.       {
  336.          return _condenseWhite;
  337.       }
  338.       
  339.       public function set listData(param1:BaseListData) : void
  340.       {
  341.          _listData = param1;
  342.       }
  343.       
  344.       private function get isHTML() : Boolean
  345.       {
  346.          return explicitHTMLText != null;
  347.       }
  348.       
  349.       public function get selectable() : Boolean
  350.       {
  351.          return _selectable;
  352.       }
  353.       
  354.       public function set text(param1:String) : void
  355.       {
  356.          textSet = true;
  357.          if(!param1)
  358.          {
  359.             param1 = "";
  360.          }
  361.          if(!isHTML && param1 == _text)
  362.          {
  363.             return;
  364.          }
  365.          _text = param1;
  366.          mx_internal::textChanged = true;
  367.          _htmlText = null;
  368.          explicitHTMLText = null;
  369.          invalidateProperties();
  370.          invalidateSize();
  371.          invalidateDisplayList();
  372.          dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  373.       }
  374.       
  375.       public function set data(param1:Object) : void
  376.       {
  377.          var _loc2_:* = undefined;
  378.          _data = param1;
  379.          if(_listData)
  380.          {
  381.             _loc2_ = _listData.label;
  382.          }
  383.          else if(_data != null)
  384.          {
  385.             if(_data is String)
  386.             {
  387.                _loc2_ = String(_data);
  388.             }
  389.             else
  390.             {
  391.                _loc2_ = _data.toString();
  392.             }
  393.          }
  394.          if(_loc2_ !== undefined && !textSet)
  395.          {
  396.             text = _loc2_;
  397.             textSet = false;
  398.          }
  399.          dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
  400.       }
  401.       
  402.       override protected function measure() : void
  403.       {
  404.          super.measure();
  405.          var _loc1_:String = isHTML ? explicitHTMLText : text;
  406.          _loc1_ = mx_internal::getMinimumText(_loc1_);
  407.          var _loc2_:Rectangle = measureTextFieldBounds(_loc1_);
  408.          measuredMinWidth = measuredWidth = _loc2_.width + getStyle("paddingLeft") + getStyle("paddingRight");
  409.          measuredMinHeight = measuredHeight = _loc2_.height + getStyle("paddingTop") + getStyle("paddingBottom");
  410.       }
  411.       
  412.       public function get fontContext() : IFlexModuleFactory
  413.       {
  414.          return moduleFactory;
  415.       }
  416.       
  417.       [Bindable("dataChange")]
  418.       public function get listData() : BaseListData
  419.       {
  420.          return _listData;
  421.       }
  422.       
  423.       public function set styleSheet(param1:StyleSheet) : void
  424.       {
  425.          _styleSheet = param1;
  426.          styleSheetChanged = true;
  427.          mx_internal::htmlTextChanged = true;
  428.          invalidateProperties();
  429.       }
  430.       
  431.       public function set htmlText(param1:String) : void
  432.       {
  433.          textSet = true;
  434.          if(!param1)
  435.          {
  436.             param1 = "";
  437.          }
  438.          if(isHTML && param1 == explicitHTMLText)
  439.          {
  440.             return;
  441.          }
  442.          _htmlText = param1;
  443.          mx_internal::htmlTextChanged = true;
  444.          _text = null;
  445.          explicitHTMLText = param1;
  446.          invalidateProperties();
  447.          invalidateSize();
  448.          invalidateDisplayList();
  449.          dispatchEvent(new Event("htmlTextChanged"));
  450.       }
  451.       
  452.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  453.       {
  454.          var _loc9_:* = false;
  455.          super.updateDisplayList(param1,param2);
  456.          var _loc3_:Number = getStyle("paddingLeft");
  457.          var _loc4_:Number = getStyle("paddingTop");
  458.          var _loc5_:Number = getStyle("paddingRight");
  459.          var _loc6_:Number = getStyle("paddingBottom");
  460.          textField.setActualSize(param1 - _loc3_ - _loc5_,param2 - _loc4_ - _loc6_);
  461.          textField.x = _loc3_;
  462.          textField.y = _loc4_;
  463.          var _loc7_:String = isHTML ? explicitHTMLText : text;
  464.          var _loc8_:Rectangle = measureTextFieldBounds(_loc7_);
  465.          if(truncateToFit)
  466.          {
  467.             if(isHTML)
  468.             {
  469.                _loc9_ = _loc8_.width > textField.width;
  470.             }
  471.             else
  472.             {
  473.                textField.text = _text;
  474.                _loc9_ = textField.truncateToFit();
  475.             }
  476.             if(!toolTipSet)
  477.             {
  478.                super.toolTip = _loc9_ ? text : null;
  479.             }
  480.          }
  481.       }
  482.       
  483.       [Bindable("htmlTextChanged")]
  484.       public function get htmlText() : String
  485.       {
  486.          return _htmlText;
  487.       }
  488.       
  489.       public function getLineMetrics(param1:int) : TextLineMetrics
  490.       {
  491.          return !!textField ? textField.getLineMetrics(param1) : null;
  492.       }
  493.       
  494.       override public function set tabIndex(param1:int) : void
  495.       {
  496.          _tabIndex = param1;
  497.          invalidateProperties();
  498.       }
  499.    }
  500. }
  501.  
  502.