| [393] | 1 | package com.longtailvideo.jwplayer.view { |
|---|
| 2 | import flash.display.DisplayObject; |
|---|
| 3 | import flash.text.TextField; |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | public class ControlbarLayoutManager { |
|---|
| 7 | protected var _controlbar:ControlBarComponent; |
|---|
| 8 | protected var _currentLeft:Number; |
|---|
| 9 | protected var _currentRight:Number; |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | public function ControlbarLayoutManager(controlbar:ControlBarComponent) { |
|---|
| 13 | _controlbar = controlbar; |
|---|
| 14 | } |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | public function resize(width:Number, height:Number):void { |
|---|
| 18 | _currentLeft = 0; |
|---|
| 19 | _currentRight = width; |
|---|
| 20 | var controlbarPattern:RegExp = /\[(.*)\]\[(.*)\]\[(.*)\]/; |
|---|
| 21 | var result:Object = controlbarPattern.exec(_controlbar.layout); |
|---|
| 22 | positionLeft(result[1]); |
|---|
| 23 | positionRight(result[3]); |
|---|
| 24 | positionCenter(result[2]); |
|---|
| 25 | } |
|---|
| 26 | |
|---|
| 27 | |
|---|
| 28 | private function positionLeft(left:String):void { |
|---|
| 29 | var dividers:Array = left.split("|"); |
|---|
| 30 | for (var i:Number = 0; i < dividers.length; i++) { |
|---|
| 31 | if (i > 0) { |
|---|
| 32 | placeLeft(_controlbar.getButton("divider")); |
|---|
| 33 | } |
|---|
| 34 | var spacers:Array = (dividers[i] as String).split(" "); |
|---|
| 35 | for (var j:Number = 0; j < spacers.length; j++) { |
|---|
| 36 | var name:String = spacers[j]; |
|---|
| 37 | var button:DisplayObject = _controlbar.getButton(spacers[j]); |
|---|
| 38 | placeLeft(_controlbar.getButton(spacers[j])); |
|---|
| 39 | } |
|---|
| 40 | } |
|---|
| 41 | } |
|---|
| 42 | |
|---|
| 43 | |
|---|
| 44 | private function placeLeft(displayObject:DisplayObject):void { |
|---|
| 45 | if (displayObject) { |
|---|
| 46 | if (!_controlbar.contains(displayObject)) { |
|---|
| 47 | _controlbar.addChild(displayObject); |
|---|
| 48 | } |
|---|
| 49 | |
|---|
| 50 | displayObject.x = _currentLeft; |
|---|
| 51 | displayObject.y = 0; |
|---|
| 52 | |
|---|
| 53 | if (displayObject is TextField) { |
|---|
| 54 | //_currentLeft = _currentLeft + (displayObject as TextField).textWidth; |
|---|
| 55 | _currentLeft = _currentLeft + displayObject.width; |
|---|
| 56 | } else { |
|---|
| 57 | _currentLeft = _currentLeft + displayObject.width; |
|---|
| 58 | } |
|---|
| 59 | |
|---|
| 60 | } |
|---|
| 61 | } |
|---|
| 62 | |
|---|
| 63 | |
|---|
| 64 | private function positionRight(right:String):void { |
|---|
| 65 | var dividers:Array = right.split("|"); |
|---|
| 66 | for (var i:Number = dividers.length - 1; i >= 0; i--) { |
|---|
| 67 | if (i < dividers.length - 1) { |
|---|
| 68 | placeRight(_controlbar.getButton("divider")); |
|---|
| 69 | } |
|---|
| 70 | var spacers:Array = (dividers[i] as String).split(" "); |
|---|
| 71 | for (var j:Number = spacers.length - 1; j >= 0; j--) { |
|---|
| 72 | var name:String = spacers[j]; |
|---|
| 73 | var button:DisplayObject = _controlbar.getButton(spacers[j]); |
|---|
| 74 | placeRight(_controlbar.getButton(spacers[j])); |
|---|
| 75 | } |
|---|
| 76 | } |
|---|
| 77 | } |
|---|
| 78 | |
|---|
| 79 | |
|---|
| 80 | private function placeRight(displayObject:DisplayObject):void { |
|---|
| 81 | if (displayObject) { |
|---|
| 82 | if (!_controlbar.contains(displayObject)) { |
|---|
| 83 | _controlbar.addChild(displayObject); |
|---|
| 84 | } |
|---|
| 85 | if (displayObject is TextField) { |
|---|
| 86 | //_currentRight = _currentRight - (displayObject as TextField).textWidth; |
|---|
| 87 | _currentRight = _currentRight - displayObject.width; |
|---|
| 88 | } else { |
|---|
| 89 | _currentRight = _currentRight - displayObject.width; |
|---|
| 90 | } |
|---|
| 91 | displayObject.x = _currentRight; |
|---|
| 92 | displayObject.y = 0; |
|---|
| 93 | } |
|---|
| 94 | } |
|---|
| 95 | |
|---|
| 96 | |
|---|
| 97 | private function positionCenter(center:String):void { |
|---|
| 98 | var centerPattern:RegExp = /\W/; |
|---|
| 99 | var elements:Array = center.split(centerPattern); |
|---|
| 100 | var dividers:Array = center.split("|"); |
|---|
| 101 | var divider:DisplayObject = _controlbar.getButton("divider"); |
|---|
| 102 | var dividerOffset:Number = 0; |
|---|
| 103 | if (divider) { |
|---|
| 104 | dividerOffset = divider.width * (dividers.length - 1); |
|---|
| 105 | } |
|---|
| 106 | var elementWidth:Number = (_currentRight - _currentLeft - dividerOffset) / elements.length; |
|---|
| 107 | for (var i:Number = 0; i < dividers.length; i++) { |
|---|
| 108 | if (i > 0) { |
|---|
| 109 | placeLeft(divider); |
|---|
| 110 | } |
|---|
| 111 | var spacers:Array = (dividers[i] as String).split(" "); |
|---|
| 112 | for (var j:Number = 0; j < spacers.length; j++) { |
|---|
| 113 | var element:DisplayObject = _controlbar.getButton(spacers[j]); |
|---|
| 114 | if (element) { |
|---|
| 115 | if (element is ComponentButton){ |
|---|
| 116 | (element as ComponentButton).resize(elementWidth, element.height); |
|---|
| 117 | } else if (element is Slider) { |
|---|
| 118 | (element as Slider).resize(elementWidth, element.height); |
|---|
| 119 | } |
|---|
| 120 | placeLeft(element); |
|---|
| 121 | } |
|---|
| 122 | } |
|---|
| 123 | } |
|---|
| 124 | } |
|---|
| 125 | } |
|---|
| 126 | } |
|---|