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:57 UTC
[24/30] Radii8 code base as accepted by IP Clearance
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Designer/update_build_version.xml
----------------------------------------------------------------------
diff --git a/Radii8Designer/update_build_version.xml b/Radii8Designer/update_build_version.xml
new file mode 100644
index 0000000..54de7c6
--- /dev/null
+++ b/Radii8Designer/update_build_version.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!--
+
+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.
+
+-->
+<project name="Update Verson" default="main" basedir=".">
+
+ <!--<target name="build" >
+ <mkdir dir="build"/>
+ <javac srcdir="src" destdir="build"/>
+ </target>
+
+ <target name="declare" depends="build">
+ <taskdef name="mytask"
+ classname="com.mydomain.MyVeryOwnTask"
+ classpath="build"/>
+ </target>
+
+ <target name="main" depends="declare">
+ <mytask message="Hello World! MyVeryOwnTask works!"/>
+ </target>-->
+
+ <!--- Updating build Date and Version -->
+ <target name="main">
+
+ <propertyset id="tdate"></propertyset>
+ <propertyset id="ttime"></propertyset>
+
+ <tstamp>
+ <format property="tdate" pattern="yyyy-MM-dd"/>
+ </tstamp>
+
+ <tstamp>
+ <format property="ttime" pattern="hh:mm aa"/>
+ </tstamp>
+
+ <buildnumber file="build.number"/>
+
+ <echo>Updating version to current date: ${tdate} and time: ${ttime}</echo>
+
+ <replaceregexp byline="true">
+ <regexp pattern='public static const BUILD_DATE:String = "([0-9-]+)"'/>
+ <substitution expression='public static const BUILD_DATE:String = "${tdate}"'/>
+ <fileset dir="src">
+ <include name="build.as"/>
+ </fileset>
+ </replaceregexp>
+
+ <replaceregexp byline="true">
+ <regexp pattern='public static const BUILD_TIME:String = "([0-9:PMA ]+)"'/>
+ <substitution expression='public static const BUILD_TIME:String = "${ttime}"'/>
+ <fileset dir="src">
+ <include name="build.as"/>
+ </fileset>
+ </replaceregexp>
+
+ <replaceregexp byline="true">
+ <regexp pattern='public static const BUILD_NUMBER:String = "([0-9\.]+)"'/>
+ <substitution expression='public static const BUILD_NUMBER:String = "${build.number}"'/>
+ <fileset dir="src">
+ <include name="build.as"/>
+ </fileset>
+ </replaceregexp>
+ </target>
+</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/.actionScriptProperties
----------------------------------------------------------------------
diff --git a/Radii8Library/.actionScriptProperties b/Radii8Library/.actionScriptProperties
new file mode 100644
index 0000000..bea51c7
--- /dev/null
+++ b/Radii8Library/.actionScriptProperties
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+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.
+
+-->
+<actionScriptProperties analytics="false" mainApplicationPath="Radii8Library.as" projectUUID="bffb08cf-9863-49e0-ab71-1e13d08f4ec0" version="11">
+ <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="false" flexSDK="Apache Flex 4.12.1 FP13.0 AIR13.0 en_US" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true">
+ <compilerSourcePath/>
+ <libraryPath defaultLinkType="1">
+ <libraryPathEntry kind="4" path="">
+ <excludedEntries>
+ <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flex.swc" useDefaultLinkType="false"/>
+ <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/core.swc" useDefaultLinkType="false"/>
+ </excludedEntries>
+ </libraryPathEntry>
+ <libraryPathEntry kind="3" linkType="1" path="/Radii8LibraryAssets/bin/Radii8LibraryAssets.swc" useDefaultLinkType="false"/>
+ <libraryPathEntry kind="3" linkType="1" path="/FCLibrary/bin/FCLibrary.swc" useDefaultLinkType="false"/>
+ <libraryPathEntry kind="3" linkType="1" path="/AS3CommonsReflect/bin/AS3CommonsReflect.swc" useDefaultLinkType="false"/>
+ <libraryPathEntry kind="3" linkType="1" path="/FlexIFrame/bin/FlexIFrame.swc" useDefaultLinkType="false"/>
+ <libraryPathEntry kind="3" linkType="1" path="/AS3SyntaxHighlighter/bin/AS3SyntaxHighlighter.swc" useDefaultLinkType="false"/>
+ </libraryPath>
+ <sourceAttachmentPath/>
+ </compiler>
+ <applications>
+ <application path="Radii8Library.as"/>
+ </applications>
+ <modules/>
+ <workers/>
+ <buildCSSFiles/>
+ <flashCatalyst validateFlashCatalystCompatibility="false"/>
+</actionScriptProperties>
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/.flexLibProperties
----------------------------------------------------------------------
diff --git a/Radii8Library/.flexLibProperties b/Radii8Library/.flexLibProperties
new file mode 100644
index 0000000..86843b3
--- /dev/null
+++ b/Radii8Library/.flexLibProperties
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+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.
+
+-->
+<flexLibProperties includeAllClasses="true" useMultiPlatformConfig="false" version="3">
+ <includeClasses>
+ <classEntry path="com.flexcapacitor.components.ColorChooser"/>
+ <classEntry path="com.flexcapacitor.components.IDocumentContainer"/>
+ <classEntry path="com.flexcapacitor.controller.RadiateReferences"/>
+ <classEntry path="com.flexcapacitor.events.HistoryEvent"/>
+ <classEntry path="com.flexcapacitor.model.Device"/>
+ <classEntry path="com.flexcapacitor.model.IProject"/>
+ <classEntry path="com.flexcapacitor.model.Project"/>
+ <classEntry path="com.flexcapacitor.model.ProjectDataDescriptor"/>
+ <classEntry path="com.flexcapacitor.model.Size"/>
+ <classEntry path="com.flexcapacitor.model.StyleMetaData"/>
+ <classEntry path="com.flexcapacitor.skins.DeviceImage"/>
+ <classEntry path="com.flexcapacitor.skins.DeviceSkin"/>
+ <classEntry path="com.flexcapacitor.tools.ITool"/>
+ <classEntry path="com.flexcapacitor.tools.Selection"/>
+ <classEntry path="com.flexcapacitor.utils.MXMLDocumentImporter"/>
+ <classEntry path="com.flexcapacitor.utils.SyntaxHighlighter"/>
+ <classEntry path="com.flexcapacitor.utils.supportClasses.DragData"/>
+ <classEntry path="com.flexcapacitor.utils.supportClasses.ISelectionGroup"/>
+ <classEntry path="com.flexcapacitor.views.renderers.EditableDocumentRenderer"/>
+ <classEntry path="com.flexcapacitor.views.renderers.HistoryItemRenderer"/>
+ <classEntry path="com.flexcapacitor.views.supportClasses.Styles"/>
+ <classEntry path="com.flexcapacitor.views.windows.PublishWindow"/>
+ <classEntry path="com.flexcapacitor.utils.MXMLDocumentExporter"/>
+ <classEntry path="com.flexcapacitor.model.Settings"/>
+ <classEntry path="com.flexcapacitor.model.ISettings"/>
+ <classEntry path="com.flexcapacitor.managers.PersistantDataManager"/>
+ <classEntry path="com.flexcapacitor.model.ProjectMetaData"/>
+ <classEntry path="com.flexcapacitor.model.DocumentMetaData"/>
+ <classEntry path="com.flexcapacitor.model.SavedData"/>
+ <classEntry path="com.flexcapacitor.model.ISavedData"/>
+ <classEntry path="com.flexcapacitor.model.DocumentData"/>
+ <classEntry path="com.flexcapacitor.model.ProjectData"/>
+ <classEntry path="com.flexcapacitor.model.IProjectData"/>
+ <classEntry path="com.flexcapacitor.model.IDocumentData"/>
+ <classEntry path="com.flexcapacitor.model.IProjectMetaData"/>
+ <classEntry path="com.flexcapacitor.model.IDocumentMetaData"/>
+ <classEntry path="com.flexcapacitor.views.renderers.LayersRenderer"/>
+ <classEntry path="com.flexcapacitor.model.ISavable"/>
+ <classEntry path="com.flexcapacitor.model.ISavableService"/>
+ <classEntry path="com.flexcapacitor.model.SaveResultsEvent"/>
+ <classEntry path="com.flexcapacitor.controller.RadiateTest"/>
+ <classEntry path="com.flexcapacitor.model.ImageData"/>
+ <classEntry path="com.flexcapacitor.model.AttachmentData"/>
+ <classEntry path="com.flexcapacitor.utils.DocumentExporter"/>
+ <classEntry path="com.flexcapacitor.services.WPAttachmentService"/>
+ <classEntry path="com.flexcapacitor.skins.MenuItemSkin"/>
+ <classEntry path="com.flexcapacitor.skins.MenuBarButtonSkin"/>
+ <classEntry path="com.flexcapacitor.skins.PopUpButtonSkin"/>
+ <classEntry path="com.flexcapacitor.model.MenuItem"/>
+ <classEntry path="com.flexcapacitor.views.renderers.ColorPickerRenderer"/>
+ <classEntry path="com.flexcapacitor.views.renderers.PropertiesGridRendererBase"/>
+ <classEntry path="com.flexcapacitor.views.windows.AnimatedPanelWindow"/>
+ <classEntry path="com.flexcapacitor.model.InspectableClass"/>
+ <classEntry path="com.flexcapacitor.model.InspectorData"/>
+ <classEntry path="com.flexcapacitor.views.IInspector"/>
+ <classEntry path="com.flexcapacitor.views.inspectors.Identity"/>
+ <classEntry path="com.flexcapacitor.views.Size"/>
+ <classEntry path="com.flexcapacitor.views.inspectors.FontStyles"/>
+ <classEntry path="com.flexcapacitor.utils.Base64"/>
+ </includeClasses>
+ <includeResources/>
+ <namespaceManifests/>
+</flexLibProperties>
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/.project
----------------------------------------------------------------------
diff --git a/Radii8Library/.project b/Radii8Library/.project
new file mode 100644
index 0000000..0cc7180
--- /dev/null
+++ b/Radii8Library/.project
@@ -0,0 +1,36 @@
+<?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.
+
+-->
+<projectDescription>
+ <name>Radii8Library</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>com.adobe.flexbuilder.project.flexbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.adobe.flexbuilder.project.flexlibnature</nature>
+ <nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
+ </natures>
+</projectDescription>
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/.settings/org.eclipse.core.resources.prefs
----------------------------------------------------------------------
diff --git a/Radii8Library/.settings/org.eclipse.core.resources.prefs b/Radii8Library/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..f906076
--- /dev/null
+++ b/Radii8Library/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Sat Jun 30 14:07:45 CDT 2012
+eclipse.preferences.version=1
+encoding/<project>=utf-8
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/BlackArrow.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/BlackArrow.png b/Radii8Library/src/assets/icons/tools/BlackArrow.png
new file mode 100644
index 0000000..ffe0615
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/BlackArrow.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/EyeDropper.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/EyeDropper.png b/Radii8Library/src/assets/icons/tools/EyeDropper.png
new file mode 100644
index 0000000..c211eea
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/EyeDropper.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/EyeDropperCursor.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/EyeDropperCursor.png b/Radii8Library/src/assets/icons/tools/EyeDropperCursor.png
new file mode 100644
index 0000000..2e62dd6
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/EyeDropperCursor.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/Selection.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/Selection.png b/Radii8Library/src/assets/icons/tools/Selection.png
new file mode 100644
index 0000000..c49677f
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/Selection.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/WhiteArrow.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/WhiteArrow.png b/Radii8Library/src/assets/icons/tools/WhiteArrow.png
new file mode 100644
index 0000000..e090a67
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/WhiteArrow.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/Zoom.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/Zoom.png b/Radii8Library/src/assets/icons/tools/Zoom.png
new file mode 100644
index 0000000..6cfcf92
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/Zoom.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/ZoomIn.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/ZoomIn.png b/Radii8Library/src/assets/icons/tools/ZoomIn.png
new file mode 100644
index 0000000..6cfcf92
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/ZoomIn.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/assets/icons/tools/ZoomOut.png
----------------------------------------------------------------------
diff --git a/Radii8Library/src/assets/icons/tools/ZoomOut.png b/Radii8Library/src/assets/icons/tools/ZoomOut.png
new file mode 100644
index 0000000..6cfcf92
Binary files /dev/null and b/Radii8Library/src/assets/icons/tools/ZoomOut.png differ
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/components/ColorChooser.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/components/ColorChooser.mxml b/Radii8Library/src/com/flexcapacitor/components/ColorChooser.mxml
new file mode 100644
index 0000000..9dfb205
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/components/ColorChooser.mxml
@@ -0,0 +1,220 @@
+<?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:controls="com.flexcapacitor.controls.*"
+ xmlns:handlers="com.flexcapacitor.handlers.*"
+ xmlns:clipboard="com.flexcapacitor.effects.clipboard.*"
+ xmlns:status="com.flexcapacitor.effects.status.*"
+
+ height="24"
+ >
+
+ <fx:Metadata>
+ [Event(name="change")]
+ </fx:Metadata>
+
+ <fx:Script>
+ <![CDATA[
+ import com.flexcapacitor.utils.DisplayObjectUtils;
+
+ import mx.core.IFlexModule;
+ import mx.events.ColorPickerEvent;
+
+ public static const HEXIDECIMAL_HASH_TYPE:String = "hexidecimalHash";
+ public static const HEXIDECIMAL_TYPE:String = "hexidecimal";
+ public static const STRING_UINT_TYPE:String = "stringUint";
+ public static const NUMBER_TYPE:String = "number";
+ public static const UINT_TYPE:String = "uint";
+ public static const INT_TYPE:String = "int";
+
+ /**
+ *
+ * */
+ public var target:Object = this;
+
+ private var _selectedColor:Object;
+ private var colorAsUint:uint;
+ public var originalColor:String;
+
+ /**
+ * Type of the original value.
+ * */
+ public var originalValueType:String;
+
+ /**
+ * Type of value to return
+ * */
+ [Inspectable(enumeration="hexidecimalHash,hexidecimal,stringUint,number,uint,int,original")]
+ public var returnType:String;
+
+ public function get selectedColor():Object {
+ var type:String = returnType ? returnType : originalValueType;
+
+ return DisplayObjectUtils.getColorAsType(colorAsUint, type);
+ }
+
+ public function get selectedColorAsHex():String {
+ return DisplayObjectUtils.getColorInHex(colorAsUint, false);
+ }
+
+ public function get selectedColorAsHexAndHash():String {
+ return DisplayObjectUtils.getColorInHex(colorAsUint, true);
+ }
+
+ public function get selectedColorAsInt():String {
+ return DisplayObjectUtils.getColorInHex(colorAsUint, true);
+ }
+
+ public function set selectedColor(value:Object):void {
+ if (_selectedColor===value) return;
+ _selectedColor = value;
+ var actualValue:uint;
+
+ if (value is String)
+ {
+ if (String(value).indexOf("#")==0) {
+ originalValueType = HEXIDECIMAL_HASH_TYPE;
+ }
+ else if (String(value).indexOf("0x")==0) {
+ originalValueType = HEXIDECIMAL_TYPE;
+ }
+ else {
+ //actualValue = int(value);
+ originalValueType = STRING_UINT_TYPE;
+ }
+
+ var moduleFactory:IFlexModuleFactory = null;
+ if (target is IFlexModule)
+ moduleFactory = target.moduleFactory;
+
+ actualValue = StyleManager.getStyleManager(moduleFactory).getColorName(value);
+
+ if (actualValue===StyleManager.NOT_A_COLOR) {
+ actualValue = StyleManager.getStyleManager(moduleFactory).getColorName(int(value));
+ }
+ }
+ else if (value is Number) {
+ originalValueType = NUMBER_TYPE;
+ actualValue = Number(value);
+ }
+ else if (value is uint) {
+ originalValueType = UINT_TYPE;
+ actualValue = uint(value);
+ }
+ else if (value is int) {
+ originalValueType = INT_TYPE;
+ actualValue = int(value);
+ }
+
+ colorAsUint = actualValue;
+ colorPicker.selectedColor = actualValue;
+ colorTextInput.text = DisplayObjectUtils.getColorInHex(actualValue, true);
+ originalColor = colorTextInput.text;
+ }
+
+
+ /**
+ * Update color text input
+ * */
+ protected function colorPicker_changeHandler(event:ColorPickerEvent):void {
+ selectedColor = event.color;
+
+ dispatchEvent(new Event(Event.CHANGE, false, true));
+ }
+
+ protected function colorTextInput_keyUpHandler(event:KeyboardEvent):void {
+ if (event.keyCode==Keyboard.ENTER) {
+ selectedColor = colorTextInput.text;
+ dispatchEvent(new Event(Event.CHANGE, false, true));
+ }
+ else if (event.keyCode==Keyboard.ESCAPE) {
+ colorTextInput.text = originalColor;
+ event.preventDefault();
+ }
+ }
+
+ protected function colorTextInput_focusOutHandler(event:FocusEvent):void {
+ if (colorTextInput.text==originalColor) return;
+ selectedColor = colorTextInput.text;
+
+ if (selectedColor!=originalColor) {
+ dispatchEvent(new Event(Event.CHANGE, false, true));
+ }
+ }
+
+ ]]>
+ </fx:Script>
+
+ <fx:Declarations>
+
+ <!-- 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:Boolean id="includeCopyIcon">true</fx:Boolean>
+ <fx:Boolean id="includeTextInput">true</fx:Boolean>
+ <fx:Boolean id="includeColorPicker">true</fx:Boolean>
+ </fx:Declarations>
+
+ <s:layout>
+ <s:HorizontalLayout paddingLeft="0" />
+ </s:layout>
+
+ <mx:ColorPicker id="colorPicker"
+ height="100%"
+ visible="{includeColorPicker}"
+ includeInLayout="{includeColorPicker}"
+ change="colorPicker_changeHandler(event)"
+ />
+
+ <s:TextInput id="colorTextInput"
+ widthInChars="6"
+ height="100%"
+ visible="{includeTextInput}"
+ includeInLayout="{includeTextInput}"
+ keyUp="colorTextInput_keyUpHandler(event)"
+ focusOut="colorTextInput_focusOutHandler(event)"
+ />
+
+
+ <controls:ImageButton id="copyIcon"
+ height="100%"
+ visible="{includeCopyIcon}"
+ includeInLayout="{includeCopyIcon}"
+ enabled="{includeCopyIcon && colorTextInput.text!=''}"
+ source="{Radii8LibraryAssets.copy}"
+ toolTip="Copy the color to the Clipboard"
+ />
+</s:Group>
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/components/DocumentContainer.mxml
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/components/DocumentContainer.mxml b/Radii8Library/src/com/flexcapacitor/components/DocumentContainer.mxml
new file mode 100644
index 0000000..43cb40b
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/components/DocumentContainer.mxml
@@ -0,0 +1,1038 @@
+<?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:components="com.flexcapacitor.components.*"
+ xmlns:c="com.flexcapacitor.controls.*"
+ xmlns:local="*"
+
+ width="400" height="300"
+ show="group1_showHandler(event)"
+ creationComplete="creationComplete()"
+ implements="com.flexcapacitor.components.IDocumentContainer"
+ >
+
+ <!--
+ WE SHOULD REFACTOR THIS
+
+ Sometimes the generated MXML document is blank. I think it's because if we open
+ multiple documents the application never gets completely loaded or rendered in it's tab and the
+ user closes the document and reopens it. I think it has to do with the activate event in Flex
+ So we need to wait before opening new documents until application complete on the current document.
+ We might need to add an event listener in the Document or Project class to make sure each application
+ completely loads before opening the next.
+ -->
+
+ <fx:Script>
+ <![CDATA[
+ import com.flexcapacitor.controller.Radiate;
+ import com.flexcapacitor.events.RadiateEvent;
+ import com.flexcapacitor.model.IDocument;
+ import com.flexcapacitor.utils.supportClasses.ComponentDescription;
+
+ import mx.core.IVisualElement;
+ import mx.core.IVisualElementContainer;
+ import mx.events.FlexEvent;
+ import mx.events.ResizeEvent;
+ import mx.managers.SystemManager;
+ import mx.utils.NameUtil;
+
+ import spark.components.Application;
+
+ import org.as3commons.lang.ArrayUtils;
+
+
+
+ /**
+ * STEP 1.
+ *
+ * When this is added to the display list then we
+ * load in a blank application.
+ *
+ * We do this so that at some point we can sandbox
+ * the application.
+ * We also do this so we can load in remote applications.
+ * */
+ private function creationComplete():void {
+ radiate = Radiate.getInstance();
+ toolLayer = toolLayerInstance;
+ canvasBorder = canvasBorderInstance;
+ canvasBackground = canvasBackgroundInstance;
+ canvasScroller = canvasScrollerInstance;
+ //radiate.setCanvas(canvasBorder, canvasBackground, canvasScroller);
+
+
+
+ systemManager.allowDomain("*");
+
+ var context:LoaderContext = new LoaderContext();
+
+ /* Specify the current application's security domain. */
+ context.securityDomain = SecurityDomain.currentDomain;
+
+ /* Specify a new ApplicationDomain, which loads the sub-app into a
+ peer ApplicationDomain. */
+ context.applicationDomain = new ApplicationDomain();
+
+ projectLoader.trustContent = trustContent;
+ projectLoader.loadForCompatibility = loadForCompatibility;
+ projectLoader.maintainAspectRatio = maintainAspectRatio;
+ projectLoader.scaleContent = scaleContent;
+
+ // if not on server context throws errors
+ if (Security.sandboxType == Security.REMOTE) {
+ //projectLoader.loaderContext = context;
+ projectLoader.trustContent = !trustContent;
+ }
+
+ projectLoader.source = url;//URL.text; // "http://yourdomain.com/SubApp3.swf";
+
+ //projectLoader.autoLoad = autoLoad;
+ //load();
+
+ //stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
+ }
+
+ /**
+ * STEP 2.
+ *
+ * SWF is Loaded now listen for Application Complete
+ * */
+ protected function project_completeHandler(event:Event):void {
+ //var loader:SWFLoader = event.currentTarget as SWFLoader;
+ /*
+ SecurityDomain 'http://www.radii8.com/demo2/RadiateExample.html?debug=true'
+ tried to access incompatible context 'http://www.flexcapacitor.com/apps/aboutyou/AboutYou.swf'
+ SecurityError: Error #2121: Security sandbox violation: Loader.content:
+ http://www.radii8.com/demo2/RadiateExample.swf/[[DYNAMIC]]/3 cannot access
+ http://www.flexcapacitor.com/apps/urlcodec/URLCodec.swf. This may be worked around by
+ calling Security.allowDomain.
+
+ */
+ projectLoader.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
+
+ var loaderClassName:String = NameUtil.getUnqualifiedClassName(projectLoader.content);
+
+
+ if (projectLoader.content is DisplayObject) {
+ //parentAllowsChild.selected = b.parentAllowsChild;
+ //childAllowsParent.selected = b.childAllowsParent;
+ targetSystemManager = projectLoader.content as SystemManager;
+
+ targetSystemManager.addEventListener(FlexEvent.APPLICATION_COMPLETE, applicationComplete);
+ //LoaderInfo(targetApplication.loaderInfo).uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
+ }
+
+ hideBusyIndicators();
+
+
+ //Radiate.log.info("SWF Loaded");
+ }
+
+ /**
+ * STEP 3.
+ *
+ * Blank application loaded. Import the document.
+ * */
+ protected function applicationComplete(event:Event):void {
+ var loader:Object = event.currentTarget;
+ var radiate:Radiate = Radiate.instance;
+ //parentAllowsChild.selected = b.parentAllowsChild;
+ //childAllowsParent.selected = b.childAllowsParent;
+
+
+ targetSystemManager = loader as SystemManager;
+ targetApplication = loader.application;
+
+
+ // 8.5 x 11 at 72dpi is 612x792
+ targetApplication.width = Radiate.DEFAULT_DOCUMENT_WIDTH;
+ targetApplication.height = Radiate.DEFAULT_DOCUMENT_HEIGHT;
+
+ updateBackgroundSize();
+
+ iDocument.instance = targetApplication;
+
+ //radiate.setDocument(iDocument);
+ //radiate.setTarget(targetApplication);
+
+ //codeAvailable = true;
+ //Radiate.log.info("Document container app complete");
+ if (iDocument.source) {
+ validateNow();
+ iDocument.parseSource();
+ iDocument.resetSaveStatus();
+ updateBackgroundSize();
+ //parseDocument(codeToLoad);
+ //codeAvailable = false;
+
+ // we should dispatch an event when parsing is complete
+ }
+
+
+ radiate.addEventListener(RadiateEvent.SCALE_CHANGE, scaleChange, false, 0, true);
+ //radiate.addEventListener(RadiateEvent.DOCUMENT_SIZE_CHANGE, scaleChange, false, 0, true);
+ radiate.addEventListener(RadiateEvent.PROPERTY_CHANGED, propertyChange, false, 0, true);
+
+ radiate.setDocument(iDocument);
+ radiate.setTarget(targetApplication);
+ //updateAppScrollPosition();
+
+ //setTimeout(updateAppScrollPosition, 10);
+ //setTimeout(updateAppScrollPosition, 100);
+ //setTimeout(updateAppScrollPosition, 500);
+
+ hideBusyIndicators();
+
+ applicationReady = true;
+
+ radiate.centerApplication(true);
+
+ //Radiate.log.info("Application Complete");
+
+ }
+
+ /**
+ * The document / application
+ * */
+ public var targetApplication:Object;
+
+ /*[Embed(source="assets/460/application.swf")]
+ public var embeddedApplication:Class*/
+
+ private var _url:String = "application.swf";
+
+ public var autoLoad:Boolean = true;
+
+ private var radiate:Radiate;
+
+ /**
+ * Set to false.
+ * */
+ private var loadForCompatibility:Boolean;
+
+ /**
+ * Maintains the aspect ratio
+ * */
+ private var maintainAspectRatio:Boolean = true;
+
+ /**
+ * Set to false to prevent application from scaling to fit (vs resizing)
+ * */
+ private var scaleContent:Boolean;
+
+ /**
+ * Set to false for loading local file? And true for loading remote swf.
+ * */
+ private var trustContent:Boolean;
+
+ /**
+ * System manager of the target application
+ * */
+ private var targetSystemManager:SystemManager;
+
+ /**
+ * Padding to add around the document if it is too large to
+ * fit in the available space.
+ * */
+ public var documentPadding:int = 25;
+
+ /**
+ * True when updating the document and background size
+ * */
+ public var inUpdateBackgroundSize:Boolean = true;
+
+ /**
+ * Application ready
+ * */
+ public var applicationReady:Boolean;
+
+ /**
+ *
+ * */
+ public var codeAvailable:Boolean;
+
+ /**
+ *
+ * */
+ public var codeToLoad:String;
+
+
+ private var _componentDescription:ComponentDescription;
+
+ /**
+ * Root component description
+ * */
+ public function get componentDescription():ComponentDescription {
+ return _componentDescription;
+ }
+
+ /**
+ * @private
+ */
+ [Bindable]
+ public function set componentDescription(value:ComponentDescription):void {
+ _componentDescription = value;
+ }
+
+ private var _documentDescription:IDocument;
+
+ public function get iDocument():IDocument {
+ return _documentDescription;
+ }
+
+ /**
+ * Reference to document description
+ * */
+ [Bindable]
+ public function set iDocument(value:IDocument):void {
+ if (_documentDescription == value) return;
+ _documentDescription = value;
+
+ //load();
+ }
+
+ private var _toolLayer:IVisualElementContainer;
+
+ public function get toolLayer():IVisualElementContainer {
+ return _toolLayer;
+ }
+
+ /**
+ * Reference to the tool layer
+ * */
+ [Bindable]
+ public function set toolLayer(value:IVisualElementContainer):void {
+ _toolLayer = value;
+ }
+
+ private var _canvasBorder:IVisualElementContainer;
+
+ public function get canvasBorder():IVisualElementContainer {
+ return _canvasBorder;
+ }
+
+ /**
+ * Canvas border
+ * */
+ [Bindable]
+ public function set canvasBorder(value:IVisualElementContainer):void {
+ _canvasBorder = value;
+ }
+
+ private var _canvasBackground:IVisualElementContainer;
+
+ /**
+ * Reference to the canvas background
+ * */
+ public function get canvasBackground():IVisualElementContainer {
+ return _canvasBackground;
+ }
+
+ public function set canvasBackground(value:IVisualElementContainer):void {
+ _canvasBackground = value;
+ }
+
+ private var _canvasScroller:Scroller;
+
+ public function get canvasScroller():Scroller {
+ return _canvasScroller;
+ }
+
+ /**
+ * Canvas scroller
+ * */
+ [Bindable]
+ public function set canvasScroller(value:Scroller):void {
+ _canvasScroller = value;
+ }
+
+ /**
+ *
+ * */
+ public function importDocument(code:String):Boolean {
+ load();
+ codeToLoad = code;
+ codeAvailable = true;
+ return true;
+ }
+
+ /**
+ *
+ * */
+ [Bindable]
+ public function get url():String {
+ return _url;
+ }
+
+ public function set url(value:String):void {
+ _url = value;
+ load();
+ }
+
+
+
+ /**
+ * Load blank Spark Application SWF
+ * */
+ public function load():void {
+
+ removeErrorMessages();
+
+ showBusyIndicators();
+
+ if (url) {
+ try {
+ //projectLoader.trustContent = trustContent;
+ projectLoader.loaderContext = null;
+ projectLoader.source = "";
+ projectLoader.source = url;
+ projectLoader.load();
+ }
+ catch (error:Error) {
+ Radiate.log.error(error.message);
+ hideBusyIndicators();
+ }
+ }
+ else {
+ hideBusyIndicators();
+ }
+ }
+
+ /**
+ * Load URL
+ * */
+ public function loadRemote(url:String, trustContent:Boolean = true, loadForCompatibility:Boolean = false):void {
+
+ systemManager.allowDomain("*");
+ showBusyIndicators();
+
+ if (url) {
+ try {
+ // if not on server context throws errors
+ //if (Security.sandboxType == Security.REMOTE) {
+ //projectLoader.loaderContext = context;
+ projectLoader.trustContent = trustContent;
+ //}
+
+ var context:LoaderContext = new LoaderContext();
+
+ /* Specify the current application's security domain. */
+ //context.securityDomain = SecurityDomain.currentDomain;
+ //projectLoader.loaderContext = context;
+ projectLoader.loadForCompatibility = loadForCompatibility;
+ projectLoader.source = "";
+ projectLoader.source = url;
+ projectLoader.load();
+ }
+ catch (error:Error) {
+ Radiate.log.error(error.message);
+ hideBusyIndicators();
+ }
+ }
+ else {
+ hideBusyIndicators();
+ }
+ }
+
+ protected function allowDomainHandler(event:MouseEvent):void {
+ systemManager.allowDomain("*");
+ }
+
+ private function uncaughtErrorHandler(event:UncaughtErrorEvent):void {
+ event.preventDefault();
+
+ //to capture the error message
+ var errorMessage:String = new String();
+
+ if (event.error is Error) {
+ errorMessage = Error( event.error ).message;
+ }
+ else if (event.error is ErrorEvent) {
+ errorMessage = ErrorEvent( event.error ).text;
+ }
+ else {
+ errorMessage = event.error.toString();
+ }
+
+ //Radiate.logTarget.logEvent(new LogEvent("Uncaught Error", LogEventLevel.ERROR));
+ Radiate.log.error(errorMessage);
+ //trace("Uncaught error", event);
+
+ hideBusyIndicators();
+ }
+
+ /**
+ *
+ * */
+ protected function project_ioErrorHandler(event:IOErrorEvent):void {
+ //trace("ioerror");
+ Radiate.log.error(event.text);
+ hideBusyIndicators();
+ }
+
+ /**
+ *
+ * */
+ protected function project_securityErrorHandler(event:SecurityErrorEvent):void
+ {
+ //trace("security error");
+ Radiate.log.error(event.text);
+ hideBusyIndicators();
+ }
+
+ /**
+ *
+ * */
+ protected function project_initHandler(event:Event):void
+ {
+ //trace("init");
+ }
+
+ /**
+ *
+ * */
+ protected function project_progressHandler(event:ProgressEvent):void
+ {
+ //trace("PROGRESS");
+ }
+
+ /**
+ *
+ * */
+ protected function project_unloadHandler(event:Event):void
+ {
+ //trace("unload");
+ Radiate.log.info("SWF unloaded");
+ hideBusyIndicators();
+ }
+
+ /**
+ *
+ * */
+ protected function project_openHandler(event:Event):void
+ {
+ //trace("open");
+ showBusyIndicators();
+ }
+
+ /**
+ *
+ * */
+ protected function project_httpStatusHandler(event:HTTPStatusEvent):void {
+ //trace("http status");
+ }
+
+ /**
+ * Show busy indicatos
+ * */
+ public function showBusyIndicators():void {
+ //fadeOutBusy.end();
+ //fadeInBusy.play();
+
+ if (!loadingLabel || !toolLayer || !canvasBorder) return;
+ loadingLabel.visible = true;
+ IVisualElement(toolLayer).visible = false;
+ canvasBorderInstance.visible = false;
+ }
+
+ /**
+ * Hide busy indicators
+ * */
+ public function hideBusyIndicators():void {
+
+ if (!loadingLabel || !toolLayer || !canvasBorder) return;
+ loadingLabel.visible = false;
+ toolLayerInstance.visible = true;
+ canvasBorderInstance.visible = true;
+ }
+
+ /**
+ * Make sure we are showing the correct document
+ * */
+ protected function group1_showHandler(event:FlexEvent):void {
+ if (radiate.selectedDocument!=iDocument) {
+ radiate.setDocument(radiate.selectedDocument, true);// maybe call update document here???
+ }
+
+ Radiate.log.info("Document SHOW event");
+ }
+
+ /**
+ * Reload blank app
+ * */
+ public function reload():void {
+ creationComplete();
+ }
+
+ /**
+ *
+ * */
+ private function removeErrorMessages():void {
+
+ if (projectLoader && projectLoader.loaderInfo) {
+ projectLoader.loaderInfo.uncaughtErrorEvents.removeEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
+ }
+
+ if (targetSystemManager) {
+ //parentAllowsChild.selected = b.parentAllowsChild;
+ //childAllowsParent.selected = b.childAllowsParent;
+
+ targetSystemManager.removeEventListener(FlexEvent.APPLICATION_COMPLETE, applicationComplete);
+ }
+ }
+
+
+ /**
+ *
+ * */
+ private function canvasBorder_resizeHandler(event:ResizeEvent):void {
+ if (targetApplication) {
+ updateBackgroundSize();
+ }
+ }
+
+ /**
+ * Update the size of the target application
+ * */
+ private function updateAppScrollPosition():void {
+
+ if (targetApplication is DisplayObject) {
+ radiate.centerApplication();
+ }
+ }
+
+ /**
+ * Handles the clipping, scaling and sizing of the target application.
+ * Could be moved to update display list???
+ * */
+ public function updateBackgroundSize():void {
+ //if (inUpdateBackgroundSize) return;
+ inUpdateBackgroundSize = true;
+
+ // size canvas background to be the minimum size of the scroller
+ // or the size of the target application + 50
+ var scaledDocumentWidth:int = targetApplication.width * targetApplication.scaleX;
+ var scaledDocumentHeight:int = targetApplication.height * targetApplication.scaleY;
+ /*var aspectRatio:String = scaledDocumentWidth/scaledDocumentHeight>1?"portrait":"landscape";
+ if (aspectRatio!=canvasBorder.skin.currentState) {
+ canvasBorder.skin.currentState = aspectRatio;
+ }*/
+
+ var scaledPaddedDocumentWidth:int = documentPadding + (targetApplication.width * targetApplication.scaleX);
+ var scaledPaddedDocumentHeight:int = documentPadding + (targetApplication.height * targetApplication.scaleY);
+
+ var scrollerWidth:int = canvasScroller.width;
+ var scrollerHeight:int = canvasScroller.height;
+
+ var scrollerPaddedWidth:int = canvasScroller.width + documentPadding;
+ var scrollerPaddedHeight:int = canvasScroller.height + documentPadding;
+
+ var visiblePaddedWidth:int = canvasScroller.width - documentPadding;
+ var visiblePaddedHeight:int = canvasScroller.height - documentPadding;
+
+ var minimumWidth:int;
+ var minimumHeight:int;
+
+ // if content width is more than available width plus padding then
+ // set minimum width to show scrollbars and add padding
+ if (scaledPaddedDocumentWidth >= visiblePaddedWidth+10) {
+ minimumWidth = Math.max(scrollerWidth, scaledPaddedDocumentWidth);
+ }
+ else {
+ minimumWidth = scrollerWidth;
+ }
+
+ // if content height is more than available height plus padding then
+ // set minimum height to show scrollbars and add padding
+ if (scaledPaddedDocumentHeight >=visiblePaddedHeight+10) {
+ minimumHeight = Math.max(scrollerPaddedHeight, scaledPaddedDocumentHeight);
+ }
+ else {
+ minimumHeight = scrollerHeight;
+ }
+
+ canvasBackgroundParent.percentWidth = 100;
+ canvasBackgroundParent.percentHeight = 100;
+
+ canvasBackgroundInstance.width = minimumWidth;//Math.max(canvasScroller.width, minimumWidth);
+ canvasBackgroundInstance.height = minimumHeight;//Math.max(canvasScroller.height, minimumHeight);
+
+ canvasBorderInstance.width = scaledDocumentWidth;
+ canvasBorderInstance.height = scaledDocumentHeight;
+
+ projectLoader.width = scaledDocumentWidth;
+ projectLoader.height = scaledDocumentHeight;
+
+ // we do this because when we scale the application the
+ // system manager mask is not updated and the content gets clipped
+ targetSystemManager.setActualSize(scaledDocumentWidth, scaledDocumentHeight);
+
+ validateNow();
+
+ inUpdateBackgroundSize = false;
+ }
+
+ /**
+ * Update the position of the document
+ * */
+ protected function scaleChange(event:RadiateEvent):void {
+
+ //if (!inUpdateBackgroundSize) {
+ updateBackgroundSize();
+ //}
+ }
+
+ public var importantProperties:Array = ["width", "explicitWidth", "height", "explicitHeight","scaleX","scaleY"];
+
+ /**
+ * Update the size of the document
+ * */
+ protected function propertyChange(event:RadiateEvent):void {
+ var sizeChange:Boolean;
+
+ if (event.selectedItem is Application) {
+ sizeChange = ArrayUtils.containsAny(event.properties, importantProperties);
+
+ if (sizeChange) {
+ updateBackgroundSize();
+ }
+ }
+ }
+
+ protected function canvasBackground_resizeHandler(event:ResizeEvent):void {
+
+ }
+
+ protected function canvasBackgroundParent_resizeHandler(event:ResizeEvent):void {
+
+ }
+
+ protected function projectLoader_resizeHandler(event:ResizeEvent):void {
+ //Radiate.log.info("Project loader resize");
+ }
+
+
+ /**
+ *
+ * */
+ private function updateScrollBarPosition(center:Point=null):void {
+ /*if (canvasBackground.contentHeight > canvasBackground.height) {
+ //canvasBackground.verticalScrollPosition = int((canvasBackground.contentHeight-canvasBackground.height)/2)
+ }
+ else {
+ //canvasBackground.verticalScrollPosition = 0;
+ }*/
+ /*if (borderContainer.contentHeight > borderContainer.height) {
+ borderContainer.verticalScrollPosition = int((borderContainer.contentHeight-borderContainer.height)/2);
+ }
+ else {
+ borderContainer.verticalScrollPosition = 0;
+ }
+
+ if (borderContainer.contentWidth > borderContainer.width) {
+ borderContainer.horizontalScrollPosition = int((borderContainer.contentWidth-borderContainer.width)/2);
+ }
+ else {
+ borderContainer.horizontalScrollPosition = 0;
+ }*/
+ }
+
+ /**
+ * Not used but probably should be
+ * */
+ override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
+ super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+ return;
+
+ }
+
+ private var _showBorders:Boolean;
+
+ /**
+ *
+ * */
+ public function get showBorders():Boolean {
+ return _showBorders;
+ }
+
+ /**
+ * Show borders for debugging layout of application
+ * */
+ public function set showBorders(value:Boolean):void {
+ if (_showBorders == value) return;
+ _showBorders = value;
+
+ if (_showBorders) {
+ canvasBackgroundParent.setStyle("backgroundColor", 0xF00000);
+ canvasBackgroundInstance.setStyle("backgroundColor", 0xFF0000);
+ canvasBorderInstance.setStyle("backgroundColor", 0xFFF000);
+ toolLayerInstance.setStyle("backgroundColor", 0xFFFF00);
+ canvasBackgroundParent.setStyle("backgroundAlpha", 1);
+ canvasBackgroundInstance.setStyle("backgroundAlpha", 1);
+ canvasBorderInstance.setStyle("backgroundAlpha", 1);
+ toolLayerInstance.setStyle("backgroundAlpha", 1);
+ }
+ else {
+ canvasBackgroundParent.setStyle("backgroundAlpha", 0);
+ canvasBackgroundInstance.setStyle("backgroundAlpha", 0);
+ canvasBorderInstance.setStyle("backgroundAlpha", 0);
+ toolLayerInstance.setStyle("backgroundAlpha", 0);
+ }
+ }
+
+ /**
+ *
+ * */
+ protected function scrollerCornerButton_clickHandler(event:MouseEvent):void {
+ //showBorders = !showBorders;
+
+ //if (!inUpdateBackgroundSize) {
+ radiate.centerApplication();
+ //}
+ }
+
+ /**
+ *
+ * */
+ protected function scroller_resizeHandler(event:ResizeEvent):void {
+ if (!targetApplication) return;
+
+ //if (!inUpdateBackgroundSize) {
+ updateBackgroundSize();
+ //}
+ }
+
+
+ protected function canvasScrollerInstance_creationCompleteHandler(event:FlexEvent):void {
+ var enableMouseSupport:Boolean = false;
+
+ if (enableMouseSupport) {
+ canvasScrollerInstance.addEventListener(MouseEvent.MOUSE_WHEEL, list_mouseWheel, true);
+ }
+ }
+
+ protected function list_mouseWheel(e:MouseEvent):void {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ canvasScrollerInstance.viewport.verticalScrollPosition -= e.delta * 5;
+ }
+
+ protected function drawGrid(sprite:Sprite):void {
+ var x:int = 0;
+ var y:int = 0;
+
+ sprite.graphics.clear();
+
+ // draw the background
+ sprite.graphics.beginFill(0xFFFFFF);
+ sprite.graphics.drawRect(0, 0, sprite.width, sprite.height);
+ sprite.graphics.endFill();
+
+ sprite.graphics.lineStyle(0.5, 0x000000, 0.2);
+
+ // draw the vertical lines
+ while (x <= sprite.width) {
+ sprite.graphics.moveTo(x, 0);
+ sprite.graphics.lineTo(x, sprite.height);
+ x = x + 20;
+ }
+
+ // draw the horizontal lines
+ while (y <= sprite.height) {
+ sprite.graphics.moveTo(0, y);
+ sprite.graphics.lineTo(sprite.width, y);
+ y = y + 20;
+ }
+ }
+ ]]>
+ </fx:Script>
+
+ <fx:Declarations>
+ <!--<s:Fade id="fadeInBusy"
+ alphaTo="1"
+ target="{busyIndicator}"
+ effectStart="busyIndicator.visible=true"
+ effectEnd="busyIndicator.visible=true"/>
+ <s:Fade id="fadeOutBusy"
+ alphaTo="0"
+ target="{busyIndicator}"
+ effectStart="busyIndicator.visible=true"
+ effectEnd="busyIndicator.visible=false"/>-->
+
+ <fx:XML id="testModel" xmlns="">
+ <mx:MXML >
+ <s:Group x="15" y="50">
+ <s:Button label="Hello World" x="20" y="20" color="#ff0000"/>
+ </s:Group >
+ </mx:MXML>
+ </fx:XML>
+ </fx:Declarations>
+
+
+
+ <s:Rect id="backgroundRect" width="100%" height="100%">
+ <s:fill>
+ <s:SolidColor color="#666666"/>
+ </s:fill>
+ </s:Rect>
+
+ <s:Rect width="20" height="20">
+ <s:fill>
+ <s:SolidColor color="#FFFFFF"/>
+ </s:fill>
+ </s:Rect>
+
+
+ <s:Scroller id="canvasScrollerInstance"
+ left="20"
+ right="0"
+ top="20"
+ bottom="0"
+ width="100%"
+ height="100%"
+ resize="scroller_resizeHandler(event)"
+ interactionMode="mouse"
+ creationComplete="canvasScrollerInstance_creationCompleteHandler(event)"
+ >
+
+ <!--- why two containers around this? reasons below -->
+ <!--
+
+ // clicked on background area
+ if (target==canvasBackground || target==canvasBackgroundParent) {
+ radiate.setTarget(targetApplication, true);
+ -->
+
+ <!---
+ This first group is sized by the Scroller.
+ The scroller automatically sets this group, the viewport, to 100%
+ -->
+ <s:Group id="canvasBackgroundParent"
+ width="100%"
+ height="100%" >
+
+
+ <!---
+ This second group is to provide padding to the top and bottom of the document
+ and to receive any mouse events such as zoom in and out.
+
+ It gets sized to the canvas size plus the padding value.
+
+ It may also be used for skinning with different devices.
+ -->
+ <s:BorderContainer id="canvasBackgroundInstance"
+ borderVisible="false"
+ backgroundAlpha="0"
+ >
+
+
+ <!---
+ This third group is to mask application content.
+ Without it the application or the application's system manager
+ may bleed over.
+ -->
+ <s:BorderContainer id="canvasBorderInstance"
+ verticalCenter="0"
+ horizontalCenter="0"
+ backgroundAlpha="0"
+ borderVisible="false"
+ visible="false"
+ resize="canvasBorder_resizeHandler(event)">
+
+ <!--<s:SkinnableContainer id="canvasBorder"
+ verticalCenter="0"
+ horizontalCenter="0"
+ visible="false"
+ backgroundAlpha="1"
+ skinClass="com.flexcapacitor.skins.DeviceSkin"
+ >-->
+
+
+ <!---
+ This group contains the system manager and the blank application
+ -->
+ <s:SWFLoader id="projectLoader"
+ resize="projectLoader_resizeHandler(event)"
+ complete="project_completeHandler(event)"
+ httpStatus="project_httpStatusHandler(event)"
+ init="project_initHandler(event)"
+ ioError="project_ioErrorHandler(event)"
+ open="project_openHandler(event)"
+ progress="project_progressHandler(event)"
+ securityError="project_securityErrorHandler(event)"
+ unload="project_unloadHandler(event)"/>
+
+ <!---
+ This group is used to add visual elements above the application.
+ For example, selection and resizing borders.
+ -->
+ <s:Group id="toolLayerInstance"
+ mouseChildren="false"
+ mouseEnabled="false">
+
+ </s:Group>
+
+ </s:BorderContainer>
+ <!--</s:SkinnableContainer>-->
+ </s:BorderContainer>
+ </s:Group>
+ </s:Scroller>
+
+ <s:Label id="loadingLabel" color="#ffffff" text="Loading. Please wait..."
+ fontWeight="bold" horizontalCenter="0" verticalCenter="0"/>
+
+ <s:Group id="scrollerCornerButton"
+ width="16" height="16" right="0" bottom="0"
+ click="scrollerCornerButton_clickHandler(event)">
+ <s:Rect width="100%"
+ height="100%"
+ alpha="0"
+ visible="{canvasScroller.verticalScrollBar.visible && canvasScroller.horizontalScrollBar.visible}"
+ >
+ <s:fill>
+ <s:SolidColor color="#000000"/>
+ </s:fill>
+ </s:Rect>
+ </s:Group>
+
+
+ <!-- alternatives to ruler component -->
+ <s:Rect left="20" width="100%" height="20">
+ <s:fill>
+ <s:SolidColor color="#FFFFFF"/>
+ </s:fill>
+ </s:Rect>
+
+ <s:Rect top="20" width="20" height="100%">
+ <s:fill>
+ <s:SolidColor color="#FFFFFF"/>
+ </s:fill>
+ </s:Rect>
+ <!--<components:Ruler left="20" width="100%" height="20"/>
+
+ <components:Ruler top="20" width="20" height="100%" direction="vertical"/>-->
+
+ <!--<s:BusyIndicator id="busyIndicator" right="20" top="10" symbolColor="white"/>-->
+
+
+</s:Group>
http://git-wip-us.apache.org/repos/asf/flex-radii8/blob/f370bfcf/Radii8Library/src/com/flexcapacitor/components/IDocumentContainer.as
----------------------------------------------------------------------
diff --git a/Radii8Library/src/com/flexcapacitor/components/IDocumentContainer.as b/Radii8Library/src/com/flexcapacitor/components/IDocumentContainer.as
new file mode 100644
index 0000000..32e32c3
--- /dev/null
+++ b/Radii8Library/src/com/flexcapacitor/components/IDocumentContainer.as
@@ -0,0 +1,87 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.components {
+ import com.flexcapacitor.model.IDocument;
+ import com.flexcapacitor.utils.supportClasses.ComponentDescription;
+
+ import mx.core.IVisualElementContainer;
+
+ import spark.components.Scroller;
+
+
+ /**
+ * An interface for the different types of documents.
+ * */
+ public interface IDocumentContainer {
+
+ /**
+ * The root component description for this document.
+ * */
+ function get componentDescription():ComponentDescription;
+
+ /**
+ * @private
+ * */
+ function set componentDescription(value:ComponentDescription):void;
+
+ /**
+ * Parses the code
+ * */
+ /*function parseDocument(code:String):Boolean;*/
+
+ /**
+ * Imports code
+ * */
+ function importDocument(code:String):Boolean;
+
+ /**
+ * Reference to the document. Named documentDescription since
+ * document is already a property on UIComponent.
+ * */
+ function set iDocument(value:IDocument):void;
+ function get iDocument():IDocument;
+
+ /**
+ * Reference to the tool layer.
+ * */
+ function set toolLayer(value:IVisualElementContainer):void;
+ function get toolLayer():IVisualElementContainer;
+
+ /**
+ * Reference to the canvas border.
+ * */
+ function set canvasBorder(value:IVisualElementContainer):void;
+ function get canvasBorder():IVisualElementContainer;
+
+ /**
+ * Reference to the canvas background.
+ * */
+ function set canvasBackground(value:IVisualElementContainer):void;
+ function get canvasBackground():IVisualElementContainer;
+
+ /**
+ * Reference to the canvas scroller.
+ * */
+ function set canvasScroller(value:Scroller):void;
+ function get canvasScroller():Scroller;
+
+
+ }
+}
\ No newline at end of file