http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/DropShadowFilter.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/DropShadowFilter.mxml 
b/Radii8Library/src/com/flexcapacitor/views/DropShadowFilter.mxml
new file mode 100644
index 0000000..71d2737
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/DropShadowFilter.mxml
@@ -0,0 +1,1316 @@
+<?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:Group xmlns:fc="com.flexcapacitor.controls.*"
+                xmlns:fx="http://ns.adobe.com/mxml/2009"; xmlns:local="*"
+                xmlns:mx="library://ns.adobe.com/flex/mx"
+                xmlns:s="library://ns.adobe.com/flex/spark"
+                width="100%" 
+                xmlns:utils="com.flexcapacitor.utils.*" 
+                xmlns:handlers="com.flexcapacitor.handlers.*"
+                
xmlns:supportClasses="com.flexcapacitor.effects.supportClasses.*"
+                creationComplete="group1_creationCompleteHandler(event)" >
+
+       <fx:Script>
+               <![CDATA[
+                       import com.flexcapacitor.controller.Radiate;
+                       import com.flexcapacitor.events.RadiateEvent;
+                       import com.flexcapacitor.utils.InspectorUtils;
+                       import com.flexcapacitor.utils.TypeUtils;
+                       
+                       import mx.collections.ArrayList;
+                       import mx.core.IVisualElement;
+                       import mx.core.UIComponent;
+                       import mx.events.FlexEvent;
+                       import mx.managers.SystemManager;
+                       
+                       import spark.components.Image;
+                       import spark.components.supportClasses.GroupBase;
+                       import spark.primitives.BitmapImage;
+
+                       public static const BASELINE:String = "baseline";
+                       public static const BOTTOM:String = "bottom";
+                       public static const HORIZONTAL_CENTER:String = 
"horizontalCenter";
+                       public static const LEFT:String = "left";
+
+                       public static const PERCENT_HEIGHT:String = 
"percentHeight";
+                       public static const PERCENT_WIDTH:String = 
"percentWidth";
+                       public static const RIGHT:String = "right";
+                       public static const TOP:String = "top";
+                       public static const VERTICAL_CENTER:String = 
"verticalCenter";
+
+                       public static const X:String = "x";
+                       public static const Y:String = "y";
+
+                       [Bindable]
+                       public var targetActualHeight:Number;
+
+                       [Bindable]
+                       public var targetActualWidth:Number;
+
+                       [Bindable]
+                       public var targetBottom:Number;
+
+                       [Bindable]
+                       public var targetHeight:Number;
+
+                       [Bindable]
+                       public var targetHorizontal:Number;
+
+                       [Bindable]
+                       public var targetLeft:Number;
+
+                       [Bindable]
+                       public var targetPercentHeight:Number;
+
+                       [Bindable]
+                       public var targetPercentWidth:Number;
+
+                       [Bindable]
+                       public var targetRight:Number;
+
+                       [Bindable]
+                       public var targetTop:Number;
+
+                       [Bindable]
+                       public var targetVertical:Number;
+
+                       [Bindable]
+                       public var targetWidth:Number;
+
+                       [Bindable]
+                       public var targetX:Number;
+
+                       [Bindable]
+                       public var targetY:Number;
+
+
+                       private var _target:DisplayObject;
+                       private var _visualElement:IVisualElement;
+                       
+                       [Bindable]
+                       public var isVisualElement:Boolean;
+                       
+                       /**
+                        * Clears the target dimension variables which updates 
any element
+                        * bound to them
+                        * */
+                       public function clearTargetDimensions():void {
+                               
+                               if (_target) {
+                                       if (target is SystemManager) {
+                                               
target.removeEventListener(Event.RESIZE, updateTargetOutline);
+                                       }
+                                       else {
+                                               
_target.removeEventListener(FlexEvent.UPDATE_COMPLETE, updateTargetOutline);
+                                               if (_target.parent) {
+                                                       
_target.parent.removeEventListener(FlexEvent.UPDATE_COMPLETE, 
updateTargetOutline);
+                                               }
+                                       }
+                                       InspectorUtils.clearSelection(_target, 
systemManager);
+                               }
+
+                               targetWidth = undefined;
+                               targetHeight = undefined;
+                               targetX = undefined;
+                               targetY = undefined;
+
+                               targetTop = undefined;
+                               targetBottom = undefined;
+                               targetLeft = undefined;
+                               targetRight = undefined;
+                               targetVertical = undefined;
+                               targetHorizontal = undefined;
+                               targetPercentWidth = undefined;
+                               targetPercentHeight = undefined;
+                               
+                       }
+
+                       /**
+                        * Gets the current properties of the target and 
updates the properties inspector
+                        * with those values
+                        * */
+                       public function initializeProperties():void {
+                               var bitmap:BitmapImage;
+                               var image:Image;
+                               
+                               if (isVisualElement) {
+                                       constraintsContainer.enabled = true;
+                                       
+                                       // get constraints
+                                       targetTop = Number(element.top);
+                                       targetBottom = Number(element.bottom);
+                                       targetLeft = Number(element.left);
+                                       targetRight = Number(element.right);
+                                       targetVertical = 
Number(element.verticalCenter);
+                                       targetHorizontal = 
Number(element.horizontalCenter);
+                                       targetPercentWidth = 
Number(element.percentWidth);
+                                       targetPercentHeight = 
Number(element.percentHeight);
+                               }
+                               else {
+                                       constraintsContainer.enabled = false;
+                               }
+
+                               if (target.width == 0 || target.height == 0) {
+
+                                       if (target is BitmapImage) {
+                                               bitmap = BitmapImage(target);
+                                               targetWidth = 
bitmap.sourceWidth;
+                                               targetHeight = 
bitmap.sourceHeight;
+                                               targetActualWidth = 
bitmap.sourceWidth;
+                                               targetActualHeight = 
bitmap.sourceHeight;
+                                       }
+                                       else if (target is Image) {
+                                               image = Image(target);
+                                               targetWidth = image.sourceWidth;
+                                               targetHeight = 
image.sourceHeight;
+                                               targetActualWidth = 
image.sourceWidth;
+                                               targetActualHeight = 
image.sourceHeight;
+                                       }
+                               }
+                               else {
+                                       targetWidth = target.width;
+                                       targetHeight = target.height;
+                               }
+
+                               targetX = target.x;
+                               targetY = target.y;
+                               
+                               if (target is SystemManager) {
+                                       target.addEventListener(Event.RESIZE, 
updateTargetOutline, false, 0, true);
+                               }
+                               else {
+                                       
target.addEventListener(FlexEvent.UPDATE_COMPLETE, updateTargetOutline, false, 
0, true);
+                                       if (target.parent) {
+                                               
target.parent.addEventListener(FlexEvent.UPDATE_COMPLETE, updateTargetOutline, 
false, 0, true);
+                                       }
+                               }
+                               
+                               updateTargetDimensionsLayout();
+
+                       }
+                       
+                       public function get target():Object {
+                               return _target;
+                       }
+                       
+                       public function get element():IVisualElement {
+                               return _visualElement;
+                       }
+
+                       [Bindable]
+                       public function set target(value:Object):void {
+                               
+                               if (!(value is DisplayObject)) {
+                                       _target = null;
+                                       clearForm();
+                                       clearTargetDimensions();
+                                       return;
+                               }
+                               
+                               clearForm();
+                               clearTargetDimensions();
+                               
+                               _target = value as DisplayObject;
+                               
+                               if (value is IVisualElement) {
+                                       isVisualElement = true;
+                                       _visualElement = IVisualElement(value);
+                               }
+                               else {
+                                       isVisualElement = false;
+                                       _visualElement = undefined;
+                               }
+
+                               if (value) {
+                                       initializeProperties();
+                               }
+                               
+                               updateTargetDimensionsLayout();
+                               
+                       }
+
+                       public function update():void {
+                               updateTargetDimensionsLayout();
+                       }
+
+                       /**
+                        * Updates the target dimension layout inspector
+                        * */
+                       public function updateTargetDimensionsLayout():void {
+
+                               // check if the layout panel has been created 
yet
+                               if (target == null) {
+                                       return;
+                               }
+
+                               // if target is a container we show the layout 
options
+                               if (target is GroupBase) {
+                                       var layoutName:String = 
flash.utils.getQualifiedClassName(GroupBase(target).layout);
+                                       
+                                       for each (var item:Object in 
ArrayList(layoutLayoutComboBox.dataProvider).source) {
+                                               if (item.label == layoutName) {
+                                                       
layoutLayoutComboBox.selectedItem = item;
+                                               }
+                                       }
+                               }
+                               
+                               // new values aren't always committed on the 
same frame 
+                               if (target.parent is UIComponent) {
+                                       
UIComponent(target.parent).validateNow();
+                               }
+                               else if (target is UIComponent) {
+                                       UIComponent(target).validateNow();
+                               }
+                               
+                               updateView();
+                               //callLater(updateView);
+                               
+                       }
+                       
+                       public function updateView():void {
+                               
+                               // update UI
+                               updateXProperty();
+                               updateYProperty();
+                               
+                               updateTopConstraint();
+                               updateBottomConstraint();
+                               updateLeftConstraint();
+                               updateRightConstraint();
+                               
+                               updateHorizontalCenterConstraint();
+                               updateVerticalCenterConstraint();
+                               
+                               updateWidthProperty();
+                               updateHeightProperty();
+                               
+                               updateVisibleControls();
+                               
+                               updateTargetOutline();
+                               
+                               visibleCheckbox.selected = target.visible;
+                       }
+
+                       protected function 
applyPropertiesToTargetHandler(event:Event):void {
+                               if (event.currentTarget is ComboBox && 
event.currentTarget.selectedIndex != -1) {
+                                       
TypeUtils.applyProperty(DisplayObject(target), 
event.currentTarget.selectedItem.name, event.currentTarget.selectedItem.label, 
event.currentTarget.selectedItem.type);
+                               }
+
+                               if (event.currentTarget is TextInput) {
+                                       
TypeUtils.applyProperty(DisplayObject(target), event.currentTarget.name, 
event.currentTarget.text);
+                               }
+
+                               if (event.currentTarget is CheckBox) {
+                                       var value:Boolean = 
event.currentTarget.selected;
+                                       
TypeUtils.applyProperty(DisplayObject(target), event.currentTarget.name, value, 
"Boolean");
+                               }
+
+                               updateTargetDimensionsLayout();
+                       }
+
+
+                       /**
+                        * Handles when a constraint checkbox is enabled or 
disabled
+                        * */
+                       protected function constraintHandler(event:Event):void {
+                               var enabled:Boolean = 
event.currentTarget.selected;
+                               var constraint:String = event.currentTarget.id;
+                               
+                               constraint = constraint.split("Constraint")[0];
+
+                               if (isVisualElement) {
+                                       if (enabled) {
+                                               convertToConstraint(constraint);
+                                       }
+                                       else {
+                                               
convertFromConstraint(constraint);
+                                       }
+                               }
+                       }
+
+                       /**
+                        * Convert constraint to property
+                        * */
+                       protected function 
convertFromConstraint(constraint:String):void {
+                               var focusComponent:UIComponent;
+                               var enabled:Boolean = false;
+                               var value:Object;
+
+                               // convert Right to X
+                               if (constraint == RIGHT) {
+                                       element.right = undefined; // relying 
on flex
+                                       rightText.text = "";
+                                       focusComponent = xText;
+                               }
+
+                               // convert from Left to X
+                               else if (constraint == LEFT) {
+                                       element.left = undefined;
+                                       leftText.text = "";
+                                       focusComponent = xText;
+                               }
+
+                               // convert from Bottom to Y
+                               else if (constraint == BOTTOM) {
+                                       element.bottom = undefined;
+                                       bottomText.text = "";
+                                       focusComponent = yText;
+                               }
+
+                               // convert from Top to Y
+                               if (constraint == TOP) {
+                                       element.top = undefined;
+                                       topText.text = "";
+                                       focusComponent = yText;
+                               }
+
+                               // convert from Vertical Center to Y
+                               if (constraint == VERTICAL_CENTER) {
+                                       element.verticalCenter = undefined;
+                                       verticalCenterText.text = "";
+                                       focusComponent = yText;
+                               }
+
+                               // convert from Horizontal Center to X
+                               if (constraint == HORIZONTAL_CENTER) {
+                                       value = 
Object(element.horizontalCenter);
+                                       element.horizontalCenter = undefined;
+                                       horizontalCenterText.text = "";
+                                       value = String(target.parent.width / 2 
- target.width / 2 + Number(value));
+                                       target.x = Number(value);
+                                       focusComponent = xText;
+                               }
+
+                               // convert from Baseline to Y
+                               if (constraint == BASELINE) {
+                                       element.baseline = undefined;
+                                       value = String(target.y);
+                                       baselineText.text = "";
+                                       focusComponent = yText;
+                               }
+
+
+                               // not sure of way to validate an IVisualElement
+                               updateTargetDimensionsLayout();
+                               callLater(focusComponent.setFocus);
+                       }
+
+                       /**
+                        * Convert property value to constraint value
+                        * NOTE: Does not take into account all options - could 
be incorrect
+                        * */
+                       protected function 
convertToConstraint(constraint:String):void {
+                               var value:String;
+                               var enabled:Boolean = true;
+                               var focusComponent:UIComponent;
+
+                               // convert from X to Right
+                               if (constraint == RIGHT) {
+                                       value = 
String(Number(target.parent.width) - Number(target.width) - Number(target.x));
+                                       focusComponent = rightText;
+                               }
+
+                               // convert from X to Left
+                               else if (constraint == LEFT) {
+                                       value = String(target.x);
+                                       focusComponent = leftText;
+                               }
+
+                               // convert from Y to Bottom
+                               else if (constraint == BOTTOM) {
+                                       value = 
String(Number(target.parent.height) - Number(target.height) - Number(target.y));
+                                       focusComponent = bottomText;
+                               }
+
+                               // convert from Y to Top
+                               else if (constraint == TOP) {
+                                       value = String(target.y);
+                                       focusComponent = topText;
+                               }
+
+                               // convert from Y to Vertical Center
+                               else if (constraint == VERTICAL_CENTER) {
+                                       value = String(target.y - 
target.parent.height / 2 + target.height / 2);
+                                       focusComponent = verticalCenterText;
+                               }
+
+                               // convert from X to Horizontal Center
+                               else if (constraint == HORIZONTAL_CENTER) {
+                                       value = String(target.x - 
target.parent.width / 2 + target.width / 2);
+                                       focusComponent = horizontalCenterText;
+                               }
+
+                               // convert from Y to Baseline
+                               else if (constraint == BASELINE) {
+                                       value = String(target.y);
+                                       focusComponent = rightText;
+                               }
+
+                               // not sure of way to validate an IVisualElement
+                               target[constraint] = value;
+                               updateTargetDimensionsLayout();
+                               callLater(focusComponent.setFocus);
+
+                               // we may need to take into account width and 
height and percentages
+                       }
+
+                       /**
+                        * Displays height value taking into account percent 
height
+                        * */
+                       protected function displayCorrectHeight():void {
+                               var isPercentHeight:Boolean;
+                               
+                               if (isVisualElement) {
+                                       isPercentHeight = 
Boolean(element.percentHeight);
+                               }
+                               
+                               if (isPercentHeight) {
+                                       heightText.text = 
String(element.percentHeight) + "%";
+                               }
+                               else {
+                                       heightText.text = String(target.height);
+                               }
+                       }
+
+                       /**
+                        * Displays width value taking into account percent 
width
+                        * */
+                       protected function displayCorrectWidth():void {
+                               var isPercentWidth:Boolean;
+                               
+                               if (isVisualElement) {
+                                       isPercentWidth = 
Boolean(element.percentWidth);
+                               }
+                               
+                               if (isPercentWidth) {
+                                       widthText.text = 
String(element.percentWidth) + "%";
+                               }
+                               else {
+                                       widthText.text = String(target.width);
+                               }
+                       }
+
+                       /**
+                        * Casts the value to the correct type
+                        * NOTE: May not work for colors
+                        * Also supports casting to specific class. use 
ClassDefinition as type
+                        * returns instance of 
flash.utils.getDefinitionByName(className)
+                        * */
+                       protected function getCorrectType(value:String, 
type:String):* {
+                               if (type == "Boolean" && value.toLowerCase() == 
"false") {
+                                       return false;
+                               }
+                               else if (type == "Boolean" && 
value.toLowerCase() == "true") {
+                                       return true;
+                               }
+                               else if (type == "Number") {
+                                       if (value == null || value == "") {
+                                               return undefined
+                                       };
+                                       return Number(value);
+                               }
+                               else if (type == "int") {
+                                       if (value == null || value == "") {
+                                               return undefined
+                                       };
+                                       return int(value);
+                               }
+                               else if (type == "String") {
+                                       return String(value);
+                               }
+                               // TODO: Return color type
+                               else if (type == "Color") {
+                                       return String(value);
+                               }
+                               else if (type == "ClassDefinition") {
+                                       if (value) {
+                                               var ClassDefinition:Class = 
flash.utils.getDefinitionByName(value) as Class;
+                                               return new ClassDefinition();
+                                       }
+                                       return new Object();
+                               }
+                               else {
+                                       return value;
+                               }
+                       }
+
+                       /**
+                        * Returns true if left, right or horizontalCenter is 
set
+                        * */
+                       protected function get 
hasHorizontalConstraints():Boolean {
+                               var hasConstraints:Boolean;
+
+                               if (isVisualElement && (element.left || 
element.right || element.horizontalCenter)) {
+                                       hasConstraints = true;
+                               }
+
+                               return hasConstraints;
+                       }
+
+                       /**
+                        * Returns true if top, bottom, verticalCenter or 
baseline is set
+                        * */
+                       protected function get hasVerticalConstraints():Boolean 
{
+                               var hasConstraints:Boolean;
+
+                               if (isVisualElement && (element.top || 
element.bottom || element.verticalCenter || element.baseline)) {
+                                       hasConstraints = true;
+                               }
+
+                               return hasConstraints;
+                       }
+
+                       /**
+                        * Selects all the text in the text field
+                        * */
+                       protected function selectInputText(event:Event):void {
+                               TextInput(event.currentTarget).selectAll();
+                       }
+
+                       /**
+                        * Sets the baseline constraint
+                        * */
+                       protected function 
setBaselineConstraint(value:Object):void {
+                               element.baseline = value ? value : undefined;
+                       }
+
+                       /**
+                        * Sets the bottom constraint
+                        * */
+                       protected function 
setBottomConstraint(value:Object):void {
+                               element.bottom = value ? value : undefined;
+                       }
+
+                       /**
+                        * Sets the horizontal center constraint
+                        * */
+                       protected function 
setHorizontalCenterConstraint(value:Object):void {
+                               element.horizontalCenter = value ? value : 
undefined;
+                       }
+
+                       /**
+                        * Sets the left constraint
+                        * */
+                       protected function setLeftConstraint(value:Object):void 
{
+                               element.left = value ? value : undefined;
+                       }
+
+                       /**
+                        * Sets the right constraint
+                        * */
+                       protected function 
setRightConstraint(value:Object):void {
+                               element.right = value ? value : undefined;
+                       }
+
+                       /**
+                        * Sets the top constraint
+                        * */
+                       protected function setTopConstraint(value:Object):void {
+                               element.top = value ? value : undefined;
+                       }
+
+                       /**
+                        * Sets the vertical center constraint
+                        * */
+                       protected function 
setVerticalCenterConstraint(value:Object):void {
+                               element.verticalCenter = value ? value : 
undefined;
+                       }
+
+                       /**
+                        * Updates the display with the value of the baseline 
position
+                        * */
+                       protected function updateBaselineConstraint():void {
+                               var baselineValue:Object;
+                               
+                               if (!isVisualElement) {
+                                       baselineText.text = "";
+                                       return;
+                               }
+                               
+                               baselineValue = element.baseline;
+                               
+                               /**
+                                * If baseline is set then set Y to nothing
+                                * If baseline and bottom are set then set 
height to nothing
+                                * If verticalCenter is set then set baseline 
to nothing
+                                * Otherwise set baseline to nothing
+                                * */
+                               if (baselineValue) {
+                                       baselineText.text = 
String(baselineValue);
+
+                                       // baseline is set so do not display Y
+                                       yText.text = "";
+                               }
+                               else {
+                                       baselineText.text = "";
+                               }
+
+                       }
+
+                       /**
+                        * Updates the display with the value of the bottom 
position
+                        * */
+                       protected function updateBottomConstraint():void {
+                               var bottomValue:Object;
+                               
+                               if (!isVisualElement) {
+                                       bottomText.text = "";
+                                       return;
+                               }
+                               
+                               bottomValue = element.bottom;
+                               
+                               /**
+                                * If bottom is set then set Y to nothing
+                                * If bottom and bottom are set then set height 
to nothing
+                                * If verticalCenter is set then set bottom to 
nothing
+                                * Otherwise set bottom to nothing
+                                * */
+                               if (bottomValue) {
+                                       bottomText.text = String(bottomValue);
+
+                                       // if top and bottom are set then hide 
height
+                                       if (element.top) {
+                                               heightText.text = "";
+                                       }
+
+                                       // bottom is set so do not display Y
+                                       yText.text = "";
+                               }
+                               else {
+                                       bottomText.text = "";
+                               }
+
+                       }
+
+                       /**
+                        * Updates the display with the value of the height
+                        * */
+                       protected function updateHeightProperty():void {
+                               var isPercentHeight:Boolean;
+
+                               /**
+                                * If visual element and top is set and bottom 
is set then do not display height
+                                * */
+                               if (isVisualElement && element.top != null && 
element.bottom != null) {
+                                       heightText.text = "";
+                               }
+                               else {
+                                       displayCorrectHeight();
+                               }
+                       }
+
+                       /**
+                        * Updates the display with the value of the left 
constraint
+                        * */
+                       protected function 
updateHorizontalCenterConstraint():void {
+                               var value:String;
+                               var horizontalCenterValue:Object;
+                               
+                               if (!isVisualElement) {
+                                       horizontalCenterText.text = "";
+                                       return;
+                               }
+                               
+                               horizontalCenterValue = 
element.horizontalCenter;
+
+                               /**
+                                * If left is set then set x to nothing
+                                * If left and right are set then set width to 
nothing
+                                * If horizontalCenter is set than set left and 
right to nothing
+                                * Otherwise set left to nothing
+                                * */
+                               if (horizontalCenterValue) {
+                                       horizontalCenterText.text = 
String(horizontalCenterValue);
+
+                                       // left is set so do not display X
+                                       xText.text = "";
+                               }
+                               else {
+                                       horizontalCenterText.text = "";
+                               }
+
+                       }
+
+                       /**
+                        * Updates the display with the value of the left 
constraint
+                        * */
+                       protected function updateLeftConstraint():void {
+                               var value:String;
+                               var leftValue:Object;
+                               
+                               if (!isVisualElement) {
+                                       leftText.text = "";
+                                       return;
+                               }
+                               
+                               leftValue = element.left;
+
+                               /**
+                                * If left is set then set x to nothing
+                                * If left and right are set then set width to 
nothing
+                                * If horizontalCenter is set than set left and 
right to nothing
+                                * Otherwise set left to nothing
+                                * */
+                               if (leftValue) {
+                                       leftText.text = String(leftValue);
+
+                                       // if left and right are set then hide 
width
+                                       if (element.right) {
+                                               widthText.text = "";
+                                       }
+
+                                       // left is set so do not display X
+                                       xText.text = "";
+                               }
+                               else {
+                                       leftText.text = "";
+                               }
+
+                       }
+
+                       /**
+                        * Updates the display with the value of the right 
position
+                        * */
+                       protected function updateRightConstraint():void {
+                               var value:String;
+                               var rightValue:Object;
+                               
+                               if (!isVisualElement) {
+                                       rightText.text = "";
+                                       return;
+                               }
+                               
+                               rightValue = element.right;
+
+                               /**
+                                * If horizontalCenter is set then set right to 
nothing
+                                * If left and right are set then set width to 
nothing
+                                * If horizontalCenter is set than set left and 
right to nothing
+                                * Otherwise set right to nothing
+                                * */
+                               if (rightValue) {
+                                       rightText.text = String(rightValue);
+
+                                       // if left and right are set then hide 
width
+                                       if (element.left) {
+                                               widthText.text = "";
+                                       }
+
+                                       // right is set so do not display X
+                                       xText.text = "";
+                               }
+                               else {
+                                       rightText.text = "";
+                               }
+
+                       }
+
+                       /**
+                        * Updates the display with the value of the top 
position
+                        * */
+                       protected function updateTopConstraint():void {
+                               var value:String;
+                               var topValue:Object;
+                               
+                               if (!isVisualElement) {
+                                       topText.text = "";
+                                       return;
+                               }
+
+                               topValue = element.top;
+
+                               /**
+                                * If top is set then set Y to nothing
+                                * If top and bottom are set then set height to 
nothing
+                                * If verticalCenter is set then set top to 
nothing
+                                * Otherwise set top to nothing
+                                * */
+                               if (topValue != null) {
+                                       topText.text = String(topValue);
+
+                                       // if top and bottom are set then do 
not display height
+                                       if (element.bottom) {
+                                               heightText.text = "";
+                                       }
+
+                                       // top is set so do not display Y
+                                       yText.text = "";
+                               }
+                               else {
+                                       topText.text = "";
+                               }
+
+                       }
+
+                       /**
+                        * Updates the display with the value of the vertical 
center position
+                        * */
+                       protected function 
updateVerticalCenterConstraint():void {
+                               var verticalCenterValue:Object;
+                               
+                               if (!isVisualElement) {
+                                       verticalCenterText.text = "";
+                                       return;
+                               }
+                               
+                               verticalCenterValue = element.verticalCenter;
+                               
+                               if (verticalCenterValue) {
+                                       verticalCenterText.text = 
String(verticalCenterValue);
+
+                                       // vertical center is set so do not 
display Y
+                                       yText.text = "";
+                               }
+                               else {
+                                       verticalCenterText.text = "";
+                               }
+
+                       }
+                       
+                       /**
+                        * Updates the visibility of the outline in the 
contraint box
+                        * */
+                       public function 
updateTargetOutline(event:Event=null):void {
+                               InspectorUtils.drawSelection(target, 
systemManager);
+                       }
+
+                       /**
+                        * Updates the visibility of the rulers and text boxes 
in the contraints container
+                        * and checks or unchecks the constraint checkboxes
+                        * */
+                       protected function updateVisibleControls():void {
+                               var visible:Boolean = true;
+
+                               topConstraint.selected = topRule.visible = 
topText.visible = (isVisualElement && element.top != null) ? visible : !visible;
+
+                               rightConstraint.selected = bottomRule.visible = 
bottomText.visible = (isVisualElement && element.bottom != null) ? visible : 
!visible;
+
+                               leftConstraint.selected = leftRule.visible = 
leftText.visible = (isVisualElement && element.left != null) ? visible : 
!visible;
+
+                               rightConstraint.selected = rightRule.visible = 
rightText.visible = (isVisualElement && element.right != null) ? visible : 
!visible;
+
+                               horizontalCenterConstraint.selected = 
horizontalCenterRule.visible = horizontalCenterText.visible = (isVisualElement 
&& element.horizontalCenter != null) ? visible : !visible;
+
+                               verticalCenterConstraint.selected = 
verticalCenterRule.visible = verticalCenterText.visible = (isVisualElement && 
element.verticalCenter != null) ? visible : !visible;
+
+                               baselineConstraint.selected = 
baselineRule.visible = baselineText.visible = (isVisualElement && 
element.baseline != null) ? visible : !visible;
+                               
+                               // this throws an error, element is null, when 
target is system manager
+                               // we should disable constraints if not 
supported
+                               copyConstraints(constrainedTarget, element, 0);
+                       }
+                       
+                       protected function 
copyConstraints(target:IVisualElement, source:IVisualElement, 
setValue:Object=null):void {
+                               setValue = setValue!=null ? 1 : setValue;
+                               
+                               // this throws an error when target is system 
manager
+                               // we should disable constraints if not 
supported
+                               if (element == null) return; 
+                               
+                               target.top = (element.top != null) ? setValue 
|| element.top : undefined;
+                               
+                               target.bottom = (element.bottom != null) ? 
setValue || element.bottom : undefined;
+                               
+                               target.left = (element.left != null) ? setValue 
|| element.left : undefined;
+                               
+                               target.right = (element.right != null) ? 
setValue || element.right : undefined;
+                               
+                               target.horizontalCenter = 
(element.horizontalCenter != null) ? setValue || element.horizontalCenter : 
undefined;
+                               
+                               target.verticalCenter = (element.verticalCenter 
!= null) ? setValue || element.verticalCenter : undefined;
+                               
+                               target.baseline = (element.baseline != null) ? 
setValue || element.baseline : undefined;
+                               
+                       }
+
+                       /**
+                        * Updates the display with the value of the width
+                        * */
+                       protected function updateWidthProperty():void {
+                               var isPercentWidth:Boolean;
+
+                               /**
+                                * If left is set and right is set then set to 
nothing
+                                * */
+                               if (isVisualElement && element.left != null && 
element.right != null) {
+                                       widthText.text = "";
+                               }
+                               else {
+                                       displayCorrectWidth();
+                               }
+                       }
+
+                       /**
+                        * Updates the displayed with the value of the X 
position
+                        * */
+                       protected function updateXProperty():void {
+
+                               /**
+                                * If horizontalCenter is set then set to 
nothing
+                                * If left is set then set to nothing
+                                * If right is set then set to nothing
+                                * */
+                               if (hasHorizontalConstraints) {
+                                       xText.text = "";
+                               }
+                               else {
+                                       xText.text = String(target.x);
+                               }
+                       }
+
+                       /**
+                        * Updates the display with the value of the Y position
+                        * */
+                       protected function updateYProperty():void {
+
+                               /**
+                                * If verticalCenter is set then set to nothing
+                                * If top is set then set to nothing
+                                * If bottom is set then set to nothing
+                                *
+                                * if int is 0 will it return false? if 
(target.top) vs if (target.top!=null)
+                                * */
+                               if (hasVerticalConstraints) {
+                                       // hide Y text
+                                       yText.text = "";
+                               }
+                               else {
+                                       yText.text = String(target.y);
+                               }
+
+                       }
+                       
+                       public function clearForm():void {
+                               xText.text = "";
+                               yText.text = "";
+                               
+                               topText.text = "";
+                               leftText.text = "";
+                               rightText.text = "";
+                               bottomText.text = "";
+                               
+                               topConstraint.selected = false;
+                               leftConstraint.selected = false;
+                               rightConstraint.selected = false;
+                               bottomConstraint.selected = false;
+                               
+                               widthText.text = "";
+                               heightText.text = "";
+                               
+                               xText.text = "";
+                               xText.text = "";
+                               xText.text = "";
+                               xText.text = "";
+                               xText.text = "";
+                               xText.text = "";
+                               xText.text = "";
+                               
+                               visibleCheckbox.selected = false;
+                       }
+                       
+                       public var radiate:Radiate = Radiate.instance;
+                       protected function 
group1_creationCompleteHandler(event:FlexEvent):void {
+                               
radiate.addEventListener(RadiateEvent.TARGET_CHANGE, targetChangeHandler);
+                       }
+                       
+                       protected function 
targetChangeHandler(event:RadiateEvent):void {
+                               target = event.selectedItem;
+                       }
+                       
+               ]]>
+       </fx:Script>
+
+       <fx:Declarations>
+               <handlers:EventHandler eventName="{FlexEvent.ENTER}"
+                                                          targets="{[
+                                                          topText, 
+                                                          bottomText, 
+                                                          rightText, 
+                                                          leftText, 
+                                                          widthText, 
+                                                          heightText, 
+                                                          xText, 
+                                                          yText,
+                                                          verticalCenterText, 
+                                                          
horizontalCenterText, 
+                                                          baselineText]}"
+                                                          keepEvent="true"
+                                                          id="enterHandler">
+                       <supportClasses:ActionEffect >
+                               <supportClasses:effectStart>
+                                       <![CDATA[
+                                               
applyPropertiesToTargetHandler(enterHandler.event);
+                                               
//EffectEvent(event).effectInstance.finish();
+                                       ]]>
+                               </supportClasses:effectStart>
+                       </supportClasses:ActionEffect>
+               </handlers:EventHandler>
+
+               <handlers:EventHandler eventName="{FocusEvent.FOCUS_IN}"
+                                                          targets="{[
+                                                          topText, 
+                                                          bottomText, 
+                                                          rightText, 
+                                                          leftText, 
+                                                          widthText, 
+                                                          heightText, 
+                                                          xText, 
+                                                          yText,
+                                                          verticalCenterText, 
+                                                          
horizontalCenterText, 
+                                                          baselineText]}"
+                                                          keepEvent="true"
+                                                          
id="focusInEventHandler">
+                       
+                       <supportClasses:ActionEffect >
+                               <supportClasses:effectStart>
+                                       <![CDATA[
+                                       
selectInputText(focusInEventHandler.event);
+                                       ]]>
+                               </supportClasses:effectStart>
+                       </supportClasses:ActionEffect>
+               </handlers:EventHandler>
+
+               
+               <handlers:EventHandler eventName="{MouseEvent.CLICK}"
+                                                          targets="{[
+                                                          leftConstraint, 
+                                                          rightConstraint, 
+                                                          bottomConstraint, 
+                                                          topConstraint, 
+                                                          baselineConstraint,
+                                                          
horizontalCenterConstraint, 
+                                                          
verticalCenterConstraint]}"
+                                                          keepEvent="true"
+                                                          id="clickHandler">
+                       
+                       <supportClasses:ActionEffect >
+                               <supportClasses:effectStart>
+                                       <![CDATA[
+                                       constraintHandler(clickHandler.event);
+                                       ]]>
+                               </supportClasses:effectStart>
+                       </supportClasses:ActionEffect>
+                       
+               </handlers:EventHandler>
+               
+               <s:SolidColorStroke id="stroke1" weight="1" color="#00AA00"/>
+               
+       </fx:Declarations>
+
+       <!-- POSITIONING -->
+       <s:Group horizontalCenter="0" y="60">
+               <s:TextInput id="heightText"
+                                        width="50" x="154" y="0"
+                                        name="height:Number"/>
+               <s:TextInput id="yText"
+                                        width="50" x="154" y="35"
+                                        name="y:Number"/>
+               <s:TextInput id="xText"
+                                        width="50" x="45" y="35"
+                                        name="x:Number"/>
+               <s:TextInput id="widthText"
+                                        width="50" x="44" y="0"
+                                        name="width:Number"/>
+               <s:RichText text="Height:" x="110" y="7"
+                                                          
tabFocusEnabled="false"/>
+               <s:RichText text="Width:" x="2" y="7"
+                                                          
tabFocusEnabled="false"/>
+               <s:RichText text="X:" x="26" y="42"
+                                                          
tabFocusEnabled="false"/>
+               <s:RichText text="Y:" x="138" y="42"
+                                                          
tabFocusEnabled="false"/>
+       </s:Group>
+
+       
+       <!-- CONSTRAINTS PANEL -->
+       <s:BorderContainer id="constraintsContainer" 
+                                          horizontalCenter="0"
+                                          y="149"
+                                          borderVisible="false">
+
+               <!-- CONSTRAINTS -->
+               <s:TextInput id="topText"
+                                        width="40" x="205" y="47"
+                                        name="top:style"/>
+               <s:TextInput id="verticalCenterText"
+                                        width="40" x="205" y="95"
+                                        name="verticalCenter:style"/>
+               <s:TextInput id="bottomText"
+                                        width="40" x="205" y="143"
+                                        name="bottom:style"/>
+               <s:TextInput id="baselineText"
+                                        width="40" x="205" y="165"
+                                        name="baseline:style"/>
+               
+               <s:TextInput id="rightText"
+                                        width="40" x="147" y="189"
+                                        name="right:style"/>
+               <s:TextInput id="horizontalCenterText"
+                                        width="40" x="99" y="189"
+                                        name="horizontalCenter:style"/>
+               <s:TextInput id="leftText"
+                                        width="40" x="50" y="189"
+                                        name="left:style"/>
+               
+               <s:CheckBox id="leftConstraint"
+                                       toolTip="Left"
+                                       x="64" y="8"/>
+               <s:CheckBox id="horizontalCenterConstraint"
+                                       toolTip="Horizontal Center"
+                                       x="114" y="8"/>
+               <s:CheckBox id="bottomConstraint"
+                                       toolTip="Bottom"
+                                       x="23" y="145"/>
+               <s:CheckBox id="topConstraint"
+                                       toolTip="Top"
+                                       x="23" y="48"/>
+               <s:CheckBox id="verticalCenterConstraint"
+                                       toolTip="Vertical Center"
+                                       x="23" y="97"/>
+               <s:CheckBox id="rightConstraint"
+                                       toolTip="Right"
+                                       x="162" y="8"/>
+               <s:CheckBox id="baselineConstraint" 
+                                       toolTip="Baseline"
+                                       x="23" y="165"/>
+
+               <!-- CONSTRAINTS PANEL BOX -->
+               <s:BorderContainer height="150" width="150" 
+                                                  x="44" y="31"
+                                                  borderAlpha=".4">
+
+                       <s:BorderContainer borderColor="#9E9E9E"
+                                                          height="98" 
width="98" 
+                                                          x="25" y="25"
+                                                          borderVisible="true" 
+                                                          borderWeight="2">
+
+                               <s:Group id="constrainedTarget" 
+                                                width="40" height="20">
+                                       
+                                       <s:Rect width="100%" height="100%" 
+                                                       x="0" y="0">
+                                               <s:fill>
+                                                       <s:SolidColor 
color="gray"/>
+                                               </s:fill>
+                                       </s:Rect>
+                                       
+                               </s:Group>
+                               
+                       </s:BorderContainer>
+                       
+                       <!-- HORIZONTAL -->
+                       <s:Line id="topRule" 
+                                         left="0" right="0" 
+                                         top="25"
+                                         width="100%"
+                                         stroke="{stroke1}"
+                                         visible="false"/>
+                       <s:Line id="verticalCenterRule"
+                                         left="0" right="0" 
+                                         width="100%"
+                                         verticalCenter="0"
+                                         stroke="{stroke1}"
+                                         visible="false"/>
+                       <s:Line id="bottomRule"
+                                         left="0" right="0" 
+                                         bottom="25" 
+                                         width="100%"
+                                         stroke="{stroke1}"
+                                         visible="false"/>
+                       <s:Line id="baselineRule"
+                                       left="0" right="0" 
+                                       bottom="4" 
+                                       width="100%"
+                                       stroke="{stroke1}"
+                                       visible="false"/>
+                       
+                       <!-- VERTICAL -->
+                       <s:Line id="leftRule"
+                                         bottom="0" left="25" 
+                                         top="0"
+                                         height="100%"
+                                         stroke="{stroke1}"
+                                         visible="false"/>
+                       <s:Line id="horizontalCenterRule"
+                                         bottom="0" horizontalCenter="0" 
+                                         top="0"
+                                         height="100%"
+                                         stroke="{stroke1}"
+                                         visible="false"/>
+                       <s:Line id="rightRule"
+                                         bottom="0" right="25" 
+                                         top="0"
+                                         height="100%"
+                                         stroke="{stroke1}"
+                                         visible="false"/>
+               </s:BorderContainer>
+
+       </s:BorderContainer>
+
+       <s:Line left="23.5" right="23.5"
+                       y="136" alpha=".5">
+               <s:stroke>
+                       <s:SolidColorStroke/>
+               </s:stroke>
+       </s:Line>
+       
+       <s:Line left="23.5" right="23.5"
+                       y="40" alpha=".5">
+               <s:stroke>
+                       <s:SolidColorStroke/>
+               </s:stroke>
+       </s:Line>
+       
+       <s:Label backgroundColor="#FFFFFF" horizontalCenter="0"
+                                                  text="Size and Position" 
y="35"/>
+
+       <s:Label backgroundColor="#FFFFFF" horizontalCenter="0"
+                                                  text="Constraints" y="131"/>
+
+       <s:CheckBox id="visibleCheckbox"
+                               label="Visible" x="10" y="5"
+                               click="applyPropertiesToTargetHandler(event)"
+                               name="visible"/>
+
+       <s:ComboBox id="layoutLayoutComboBox"
+                               horizontalCenter="0"
+                               visible="false" width="250" y="376"
+                               change="applyPropertiesToTargetHandler(event)"
+                               
focusOut="applyPropertiesToTargetHandler(event)">
+               <s:dataProvider>
+                       <mx:ArrayList>
+                               <fx:Object label=""
+                                                  name="layout" 
type="ClassDefinition"/>
+                               <fx:Object label="spark.layouts::BasicLayout"
+                                                  name="layout" 
type="ClassDefinition"/>
+                               <fx:Object 
label="spark.layouts::HorizontalLayout"
+                                                  name="layout" 
type="ClassDefinition"/>
+                               <fx:Object label="spark.layouts::TileLayout"
+                                                  name="layout" 
type="ClassDefinition"/>
+                               <fx:Object label="spark.layouts::VerticalLayout"
+                                                  name="layout" 
type="ClassDefinition"/>
+                       </mx:ArrayList>
+               </s:dataProvider>
+       </s:ComboBox>
+
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/ElementInspector.as
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/ElementInspector.as 
b/Radii8Library/src/com/flexcapacitor/views/ElementInspector.as
new file mode 100644
index 0000000..4b2d179
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/ElementInspector.as
@@ -0,0 +1,222 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+/**
+ * Allows you to inspect your application at runtime. Press CMD + SHIFT + I to 
enable
+ * It will also appear in the context menu as Inspect. This is disabled by 
default.
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * */
+package com.flexcapacitor.views {
+       import com.flexcapacitor.views.ElementInspectorGroup;
+       
+       import flash.display.DisplayObject;
+       import flash.display.InteractiveObject;
+       import flash.events.ContextMenuEvent;
+       import flash.events.Event;
+       import flash.events.KeyboardEvent;
+       import flash.events.MouseEvent;
+       import flash.system.Capabilities;
+       import flash.ui.ContextMenu;
+       import flash.ui.ContextMenuItem;
+       import flash.ui.Keyboard;
+       
+       import mx.core.FlexGlobals;
+       import mx.events.FlexEvent;
+       import mx.managers.PopUpManager;
+       import mx.managers.SystemManager;
+
+       public class ElementInspector {
+               private var systemManager:SystemManager;
+               private var _currItem:InteractiveObject;
+               private var _clonedEvent:MouseEvent;
+               private var created:Boolean;
+               private var application:Object;
+               private var menuItem:ContextMenuItem = new ContextMenuItem("");
+
+               public var enableInReleaseSWF:Boolean;
+
+               public var enable:Boolean = true;
+
+               public var currentTarget:Object;
+
+               public var currentCaptureTarget:Object;
+
+               /**
+                * A comma separated list of sites that inspector will be 
enabled on
+                * Default is "http://localhost";
+                * */
+               public var enabledSites:String = "http://localhost";;
+
+               public var showInContextMenu:Boolean = true;
+
+               [Bindable]
+               public var menu:ContextMenu = new ContextMenu();
+
+               public var showNewPanel:Boolean = true;
+               
+               private var elementInspectorWindow:ElementInspectorGroup;
+
+               private var isDebugPlayer:Boolean;
+
+               // assume it is debug
+               private var isDebugSWF:Boolean;
+
+               public function ElementInspector() {
+
+
+                       if (!enable) {
+                               return;
+                       }
+
+                       // disable in non debug swfs - NOT ENABLED 
+                       isDebugPlayer = flash.system.Capabilities.isDebugger;
+
+                       application = FlexGlobals.topLevelApplication;
+                       
+                       if (!application.initialized) {
+                               
application.addEventListener(FlexEvent.APPLICATION_COMPLETE, setupMouseManager, 
false, 0, true);
+                       }
+                       else {
+                               setupMouseManager(null);
+                       }
+
+               }
+
+               // gets item mouse is over
+               private function setupMouseManager(event:FlexEvent):void {
+                       var sites:Array = enabledSites.split(",");
+                       var url:String = application.url;
+                       var siteFound:Boolean = false;
+
+                       // search through sites specified to enable or disable 
inspector
+                       for (var i:int = 0; i < sites.length; i++) {
+                               if (url.indexOf(sites[i]) != -1) {
+                                       siteFound = true;
+                               }
+                       }
+
+                       if (enabledSites == "" || enabledSites == null) {
+                               // return
+                       }
+
+                       // disable for sites not specified
+                       if (enabledSites!="*" && enabledSites != "" 
+                               && enabledSites != null && !siteFound) {
+                               return;
+                       }
+
+
+                       if (!enable) {
+                               return;
+                       }
+                       
+                       // Check code https://gist.github.com/596639
+                       
+                       // disable in non debug swfs
+                       /*if (!enableInReleaseSWF) {
+                               if (!isDebugSWF) {
+                                       return;
+                               }
+                       }*/
+                       
+                       
+                       application = FlexGlobals.topLevelApplication;
+                       
application.removeEventListener(FlexEvent.APPLICATION_COMPLETE, 
setupMouseManager);
+
+                       if (showInContextMenu) {
+                               menu = new ContextMenu();
+                               
menu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelect, false, 0, 
false);
+                               if (application.contextMenu == null) {
+                                       application.contextMenu = menu;
+                                       menu.hideBuiltInItems();
+                               }
+                               else {
+                                       menu = application.contextMenu;
+                                       
menu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelect, false, 0, 
false);
+                               }
+                       }
+
+                       created = true;
+                       systemManager = application.systemManager; // should 
add to stage
+                       systemManager.addEventListener(KeyboardEvent.KEY_DOWN, 
keydownHandler, false, 0, true);
+
+               }
+
+               private function keydownHandler(event:KeyboardEvent):void {
+                       // 73 is I and i
+                       if (event.keyCode == 73) {
+                               if (event.ctrlKey) {
+                                       if (event.shiftKey) {
+                                               displayPopUp();
+                                       }
+                               }
+                       }
+               }
+
+               private function getItemUnderMouse(event:MouseEvent):void {
+                       _currItem = InteractiveObject(event.target);
+                       _clonedEvent = MouseEvent(event);
+
+                       currentTarget = event.target;
+
+                       if (event.eventPhase == 2) {
+                               currentTarget = event.target;
+                       }
+                       else {
+                               currentCaptureTarget = event.target;
+                       }
+               }
+
+               public function menuSelect(event:ContextMenuEvent):void {
+
+                       if 
(!menuItem.hasEventListener(ContextMenuEvent.MENU_ITEM_SELECT)) {
+                               menuItem.caption = "Inspect";
+                               menuItem.separatorBefore = true;
+                               
menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, 
inspectSelectedItem);
+                               menu.customItems.push(menuItem);
+                       }
+               }
+
+               public function 
inspectSelectedItem(event:ContextMenuEvent):void {
+                       //elementInspectorPanel.currentTarget = currentTarget;
+                       displayPopUp();
+               }
+               
+               public function displayPopUp():void {
+                       if (showNewPanel) {
+                               if (elementInspectorWindow==null) 
elementInspectorWindow = new ElementInspectorGroup();
+                               PopUpManager.addPopUp(elementInspectorWindow, 
DisplayObject(FlexGlobals.topLevelApplication));
+                               
+                               
PopUpManager.centerPopUp(elementInspectorWindow);
+                       }
+                       else {
+                               //if (elementInspectorPanel==null) 
elementInspectorPanel = new ElementInspectorPanel();
+                               //PopUpManager.addPopUp(elementInspectorPanel, 
DisplayObject(ApplicationUtils.getInstance()));
+                               
//PopUpManager.centerPopUp(elementInspectorPanel);
+                       }
+               }
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/ElementInspectorGroup.mxml
----------------------------------------------------------------------
diff --git 
a/Radii8Library/src/com/flexcapacitor/views/ElementInspectorGroup.mxml 
b/Radii8Library/src/com/flexcapacitor/views/ElementInspectorGroup.mxml
new file mode 100644
index 0000000..14ba6df
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/ElementInspectorGroup.mxml
@@ -0,0 +1,147 @@
+<?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:Group xmlns:fx="http://ns.adobe.com/mxml/2009"; 
+                                                  
xmlns:s="library://ns.adobe.com/flex/spark" 
+                                                  
xmlns:mx="library://ns.adobe.com/flex/mx" 
+                                                  width="400" height="400" 
+                                                  
xmlns:inspectors="com.flexcapacitor.inspectors.*"
+                                                  styleName="myStyle" 
xmlns:views="com.flexcapacitor.views.*" 
xmlns:panels="com.flexcapacitor.views.panels.*">
+
+       <fx:Style>
+               @namespace s "library://ns.adobe.com/flex/spark";
+               @namespace mx "library://ns.adobe.com/flex/mx";
+               @namespace inspectors "com.flexcapacitor.inspectors.*";
+               
+       </fx:Style>
+       
+       <fx:Script>
+               <![CDATA[
+                       import com.flexcapacitor.utils.InspectorUtils;
+                       
+                       import mx.core.FlexGlobals;
+                       import mx.events.DragEvent;
+                       import mx.events.FlexEvent;
+                       import mx.events.ResizeEvent;
+                       import mx.managers.PopUpManager;
+
+                       public function close():void {
+                               PopUpManager.removePopUp(this);
+                               InspectorUtils.clearSelection(target, 
systemManager);
+                       }
+
+                       protected function 
creationCompleteHandler(event:FlexEvent):void {
+                               
+                               // EVENTS we need to implement or handle
+                               // selection events - when an item is selected 
then we assign a new target
+                               // highlight events - when an item is 
highlighted / show border we do not set target
+                               // close - teardown event when window is 
removed from the screen
+                               // targetPropertyChange - when a property is 
changed on the target
+                               // - the event would have is property bindable 
so listeners can check if the property is bindable
+                               // and ignore or respond accordingly. also old 
values and new values
+                               // show or hide event - when a panel is hidden 
or shown let windows know 
+                               // (tab navigator does not dispatch hide or 
show when the tab is selected or deselected)
+                               
+                               // Nick recommended using ItemRenderers 
+                               // the advantage is that as targets change the 
data property is set
+                               // dataProvider keeps an array of items
+                               // the disadvantage is item renders are not 
thought of as group containers
+                               
+                               // Create a undo history panel to keep track of 
changes
+                               // create a components panel
+                               // add icons for the outline view
+                               // create a styles panel
+                               // register panels in the manager
+                               
+                               target = FlexGlobals.topLevelApplication;
+                       }
+                       
+                       
+               ]]>
+       </fx:Script>
+
+       <fx:Declarations>
+               <fx:Object id="target"/>
+       </fx:Declarations>
+
+       <views:Description target="{target}" left="10" right="10" top="10"/>
+       
+       <s:Group bottom="10" left="10" right="10" top="30">
+               
+               <!--<s:View height="100%" label="Selection" width="100%">-->
+                       <s:Scroller height="100%" width="100%">
+                               <s:Group>
+                                       <s:layout>
+                                               <s:VerticalLayout/>
+                                       </s:layout>
+                                       <views:SelectionOld height="100%" 
width="100%"/>
+                               </s:Group>
+                       </s:Scroller>
+               <!--</s:View>-->
+               
+               <!--<s:View height="100%" label="Outline" width="100%">-->
+                       <s:Scroller height="100%" width="100%">
+                               <s:Group>
+                                       <s:layout>
+                                               <s:VerticalLayout/>
+                                       </s:layout>
+                                       <!--<inspectors:Outline id="outline" 
height="100%" width="100%"
+                                                                               
change="{target = event.targetItem}"
+                                                                               
target="{target}"/>-->
+                               </s:Group>
+                       </s:Scroller>
+               <!--</s:View>-->
+               
+               <!--<s:View height="100%" label="Layout" width="100%">-->
+                       <s:Scroller height="100%" width="100%">
+                               <s:Group>
+                                       <s:layout>
+                                               <s:VerticalLayout/>
+                                       </s:layout>
+                                       <panels:ConstraintsInspector 
id="constraints" height="100%" width="100%"
+                                                                               
        target="{target}"/>
