You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/09/03 02:17:45 UTC

[12/30] Radii8 code base as accepted by IP Clearance

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/Snapshot.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/Snapshot.mxml b/Radii8Library/src/com/flexcapacitor/views/Snapshot.mxml
new file mode 100644
index 0000000..66834bb
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/Snapshot.mxml
@@ -0,0 +1,200 @@
+<?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:handlers="com.flexcapacitor.handlers.*" 
+		 xmlns:display="com.flexcapacitor.effects.display.*" 
+		 xmlns:bitmap="com.flexcapacitor.effects.bitmap.*" 
+		 xmlns:file="com.flexcapacitor.effects.file.*" 
+		 xmlns:core="com.flexcapacitor.effects.core.*"
+		 xmlns:status="com.flexcapacitor.effects.status.*"
+		 xmlns:popup="com.flexcapacitor.effects.popup.*" 
+		 xmlns:controls="com.flexcapacitor.controls.*"
+		 
+		 creationComplete="group1_creationCompleteHandler(event)"
+		 width="400" 
+		 height="300" 
+		 >
+	
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.utils.ClassUtils;
+			
+			import mx.events.FlexEvent;
+			public var radiate:Radiate = Radiate.instance;
+			
+			private var _target:DisplayObject;
+
+			[Bindable]
+			public function get target():DisplayObject {
+				return _target;
+			}
+
+			public function set target(value:DisplayObject):void {
+				_target = value as DisplayObject;
+				
+				if (rasterize.bitmapData) {
+					rasterize.bitmapData.dispose();
+					rasterize.bitmapData = null;
+				}
+				
+				if (target) {
+					fileName = ClassUtils.getClassNameOrID(target);
+				}
+				else {
+					fileName = "Screenshot";
+				}
+				
+			}
+
+			
+			protected function group1_creationCompleteHandler(event:FlexEvent):void {
+				radiate.addEventListener(RadiateEvent.TARGET_CHANGE, targetChangeHandler);
+				
+				if (radiate.target) {
+					target = radiate.target as DisplayObject;
+				}
+				
+				
+			}
+			
+			
+			protected function targetChangeHandler(event:RadiateEvent):void {
+				target = event.selectedItem as DisplayObject;
+			}
+			
+			protected function group1_pasteHandler(event:Event):void {
+				/*var clipboard:Clipboard = Clipboard.generalClipboard;
+				Radiate.log.info("Formats: " + clipboard.formats.join(","));
+				Radiate.log.info("PASTED: " + clipboard.getData(ClipboardFormats.TEXT_FORMAT));*/
+				/*var value:* = clipboard.getData(ClipboardFormats.BITMAP_FORMAT, ClipboardTransferMode.CLONE_ONLY);
+				var value1:* = clipboard.getData(ClipboardFormats.BITMAP_FORMAT, ClipboardTransferMode.CLONE_PREFERRED);
+				var value2:* = clipboard.getData(ClipboardFormats.BITMAP_FORMAT, ClipboardTransferMode.ORIGINAL_ONLY);
+				var value3:* = clipboard.getData(ClipboardFormats.BITMAP_FORMAT, ClipboardTransferMode.ORIGINAL_PREFERRED);*/
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<fx:Declarations>
+		<fx:String id="fileName">screenshot</fx:String>
+		
+		<!-- TAKE SNAPSHOT -->
+		<handlers:EventHandler eventName="click" 
+							   target="{snapshotLabel}">
+			
+			<display:Rasterize id="rasterize" target="{target}" source="{target}" 
+							   horizontalPadding="0" fillColor="#ff0000" absoluteBounds="true">
+				<display:invalidTargetEffect>
+					<status:ShowStatusMessage message="Select a target"/>
+				</display:invalidTargetEffect>
+				<display:successEffect>
+					<status:ShowStatusMessage message="Snapshot captured"/>
+				</display:successEffect>
+				<display:errorEffect>
+					<status:ShowStatusMessage message="An error occurred. {rasterize.errorEvent}"/>
+				</display:errorEffect>
+			</display:Rasterize>
+			
+			
+		</handlers:EventHandler>
+		
+		
+		<!-- EXPORT SNAPSHOT -->
+		<handlers:EventHandler eventName="click" 
+							   target="{exportLabel}">
+			
+			<bitmap:EncodeToPNG 		data="{rasterize.bitmapData}" />
+			
+			<core:CopyPreviousToNext 	sourcePropertyName="byteArray" />
+			
+			<file:PromptSaveAs 			fileName="{fileName}" 
+										fileExtension="png"
+										targetAncestor="{this}"/>
+			
+		</handlers:EventHandler>
+		
+		<!-- PREVIEW -->
+		<handlers:EventHandler eventName="click" 
+							   target="{preview}">
+			<popup:OpenPopUp id="openPopUp" 
+							 modalDuration="250"
+							 showDropShadow="true"
+							 popUpType="{ImagePreview}"
+							 closeOnMouseDownInside="true"
+							 data="{rasterize.bitmapData}"/>
+		</handlers:EventHandler>
+		
+		
+		<fx:Component className="ImagePreview">
+			<s:ItemRenderer autoDrawBackground="false">
+				<s:Rect width="100%" height="100%">
+					<s:fill>
+						<s:SolidColor color="#ffffff"/>
+					</s:fill>
+				</s:Rect>
+				<s:Image source="{data}" top="5" right="5" left="5" bottom="5" />
+			</s:ItemRenderer>
+		</fx:Component>
+	</fx:Declarations>
+	
+	<s:HGroup width="100%" typographicCase="uppercase" left="4" right="4">
+		<s:Label id="snapshotLabel" 
+				 text="Capture Image" 
+				 fontSize="10" 
+				 buttonMode="true"
+				 textAlign="center"
+				 fontWeight="bold"
+				 minWidth="{snapshotLabel.height}"
+				 backgroundColor="#484848" 
+				 color="#eeeeee" 
+				 paddingBottom="4" paddingLeft="4"
+				 paddingRight="4" paddingTop="4"/>
+		
+		<s:Label id="exportLabel" 
+				 text="Export"
+				 buttonMode="true"
+				 fontSize="10" 
+				 fontWeight="bold"
+				 textAlign="center"
+				 backgroundColor="#484848" 
+				 color="#eeeeee" 
+				 paddingBottom="4" paddingLeft="4"
+				 paddingRight="4" paddingTop="4"
+				 includeInLayout="{Boolean(rasterize.bitmapData)}"
+				 visible="{Boolean(rasterize.bitmapData)}"
+				 minWidth="{exportLabel.height}"
+				 />
+		
+		<s:Spacer width="100%" />
+		
+		<!--<s:TextInput paste="group1_pasteHandler(event)"/>-->
+		<controls:ImageButton id="preview" 
+							  source="assets/images/components/Image.png"
+							  includeInLayout="{Boolean(rasterize.bitmapData)}"
+							  visible="{Boolean(rasterize.bitmapData)}"
+							  />
+<!--							  mouseUpEffect="{openPopUp}"-->
+		
+	</s:HGroup>
+	
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/Statistics.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/Statistics.mxml b/Radii8Library/src/com/flexcapacitor/views/Statistics.mxml
new file mode 100644
index 0000000..6d1d3bc
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/Statistics.mxml
@@ -0,0 +1,120 @@
+<?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.controls.*"
+		 xmlns:fx="http://ns.adobe.com/mxml/2009"
+		 xmlns:mx="library://ns.adobe.com/flex/mx"
+		 xmlns:s="library://ns.adobe.com/flex/spark"
+		 width="100%"
+		 creationComplete="group1_creationCompleteHandler(event)"
+		 >
+
+	<!-- Width and height should be 100% -->
+
+	<!--- If you change the current target then dispatch a selection event with the new target assigned to it -->
+	<fx:Metadata>
+		[Event(name="change", type="com.flexcapacitor.events.InspectorEvent")]
+	</fx:Metadata>
+
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.events.InspectorEvent;
+			
+			import mx.core.UIComponent;
+			import mx.events.FlexEvent;
+			
+			
+
+			private var _target:Object;
+
+			public function get target():Object {
+				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:Object):void {
+
+				// the target 
+				if (value == null) {
+					_target = null;
+					enabled = false;
+					return;
+				}
+				else {
+					enabled = true;
+				}
+
+				_target = value;
+			}
+
+			/**
+			 * Notify host components when we change the target
+			 * */
+			public function changeTarget(newTarget:Object):void {
+				var selectionChangeEvent:InspectorEvent = new InspectorEvent(InspectorEvent.CHANGE);
+				selectionChangeEvent.targetItem = newTarget;
+				dispatchEvent(selectionChangeEvent);
+			}
+
+
+			protected function group1_showHandler(event:FlexEvent):void {
+				trace("statistics panel. type = " + event.type);
+			}
+
+
+			//public var stats:Stats;
+			
+			/// UPDATE NEED TO ADD STATS IN LATER AS IT"S AN EXTERNAL CLASS
+			//public var stats:Stats;
+			public var stats:Object;
+			
+			protected function group1_creationCompleteHandler(event:FlexEvent):void {
+				stats = new Object();
+				stats.width = container.width;
+				stats.height = container.height;
+				//container.addChild(stats);
+				container.addChild(stats as DisplayObject);
+				// UPDATE NEED TO ADD STATS IN LATER AS IT"S AN EXTERNAL CLASS
+			}
+			
+			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
+				super.updateDisplayList(unscaledWidth, unscaledHeight);
+				
+				stats.WIDTH = unscaledWidth;
+				stats.HEIGHT = unscaledHeight;
+			}
+			
+			
+		]]>
+	</fx:Script>
+
+	<fx:Declarations>
+		<!-- Place non-visual elements (e.g., services, value objects) here -->
+	</fx:Declarations>
+
+	<mx:UIComponent id="container"
+					height="100%" width="100%"/>
+
+
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/Tools.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/Tools.mxml b/Radii8Library/src/com/flexcapacitor/views/Tools.mxml
new file mode 100644
index 0000000..fc35358
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/Tools.mxml
@@ -0,0 +1,184 @@
+<?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" height="24"
+		 
+		 creationComplete="group1_creationCompleteHandler(event)">
+	
+	
+	<!-- 
+	
+	-->
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.tools.ITool;
+			import com.flexcapacitor.utils.supportClasses.ComponentDescription;
+			
+			import mx.events.FlexEvent;
+			
+			import spark.events.IndexChangeEvent;
+			
+			
+			/**
+			 * 
+			 * */
+			private var radiate:Radiate;
+			
+			/**
+			 * 
+			 * */
+			public var selectedTool:ITool;
+			
+			/**
+			 * 
+			 * */
+			protected function group1_creationCompleteHandler(event:FlexEvent):void {
+				radiate = Radiate.getInstance();
+				radiate.addEventListener(RadiateEvent.TOOL_CHANGE, toolChangeHandler);
+				radiate.addEventListener(RadiateEvent.TOOLS_UPDATED, toolsUpdatedHandler);
+				
+				tools.dataProvider = Radiate.toolsDescriptions;
+				
+				if (radiate.selectedTool==null) {
+					tools.selectedIndex = 0;
+					updateTool();
+				}
+			}
+			
+			/**
+			 * 
+			 * */
+			protected function toolChangeHandler(event:RadiateEvent):void
+			{
+				selectedTool = event.selectedItem as ITool;
+			}
+			
+			/**
+			 * 
+			 * */
+			protected function toolsUpdatedHandler(event:RadiateEvent):void
+			{
+				tools.dataProvider = Radiate.toolsDescriptions;
+			}
+			
+			/**
+			 * 
+			 * */
+			protected function tools_updateCompleteHandler(event:FlexEvent):void {
+				explicitHeight = tools.measuredHeight;
+			}
+			
+			/**
+			 * Update tool.
+			 * */
+			protected function tools_changeHandler(event:IndexChangeEvent):void {
+				updateTool();
+			}
+			
+			/**
+			 * Update the tool
+			 * */
+			public function updateTool():void {
+				var item:ComponentDescription;
+				
+				radiate = Radiate.getInstance();
+				
+				item = tools.selectedItem as ComponentDescription;
+				
+				if (item) {
+					radiate.setTool(item.instance as ITool);
+				}
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<s:List id="tools" 
+			width="100%" 
+			height="24"
+			minHeight="24"
+			labelField="name" 
+			dragEnabled="false"
+			borderVisible="false"
+			interactionMode="mouse"
+			updateComplete="tools_updateCompleteHandler(event)"
+			change="tools_changeHandler(event)"
+			selectionColor="#C9C9C9"
+			rollOverColor="#D9D9D9"
+			>
+		<s:layout>
+			<s:TileLayout horizontalGap="2" verticalGap="2" />
+		</s:layout>
+		
+		<s:itemRenderer>
+			<fx:Component>
+				<s:ItemRenderer width="24" height="24" minHeight="22" >
+					<fx:Script>
+						<![CDATA[
+							import com.flexcapacitor.controller.Radiate;
+							import com.flexcapacitor.utils.supportClasses.ComponentDescription;
+							
+							override public function set data(value:Object):void {
+								super.data = value;
+								var definition:ComponentDescription = value as ComponentDescription;
+								var path:String;
+								
+								
+								if (definition) {
+									if (definition.icon) {
+										iconImage.source = definition.icon;
+									}
+									else {
+										path = "assets/images/tools/" + definition.name + ".png";
+										iconImage.source = path;
+									}
+								}
+							}
+							
+							protected function iconImage_ioErrorHandler(event:IOErrorEvent):void {
+								//iconImage.source = "assets/images/components/BorderContainer.png";
+							}
+							
+							
+						]]>
+					</fx:Script>
+					
+					<!--<s:Image id="iconImage"
+							 contentLoader="{Radiate.contentCache}"
+							 ioError="iconImage_ioErrorHandler(event)"
+							 width="16" height="16"/>-->
+					<s:HGroup horizontalAlign="center" verticalAlign="middle">
+						<s:Image id="iconImage"
+								 contentLoader="{Radiate.contentCache}"
+								 ioError="iconImage_ioErrorHandler(event)"
+								 />
+					</s:HGroup>
+					
+				</s:ItemRenderer>
+			</fx:Component>
+			
+		</s:itemRenderer>
+	</s:List>
+	
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/ZoomInspector.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/ZoomInspector.mxml b/Radii8Library/src/com/flexcapacitor/views/ZoomInspector.mxml
new file mode 100644
index 0000000..79efc56
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/ZoomInspector.mxml
@@ -0,0 +1,215 @@
+<?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:c="com.flexcapacitor.controls.*"
+		 
+		 creationComplete="group1_creationCompleteHandler(event)"
+		 >
+
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.tools.ITool;
+			import com.flexcapacitor.tools.Zoom;
+			import com.flexcapacitor.utils.supportClasses.ComponentDescription;
+			
+			
+			import mx.events.FlexEvent;
+			
+			import spark.events.IndexChangeEvent;
+			
+			public var radiate:Radiate;
+			
+			public var zoomTool:Zoom;
+			
+			public var toolDescription:ComponentDescription;
+			
+			/**
+			 * Shows the show actual size button
+			 * */
+			[Bindable]
+			public var showActualSize:Boolean = true;
+			
+			protected function group1_creationCompleteHandler(event:FlexEvent):void {
+				radiate = Radiate.getInstance();
+				
+				radiate.addEventListener(RadiateEvent.SCALE_CHANGE, scaleChangedHandler, false, 0, true);
+				radiate.addEventListener(RadiateEvent.DOCUMENT_CHANGE, documentChangeHandler, false, 0, true);
+				
+				toolDescription = radiate.getToolByType(Zoom);
+				
+				zoomTool = toolDescription.instance as Zoom;
+				
+				
+				// temp to get reference
+				//if (!tool) tool = new Zoom();
+				
+				updateTool(zoomTool);
+			}
+			
+			/**
+			 * Update UI components to tool value
+			 * */
+			public function updateTool(tool:ITool):void {
+				var zoomValue:Number;
+				zoomValue = zoomTool.getScale();
+					
+				updateZoomInComboBox(zoomValue);
+			}
+			
+			/**
+			 * Zoom combo box change handler. Update zoom level. 
+			 * */
+			protected function zoomComboBox_changeHandler(event:IndexChangeEvent):void {
+				
+				zoomTool.setScale(parseInt(zoomComboBox.selectedItem)/100);
+			}
+			
+			/**
+			 * 
+			 * */
+			protected function actualSize_clickHandler(event:MouseEvent):void {
+				
+				if (zoomTool) {
+					zoomTool.restoreDefaultScale();
+					zoomComboBox.selectedItem = "100%";
+				}
+			}
+			
+			/**
+			 * Scale changed
+			 * */
+			protected function scaleChangedHandler(event:RadiateEvent):void {
+				var zoomValue:Number;
+				var zoomString:String;
+				
+				zoomValue = zoomTool.getScale();
+				
+				updateZoomInComboBox(zoomValue);
+			}
+			
+			/**
+			 * Format zoom value nicely.
+			 * */
+			public function updateZoomInComboBox(zoomValue:Number):void {
+				var zoomString:String;
+				
+				if (!isNaN(zoomValue)) {
+					
+					if (String(zoomValue*100).indexOf(".")!=-1) {
+						zoomString = Number(zoomValue*100).toFixed(1) + "%";
+					}
+					else {
+						zoomString = Number(zoomValue*100) + "%";
+					}
+					
+					if (zoomValue==1) {
+						zoomComboBox.selectedItem = "100%";
+					}
+					else {
+						zoomComboBox.selectedItem = zoomString;
+					}
+				}
+			}
+			
+			/**
+			 * Document changed
+			 * */
+			protected function documentChangeHandler(event:RadiateEvent):void {
+				// since we use this independently of the tool being selected we need to make sure
+				// the target application is set
+				// we'll move this later
+				var zoomValue:Number = zoomTool.getScale();
+				
+				updateZoomInComboBox(zoomValue);
+			}
+			
+			/**
+			 * Restore to 100%
+			 * */
+			protected function zoomComboBox_doubleClickHandler(event:MouseEvent):void {
+				
+				if (zoomTool) {
+					zoomTool.restoreDefaultScale();
+					zoomComboBox.selectedItem = "100%";
+				}
+			}
+			
+		]]>
+	</fx:Script>
+
+	<s:layout>
+		<s:HorizontalLayout paddingLeft="4" />
+	</s:layout>
+	
+	<!--<s:CheckBox label="Scrub Zoom" />-->
+	<c:ImageButton id="actualSizeButton" 
+			   visible="{showActualSize}"
+			   includeInLayout="{showActualSize}"
+			   source="{Radii8LibraryAssets.actualSize}" 
+			   toolTip="Actual"
+			   click="actualSize_clickHandler(event)"
+			   height="100%"
+			   />
+	
+	<!--<s:Button id="fitSize" label="Fit Size"
+			  visible="{showActualSize}"
+			  includeInLayout="{showActualSize}"
+			  click="actualSize_clickHandler(event)"/>-->
+	
+	<s:ComboBox id="zoomComboBox" 
+				width="80" 
+				height="100%"
+				focusAlpha="0" 
+				selectedIndex="8"
+				change="zoomComboBox_changeHandler(event)"
+				openOnInput="true" arrowKeysWrapFocus="true"
+				doubleClickEnabled="true"
+				doubleClick="zoomComboBox_doubleClickHandler(event)"
+				>
+        <s:layout>
+            <s:VerticalLayout gap="0"
+                    horizontalAlign="contentJustify"
+                    requestedRowCount="10" />
+        </s:layout>
+		<s:dataProvider>
+			<s:ArrayList>
+				<fx:String>600%</fx:String>
+				<fx:String>500%</fx:String>
+				<fx:String>400%</fx:String>
+				<fx:String>300%</fx:String>
+				<fx:String>200%</fx:String>
+				<fx:String>175%</fx:String>
+				<fx:String>150%</fx:String>
+				<fx:String>125%</fx:String>
+				<fx:String>100%</fx:String>
+				<fx:String>75%</fx:String>
+				<fx:String>50%</fx:String>
+				<fx:String>25%</fx:String>
+				<fx:String>10%</fx:String>
+			</s:ArrayList>
+		</s:dataProvider>
+	</s:ComboBox>
+
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/editors/PropertyGridEditor.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/editors/PropertyGridEditor.mxml b/Radii8Library/src/com/flexcapacitor/views/editors/PropertyGridEditor.mxml
new file mode 100644
index 0000000..fa0cd34
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/editors/PropertyGridEditor.mxml
@@ -0,0 +1,41 @@
+<?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:DefaultGridItemEditor xmlns:fx="http://ns.adobe.com/mxml/2009" 
+				  xmlns:s="library://ns.adobe.com/flex/spark" 
+				  xmlns:mx="library://ns.adobe.com/flex/mx">
+	
+	<fx:Script>
+		<![CDATA[
+			
+			override public function set value(newValue:Object):void {
+				textArea.text = newValue as String;
+			}
+			
+			override public function get value():Object {
+				return textArea.text;
+			}
+			
+			override public function setFocus():void {
+				textArea.setFocus();
+			}
+		]]>
+	</fx:Script>
+	
+</s:DefaultGridItemEditor>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/inspectors/BasicBackgroundStyles.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/inspectors/BasicBackgroundStyles.mxml b/Radii8Library/src/com/flexcapacitor/views/inspectors/BasicBackgroundStyles.mxml
new file mode 100644
index 0000000..8b8601a
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/inspectors/BasicBackgroundStyles.mxml
@@ -0,0 +1,105 @@
+<?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:renderers="com.flexcapacitor.views.renderers.*"
+		 
+		 implements="com.flexcapacitor.views.IInspector" 
+		 styleName="inspectablePanel">
+	
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.model.StyleMetaData;
+			import com.flexcapacitor.utils.ClassUtils;
+			
+			public var radiate:Radiate;
+			public var target:Object;
+			public var data:Object;
+			
+			public function activate():void {
+				radiate = Radiate.getInstance();
+				
+				radiate.addEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange, false, 0, true);
+				radiate.addEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler, false, 0, true);
+				
+				if (radiate.target) {
+					target = radiate.target;
+				}
+				
+				update();
+			}
+			
+			public function deactivate():void {
+				radiate.removeEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange);
+				radiate.removeEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler);
+			}
+			
+			protected function handleTargetChange(event:RadiateEvent):void {
+				if (target!=event.selectedItem) {
+					target = event.selectedItem;
+					update();
+				}
+			}
+			
+			public function update():void {
+				var backgroundColor:StyleMetaData = ClassUtils.getMetaDataOfStyle(target, "backgroundColor");
+				var backgroundAlpha:StyleMetaData = ClassUtils.getMetaDataOfStyle(target, "backgroundAlpha");
+				
+				if (!backgroundColor) {
+					backgroundColor = ClassUtils.getMetaDataOfStyle(target, "contentBackgroundColor");
+				}
+				
+				if (!backgroundAlpha) {
+					backgroundAlpha = ClassUtils.getMetaDataOfStyle(target, "contentBackgroundAlpha");
+				}
+				
+				if (backgroundColor) {
+					backgroundColorRenderer.data = backgroundColor;
+				}
+				
+				if (backgroundAlpha) {
+					backgroundAlphaRenderer.data = backgroundAlpha;
+				}
+			}
+			
+			protected function propertyChangeHandler(event:RadiateEvent):void {
+				callLater(update);
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<s:layout>
+		<s:VerticalLayout />
+	</s:layout>
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Background Color" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:ColorPickerRenderer id="backgroundColorRenderer" height="24" includeCopyIcon="false"/>
+	</s:HGroup>
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Background Alpha" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:NumberRenderer id="backgroundAlphaRenderer" height="24" />
+	</s:HGroup>
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/inspectors/BorderStyles.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/inspectors/BorderStyles.mxml b/Radii8Library/src/com/flexcapacitor/views/inspectors/BorderStyles.mxml
new file mode 100644
index 0000000..a2f55f7
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/inspectors/BorderStyles.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:renderers="com.flexcapacitor.views.renderers.*"
+		 xmlns:local="*"
+		 
+		 implements="com.flexcapacitor.views.IInspector" 
+		 styleName="inspectablePanel"
+		 >
+	<!--
+	
+		ArgumentError: Error #2004: One of the parameters is invalid.
+		be sure to add the style styleName="inspectablePanel"
+	
+	-->
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.model.StyleMetaData;
+			import com.flexcapacitor.utils.ClassUtils;
+
+			public var radiate:Radiate;
+			public var target:Object;
+			public var data:Object;
+			
+			public function activate():void {
+				radiate = Radiate.getInstance();
+				
+				radiate.addEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange, false, 0, true);
+				radiate.addEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler, false, 0, true);
+				
+				if (radiate.target) {
+					target = radiate.target;
+				}
+				
+				update();
+			}
+			
+			public function deactivate():void {
+				radiate.removeEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange);
+				radiate.removeEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler);
+			}
+			
+			protected function handleTargetChange(event:RadiateEvent):void {
+				if (target!=event.selectedItem) {
+					target = event.selectedItem;
+					update();
+				}
+			}
+			
+			public function update():void {
+				var cornerRadius:StyleMetaData = ClassUtils.getMetaDataOfStyle(target, "cornerRadius");
+				borderWeightRenderer.data = ClassUtils.getMetaDataOfStyle(target, "borderWeight");
+				borderColorRenderer.data = ClassUtils.getMetaDataOfStyle(target, "borderColor");
+				borderAlphaRenderer.data = ClassUtils.getMetaDataOfStyle(target, "borderAlpha");
+				
+					
+				if (cornerRadius) {
+					cornerRadiusRenderer.data = cornerRadius;
+				}
+			}
+			
+			protected function propertyChangeHandler(event:RadiateEvent):void {
+				callLater(update);
+			}
+		]]>
+	</fx:Script>
+	
+	<fx:Declarations>
+
+	</fx:Declarations>
+
+	<s:layout>
+		<s:VerticalLayout />
+	</s:layout>
+	
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Corner Radius" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:NumberRenderer id="cornerRadiusRenderer" height="24" />
+	</s:HGroup>
+	
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Border Weight" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:NumberRenderer id="borderWeightRenderer" height="24" />
+	</s:HGroup>
+	
+	
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Border Alpha" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:NumberRenderer id="borderAlphaRenderer" height="24" />
+	</s:HGroup>
+	
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Border Color" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:ColorPickerRenderer id="borderColorRenderer" height="24" includeCopyIcon="false"/>
+	</s:HGroup>
+	
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/inspectors/FontStyles.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/inspectors/FontStyles.mxml b/Radii8Library/src/com/flexcapacitor/views/inspectors/FontStyles.mxml
new file mode 100644
index 0000000..bae7a4d
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/inspectors/FontStyles.mxml
@@ -0,0 +1,311 @@
+<?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" 
+		 xmlns:renderers="com.flexcapacitor.views.renderers.*"
+		 styleName="inspectablePanel">
+	
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.model.StyleMetaData;
+			import com.flexcapacitor.utils.ClassUtils;
+			
+			
+			import mx.core.FlexGlobals;
+			import mx.core.UIComponent;
+			import mx.managers.ISystemManager;
+			
+			public var radiate:Radiate;
+			public var target:Object;
+			public var data:Object;
+			
+			public var fonts:Array;
+			
+			public function activate():void {
+				radiate = Radiate.getInstance();
+				
+				radiate.addEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange, false, 0, true);
+				radiate.addEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler, false, 0, true);
+				
+				if (radiate.target) {
+					target = radiate.target;
+				}
+				
+				update();
+			}
+			
+			public function deactivate():void {
+				radiate.removeEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange);
+				radiate.removeEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler);
+			}
+			
+			protected function handleTargetChange(event:RadiateEvent):void {
+				if (target!=event.selectedItem) {
+					target = event.selectedItem;
+					update();
+				}
+			}
+			
+			protected function propertyChangeHandler(event:RadiateEvent):void {
+				callLater(update);
+			}
+			
+			public function update():void {
+				var fontFamilyStyle:StyleMetaData = ClassUtils.getMetaDataOfStyle(target, "fontFamily"); // font
+				var fontSizeStyle:StyleMetaData  = ClassUtils.getMetaDataOfStyle(target, "fontSize"); // size
+				var fontWeightStyle:StyleMetaData  = ClassUtils.getMetaDataOfStyle(target, "fontWeight"); // bold
+				var fontStyleStyle:StyleMetaData  = ClassUtils.getMetaDataOfStyle(target, "fontStyle"); // italic
+				var textDecorationStyle:StyleMetaData  = ClassUtils.getMetaDataOfStyle(target, "textDecoration"); // underline 
+				var colorStyle:StyleMetaData  = ClassUtils.getMetaDataOfStyle(target, "color"); // color
+				
+				if (fonts==null) {
+					fonts = getFontInformationDetails(target);
+				}
+				
+				fontFamilyStyle.enumeration = fonts;
+				//fontsRenderer.data = data;
+				fontsRenderer.data = fontFamilyStyle;
+				fontSizeRenderer.data = fontSizeStyle;
+				fontWeightRenderer.data = fontWeightStyle;
+				fontStyleRenderer.data = fontStyleStyle;
+				colorRenderer.data = colorStyle;
+			}
+				
+				
+			
+			/**
+			 * Gets details about the embedded fonts
+			 * */
+			public function getFontInformationDetails(target:Object, showDeviceFontInformation:Boolean = true):Array {
+				var component:UIComponent = target as UIComponent;
+				var systemManager:ISystemManager = component ? component.systemManager : null;
+				var dictionary:Dictionary = new Dictionary(true);
+				var fontList:Array = Font.enumerateFonts(showDeviceFontInformation);
+				var length:int = fontList.length;
+				var output:String = "";
+				var fontObject:Object;
+				var paddedName:String;
+				var name:String;
+				var font:Font;
+				
+				
+				if (systemManager==null && FlexGlobals.topLevelApplication.systemManager) {
+					output += systemManager==null ? "Warning: Target system manager is null. Using FlexGlobals top level application system manager\n" : "";
+					systemManager = FlexGlobals.topLevelApplication.systemManager;
+				}
+				else if (systemManager==null) {
+					output += "Could not find system manager";
+					return [];
+				}
+				
+				for (var i:int;i<length;i++)
+				{
+					font = Font(fontList[i]);
+					name = font.fontName;
+					if (dictionary[name]==1) continue;
+					dictionary[name] = 1;
+					
+					paddedName = name; //padString(name, minimumStyleNamePadding);
+					fontObject = getFontFamilyEmbedded(name, systemManager);
+					
+					//output += prespace + paddedName;
+					
+					if (fontObject.embeddedCFF.length>0) {
+						output += "Embedded CFF: " + fontObject.embeddedCFF.join(", ");
+					}
+					
+					if (fontObject.embedded.length>0) {
+						if (fontObject.embeddedCFF.length>0) {
+							output+= "; ";
+							output+= "Embedded    : ";
+						}
+						else {
+							output+= "Embedded: ";
+						}
+						output += fontObject.embedded.join(", ");
+					}
+					
+					output += "\n";
+					
+				}
+				
+				
+				return fontList;
+			}
+				
+				
+			
+			/**
+			 * Returns an object that contains an array of embedding information for the font with the given name.
+			 * Includes embedded and embeddedCFF information. If null then the font and that style of the font
+			 * are not embedded.<br/><br/>
+			 * Example, <br/>
+			 * <pre>
+			 * var object:Object = getFontFamilyEmbedded("MyFont", myButton.systemManager);
+			 * trace(object); // {embedded:[regular, italic], embeddedCFF:[regular, bold, italic, boldItalic]}
+			 * </pre>
+			 **/
+			public function getFontFamilyEmbedded(name:String, systemManager:ISystemManager):Object {
+				var textFormat:TextFormat = new TextFormat();
+				var fontDescription:String = "";
+				var embeddedCFF:Array = [];
+				var embedded:Array = [];
+				var boldItalic:Boolean;
+				var regular:Boolean;
+				var italic:Boolean;
+				var bold:Boolean;
+				
+				textFormat.font = name;
+				
+				// check for regular
+				regular = systemManager.isFontFaceEmbedded(textFormat);
+				if (regular) {
+					fontDescription = "regular";
+					
+					if (isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embeddedCFF.push(fontDescription);
+					}
+					if (!isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embedded.push(fontDescription);
+					}
+				}
+				
+				// check for bold
+				textFormat.bold = true;
+				bold = systemManager.isFontFaceEmbedded(textFormat);
+				if (bold) {
+					fontDescription = "bold";
+					if (isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embeddedCFF.push(fontDescription);
+					}
+					if (!isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embedded.push(fontDescription);
+					}
+				}
+				
+				// check for bold and italic
+				textFormat.italic = true;
+				boldItalic = systemManager.isFontFaceEmbedded(textFormat);
+				if (boldItalic) {
+					fontDescription = "boldItalic";
+					if (isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embeddedCFF.push(fontDescription);
+					}
+					if (!isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embedded.push(fontDescription);
+					}
+				}
+				
+				// check for italic
+				textFormat.bold = false;
+				italic = systemManager.isFontFaceEmbedded(textFormat);
+				if (italic) {
+					fontDescription = "italic";
+					if (isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embeddedCFF.push(fontDescription);
+					}
+					if (!isFontFaceEmbeddedCFF(textFormat, systemManager)) {
+						embedded.push(fontDescription);
+					}
+				}
+				
+				// there's probably alot of optimization that could go into this call
+				// but for now we are using this
+				
+				return {embedded:embedded, embeddedCFF:embeddedCFF};
+			}
+			
+			
+			
+			/**
+			 * Checks if font is embedded and is also embeddedCFF.
+			 * Does not run all methods system manager function runs.
+			 */
+			public function isFontFaceEmbeddedCFF(textFormat:TextFormat, systemManager:ISystemManager):Boolean
+			{
+				var fontName:String = textFormat.font;
+				var bold:Boolean = textFormat.bold;
+				var italic:Boolean = textFormat.italic;
+				
+				var fontList:Array = Font.enumerateFonts();
+				
+				var n:int = fontList.length;
+				for (var i:int = 0; i < n; i++)
+				{
+					var font:Font = Font(fontList[i]);
+					if (font.fontName == fontName)
+					{
+						var style:String = "regular";
+						if (bold && italic)
+							style = "boldItalic";
+						else if (bold)
+							style = "bold";
+						else if (italic)
+							style = "italic";
+						
+						if (font.fontStyle == style ) {
+							if (font.fontType=="embeddedCFF") {
+								return true;
+							}
+							else {
+								return false;
+							}
+						}
+					}
+				}
+				
+				return false;
+				
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<s:layout>
+		<s:VerticalLayout />
+	</s:layout>
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Font Family" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:ComboBoxRenderer id="fontsRenderer" height="24" labelField="fontName"
+									valueIsField="true" fieldIsValue="true"
+									minWidth="180"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Font Weight" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:DropDownListRenderer id="fontWeightRenderer" height="24" />
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Font Size" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:NumberRenderer id="fontSizeRenderer" height="24" showClearButton="true"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Font Style" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:DropDownListRenderer id="fontStyleRenderer" height="24"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Color" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:ColorPickerRenderer id="colorRenderer" height="24" includeCopyIcon="false"/>
+	</s:HGroup>
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/inspectors/Identity.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/inspectors/Identity.mxml b/Radii8Library/src/com/flexcapacitor/views/inspectors/Identity.mxml
new file mode 100644
index 0000000..098a5b4
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/inspectors/Identity.mxml
@@ -0,0 +1,79 @@
+<?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:renderers="com.flexcapacitor.views.renderers.*"
+		 implements="com.flexcapacitor.views.IInspector" 
+		 
+		 styleName="inspectablePanel">
+	
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.utils.ClassUtils;
+			
+			public var radiate:Radiate;
+			public var target:Object;
+			public var data:Object;
+			
+			public function activate():void {
+				radiate = Radiate.getInstance();
+				
+				radiate.addEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange, false, 0, true);
+				radiate.addEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler, false, 0, true);
+				
+				if (radiate.target) {
+					target = radiate.target;
+				}
+				
+				update();
+			}
+			
+			public function deactivate():void {
+				radiate.removeEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange);
+				radiate.removeEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler);
+			}
+			
+			protected function handleTargetChange(event:RadiateEvent):void {
+				if (target!=event.selectedItem) {
+					target = event.selectedItem;
+					update();
+				}
+			}
+			
+			public function update():void {
+				data = ClassUtils.getMetaDataOfProperty(target, "id");
+				textRenderer.data = data;
+			}
+			
+			protected function propertyChangeHandler(event:RadiateEvent):void {
+				callLater(update);
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Identity" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:TextRenderer id="textRenderer" height="24"/>
+	</s:HGroup>
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/inspectors/Image.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/inspectors/Image.mxml b/Radii8Library/src/com/flexcapacitor/views/inspectors/Image.mxml
new file mode 100644
index 0000000..0e50baf
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/inspectors/Image.mxml
@@ -0,0 +1,117 @@
+<?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" 
+		 xmlns:renderers="com.flexcapacitor.views.renderers.*"
+		 styleName="inspectablePanel"
+		 width="100%">
+	
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.utils.ClassUtils;
+			
+			public var radiate:Radiate;
+			public var target:Object;
+			public var data:Object;
+			
+			
+			public function activate():void {
+				radiate = Radiate.getInstance();
+				
+				radiate.addEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange, false, 0, true);
+				radiate.addEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler, false, 0, true);
+				
+				if (radiate.target) {
+					target = radiate.target;
+				}
+				
+				update();
+			}
+			
+			public function deactivate():void {
+				radiate.removeEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange);
+			}
+			
+			protected function handleTargetChange(event:RadiateEvent):void {
+				if (target!=event.selectedItem) {
+					target = event.selectedItem;
+					update();
+				}
+			}
+			
+			public function update():void {
+				//var data:Object = ClassUtils.getMetaDataOfProperty(target, "source");
+				sourceRenderer.data = ClassUtils.getMetaDataOfProperty(target, "source");
+				alphaRenderer.data = ClassUtils.getMetaDataOfProperty(target, "alpha");
+				smoothRenderer.data = ClassUtils.getMetaDataOfProperty(target, "smooth");
+				scaleModeRenderer.data = ClassUtils.getMetaDataOfProperty(target, "scaleMode");
+				fillModeRenderer.data = ClassUtils.getMetaDataOfProperty(target, "fillMode");
+				contentLoaderGroupRenderer.data = ClassUtils.getMetaDataOfProperty(target, "contentLoaderGrouping");
+				clearOnLoadRenderer.data = ClassUtils.getMetaDataOfProperty(target, "clearOnLoad");
+				
+			}
+			
+			protected function propertyChangeHandler(event:RadiateEvent):void {
+				callLater(update);
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<s:layout>
+		<s:VerticalLayout />
+	</s:layout>
+	<!--<s:Image scaleMode="" alpha="" smooth="" clearOnLoad="" contentLoader="" fillMode=""
+			 enableLoadingState="" backgroundAlpha="" backgroundColor=""
+			 smoothingQuality="" skinClass="" />-->
+			 
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Source" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:TextRenderer id="sourceRenderer" height="24" width="100%"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Alpha" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:NumberRenderer id="alphaRenderer" height="24" />
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Smooth" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:BooleanRenderer id="smoothRenderer" height="24" showClearButton="true"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Scale Mode" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:ComboBoxRenderer id="scaleModeRenderer" height="24"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Fill Mode" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:ComboBoxRenderer id="fillModeRenderer" height="24"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Content Grouping" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:TextRenderer id="contentLoaderGroupRenderer" height="24"/>
+	</s:HGroup>
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Clear on Load" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:BooleanRenderer id="clearOnLoadRenderer" height="24"/>
+	</s:HGroup>
+</s:Group>

http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/views/inspectors/TextInspector.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/views/inspectors/TextInspector.mxml b/Radii8Library/src/com/flexcapacitor/views/inspectors/TextInspector.mxml
new file mode 100644
index 0000000..3bfdcd1
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/views/inspectors/TextInspector.mxml
@@ -0,0 +1,86 @@
+<?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" 
+		 xmlns:renderers="com.flexcapacitor.views.renderers.*"
+		 styleName="inspectablePanel">
+	
+	<fx:Script>
+		<![CDATA[
+			import com.flexcapacitor.controller.Radiate;
+			import com.flexcapacitor.events.RadiateEvent;
+			import com.flexcapacitor.model.AccessorMetaData;
+			import com.flexcapacitor.utils.ClassUtils;
+			
+			public var radiate:Radiate;
+			public var target:Object;
+			public var data:Object;
+			
+			public var fonts:Array;
+			
+			public function activate():void {
+				radiate = Radiate.getInstance();
+				
+				radiate.addEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange, false, 0, true);
+				radiate.addEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler, false, 0, true);
+				
+				if (radiate.target) {
+					target = radiate.target;
+				}
+				
+				update();
+			}
+			
+			public function deactivate():void {
+				radiate.removeEventListener(RadiateEvent.TARGET_CHANGE, handleTargetChange);
+				radiate.removeEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChangeHandler);
+			}
+			
+			protected function handleTargetChange(event:RadiateEvent):void {
+				if (target!=event.selectedItem) {
+					target = event.selectedItem;
+					update();
+				}
+			}
+			
+			public function update():void {
+				var textAccessor:AccessorMetaData = ClassUtils.getMetaDataOfProperty(target, "text");
+
+				textRenderer.data = textAccessor;
+			}
+			
+			protected function propertyChangeHandler(event:RadiateEvent):void {
+				callLater(update);
+			}
+			
+		]]>
+	</fx:Script>
+	
+	<s:layout>
+		<s:VerticalLayout />
+	</s:layout>
+	
+	<s:HGroup width="100%" verticalAlign="baseline" gap="{getStyle('gap')}">
+		<s:Label text="Text" styleName="inspectablePanelLabel" width="{getStyle('labelWidth')}"/>
+		<renderers:TextRenderer id="textRenderer" height="24" />
+	</s:HGroup>
+</s:Group>