| <?xml version="1.0" encoding="utf-8"?> |
| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| |
| --> |
| <s:Module xmlns:fx="http://ns.adobe.com/mxml/2009" |
| xmlns:s="library://ns.adobe.com/flex/spark" |
| xmlns:mx="library://ns.adobe.com/flex/mx" |
| xmlns:controls="com.flexcapacitor.controls.*" |
| width="100%" height="100%" |
| > |
| |
| <fx:Script> |
| <![CDATA[ |
| import com.flexcapacitor.controller.Radiate; |
| import com.flexcapacitor.events.DragDropEvent; |
| import com.flexcapacitor.utils.DisplayObjectUtils; |
| import com.flexcapacitor.utils.DragManagerUtil; |
| import com.flexcapacitor.utils.supportClasses.ComponentDescription; |
| |
| import mx.core.EventPriority; |
| import mx.core.FlexGlobals; |
| import mx.core.IUIComponent; |
| import mx.events.FlexMouseEvent; |
| import mx.managers.SystemManager; |
| |
| import spark.components.Application; |
| import spark.components.List; |
| |
| public var radiate:Radiate = Radiate.instance; |
| public var toggleMode:Boolean = true; |
| |
| private var targetApplication:Object; |
| private var dragManagerInstance:DragManagerUtil; |
| private var selectionToolEnabled:Boolean; |
| private var possibleTarget:Object; |
| |
| public function set targets(values:Array):void { |
| |
| for (var i:int;values.length;i++) { |
| trace("tool = " + values[i]); |
| } |
| } |
| |
| /* |
| mouseUp="imagebutton1_mouseUpHandler(event)" |
| mouseOut="imagebutton1_mouseUpHandler(event)" |
| mouseDownOutside="imagebutton1_mouseDownOutsideHandler(event)" |
| */ |
| protected function image1_clickHandler(event:MouseEvent):void {
|
| //Radiate.getInstance().setTarget(event.currentTarget); |
| |
| if (!selectionToolEnabled) { |
| selectionToolEnabled = true; |
| enableSelectionTool(); |
| } |
| else { |
| deselectSelectionTool(); |
| }
|
| } |
| |
| /** |
| * Click handler added to stage |
| * We only check the target if the alt key is down |
| * If the shift key is down also then we enter the debugger |
| * Press step into to bring the debugger to the check target method |
| * In that method you can check details in the target property |
| * */ |
| protected function handleClick(event:MouseEvent):void { |
| |
| event.stopImmediatePropagation(); |
| /* |
| if (enabled) { |
| if (event.ctrlKey) { |
| // we are intercepting this event so we can inspect the target |
| // stop the event propagation |
| event.stopImmediatePropagation(); |
| checkTarget(event); |
| } |
| } */ |
| } |
| |
| /** |
| * Gets the current target and traces it to the console |
| * */ |
| private function checkTarget(event:MouseEvent):void { |
| /* var rootComponent:ComponentItem = document ? getComponentDisplayList(document) : getComponentDisplayList(FlexGlobals.topLevelApplication); |
| var componentItem:ComponentItem= getComponentFromDisplayObject(DisplayObject(event.target), rootComponent); |
| var target:DisplayObject = event.target as DisplayObject; |
| |
| |
| if (showDisplayObjectInformation) { |
| if (event.altKey) { |
| message = getComponentDetails(componentItem.accessPath, true); |
| } |
| else { |
| message = getComponentDetails(componentItem, false); |
| } |
| } |
| else { |
| // NOT SUPPORTED YET |
| //message = getDisplayObjectDetails(event.target); |
| } |
| |
| |
| trace(message); |
| |
| |
| // The purpose of this is to check the properties on the target |
| if (event.shiftKey) { |
| |
| // the debugger doesn't take you here until you press step into or step over |
| trace("\n// Click your heels three times and step in..."); |
| |
| // the target object contains the item you clicked on |
| enterDebugger(); |
| } */ |
| } |
| protected function image2_clickHandler(event:MouseEvent):void { |
| Radiate.setDocuments(FlexGlobals.topLevelApplication); |
| } |
| |
| protected function stageClick_Handler(event:MouseEvent):void { |
| var componentTree:ComponentDescription; |
| var description:ComponentDescription; |
| var target:Object = event.target; |
| |
| /* if (target == stage) { |
| return; |
| } */ |
| |
| |
| if (toggleMode) { |
| deselectSelectionTool(); |
| } |
| |
| possibleTarget = target; |
| |
| |
| event.stopImmediatePropagation(); |
| event.stopPropagation(); |
| event.preventDefault(); |
| |
| radiate.setTarget(target); |
| /* |
| if (target) { |
| // select target on mouse up or drag drop whichever comes first |
| target.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, true, EventPriority.BINDING, true); |
| target.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, false, EventPriority.BINDING, true); |
| |
| |
| // drag support |
| if (false) {//target!=targetApplication) { |
| |
| // listen for drag |
| if (!dragManagerInstance) { |
| dragManagerInstance = new DragManagerUtil(); |
| } |
| |
| //target.visible = false; |
| dragManagerInstance.listenForDragBehavior(target as IUIComponent, radiate.document as Application, event); |
| dragManagerInstance.addEventListener(DragDropEvent.DRAG_DROP, handleDragDrop); |
| } |
| } */ |
| |
| |
| |
| return; |
| |
| var point:Point = new Point(event.stageX, event.stageY); |
| var targetsUnderPoint:Array = radiate.getNonNullDocument().getObjectsUnderPoint(point); |
| targetApplication = Radiate.getInstance().getNonNullDocument(); |
| |
| // clicked outside of this container. is there a way to prevent hearing |
| // events from everywhere? stage sandboxroot? |
| if (!targetApplication || !Object(targetApplication).contains(target)) { |
| //trace("does not contain"); |
| return; |
| } |
| |
| // clicked on background area |
| if (target==targetApplication || target==this) { |
| radiate.setTarget(targetApplication, true); |
| return; |
| } |
| |
| } |
| |
| protected function handleDragDrop(event:DragDropEvent):void { |
| // select target |
| //radiate.target = event.draggedItem; |
| } |
| |
| protected function mouseUpHandler(event:MouseEvent):void { |
| var target:Object = event.currentTarget; |
| |
| if (target is List) { |
| target.dragEnabled = true; // restore drag and drop if it was enabled |
| } |
| |
| target.visible = true; // because we were dragging |
| |
| // select target |
| if (radiate.target!=target) { |
| radiate.setTarget(target); |
| } |
| |
| event.stopPropagation(); |
| event.stopImmediatePropagation(); |
| event.preventDefault(); |
| |
| // clean up |
| target.removeEventListener(MouseEvent.MOUSE_UP, arguments.callee); |
| |
| if (toggleMode) { |
| deselectSelectionTool(); |
| } |
| |
| } |
| |
| protected function imagebutton1_mouseUpHandler(event:MouseEvent):void { |
| |
| //stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); |
| //stage.addEventListener("mouseDownOutside", mouseDownOutsideHandler); |
| //stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
|
| } |
| |
| protected function imagebutton1_mouseDownOutsideHandler(event:FlexMouseEvent):void {
|
| //enableSelectionTool = false;
|
| } |
| |
| protected function mouseMoveHandler(event:MouseEvent):void {
|
| trace("MOUSE MOVE");
|
| } |
| |
| protected function mouseDownOutsideHandler(event:Event):void {
|
| trace("MOUSE DOWN OUTSIDE");
|
| } |
| |
| /** |
| * Remove stage listeners |
| * */ |
| private function deselectSelectionTool():void {
|
| selectionToolEnabled = false; |
| //stage.removeEventListener(MouseEvent.MOUSE_DOWN, stageClick_Handler); |
| //stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); |
| stage.removeEventListener(MouseEvent.CLICK, stageClick_Handler, true); |
| selectionButton.setStyle("backgroundAlpha", 0);
|
| } |
| |
| /** |
| * Listen to the stage for click events |
| * */ |
| private function enableSelectionTool():void { |
| systemManager.stage.addEventListener(MouseEvent.CLICK, stageClick_Handler, true, EventPriority.BINDING, true); |
| selectionButton.setStyle("backgroundAlpha", .1); |
| } |
| |
| ]]> |
| </fx:Script> |
| |
| <fx:Declarations> |
| <!-- Place non-visual elements (e.g., services, value objects) here --> |
| </fx:Declarations> |
| |
| <s:HGroup width="100%"> |
| <controls:ImageButton source="{Radii8LibraryAssets.applicationIcon}" |
| useButtonUpStyle="true" |
| click="image2_clickHandler(event)" |
| /> |
| <controls:ImageButton id="selectionButton" |
| useButtonUpStyle="true" |
| backgroundColor="#0" |
| backgroundAlpha="0" |
| width="20" |
| source="{Radii8LibraryAssets.arrow}" |
| click="image1_clickHandler(event)" |
| /> |
| </s:HGroup> |
| |
| </s:Module> |