+                               </s:Group>
+                       </s:Scroller>
+               <!--</s:View>-->
+
+               <!--<s:View height="100%" label="Properties" width="100%">-->
+                       <s:Scroller height="100%" width="100%">
+                               <s:Group>
+                                       <s:layout>
+                                               <s:VerticalLayout/>
+                                       </s:layout>
+                                       <panels:PropertyInspector height="100%" 
width="100%"/>
+                               </s:Group>
+                       </s:Scroller>
+               <!--</s:View>-->
+               
+               <!--<s:View height="100%" label="Statistics" width="100%">-->
+                       <s:Scroller height="100%" width="100%">
+                               <s:Group>
+                                       <s:layout>
+                                               <s:VerticalLayout/>
+                                       </s:layout>
+                                       <views:Statistics height="100%" 
width="100%"
+                                                                               
   target="{target}"/>
+                               </s:Group>
+                       </s:Scroller>
+               <!--</s:View>-->
+
+       </s:Group>
+</s:Group>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/Example.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/Example.mxml 
b/Radii8Library/src/com/flexcapacitor/views/Example.mxml
new file mode 100644
index 0000000..bd8519a
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/Example.mxml
@@ -0,0 +1,80 @@
+<?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:Group xmlns:fx="http://ns.adobe.com/mxml/2009"; 
+                xmlns:s="library://ns.adobe.com/flex/spark" 
+                xmlns:mx="library://ns.adobe.com/flex/mx" 
+                width="100%" 
+                minHeight="20"
+                creationComplete="group1_creationCompleteHandler(event)">
+       
+       <!-- Width and height should be 100%?? -->
+       <fx:Script>
+               <![CDATA[
+                       import com.flexcapacitor.controller.Radiate;
+                       import com.flexcapacitor.events.RadiateEvent;
+                       
+                       import mx.events.FlexEvent;
+                       
+                       private var _target:*;
+                       
+                       public function get target():* {
+                               return _target;
+                       }
+                       
+                       /**
+                        * This is set automatically when a new target is 
selected
+                        * This can be any type. You must disable this 
component if the 
+                        * type is not what you can process.
+                        * */
+                       [Bindable]
+                       public function set target(value:*):void {
+                               
+                               // For example, if we only want to handle 
DisplayObjects we check for them here
+                               if (!(value is DisplayObject)) {
+                                       _target = null;
+                                       enabled = false;
+                                       return;
+                               }
+                               else {
+                                       enabled = true;
+                               }
+                               
+                               _target = DisplayObject(value);
+                       }
+                       
+                       private var radiate:Radiate = Radiate.instance;
+                       
+                       protected function 
group1_creationCompleteHandler(event:FlexEvent):void {
+                               
radiate.addEventListener(RadiateEvent.TARGET_CHANGE, targetChangeHandler, 
false, 0, true);
+                       }
+                       
+                       protected function 
targetChangeHandler(event:RadiateEvent):void {
+                               target = event.selectedItem
+                       }
+                       
+               ]]>
+       </fx:Script>
+       
+       <fx:Declarations>
+               <!-- Place non-visual elements (e.g., services, value objects) 
here -->
+       </fx:Declarations>
+       
+       <s:Label text="Hello world! The target is {target}" 
horizontalCenter="0" verticalCenter="0"/>
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/EyeDropperInspector.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/EyeDropperInspector.mxml 
b/Radii8Library/src/com/flexcapacitor/views/EyeDropperInspector.mxml
new file mode 100644
index 0000000..362382e
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/EyeDropperInspector.mxml
@@ -0,0 +1,192 @@
+<?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:Group xmlns:controls="com.flexcapacitor.graphics.*"
+                xmlns:fx="http://ns.adobe.com/mxml/2009";
+                xmlns:s="library://ns.adobe.com/flex/spark"
+                xmlns:filters="com.flexcapacitor.filters.*"
+                xmlns:mx="library://ns.adobe.com/flex/mx"
+                
+                creationComplete="group1_creationCompleteHandler(event)" 
xmlns:controls1="com.flexcapacitor.controls.*" 
xmlns:handlers="com.flexcapacitor.handlers.*" 
xmlns:clipboard="com.flexcapacitor.effects.clipboard.*" 
xmlns:status="com.flexcapacitor.effects.status.*" 
+                >
+
+       
+       <fx:Script>
+               <![CDATA[
+                       import com.flexcapacitor.controller.Radiate;
+                       import com.flexcapacitor.events.RadiateEvent;
+                       import com.flexcapacitor.tools.EyeDropper;
+                       import com.flexcapacitor.tools.ITool;
+                       import com.flexcapacitor.utils.DisplayObjectUtils;
+                       import 
com.flexcapacitor.utils.supportClasses.ComponentDescription;
+                       
+                       import mx.events.ColorPickerEvent;
+                       import mx.events.FlexEvent;
+                       
+                       public var radiate:Radiate;
+                       public var color:uint;
+                       public var tool:ITool;
+                       private var isOverDocument:Boolean;
+                       
+                       /**
+                        * 
+                        * */
+                       protected function 
group1_creationCompleteHandler(event:FlexEvent):void {
+                               radiate = Radiate.getInstance();
+                               
+                               
radiate.addEventListener(RadiateEvent.COLOR_SELECTED, colorSelectedHandler, 
false, 0, true);
+                               
radiate.addEventListener(RadiateEvent.COLOR_PREVIEW, colorPreviewHandler, 
false, 0, true);
+                               
+                               tool = radiate.selectedTool;
+                               
+                               
EyeDropper(tool).addEventListener(MouseEvent.ROLL_OUT, rollOutHandler, false, 
0, true);
+                               
EyeDropper(tool).addEventListener(MouseEvent.ROLL_OVER, rollOverHandler, false, 
0, true);
+                               
//EyeDropper(tool).addEventListener(MouseEvent.MOUSE_MOVE, rollOverHandler, 
false, 0, true);
+                               
+                               //Radiate.log.info("INSPECTOR TOOL CREATED");
+                               
+                               updateTool(tool);
+                       }
+                       
+                       /**
+                        * Update UI components to tool settings
+                        * */
+                       public function updateTool(tool:ITool):void {
+                               var toolDescription:ComponentDescription = 
radiate.getToolDescription(tool);
+                               
+                               if (toolDescription && toolDescription.instance 
+                                       && toolDescription.instance is 
EyeDropper) {
+                                       var eyeDropperTool:EyeDropper = 
EyeDropper(toolDescription.instance);
+                                       //showSelection.selected = 
selectionTool.showSelection;
+                                       //showLabel.selected = 
selectionTool.showSelectionLabel;
+                               }
+                       }
+                       
+                       /**
+                        * When user clicks on a location apply the values
+                        * */
+                       protected function 
colorSelectedHandler(event:RadiateEvent):void {
+                               //Radiate.log.info("COLOR CHANGE");
+                               
+                               updateDisplay(event.color, event.invalid, 
false);
+                       }
+                       
+                       /**
+                        * When user previews a location (mouse movement) show 
in preview components
+                        * */
+                       protected function 
colorPreviewHandler(event:RadiateEvent):void {
+                               //Radiate.log.info("COLOR PREVIEW");
+                               
+                               updateDisplay(event.color, event.invalid, true);
+                       }
+                       
+                       /**
+                        * Updates UI
+                        * */
+                       public function updateDisplay(color:uint, 
invalid:Boolean, preview:Boolean):void {
+                               
+                               if (preview) {
+                                       if (invalid) {
+                                               
colorPickerPreview.selectedColor = 0;
+                                       }
+                                       else {
+                                               
colorPickerPreview.selectedColor = color;
+                                               colorTextInputPreview.text = 
DisplayObjectUtils.getColorInHex(color, true);
+                                       }
+                                       
+                               }
+                               else {
+                                       if (invalid) {
+                                               colorPicker.selectedColor = 0;
+                                       }
+                                       else {
+                                               colorPicker.selectedColor = 
color;
+                                               colorTextInput.text = 
DisplayObjectUtils.getColorInHex(color, true);
+                                       }
+                               }
+                       }
+                       
+                       
+                       protected function 
rollOutHandler(event:MouseEvent):void {
+                               colorPickerPreview.visible = false;
+                               colorTextInputPreview.visible = false;
+                               isOverDocument = false;
+                               
+                       }
+                       
+                       protected function 
rollOverHandler(event:MouseEvent):void {
+                               colorPickerPreview.visible = true;
+                               colorTextInputPreview.visible = true;
+                               isOverDocument = true;
+                       }
+                       
+                       /**
+                        * 
+                        * */
+                       protected function 
colorPicker_changeHandler(event:ColorPickerEvent):void {
+                               colorTextInputPreview.text = 
DisplayObjectUtils.getColorInHex(event.color, true);
+                       }
+                       
+               ]]>
+       </fx:Script>
+       <fx:Declarations>
+               
+               <fx:Array id="selectFiltersOff">
+                       <filters:BlackAndWhiteFilter  />
+               </fx:Array>
+               
+               <!-- COPY TO THE CLIPBOARD -->
+               <handlers:EventHandler eventName="click" target="{copyIcon}" 
setTriggerEvent="true">
+                       
+                       <clipboard:CopyToClipboard data="{colorTextInput.text}" 
targetAncestor="{this}" allowNullData="true">
+                               <clipboard:successEffect>
+                                       <status:ShowStatusMessage 
message="Color copied to the clipboard"/>
+                               </clipboard:successEffect>
+                               <clipboard:noDataEffect>
+                                       <status:ShowStatusMessage 
message="Nothing to copy to the clipboard"/>
+                               </clipboard:noDataEffect>
+                               <clipboard:errorEffect>
+                                       <status:ShowStatusMessage message="An 
error occurred while attempting to copy to the clipboard"/>
+                               </clipboard:errorEffect>
+                       </clipboard:CopyToClipboard>
+                       
+               </handlers:EventHandler>
+       </fx:Declarations>
+
+       <s:layout>
+               <s:HorizontalLayout paddingLeft="4" />
+       </s:layout>
+       
+       <mx:ColorPicker id="colorPicker" height="21" 
change="colorPicker_changeHandler(event)"/>
+       
+       <s:TextInput id="colorTextInput" widthInChars="6" height="21"/>
+       
+       
+       <controls1:ImageButton id="copyIcon" 
+                                                  height="100%"
+                                                  filters="{selectFiltersOff}"
+                                                  toolTip="Copy the color to 
the Clipboard"
+                                                  
source="{Radii8LibraryAssets.copy}" 
+                                                  
includeInLayout="{colorTextInput.text!=''}"
+                                                  />
+       
+       <mx:ColorPicker id="colorPickerPreview" visible="false" height="21"/>
+       <s:TextInput id="colorTextInputPreview" visible="false" 
widthInChars="6" height="21"/>
+       
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/Features.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/Features.mxml 
b/Radii8Library/src/com/flexcapacitor/views/Features.mxml
new file mode 100644
index 0000000..5060c3f
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/Features.mxml
@@ -0,0 +1,329 @@
+<?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:Group xmlns:fx="http://ns.adobe.com/mxml/2009"; 
+                xmlns:s="library://ns.adobe.com/flex/spark" 
+                xmlns:mx="library://ns.adobe.com/flex/mx"
+                
+                implements="com.flexcapacitor.views.IInspector" 
+                width="100%" 
+                minHeight="20"
+                >
+       
+       <fx:Script>
+               <![CDATA[
+                       import com.flexcapacitor.controller.Radiate;
+                       import com.flexcapacitor.status.StatusManager;
+                       
+                       import mx.events.ValidationResultEvent;
+                       import mx.rpc.events.FaultEvent;
+                       import mx.rpc.events.ResultEvent;
+                       import mx.validators.EmailValidator;
+                       
+                       [Bindable]
+                       public var os:String;
+                       
+                       [Bindable]
+                       public var browser:String;
+                       
+                       [Bindable]
+                       public var player:String;
+                       
+                       [Bindable]
+                       public var manufacturer:String;
+                       
+                       [Bindable]
+                       public var cpu:String;
+                       
+                       [Bindable]
+                       public var isDebugger:Boolean;
+                       
+                       [Bindable]
+                       public var language:String;
+                       
+                       [Bindable]
+                       public var supports32bit:String;
+                       
+                       [Bindable]
+                       public var supports64bit:String;
+                       
+                       [Bindable]
+                       public var touchscreenType:String;
+                       
+                       [Bindable]
+                       public var isDebugSWF:Boolean;
+                       
+                       [Bindable]
+                       public var flexSDK:String;
+                       
+                       private var radiate:Radiate = Radiate.instance;
+                       
+
+                       public function activate():void {
+                               radiate = Radiate.instance;
+                               
+                               if (radiate.isUserLoggedIn) {
+                                       emailText.text = radiate.userEmail;
+                               }
+                       }
+                       
+                       public function deactivate():void {
+                               
+                       }
+                       
+                       protected function getPropertiesInfo():void {
+                               
+                               var cap:Object = Capabilities;
+                               os = Capabilities.os;
+                               manufacturer = Capabilities.manufacturer;
+                               player = Capabilities.version;
+                               isDebugger = Capabilities.isDebugger;
+                               language = Capabilities.language;
+                               
+                               // in the future we should load in the swf in 
question
+                               // and get the sdk version and if its a debug 
swf
+                               //flexSDK = mx_internal::Version;
+                               isDebugSWF = false; //new 
Error().getStackTrace().search(/:[0-9]+]$/m) > -1;
+                               
+                               
+                               if 
(Object(Capabilities).hasOwnProperty("cpuArchitecture")) {
+                                       cpu = Capabilities['cpuArchitecture'];
+                               }
+                               else {
+                                       cpu = "";
+                               }
+                               
+                               if 
(Object(Capabilities).hasOwnProperty("supports32BitProcesses")) {
+                                       supports32bit = 
Capabilities['supports32BitProcesses'];
+                                       supports64bit = 
Capabilities['supports64BitProcesses'];
+                               }
+                               else {
+                                       supports32bit = "";
+                                       supports64bit = "";
+                               }
+                               
+                               if 
(Object(Capabilities).hasOwnProperty("touchscreenType")) {
+                                       touchscreenType = 
Capabilities['touchscreenType'];
+                               }
+                               else {
+                                       touchscreenType = "";
+                               }
+                               
+                               if (ExternalInterface.available) {
+                                       browser = 
ExternalInterface.call("eval", "navigator.userAgent");
+                               }
+                               else {
+                                       browser = Capabilities.playerType;
+                               }
+                       }
+                       
+                       protected function 
featureRadioGroup_changeHandler(event:Event):void {
+                               if (featureRadioButton.selected) {
+                                       currentState = "feature";
+                               }
+                               else {
+                                       currentState = "bug";
+                               }
+                       }
+                       
+                       
+                       protected function 
sendButton_clickHandler(event:MouseEvent):void {
+                               var message:Object = new Object();
+                               var validResultEvent:ValidationResultEvent = 
emailValidator.validate(emailText.text);
+                               //var validEmail:Boolean = 
emailValidator.validate(emailText.text);
+                               
+                               if (emailText.text=="" && 
validResultEvent.results.length==0) {
+                                       StatusManager.show("Please enter your 
email before sending a message.");
+                                       return;
+                               }
+                               if (messageTextArea.text=="") {
+                                       StatusManager.show("Please enter a 
message.");
+                                       return;
+                               }
+                               
+                               message.os = os;
+                               message.browser = browser;
+                               message.player = player;
+                               message.manufacturer = manufacturer;
+                               message.cpu = cpu;
+                               message.isDebugger = isDebugger;
+                               message.language = language;
+                               message.supports32bit = supports32bit;
+                               message.supports64bit = supports64bit;
+                               message.touchscreen = touchscreenType;
+                               //message.name = nameText.text;
+                               message.email = emailText.text=="" ? 
emailText.prompt : emailText.text;
+                               message.message = messageTextArea.text;
+
+                               feedbackService.send(message);
+                       }
+                       
+                       protected function 
feedbackService_resultHandler(event:ResultEvent):void {
+                               var result:String = event.result as String;
+                               StatusManager.show("Message sent!");
+                               //nameText.text = "";
+                               emailText.prompt = emailText.text!="" ? 
emailText.text : emailText.prompt;
+                               emailText.text = "";
+                               messageTextArea.text = "";
+                       }
+                       
+                       
+                       protected function 
feedbackService_faultHandler(event:FaultEvent):void {
+                               StatusManager.show("An error occurred! Message 
may not have been sent. Please email [email protected].", 6000);
+                               //StatusManager.show("An error occurred! 
Message may not have been sent. \n\n" + event.fault.message);
+                               Radiate.log.error(event.fault.message);
+                       }
+                       
+               ]]>
+       </fx:Script>
+       
+       <fx:Declarations>
+               <mx:EmailValidator id="emailValidator" />
+               
+               <s:RadioButtonGroup id="featureRadioGroup" 
+                                                       
change="featureRadioGroup_changeHandler(event)"/>
+               
+               <s:HTTPService id="feedbackService"
+                                          method="POST"
+                                          
fault="feedbackService_faultHandler(event)" 
+                                          
result="feedbackService_resultHandler(event)"
+                                          
url="http://www.radii8.com/support.php"/>
+       </fx:Declarations>
+       
+       <s:states>
+               <s:State name="feature"/>
+               <s:State name="bug"/>
+       </s:states>
+       
+       <s:VGroup left="0" right="0" 
+                         top="0"
+                         width="100%"
+                         height="100%"
+                         clipAndEnableScrolling="true" 
+                         paddingLeft="10" 
+                         paddingRight="10"
+                         paddingBottom="10"
+                         >
+                       
+               <s:HGroup left="0" right="0" 
+                                 width="100%"
+                                 clipAndEnableScrolling="true" 
+                                 paddingRight="10"
+                                 verticalAlign="middle"
+                                 >
+                       
+                       <s:Label text="Send as many feature request and bug 
reports as you like."/>
+                       
+                       <s:Spacer width="100%"/>
+                       
+                       <s:RadioButton id="featureRadioButton" 
+                                                  label="Feature"
+                                                  group="{featureRadioGroup}"
+                                                  selected="true"
+                                                  />
+                       <s:RadioButton id="booleanDisabledRadioButton"
+                                                  label="Bug"
+                                                  group="{featureRadioGroup}"
+                                                  />
+                       
+                       <s:Button id="sendButton" 
+                                         label="Send" 
+                                         click="sendButton_clickHandler(event)"
+                                         />
+       
+               </s:HGroup>
+               
+               <s:HGroup verticalAlign="middle">
+                       <s:Label text="Your email:"/>
+       
+                       <s:TextInput id="emailText" 
+                                                minWidth="250"
+                                                focusAlpha="0"
+                                                borderColor="#cccccc"
+                                                />
+               </s:HGroup>
+               
+               <s:HGroup left="0" right="0" 
+                                 width="100%" height="100%"
+                                 clipAndEnableScrolling="true" 
+                                 paddingRight="10"
+                                 verticalAlign="middle"
+                                 >
+                       <s:TextArea id="messageTextArea" 
+                                               focusColor="#585858"
+                                               focusAlpha="0"
+                                               width="50%" height="100%" 
+                                               borderColor="#cccccc"
+                                               paddingTop="8"
+                                               paddingBottom="8"
+                                               prompt.feature="Enter your 
feature and click send"
+                                               >
+                               <s:keyFocusChange>
+                                       event.preventDefault();
+                                       event.currentTarget.insertText("\t");
+                           </s:keyFocusChange>
+                               <s:prompt.bug>Summarize the problem and list 
the steps to reproduce.</s:prompt.bug>
+       
+                               <s:text.bug>
+<![CDATA[Summary:
+
+
+Steps to reproduce:
+1. 
+2. 
+3. 
+
+Expected Result:
+
+
+Actual Result:
+
+
+]]></s:text.bug>
+                       </s:TextArea>
+               
+                       <s:TextArea id="helpTextArea" 
+                                               focusColor="#585858"
+                                               focusAlpha="0"
+                                               width="50%" height="100%" 
+                                               borderColor="#cccccc"
+                                               borderVisible="false"
+                                               paddingTop="8"
+                                               paddingBottom="8"
+                                               editable="false"
+                                               includeIn="bug"
+                                               fontStyle="italic"
+                                               color="#585858"
+                                               >
+                               <s:text><![CDATA[Summarize the problem and list 
the steps to reproduce.
+
+Steps to reproduce:
+1. Add a button to the stage
+2. Set color on the button to red in the properties panel
+
+Expected Result:
+Button text is red
+
+Actual Result:
+Button text is blue]]></s:text>
+                       </s:TextArea>
+               </s:HGroup>
+       </s:VGroup>
+       
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/FrameRate.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/FrameRate.mxml 
b/Radii8Library/src/com/flexcapacitor/views/FrameRate.mxml
new file mode 100644
index 0000000..c9fbd45
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/FrameRate.mxml
@@ -0,0 +1,31 @@
+<?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:Group xmlns:fx="http://ns.adobe.com/mxml/2009";
+                xmlns:mx="library://ns.adobe.com/flex/mx"
+                xmlns:s="library://ns.adobe.com/flex/spark" 
+                xmlns:controls="com.flexcapacitor.performance.controls.*"
+                >
+
+       <controls:FrameRate left="4"
+                                               height="100%" width="100%"
+                                               verticalAlign="middle"
+                                               textAlign="center"/>
+
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/HistoryToolBar.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/HistoryToolBar.mxml 
b/Radii8Library/src/com/flexcapacitor/views/HistoryToolBar.mxml
new file mode 100644
index 0000000..f1ef216
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/HistoryToolBar.mxml
@@ -0,0 +1,122 @@
+<?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:Group 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:c="com.flexcapacitor.controls.*"
+                
+                creationComplete="creationCompleteHandler(event)">
+       
+       
+       <!-- 
+       
+       -->
+       <fx:Script>
+               <![CDATA[
+                       import com.flexcapacitor.controller.Radiate;
+                       import com.flexcapacitor.events.RadiateEvent;
+                       
+                       import mx.events.FlexEvent;
+
+                       
+                       
+                       private var radiate:Radiate = Radiate.instance;
+                       
+                       protected function 
creationCompleteHandler(event:FlexEvent):void {
+                               
radiate.addEventListener(RadiateEvent.HISTORY_CHANGE, historyChangeHandler, 
false, 0, true);
+                               
+                               updateNavigationButtons();
+                       }
+                       
+                       /**
+                        * History changed. Select the last applied item in the 
history array. 
+                        * */
+                       protected function 
historyChangeHandler(event:Event):void {
+                               updateNavigationButtons();
+                       }
+                       
+                       /**
+                        * 
+                        * */
+                       public function redo():void {
+                               var historyIndex:int = Radiate.redo(true);
+                               
+                               
+                               //Radiate.history.refresh();
+                               
+                               //list.selectedIndex = historyIndex;
+                               
+                               updateNavigationButtons();
+                               
+                       }
+                       
+                       /**
+                        * 
+                        * */
+                       public function undo():void {
+                               var historyIndex:int = Radiate.undo(true);
+                               
+                               //Radiate.history.refresh();
+                               
+                               //list.selectedIndex = Radiate.historyIndex;
+                               
+                               updateNavigationButtons();
+                       }
+                       
+                       public function updateNavigationButtons():void {
+                               var historyIndex:int = Radiate.historyIndex;
+                               var totalItems:int = Radiate.history ? 
Radiate.history.length : 0;
+                               var hasItems:Boolean = totalItems>0;
+                               
+                               // has forward history
+                               if (hasItems && historyIndex+1<totalItems) {
+                                       forwardButton.enabled = true;
+                               }
+                               else {
+                                       forwardButton.enabled = false;
+                               }
+                               
+                               // has previous items
+                               if (hasItems && historyIndex>-1) {
+                                       backButton.enabled = true;
+                               }
+                               else {
+                                       backButton.enabled = false;
+                               }
+                       }
+               ]]>
+       </fx:Script>
+       
+               
+       <s:layout>
+               <s:HorizontalLayout paddingTop="4" verticalAlign="baseline" />
+       </s:layout>
+
+       <c:ImageButton id="backButton" source="{Radii8LibraryAssets.undo}" 
+                                                 height="15"
+                                                 alpha=".8"
+                                                 click="undo()" 
+                                                 />
+       <c:ImageButton id="forwardButton" source="{Radii8LibraryAssets.redo}"
+                                                 height="15"
+                                                 alpha=".8"
+                                                 click="redo()" 
+                                                 />
+</s:Group>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/IInspector.as
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/IInspector.as 
b/Radii8Library/src/com/flexcapacitor/views/IInspector.as
new file mode 100644
index 0000000..665939a
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/IInspector.as
@@ -0,0 +1,32 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package com.flexcapacitor.views {
+       
+       /**
+        * Interface for dynamic inspectors
+        * */
+       public interface IInspector {
+               
+               
+               function activate():void;
+               
+               function deactivate():void;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/Inspector.as
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/Inspector.as 
b/Radii8Library/src/com/flexcapacitor/views/Inspector.as
new file mode 100644
index 0000000..69e0dd7
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/Inspector.as
@@ -0,0 +1,37 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+package com.flexcapacitor.views {
+       
+       public interface Inspector {
+       
+               /**
+                * Called when the Element Inspector is closed
+                * Used to clean up any references
+                * */
+               function close():void;
+               
+               /**
+                * This property is set when the target is changed
+                * */
+               function set target(value:*):void;
+       }
+}
\ No newline at end of file

Reply via email to