home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / core / windowClasses / TitleBar.as < prev   
Encoding:
Text File  |  2010-06-23  |  18.4 KB  |  503 lines

  1. package mx.core.windowClasses
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.display.NativeWindowDisplayState;
  5.    import flash.events.Event;
  6.    import flash.events.MouseEvent;
  7.    import flash.geom.Rectangle;
  8.    import flash.system.Capabilities;
  9.    import flash.text.TextFormat;
  10.    import flash.text.TextFormatAlign;
  11.    import mx.controls.Button;
  12.    import mx.core.IFlexDisplayObject;
  13.    import mx.core.IUITextField;
  14.    import mx.core.IWindow;
  15.    import mx.core.UIComponent;
  16.    import mx.core.UITextField;
  17.    import mx.core.mx_internal;
  18.    import mx.styles.ISimpleStyleClient;
  19.    import mx.styles.IStyleClient;
  20.    
  21.    use namespace mx_internal;
  22.    
  23.    public class TitleBar extends UIComponent
  24.    {
  25.       mx_internal static const VERSION:String = "3.5.0.12683";
  26.       
  27.       public var closeButton:Button;
  28.       
  29.       private var minimizeButtonSkin:Class;
  30.       
  31.       mx_internal var titleIconObject:Object;
  32.       
  33.       public var titleTextField:IUITextField;
  34.       
  35.       private var _title:String = "";
  36.       
  37.       private var titleIconChanged:Boolean = false;
  38.       
  39.       public var maximizeButton:Button;
  40.       
  41.       private var closeButtonSkin:Class;
  42.       
  43.       mx_internal var titleBarBackground:IFlexDisplayObject;
  44.       
  45.       public var minimizeButton:Button;
  46.       
  47.       private var _titleIcon:Class;
  48.       
  49.       private var maximizeButtonSkin:Class;
  50.       
  51.       private var titleChanged:Boolean = false;
  52.       
  53.       private var restoreButtonSkin:Class;
  54.       
  55.       public function TitleBar()
  56.       {
  57.          super();
  58.          doubleClickEnabled = true;
  59.          addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
  60.          addEventListener(MouseEvent.DOUBLE_CLICK,doubleClickHandler);
  61.       }
  62.       
  63.       private static function isMac() : Boolean
  64.       {
  65.          return Capabilities.os.substring(0,3) == "Mac";
  66.       }
  67.       
  68.       protected function placeButtons(param1:String, param2:Number, param3:Number, param4:Number, param5:Number, param6:Number) : void
  69.       {
  70.          var _loc7_:Number = getStyle("buttonPadding");
  71.          var _loc8_:Number = getStyle("titleBarButtonPadding");
  72.          minimizeButton.setActualSize(minimizeButton.measuredWidth,minimizeButton.measuredHeight);
  73.          maximizeButton.setActualSize(maximizeButton.measuredWidth,maximizeButton.measuredHeight);
  74.          closeButton.setActualSize(closeButton.measuredWidth,closeButton.measuredHeight);
  75.          if(param1 == "right")
  76.          {
  77.             minimizeButton.move(param2 - (minimizeButton.measuredWidth + maximizeButton.measuredWidth + closeButton.measuredWidth + 2 * _loc7_) - param6 - _loc8_,(param3 - minimizeButton.measuredHeight) / 2);
  78.             maximizeButton.move(param2 - (maximizeButton.measuredWidth + closeButton.measuredWidth + _loc7_) - param6 - _loc8_,(param3 - maximizeButton.measuredHeight) / 2);
  79.             closeButton.move(param2 - closeButton.measuredWidth - param6 - _loc8_,(param3 - closeButton.measuredHeight) / 2);
  80.          }
  81.          else
  82.          {
  83.             _loc8_ = Math.max(_loc8_,param4);
  84.             closeButton.move(_loc8_,(param3 - closeButton.measuredHeight) / 2);
  85.             minimizeButton.move(_loc7_ + _loc8_ + closeButton.measuredWidth,(param3 - minimizeButton.measuredHeight) / 2);
  86.             maximizeButton.move(_loc8_ + _loc7_ * 2 + closeButton.measuredWidth + minimizeButton.measuredWidth,(param3 - maximizeButton.measuredHeight) / 2);
  87.          }
  88.       }
  89.       
  90.       private function minimizeButton_clickHandler(param1:Event) : void
  91.       {
  92.          window.minimize();
  93.       }
  94.       
  95.       private function measureChromeText(param1:IUITextField) : Rectangle
  96.       {
  97.          var _loc2_:Number = 20;
  98.          var _loc3_:Number = 14;
  99.          if(Boolean(param1) && Boolean(param1.text))
  100.          {
  101.             param1.validateNow();
  102.             _loc2_ = param1.textWidth;
  103.             _loc3_ = param1.textHeight;
  104.          }
  105.          return new Rectangle(0,0,_loc2_,_loc3_);
  106.       }
  107.       
  108.       override protected function createChildren() : void
  109.       {
  110.          var _loc2_:IStyleClient = null;
  111.          var _loc3_:ISimpleStyleClient = null;
  112.          super.createChildren();
  113.          var _loc1_:Class = getStyle("titleBarBackgroundSkin");
  114.          if(_loc1_)
  115.          {
  116.             if(!mx_internal::titleBarBackground)
  117.             {
  118.                mx_internal::titleBarBackground = new _loc1_();
  119.                _loc2_ = mx_internal::titleBarBackground as IStyleClient;
  120.                if(_loc2_)
  121.                {
  122.                   _loc2_.setStyle("backgroundImage",undefined);
  123.                }
  124.                _loc3_ = mx_internal::titleBarBackground as ISimpleStyleClient;
  125.                if(_loc3_)
  126.                {
  127.                   _loc3_.styleName = this;
  128.                }
  129.                addChild(DisplayObject(mx_internal::titleBarBackground));
  130.             }
  131.          }
  132.          if(!titleTextField)
  133.          {
  134.             titleTextField = IUITextField(createInFontContext(UITextField));
  135.             titleTextField.text = _title;
  136.             titleTextField.styleName = getStyle("titleTextStyleName");
  137.             titleTextField.enabled = true;
  138.             addChild(DisplayObject(titleTextField));
  139.          }
  140.          if(!mx_internal::titleIconObject && Boolean(_titleIcon))
  141.          {
  142.             mx_internal::titleIconObject = new _titleIcon();
  143.             addChild(DisplayObject(mx_internal::titleIconObject));
  144.          }
  145.          if(!minimizeButton)
  146.          {
  147.             minimizeButton = new Button();
  148.             minimizeButtonSkin = getStyle("minimizeButtonSkin");
  149.             if(minimizeButtonSkin)
  150.             {
  151.                minimizeButton.setStyle("skin",minimizeButtonSkin);
  152.             }
  153.             minimizeButton.focusEnabled = false;
  154.             minimizeButton.enabled = window.minimizable;
  155.             minimizeButton.addEventListener(MouseEvent.MOUSE_DOWN,button_mouseDownHandler);
  156.             minimizeButton.addEventListener(MouseEvent.CLICK,minimizeButton_clickHandler);
  157.             addChild(minimizeButton);
  158.          }
  159.          if(!maximizeButton)
  160.          {
  161.             maximizeButton = new Button();
  162.             maximizeButtonSkin = getStyle("maximizeButtonSkin");
  163.             if(maximizeButtonSkin)
  164.             {
  165.                maximizeButton.setStyle("skin",maximizeButtonSkin);
  166.             }
  167.             maximizeButton.focusEnabled = false;
  168.             maximizeButton.enabled = window.maximizable;
  169.             maximizeButton.addEventListener(MouseEvent.MOUSE_DOWN,button_mouseDownHandler);
  170.             maximizeButton.addEventListener(MouseEvent.CLICK,maximizeButton_clickHandler);
  171.             addChild(maximizeButton);
  172.             restoreButtonSkin = isMac() ? null : getStyle("restoreButtonSkin");
  173.          }
  174.          if(!closeButton)
  175.          {
  176.             closeButton = new Button();
  177.             closeButtonSkin = getStyle("closeButtonSkin");
  178.             if(closeButtonSkin)
  179.             {
  180.                closeButton.setStyle("skin",closeButtonSkin);
  181.             }
  182.             closeButton.focusEnabled = false;
  183.             closeButton.addEventListener(MouseEvent.MOUSE_DOWN,button_mouseDownHandler);
  184.             closeButton.addEventListener(MouseEvent.CLICK,closeButton_clickHandler);
  185.             addChild(closeButton);
  186.          }
  187.       }
  188.       
  189.       override public function styleChanged(param1:String) : void
  190.       {
  191.          var _loc3_:Class = null;
  192.          var _loc4_:IStyleClient = null;
  193.          var _loc5_:ISimpleStyleClient = null;
  194.          super.styleChanged(param1);
  195.          invalidateDisplayList();
  196.          var _loc2_:Boolean = !param1 || param1 == "styleName";
  197.          if(_loc2_ || param1 == "titleBarBackgroundSkin")
  198.          {
  199.             _loc3_ = getStyle("titleBarBackgroundSkin");
  200.             if(_loc3_)
  201.             {
  202.                if(mx_internal::titleBarBackground)
  203.                {
  204.                   removeChild(DisplayObject(mx_internal::titleBarBackground));
  205.                   mx_internal::titleBarBackground = null;
  206.                }
  207.                mx_internal::titleBarBackground = new _loc3_();
  208.                _loc4_ = mx_internal::titleBarBackground as IStyleClient;
  209.                if(_loc4_)
  210.                {
  211.                   _loc4_.setStyle("backgroundImage",undefined);
  212.                }
  213.                _loc5_ = mx_internal::titleBarBackground as ISimpleStyleClient;
  214.                if(_loc5_)
  215.                {
  216.                   _loc5_.styleName = this;
  217.                }
  218.                addChildAt(DisplayObject(mx_internal::titleBarBackground),0);
  219.             }
  220.          }
  221.          if(_loc2_ || param1 == "titleTextStyleName")
  222.          {
  223.             if(titleTextField)
  224.             {
  225.                titleTextField.styleName = getStyle("titleTextStyleName");
  226.             }
  227.          }
  228.          if(_loc2_ || param1 == "closeButtonSkin")
  229.          {
  230.             closeButtonSkin = getStyle("closeButtonSkin");
  231.             if(Boolean(closeButtonSkin) && Boolean(closeButton))
  232.             {
  233.                closeButton.setStyle("skin",closeButtonSkin);
  234.             }
  235.          }
  236.          if(_loc2_ || param1 == "maximizeButtonSkin")
  237.          {
  238.             maximizeButtonSkin = getStyle("maximizeButtonSkin");
  239.             if(Boolean(maximizeButtonSkin) && Boolean(maximizeButton))
  240.             {
  241.                maximizeButton.setStyle("skin",maximizeButtonSkin);
  242.             }
  243.          }
  244.          if(_loc2_ || param1 == "minimizeButtonSkin")
  245.          {
  246.             minimizeButtonSkin = getStyle("minimizeButtonSkin");
  247.             if(Boolean(minimizeButtonSkin) && Boolean(minimizeButton))
  248.             {
  249.                minimizeButton.setStyle("skin",minimizeButtonSkin);
  250.             }
  251.          }
  252.          if(_loc2_ || param1 == "restoreButtonSkin")
  253.          {
  254.             restoreButtonSkin = getStyle("restoreButtonSkin");
  255.          }
  256.       }
  257.       
  258.       private function closeButton_clickHandler(param1:Event) : void
  259.       {
  260.          window.close();
  261.       }
  262.       
  263.       override protected function commitProperties() : void
  264.       {
  265.          super.commitProperties();
  266.          if(titleChanged)
  267.          {
  268.             titleTextField.text = _title;
  269.             titleChanged = false;
  270.          }
  271.          if(titleIconChanged)
  272.          {
  273.             if(mx_internal::titleIconObject)
  274.             {
  275.                removeChild(DisplayObject(mx_internal::titleIconObject));
  276.                mx_internal::titleIconObject = null;
  277.             }
  278.             if(_titleIcon)
  279.             {
  280.                mx_internal::titleIconObject = new _titleIcon();
  281.                addChild(DisplayObject(mx_internal::titleIconObject));
  282.             }
  283.             titleIconChanged = false;
  284.          }
  285.       }
  286.       
  287.       protected function doubleClickHandler(param1:MouseEvent) : void
  288.       {
  289.          if(isMac())
  290.          {
  291.             window.minimize();
  292.          }
  293.          else if(window.nativeWindow.displayState == NativeWindowDisplayState.MAXIMIZED)
  294.          {
  295.             window.restore();
  296.          }
  297.          else
  298.          {
  299.             window.maximize();
  300.          }
  301.       }
  302.       
  303.       public function get title() : String
  304.       {
  305.          return _title;
  306.       }
  307.       
  308.       private function maximizeButton_clickHandler(param1:Event) : void
  309.       {
  310.          if(window.nativeWindow.displayState == NativeWindowDisplayState.MAXIMIZED)
  311.          {
  312.             window.restore();
  313.          }
  314.          else
  315.          {
  316.             window.maximize();
  317.             maximizeButton.dispatchEvent(new MouseEvent(MouseEvent.ROLL_OUT));
  318.          }
  319.       }
  320.       
  321.       private function button_mouseDownHandler(param1:MouseEvent) : void
  322.       {
  323.          param1.stopPropagation();
  324.       }
  325.       
  326.       public function set titleIcon(param1:Class) : void
  327.       {
  328.          _titleIcon = param1;
  329.          titleIconChanged = true;
  330.          invalidateProperties();
  331.          invalidateSize();
  332.       }
  333.       
  334.       private function mouseDownHandler(param1:MouseEvent) : void
  335.       {
  336.          window.nativeWindow.startMove();
  337.          param1.stopPropagation();
  338.       }
  339.       
  340.       override protected function measure() : void
  341.       {
  342.          super.measure();
  343.          titleTextField.validateNow();
  344.          if(titleTextField.textHeight == 0)
  345.          {
  346.             titleTextField.text = " ";
  347.             titleTextField.validateNow();
  348.          }
  349.          measuredHeight = Math.max(titleTextField.textHeight + UITextField.mx_internal::TEXT_HEIGHT_PADDING,Math.max(maximizeButton.measuredHeight,minimizeButton.measuredHeight,closeButton.measuredHeight) + 12);
  350.          measuredWidth = titleTextField.width + maximizeButton.measuredWidth + minimizeButton.measuredWidth + closeButton.measuredWidth;
  351.          if(mx_internal::titleIconObject)
  352.          {
  353.             measuredHeight = Math.max(measuredHeight,mx_internal::titleIconObject.height + 1);
  354.             measuredWidth += mx_internal::titleIconObject.width;
  355.          }
  356.       }
  357.       
  358.       public function set title(param1:String) : void
  359.       {
  360.          _title = param1;
  361.          titleChanged = true;
  362.          invalidateProperties();
  363.          invalidateSize();
  364.          invalidateDisplayList();
  365.       }
  366.       
  367.       public function get titleIcon() : Class
  368.       {
  369.          return _titleIcon;
  370.       }
  371.       
  372.       protected function placeTitle(param1:String, param2:Number, param3:Number, param4:String) : void
  373.       {
  374.          var _loc5_:Number = NaN;
  375.          var _loc6_:TextFormat = null;
  376.          var _loc7_:Number = NaN;
  377.          var _loc8_:Number = NaN;
  378.          titleTextField.text = _title;
  379.          titleTextField.validateNow();
  380.          if(param4 == "left")
  381.          {
  382.             _loc5_ = Math.max(closeButton.x + closeButton.measuredWidth,minimizeButton.x + minimizeButton.measuredWidth,maximizeButton.x + maximizeButton.measuredWidth);
  383.          }
  384.          else
  385.          {
  386.             _loc5_ = Math.min(closeButton.x,minimizeButton.x,maximizeButton.x);
  387.          }
  388.          if(param1 == "left")
  389.          {
  390.             if(param4 == "left")
  391.             {
  392.                titleTextField.setActualSize(width - param3 - 2 - _loc5_,measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  393.                titleTextField.move(_loc5_,(height - (measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING)) / 2);
  394.                titleTextField.truncateToFit();
  395.             }
  396.             else
  397.             {
  398.                titleTextField.setActualSize(Math.max(0,_loc5_) - 2,measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  399.                titleTextField.move(param2,(height - (measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING)) / 2);
  400.                titleTextField.truncateToFit();
  401.             }
  402.          }
  403.          else
  404.          {
  405.             _loc6_ = new TextFormat();
  406.             _loc6_.align = TextFormatAlign.LEFT;
  407.             titleTextField.setTextFormat(_loc6_);
  408.             _loc8_ = titleTextField.getLineMetrics(0).width;
  409.             titleTextField.truncateToFit();
  410.             if(param4 == "left")
  411.             {
  412.                titleTextField.setActualSize(width - param3 - _loc5_ - 2,measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  413.                _loc7_ = Math.max(_loc5_,(width - param2 - param3 - _loc8_) / 2);
  414.                titleTextField.move(_loc7_,(height - (measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING)) / 2);
  415.             }
  416.             else
  417.             {
  418.                titleTextField.setActualSize(width - param2 - param3 - (width - _loc5_) - 2,measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  419.                _loc7_ = Math.max(0,Math.min(_loc5_ - _loc8_ - 2,(width - param2 - param3 - _loc8_) / 2));
  420.                titleTextField.move(_loc7_,(height - (measureChromeText(titleTextField).height + UITextField.mx_internal::TEXT_HEIGHT_PADDING)) / 2);
  421.             }
  422.          }
  423.       }
  424.       
  425.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  426.       {
  427.          var _loc8_:int = 0;
  428.          var _loc9_:int = 0;
  429.          super.updateDisplayList(param1,param2);
  430.          if(window.nativeWindow.closed)
  431.          {
  432.             return;
  433.          }
  434.          var _loc3_:Number = 0;
  435.          var _loc4_:Number = 5;
  436.          var _loc5_:int = getStyle("cornerRadius") / 2;
  437.          if(mx_internal::titleBarBackground)
  438.          {
  439.             mx_internal::titleBarBackground.move(0,0);
  440.             IFlexDisplayObject(mx_internal::titleBarBackground).setActualSize(param1,param2);
  441.          }
  442.          if(mx_internal::titleIconObject)
  443.          {
  444.             _loc8_ = int(mx_internal::titleIconObject.height);
  445.             _loc9_ = (height - _loc8_) / 2;
  446.             mx_internal::titleIconObject.move(_loc5_,_loc9_);
  447.             _loc3_ += _loc5_ + mx_internal::titleIconObject.width + getStyle("buttonPadding");
  448.          }
  449.          if(!isMac())
  450.          {
  451.             if(window.nativeWindow.displayState == NativeWindowDisplayState.MAXIMIZED)
  452.             {
  453.                if(restoreButtonSkin)
  454.                {
  455.                   maximizeButton.setStyle("skin",restoreButtonSkin);
  456.                }
  457.             }
  458.             else
  459.             {
  460.                maximizeButton.setStyle("skin",maximizeButtonSkin);
  461.             }
  462.          }
  463.          var _loc6_:String = getStyle("buttonAlignment");
  464.          if(_loc6_ == "right")
  465.          {
  466.             placeButtons(_loc6_,width,height,_loc3_,_loc4_,_loc5_);
  467.          }
  468.          else if(_loc6_ == "left")
  469.          {
  470.             placeButtons(_loc6_,width,height,_loc3_,_loc4_,_loc5_);
  471.          }
  472.          else if(isMac())
  473.          {
  474.             _loc6_ = "left";
  475.             placeButtons("left",width,height,_loc3_,_loc4_,_loc5_);
  476.          }
  477.          else
  478.          {
  479.             placeButtons("right",width,height,_loc3_,_loc4_,_loc5_);
  480.          }
  481.          var _loc7_:String = String(getStyle("titleAlignment"));
  482.          if(_loc7_ == "center" || _loc7_ == "left")
  483.          {
  484.             placeTitle(_loc7_,_loc3_,_loc4_,_loc6_);
  485.          }
  486.          else if(isMac())
  487.          {
  488.             placeTitle("center",_loc3_,_loc4_,_loc6_);
  489.          }
  490.          else
  491.          {
  492.             placeTitle("left",_loc3_,_loc4_,_loc6_);
  493.          }
  494.       }
  495.       
  496.       private function get window() : IWindow
  497.       {
  498.          return IWindow(parent);
  499.       }
  500.    }
  501. }
  502.  
  503.