| 31 | | private var _base :UIComponent; |
|---|
| 32 | | private var _mask :UIComponent; |
|---|
| 33 | | private var _loader :Loader; |
|---|
| 34 | | private var _tmpMouseX :Number; |
|---|
| 35 | | private var _tmpMouseY :Number; |
|---|
| 36 | | private var _tmpUnscaledWidth :Number; |
|---|
| 37 | | private var _tmpUnscaledHeight :Number; |
|---|
| 38 | | private var _nowImageWidth :Number; |
|---|
| 39 | | private var _nowImageHeight :Number; |
|---|
| 40 | | private var _oldImageWidth :Number = 0; |
|---|
| 41 | | private var _oldImageHeight :Number = 0; |
|---|
| 42 | | private var _childLength :int = 0; |
|---|
| 43 | | private var _minPercentScale :int = 50; |
|---|
| 44 | | private var _maxPercentScale :int = 70; |
|---|
| 45 | | private var _nowPercentScale :int = 100; |
|---|
| 46 | | private var _isDragMove :Boolean; |
|---|
| 47 | | private var _isKeyFocus :Boolean; |
|---|
| 48 | | private var _source :String; |
|---|
| 49 | | /** scale(%) */ |
|---|
| 50 | | public function get percentScale():int { return _nowPercentScale; } |
|---|
| 51 | | /** @param */ |
|---|
| 52 | | public function set percentScale(v:int):void { _nowPercentScale = v; } |
|---|
| | 30 | private var _base :UIComponent; |
|---|
| | 31 | private var _mask :UIComponent; |
|---|
| | 32 | private var _loader :Loader; |
|---|
| | 33 | private var _childDescriptors :Array; |
|---|
| | 34 | private var _tmpMouseX :Number; |
|---|
| | 35 | private var _tmpMouseY :Number; |
|---|
| | 36 | private var _tmpUnscaledWidth :Number; |
|---|
| | 37 | private var _tmpUnscaledHeight :Number; |
|---|
| | 38 | private var _nowImageWidth :Number; |
|---|
| | 39 | private var _nowImageHeight :Number; |
|---|
| | 40 | private var _oldImageWidth :Number; |
|---|
| | 41 | private var _oldImageHeight :Number; |
|---|
| | 42 | private var _childrenFocusPosition :int; |
|---|
| | 43 | private var _minPercentScale :int; |
|---|
| | 44 | private var _maxPercentScale :int; |
|---|
| | 45 | private var _nowPercentScale :int; |
|---|
| | 46 | private var _defaultPercentScale :int; |
|---|
| | 47 | private var _startPercentScale :int; |
|---|
| | 48 | private var _isDragMove :Boolean; |
|---|
| | 49 | private var _isKeyFocus :Boolean; |
|---|
| | 50 | private var _source :String; |
|---|
| | 51 | /** defaultPercentScale(%) */ |
|---|
| | 52 | public function set defaultPercentScale(v:int):void { _defaultPercentScale = v; } |
|---|
| 82 | | _base = new UIComponent(); |
|---|
| | 91 | _base = new UIComponent(); |
|---|
| | 92 | _base.addEventListener(FocusEvent.FOCUS_IN, function(e:FocusEvent):void { e.stopImmediatePropagation(); }, true, 0, true); |
|---|
| | 93 | _base.addEventListener(FocusEvent.FOCUS_OUT, function(e:FocusEvent):void { e.stopImmediatePropagation(); }, true, 0, true); |
|---|
| | 94 | _base.addEventListener(FocusEvent.FOCUS_IN, function(e:FocusEvent):void { e.stopImmediatePropagation(); }, false, 0, true); |
|---|
| | 95 | _base.addEventListener(FocusEvent.FOCUS_OUT, function(e:FocusEvent):void { e.stopImmediatePropagation(); }, false, 0, true); |
|---|
| | 96 | _base.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true); |
|---|
| | 97 | _base.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, false, 0, true); |
|---|
| | 98 | _base.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler, false, 0, true); |
|---|
| | 99 | _base.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler, false, 0, true); |
|---|
| 111 | | |
|---|
| 112 | | addEventListener(FocusEvent.KEY_FOCUS_CHANGE, keyFocusChangeHandler, false, 0, true); |
|---|
| 113 | | addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true); |
|---|
| 114 | | systemManager.stage.addEventListener(MouseEvent.MOUSE_UP, dragStopHandler, false, 0, true); |
|---|
| 115 | | systemManager.stage.addEventListener(MouseEvent.ROLL_OUT, dragStopHandler, false, 0, true); |
|---|
| 116 | | systemManager.stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler, false, 0, true); |
|---|
| 117 | | _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler, false, 0, true); |
|---|
| | 150 | * @private |
|---|
| | 151 | * 子コントロールに関しては、コンテナに addChild() させず、_base にて addChild() を実行する |
|---|
| | 152 | */ |
|---|
| | 153 | public override function addChild(child:DisplayObject):DisplayObject { |
|---|
| | 154 | if(child == _base || child == _mask) { |
|---|
| | 155 | return super.addChild(child); |
|---|
| | 156 | } |
|---|
| | 157 | _childDescriptors.push(child); |
|---|
| | 158 | child.addEventListener(FocusEvent.FOCUS_OUT, childFocusOutHandler); |
|---|
| | 159 | child.visible = false; |
|---|
| | 160 | return _base.addChild(child); |
|---|
| | 161 | } |
|---|
| | 162 | /** |
|---|
| | 163 | * @inheritDoc |
|---|
| | 164 | * @private |
|---|
| | 165 | * 子コントロールに関しては、コンテナに removeChild() させず、_base に対して removeChild() を実行する |
|---|
| | 166 | */ |
|---|
| | 167 | public override function removeChild(child:DisplayObject):DisplayObject { |
|---|
| | 168 | if(child == _base || child == _mask) { |
|---|
| | 169 | return super.removeChild(child); |
|---|
| | 170 | } |
|---|
| | 171 | _childDescriptors.some( function(item:*, index:int, array:Array):Boolean { |
|---|
| | 172 | if(item == child) { |
|---|
| | 173 | array.splice(index, 1); |
|---|
| | 174 | return true; |
|---|
| | 175 | } |
|---|
| | 176 | else { |
|---|
| | 177 | return false; |
|---|
| | 178 | } |
|---|
| | 179 | }, child ); |
|---|
| | 180 | child.removeEventListener(FocusEvent.FOCUS_OUT, childFocusOutHandler); |
|---|
| | 181 | return _base.removeChild(child); |
|---|
| | 182 | } |
|---|
| | 183 | /** |
|---|
| | 184 | * @inheritDoc |
|---|
| 146 | | super.focusManager.showFocus(); |
|---|
| 147 | | } |
|---|
| 148 | | } |
|---|
| 149 | | /** |
|---|
| 150 | | * @inheritDoc |
|---|
| 151 | | */ |
|---|
| 152 | | protected override function focusOutHandler(event:FocusEvent):void { |
|---|
| 153 | | //TODO:仕様の見直し |
|---|
| 154 | | super.focusOutHandler(event); |
|---|
| 155 | | if(!_isKeyFocus) |
|---|
| | 192 | if(event.shiftKey) { |
|---|
| | 193 | UIComponent(_childDescriptors[max]).setFocus(); |
|---|
| | 194 | _childrenFocusPosition = max; |
|---|
| | 195 | } |
|---|
| | 196 | else { |
|---|
| | 197 | UIComponent(_childDescriptors[0]).setFocus(); |
|---|
| | 198 | _childrenFocusPosition = 0; |
|---|
| | 199 | } |
|---|
| | 200 | } |
|---|
| | 201 | } |
|---|
| | 202 | /** |
|---|
| | 203 | * @inheritDoc |
|---|
| | 204 | */ |
|---|
| | 205 | protected override function focusOutHandler(event:FocusEvent):void {} |
|---|
| | 206 | /** |
|---|
| | 207 | * dragImage load complete |
|---|
| | 208 | * @private |
|---|
| | 209 | * イメージの読み込み完了イベント |
|---|
| | 210 | * TODO:任意のタイミングで読み込みできるように変更したとき、全面的に修正する。 |
|---|
| | 211 | */ |
|---|
| | 212 | private function loadCompleteHandler(event:Event):void { |
|---|
| | 213 | var i:int; |
|---|
| | 214 | var tempComponent:UIComponent; |
|---|
| | 215 | |
|---|
| | 216 | _loader.scaleX = _defaultPercentScale * 0.01; |
|---|
| | 217 | _loader.scaleY = _defaultPercentScale * 0.01; |
|---|
| | 218 | _nowImageWidth = _defaultPercentScale * 0.01 * _loader.contentLoaderInfo.width; |
|---|
| | 219 | _nowImageHeight = _defaultPercentScale * 0.01 * _loader.contentLoaderInfo.height; |
|---|
| | 220 | _minPercentScale = (_minPercentScale != 0) ? _minPercentScale : 50; |
|---|
| | 221 | _maxPercentScale = (_maxPercentScale != 0) ? _maxPercentScale : 150; |
|---|
| | 222 | |
|---|
| | 223 | for(i = 0; i < _childDescriptors.length; i++) { |
|---|
| | 224 | tempComponent = _childDescriptors[i] as UIComponent; |
|---|
| | 225 | tempComponent.visible = true; |
|---|
| | 226 | } |
|---|
| | 227 | |
|---|
| | 228 | addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true); |
|---|
| | 229 | systemManager.stage.addEventListener(MouseEvent.MOUSE_UP, dragStopHandler, false, 0, true); |
|---|
| | 230 | systemManager.stage.addEventListener(MouseEvent.ROLL_OUT, dragStopHandler, false, 0, true); |
|---|
| | 231 | systemManager.stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler, false, 0, true); |
|---|
| | 232 | |
|---|
| | 233 | _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, arguments.callee, false); |
|---|
| | 234 | } |
|---|
| | 235 | /** |
|---|
| | 236 | * children focusOut Event |
|---|
| | 237 | * @private |
|---|
| | 238 | * 子コントロールの FOCUS_OUT イベント |
|---|
| | 239 | */ |
|---|
| | 240 | private function childFocusOutHandler(event:FocusEvent):void { |
|---|
| | 241 | if(!_base.contains(event.currentTarget as DisplayObject)) { |
|---|
| | 242 | event.stopImmediatePropagation(); |
|---|
| 157 | | _childLength = (!event.shiftKey) ? _childLength + 1 : _childLength - 1; |
|---|
| 158 | | if(1 > _childLength) { |
|---|
| 159 | | _childLength = 0; |
|---|
| 160 | | _isKeyFocus = false; |
|---|
| 161 | | return; |
|---|
| 162 | | } |
|---|
| 163 | | else if(_base.numChildren - 2 < _childLength) { |
|---|
| 164 | | _childLength = (!event.shiftKey) ? 0 : _childLength - 1; |
|---|
| 165 | | _isKeyFocus = false; |
|---|
| 166 | | return; |
|---|
| 167 | | } |
|---|
| 168 | | if(null != _base.getChildAt(_childLength) ) { |
|---|
| 169 | | UIComponent(_base.getChildAt(_childLength)).setFocus(); |
|---|
| 170 | | } |
|---|
| 171 | | _isKeyFocus = false; |
|---|
| 172 | | } |
|---|
| 173 | | /** |
|---|
| 174 | | * key focus change |
|---|
| 175 | | */ |
|---|
| 176 | | private function keyFocusChangeHandler(event:FocusEvent):void { |
|---|
| 177 | | _isKeyFocus = true; |
|---|
| 178 | | } |
|---|
| 179 | | /** |
|---|
| 180 | | * image load complete |
|---|
| 181 | | */ |
|---|
| 182 | | private function loadCompleteHandler(event:Event):void { |
|---|
| 183 | | _base.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, false, 0, true); |
|---|
| 184 | | _base.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, false, 0, true); |
|---|
| 185 | | _base.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler, false, 0, true); |
|---|
| 186 | | _base.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler, false, 0, true); |
|---|
| 187 | | _nowImageWidth = _loader.width; |
|---|
| 188 | | _nowImageHeight = _loader.height; |
|---|
| 189 | | _loader.scaleX = _nowPercentScale * 0.01; |
|---|
| 190 | | _loader.scaleY = _nowPercentScale * 0.01; |
|---|
| 191 | | _nowPercentScale = 100; |
|---|
| 192 | | _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, arguments.callee, false); |
|---|
| 193 | | } |
|---|
| | 244 | } |
|---|
| | 245 | |
|---|
| | 246 | if(event.shiftKey) { |
|---|
| | 247 | if(--_childrenFocusPosition < 0) { |
|---|
| | 248 | dispatchEvent(event); |
|---|
| | 249 | } |
|---|
| | 250 | else { |
|---|
| | 251 | _childDescriptors[_childrenFocusPosition].setFocus(); |
|---|
| | 252 | } |
|---|
| | 253 | } |
|---|
| | 254 | else { |
|---|
| | 255 | if(++_childrenFocusPosition >= _childDescriptors.length) { |
|---|
| | 256 | dispatchEvent(event); |
|---|
| | 257 | } |
|---|
| | 258 | else { |
|---|
| | 259 | _childDescriptors[_childrenFocusPosition].setFocus(); |
|---|
| | 260 | } |
|---|
| | 261 | } |
|---|
| | 262 | } |
|---|
| | 263 | |
|---|