You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jm...@apache.org on 2014/08/09 08:32:00 UTC

[2/5] Added more spark examples

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbOverSkin.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbOverSkin.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbOverSkin.as
new file mode 100644
index 0000000..48aa83a
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbOverSkin.as
@@ -0,0 +1,89 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.ui.styles
+{
+	import mx.skins.RectangularBorder;
+	import mx.utils.GraphicsUtil;
+	import flash.display.LineScaleMode;
+	import flash.display.CapsStyle;
+	
+	public class ScrollbarThumbOverSkin extends RectangularBorder
+	{
+		public function ScrollbarThumbOverSkin()
+		{
+			super();
+		}
+		
+		override public function get measuredWidth():Number
+		{
+			return 11;
+		}
+		
+		override public function get measuredHeight():Number
+		{
+			return 10;
+		}
+		
+		override protected function updateDisplayList(w:Number, h:Number):void
+		{
+			super.updateDisplayList(w, h);
+			
+			var thumbFill:uint = 0x222222;
+			var thumbFillAlpha:Number = 1.0;
+			var thumbStroke:uint = 0x2A2A2A;
+			var thumbStrokeAlpha:Number = 1.0;
+
+			var trackStroke:uint = 0x2A2A2A;
+			var trackStrokeAlpha:Number = 1.0;
+						
+ 			if (getStyle("thumbOverFill") != undefined)
+				thumbFill = getStyle("thumbOverFill");
+ 			if (getStyle("thumbOverFillAlpha") != undefined)
+				thumbFillAlpha = getStyle("thumbOverFillAlpha");
+ 			if (getStyle("thumbOverStroke") != undefined)
+				thumbStroke = getStyle("thumbOverStroke");
+ 			if (getStyle("thumbOverStrokeAlpha") != undefined)
+				thumbStrokeAlpha = getStyle("thumbOverStrokeAlpha");
+ 			if (getStyle("trackStroke") != undefined)
+				trackStroke = getStyle("trackStroke");
+ 			if (getStyle("trackStrokeAlpha") != undefined)
+				trackStrokeAlpha = getStyle("trackStrokeAlpha");
+
+			graphics.clear();
+			// draw the top line of the thumb to match the track
+			graphics.lineStyle(1, trackStroke, trackStrokeAlpha);
+			graphics.moveTo(0, 0);
+			graphics.lineTo(w-1, 0);
+
+			// fill in the thumb
+			graphics.beginFill(thumbFill, thumbFillAlpha);
+			graphics.drawRect(0, 0, w-1, h-2);
+			graphics.endFill();
+			
+			// draw the border of the thumb
+			graphics.lineStyle(1, thumbStroke, thumbStrokeAlpha);
+			graphics.drawRect(0, 1, w-1, h-3);
+			
+			// draw the bottom line of the thumb to match the track
+			graphics.lineStyle(1, trackStroke, trackStrokeAlpha);
+			graphics.moveTo(0, h-1);
+			graphics.lineTo(w, h-1);
+			
+		}
+	}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbUpSkin.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbUpSkin.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbUpSkin.as
new file mode 100644
index 0000000..450fd3a
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarThumbUpSkin.as
@@ -0,0 +1,89 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.ui.styles
+{
+	import mx.skins.RectangularBorder;
+	import mx.utils.GraphicsUtil;
+	import flash.display.LineScaleMode;
+	import flash.display.CapsStyle;
+	
+	public class ScrollbarThumbUpSkin extends RectangularBorder
+	{
+		public function ScrollbarThumbUpSkin()
+		{
+			super();
+		}
+		
+		override public function get measuredWidth():Number
+		{
+			return 11;
+		}
+		
+		override public function get measuredHeight():Number
+		{
+			return 10;
+		}
+		
+		override protected function updateDisplayList(w:Number, h:Number):void
+		{
+			super.updateDisplayList(w, h);
+			
+			var thumbFill:uint = 0x222222;
+			var thumbFillAlpha:Number = 1.0;
+			var thumbStroke:uint = 0x2A2A2A;
+			var thumbStrokeAlpha:Number = 1.0;
+
+			var trackStroke:uint = 0x2A2A2A;
+			var trackStrokeAlpha:Number = 1.0;
+						
+ 			if (getStyle("thumbFill") != undefined)
+				thumbFill = getStyle("thumbFill");
+ 			if (getStyle("thumbFillAlpha") != undefined)
+				thumbFillAlpha = getStyle("thumbFillAlpha");
+ 			if (getStyle("thumbStroke") != undefined)
+				thumbStroke = getStyle("thumbStroke");
+ 			if (getStyle("thumbStrokeAlpha") != undefined)
+				thumbStrokeAlpha = getStyle("thumbStrokeAlpha");
+ 			if (getStyle("trackStroke") != undefined)
+				trackStroke = getStyle("trackStroke");
+ 			if (getStyle("trackStrokeAlpha") != undefined)
+				trackStrokeAlpha = getStyle("trackStrokeAlpha");
+
+			graphics.clear();
+			// draw the top line of the thumb to match the track
+			graphics.lineStyle(1, trackStroke, trackStrokeAlpha);
+			graphics.moveTo(0, 0);
+			graphics.lineTo(w-1, 0);
+
+			// fill in the thumb
+			graphics.beginFill(thumbFill, thumbFillAlpha);
+			graphics.drawRect(0, 0, w-1, h-2);
+			graphics.endFill();
+			
+			// draw the border of the thumb
+			graphics.lineStyle(1, thumbStroke, thumbStrokeAlpha);
+			graphics.drawRect(0, 1, w-1, h-3);
+			
+			// draw the bottom line of the thumb to match the track
+			graphics.lineStyle(1, trackStroke, trackStrokeAlpha);
+			graphics.moveTo(0, h-1);
+			graphics.lineTo(w, h-1);
+			
+		}
+	}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarTrackSkin.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarTrackSkin.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarTrackSkin.as
new file mode 100644
index 0000000..d822b91
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarTrackSkin.as
@@ -0,0 +1,68 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.ui.styles
+{
+	import flash.display.CapsStyle;
+	import flash.display.LineScaleMode;
+	
+	import mx.skins.RectangularBorder;
+
+	public class ScrollbarTrackSkin extends RectangularBorder
+	{
+		public function ScrollbarTrackSkin()
+		{
+			super();
+		}
+		
+		override public function get measuredWidth():Number
+		{
+			return 13;
+		}
+		
+		override public function get measuredHeight():Number
+		{
+			return 10;
+		}
+		
+		override protected function updateDisplayList(w:Number, h:Number):void
+		{
+			super.updateDisplayList(w, h);
+			
+			var trackFill:uint = 0x000000;
+			var trackFillAlpha:Number = 1.0;
+			var trackStroke:uint = 0x2A2A2A;
+			var trackStrokeAlpha:Number = 1.0;
+			
+ 			if (getStyle("trackFill") != undefined)
+				trackFill = getStyle("trackFill");
+ 			if (getStyle("trackFillAlpha") != undefined)
+				trackFillAlpha = getStyle("trackFillAlpha");
+ 			if (getStyle("trackStroke") != undefined)
+				trackStroke = getStyle("trackStroke");
+ 			if (getStyle("trackStrokeInnerAlpha") != undefined)
+				trackStrokeAlpha = getStyle("trackStrokeAlpha");
+
+			graphics.clear();
+			graphics.beginFill(trackFill, trackFillAlpha);
+			graphics.drawRect(0, 0, w-1, h);
+			graphics.endFill();
+			graphics.lineStyle(1, trackStroke, trackStrokeAlpha, true, LineScaleMode.NONE, CapsStyle.SQUARE);
+			graphics.drawRect(0, 0, w-1, h);
+		}
+	}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarUpArrowUpSkin.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarUpArrowUpSkin.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarUpArrowUpSkin.as
new file mode 100644
index 0000000..f9b66bc
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/flashx/textLayout/ui/styles/ScrollbarUpArrowUpSkin.as
@@ -0,0 +1,45 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.ui.styles
+{
+	import mx.skins.RectangularBorder;
+
+	public class ScrollbarUpArrowUpSkin extends RectangularBorder
+	{
+		public function ScrollbarUpArrowUpSkin()
+		{
+			super();
+		}
+		
+		override public function get measuredWidth():Number
+		{
+			return 13;
+		}
+		
+		override public function get measuredHeight():Number
+		{
+			return 14;
+		}
+		
+		override protected function updateDisplayList(w:Number, h:Number):void
+		{
+			super.updateDisplayList(w, h);
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FeatureSetChangeEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FeatureSetChangeEvent.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FeatureSetChangeEvent.as
new file mode 100644
index 0000000..811dd37
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FeatureSetChangeEvent.as
@@ -0,0 +1,42 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 textEditBar
+{
+import flash.events.Event;
+import flashx.textLayout.elements.TextFlow;
+
+public class FeatureSetChangeEvent extends Event
+{
+	public const FEATURE_SET:String = "featureSet";
+	
+	public var featureSet:String;
+
+	public function FeatureSetChangeEvent(newFeatureSet:String, type:String = FEATURE_SET,
+							  bubbles:Boolean = false,
+							  cancelable:Boolean = false)
+	{
+		super(type, bubbles, cancelable);
+		featureSet = newFeatureSet;
+	}
+	override public function clone():Event
+	{
+		return new FeatureSetChangeEvent(featureSet, type, bubbles, cancelable);
+	}
+}		// end class
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileEvent.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileEvent.as
new file mode 100644
index 0000000..4832d1f
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileEvent.as
@@ -0,0 +1,43 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 textEditBar
+{
+import flash.events.Event;
+import flash.net.FileReference;
+
+public class FileEvent extends Event
+{
+	public var fileName:FileReference;
+	
+	public const FILE_CHOOSE:String = "fileChoose";
+
+	public function FileEvent(newFileName:FileReference, type:String = FILE_CHOOSE,
+							  bubbles:Boolean = false,
+							  cancelable:Boolean = false)
+	{
+		super(type, bubbles, cancelable);
+		fileName = newFileName;
+	}
+	
+	override public function clone():Event
+	{
+		return new FileEvent(fileName, type, bubbles, cancelable);
+	}
+}		// end class
+}		// end package
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileIOHelper.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileIOHelper.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileIOHelper.as
new file mode 100644
index 0000000..1d239bc
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileIOHelper.as
@@ -0,0 +1,268 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 textEditBar
+{
+	import flash.display.DisplayObject;
+	import flash.events.Event;
+	import flash.events.IOErrorEvent;
+	import flash.net.FileReference;
+	
+	import flashx.textLayout.conversion.ConversionType;
+	import flashx.textLayout.conversion.ITextExporter;
+	import flashx.textLayout.conversion.ITextImporter;
+	import flashx.textLayout.conversion.TextConverter;
+	import flashx.textLayout.debug.assert;
+	import flashx.textLayout.elements.TextFlow;
+	
+	import mx.managers.CursorManager;
+	import mx.managers.PopUpManager;
+	import mx.rpc.events.ResultEvent;
+	import mx.rpc.http.mxml.HTTPService;
+	
+	import textEditBar.StatusPopup;
+	
+	public class FileIOHelper
+	{
+		static public var parentWindow:DisplayObject;
+		static public var changeContent:Function;
+
+		static private var _openedFile:String;
+		
+		// called when the app has a specific file it wants to read (at startup)
+		static public function fileOpen(fileName:String):void
+		{
+			var localHTTP:HTTPService = new HTTPService();
+  			localHTTP.url = fileName;
+  			_openedFile = fileName;
+			localHTTP.method = "GET";
+			localHTTP.resultFormat="text"
+			localHTTP.showBusyCursor=true;
+			localHTTP.addEventListener(ResultEvent.RESULT,parseIntoFlowFromHTTP,false,0,true);
+			localHTTP.addEventListener(IOErrorEvent.IO_ERROR,errorOnReadFromHTTP,false,0,true);
+			localHTTP.send();
+		}
+
+		// called when user picks a file
+		static public function fileChoose(fileName:FileReference) : void
+		{
+			fileName.addEventListener(Event.COMPLETE,onFileReferenceLoadComplete,false,0,true);
+			fileName.addEventListener(IOErrorEvent.IO_ERROR,errorOnReadFromFileReference,false,0,true);
+			fileName.load();
+		}
+		
+		static private function onFileReferenceLoadComplete(event:Event):void
+		{
+			var fileReference:FileReference = FileReference(event.target);
+	   		_extension= getExtension(fileReference.name).toLowerCase();
+	   		_fileData = String(fileReference.data);
+	   		parseCurrentDataWithExtension();
+		}
+
+		static private function errorOnReadFromFileReference(event:IOErrorEvent):void
+        {
+        	var curFileReference:FileReference = FileReference(event.target);
+        	// Text content will be an error string
+			var errorString:String = "Error reading file " + curFileReference.name;
+ 			errorString += "\n";
+ 			errorString += event.toString();
+ 			_extension = "txt";
+ 			_fileData = errorString;
+ 			parseCurrentDataWithExtension();
+			//CursorManager.removeBusyCursor(); //get rid of hourglass cursor. 			
+  		}
+  		
+ 		static private function parseIntoFlowFromHTTP(event:ResultEvent):void 
+ 		{
+	   		_fileData = String(event.result);
+	   		_extension = getExtension(_openedFile).toLowerCase();
+	   		parseCurrentDataWithExtension();
+	   		_openedFile = null;
+ 		}
+ 		
+ 		static private function errorOnReadFromHTTP(event:Object):void
+ 		{
+ 			// Text content will be an error string
+			var errorString:String = "Error reading file " + _openedFile;
+ 			errorString += "\n";
+ 			errorString += event.fault;
+ 			_extension = "txt";
+ 			_fileData = errorString;
+ 			parseCurrentDataWithExtension();
+			CursorManager.removeBusyCursor(); //get rid of hourglass cursor. 
+ 	   		_openedFile = null;
+		}
+		
+		static private function getExtension(fileName:String):String
+		{
+			var dotPos:int = fileName.lastIndexOf(".");
+			if (dotPos >= 0)
+				return fileName.substring(dotPos + 1);
+			return fileName;
+		}
+		
+		// hold onto these two in case we need to recreate textFlow
+		static private var _extension:String;
+		static private var _fileData:String;
+		
+		static public function parseCurrentDataWithExtension():void
+		{
+	   		switch (_extension)
+	   		{
+	   			case "xml":		// use Vellum markup
+	   				parseStringIntoFlow(_fileData, TextConverter.TEXT_LAYOUT_FORMAT);
+	   				break;
+	   			case "txt":
+	   				parseStringIntoFlow(_fileData, TextConverter.PLAIN_TEXT_FORMAT);
+	   				break;
+				case "html":
+	   				parseStringIntoFlow(_fileData, TextConverter.TEXT_FIELD_HTML_FORMAT);
+	   				break;
+
+	   		}
+		}
+				
+		static private function parseStringIntoFlow(source:String, format:String):void
+		{
+			var textImporter:ITextImporter = TextConverter.getImporter(format);
+			var newFlow:TextFlow = textImporter.importToFlow(source);
+			reportImportErrors(textImporter.errors);
+			// no TextFlow found - Flow will display an empty TextFlow by design 
+			// - alternative is to do some kind of error string
+			changeContent(newFlow ? newFlow : new TextFlow());
+		} 
+ 		
+		static private function reportImportErrors(errors:Vector.<String>):void
+		{
+			if (errors)
+			{
+				var errorText:String = "ERRORS REPORTED ON IMPORT";
+				for each(var e:String in errors)
+					errorText += "\n" + e;
+					
+				var dlg:StatusPopup = new StatusPopup();
+				dlg.closeFunction = closeStatusPopup;
+
+				PopUpManager.addPopUp(dlg, parentWindow, true);
+				PopUpManager.centerPopUp(dlg);
+				// stick it in the upper left
+				dlg.x = 0;
+				dlg.y = 0;
+			
+				dlg.textArea.text = errorText;
+			}
+		}
+ 		static private function closeStatusPopup(dlg:StatusPopup):void
+ 		{
+ 			PopUpManager.removePopUp(dlg);
+ 		}
+ 			
+		static private function importStatusPopupContent(dlg:StatusPopup):void
+		{
+			switch(dlg.textFormat)
+			{
+				case TextConverter.TEXT_LAYOUT_FORMAT:
+					_extension = "xml";
+					break;
+				case TextConverter.TEXT_FIELD_HTML_FORMAT:
+					_extension = "html";
+					break;
+			}
+			_fileData = dlg.textArea.text;
+			parseCurrentDataWithExtension();
+			PopUpManager.removePopUp(dlg);
+		}
+		
+		static private function saveStatusPopupContent(dlg:StatusPopup):void
+		{
+			var extension:String;
+			switch(dlg.textFormat)
+			{
+				case TextConverter.TEXT_LAYOUT_FORMAT:
+					extension = "xml";
+					break;
+				case TextConverter.TEXT_FIELD_HTML_FORMAT:
+					extension = "html";
+					break;
+			}
+			
+	  		var fileReference:FileReference = new FileReference();
+  			fileReference.save(dlg.textArea.text,extension == null ? null : "NewFile."+extension);
+		}
+		
+
+
+		// Export related code
+		static public function textLayoutExport(activeFlow:TextFlow) : void
+		{		
+			export(activeFlow, TextConverter.TEXT_LAYOUT_FORMAT);
+		}
+
+
+		static public function htmlExport(activeFlow:TextFlow) : void
+		{
+			export(activeFlow, TextConverter.TEXT_FIELD_HTML_FORMAT);
+		}
+
+		static private const xmlBoilerPlate:String = '<?xml version="1.0" encoding="utf-8"?>\n';
+										
+		static public function export(activeFlow:TextFlow, format:String) : void
+		{
+			//CONFIG::debug
+			{	
+				var originalSettings:Object = XML.settings();
+				try
+				{
+					XML.ignoreProcessingInstructions = false;		
+					XML.ignoreWhitespace = false;
+					XML.prettyPrinting = false;
+					
+					
+					var exporter:ITextExporter = TextConverter.getExporter(format);
+					var xmlExport:XML = exporter.export(activeFlow, ConversionType.XML_TYPE) as XML;
+					var result:String = xmlBoilerPlate + xmlExport;					
+					XML.setSettings(originalSettings);
+				}
+				
+				catch(e:Error)
+				{
+					XML.setSettings(originalSettings);
+					throw(e);
+				}
+			}
+			
+			// show it in the pop-up dialog
+			var dlg:StatusPopup = new StatusPopup();
+			dlg.closeFunction = closeStatusPopup;
+			dlg.importFunction = importStatusPopupContent;
+			dlg.saveFunction   = saveStatusPopupContent;
+			dlg.textFormat = format;
+			
+			PopUpManager.addPopUp(dlg, parentWindow, true);
+			PopUpManager.centerPopUp(dlg);
+			// stick it in the upper left
+			dlg.x = 0;
+			dlg.y = 0;
+	
+			dlg.textArea.text = result.replace(/\u000D\u000A/g, "\r"); // workaround for TextArea bug SDK-14797
+		}
+		
+
+
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileServices.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileServices.mxml b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileServices.mxml
new file mode 100644
index 0000000..343cc94
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/FileServices.mxml
@@ -0,0 +1,96 @@
+<?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.
+
+-->
+
+<!--This widget allows the user to enter a file name and when the "ReadFile" button is pressed, it 
+reads the file, and passes through the file contents as a ContentEvent. It expects an XML file in
+TextLayout format.-->
+
+<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" creationComplete="handleCreationComplete()" >
+	<mx:Metadata>
+	[Event(name="fileChoose", type="textEditBar.FileEvent")]
+	[Event(name="textLayoutExport", type="flash.events.Event")]
+	[Event(name="htmlExport", type="flash.events.Event")]
+ 	</mx:Metadata>
+
+  <mx:Script>
+		<![CDATA[
+			import flash.events.Event;
+			import flash.system.Capabilities;
+			import flashx.textLayout.elements.TextFlow;
+			import mx.events.MenuEvent;
+			import mx.controls.Alert;
+			import flashx.textLayout.edit.EditingMode;
+			import flashx.textLayout.edit.ElementRange;
+			import flashx.textLayout.edit.ISelectionManager;
+			import flashx.textLayout.edit.IEditManager;
+			import flashx.textLayout.BuildInfo;
+			
+			public var activeFlow:TextFlow;
+			
+			[Bindable]
+			public var buildString:String = "Build: " + BuildInfo.kBuildNumber + "(" + Capabilities.version + ")";
+
+			internal function handleCreationComplete():void
+			{
+				buildLabel.left = (this.x + this.width - 20) - buildLabel.width;
+			}
+			// Update UI panel in response to change in selection
+			public function update(range:ElementRange):void
+			{
+				if (!activeFlow)
+					return;
+					
+			}
+			
+			private var fileReference:FileReference;
+			
+			public function currentFileName():String
+			{
+				return fileReference != null ? fileReference.name : null;
+			}
+			
+			public function openDialog():void
+			{
+	  			var markupFilter:FileFilter = new FileFilter("Documents","*.xml;*.fxg;*.html");
+	  			fileReference = new FileReference();
+  				fileReference.browse([markupFilter]);
+  				fileReference.addEventListener(Event.SELECT,onFileSelect);
+			}
+			
+			private function onFileSelect(event:Event):void 
+			{
+	  			try {
+	  				dispatchEvent(new FileEvent(fileReference));
+		  			//fileReference.load();
+		  		} catch (err:Event) {
+		  			Alert.show(err.toString());
+		  		}
+	  		}
+		   
+           ]]>
+    </mx:Script>
+
+   	<mx:Button label="Open..." click="openDialog()"/>
+   		
+	<mx:Button id="textLayoutExportButton" label="Markup..." click="dispatchEvent(new Event('textLayoutExport'));"/>
+	<mx:Button id="htmlExportButton" label="HTML Markup..." click="dispatchEvent(new Event('htmlExport'));"/>
+
+	<mx:Label id="buildLabel" text="{buildString}" fontWeight="bold" paddingTop="3" paddingBottom="1"/>
+</mx:HBox>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicBar.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicBar.mxml b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicBar.mxml
new file mode 100644
index 0000000..1aa5d14
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicBar.mxml
@@ -0,0 +1,153 @@
+<?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.
+
+-->
+
+<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:textEditBar="textEditBar.*" 
+	addedToStage="onAddedToStage()" removedFromStage="onRemovedFromStage()" horizontalScrollPolicy="off" verticalScrollPolicy="off">
+	
+	<mx:Script>
+		<![CDATA[
+			import flashx.textLayout.edit.ElementRange;
+			import flashx.textLayout.edit.IEditManager;
+			import flashx.textLayout.elements.InlineGraphicElement;
+			import flashx.textLayout.elements.TextFlow;
+			import flashx.textLayout.formats.FormatValue;
+			import flashx.textLayout.tlf_internal;
+			
+			use namespace tlf_internal;
+			
+			public var activeFlow:TextFlow;
+			
+			protected function applyChange():void
+			{
+				changeForeignElement(imageURL.text, imageWidth.text, imageHeight.text, "none", doChangeImage);				
+			}
+			
+	  		protected function changeForeignElement(foreignElementUrl:String, width:String, height:String, float:String, changeCurrent:Boolean):void
+	 		{
+	 			if (activeFlow && activeFlow.interactionManager is IEditManager)
+	 			{
+					if (changeCurrent)
+	 					IEditManager(activeFlow.interactionManager).modifyInlineGraphic(foreignElementUrl, width, height, float);
+					else
+						IEditManager(activeFlow.interactionManager).insertInlineGraphic(foreignElementUrl, width, height, float);
+	 				activeFlow.interactionManager.setFocus();
+	 			}
+	 		}
+		
+			protected var doChangeImage:Boolean = false;
+			
+			public function update(range:ElementRange):void
+ 			{
+ 				if (onStage)
+ 				{
+ 					if (range ==  null)
+ 						visible = false;
+ 					else
+ 					{
+ 						if (!visible)
+ 							visible = true;
+
+	 					var makeItTheChangeButton:Boolean = false;
+	 					
+	 					// this logic is a complicated by the fact that we extend the end of the selection because the FE is at the end of the paragraph
+	 					if (range && range.firstLeaf is InlineGraphicElement && range.absoluteStart == range.firstLeaf.getAbsoluteStart())
+	 					{
+	 						// two cases just the FE and just the FE plus the paragraph terminator
+	 						if (range.absoluteEnd == range.absoluteStart+1 || (range.firstParagraph == range.lastParagraph && range.absoluteEnd == range.absoluteStart+2 && range.absoluteEnd == range.lastParagraph.getAbsoluteStart() + range.lastParagraph.textLength))
+	 							makeItTheChangeButton = true; 
+	 					}
+	 					
+	 					// block selection of just the FE
+	 					if (makeItTheChangeButton)
+	 						updateForChange(InlineGraphicElement(range.firstLeaf));
+	 					else
+	 						updateForInsert(range)
+ 					}
+ 				}
+				lastRange = range;	
+ 			}
+ 			
+ 			protected function updateForChange(inlineElement:InlineGraphicElement):void
+ 			{
+				var sourceString:String = inlineElement.source.toString()
+				var widthString:String = inlineElement.width === undefined ? FormatValue.AUTO : inlineElement.width.toString();
+				var heightString:String = inlineElement.height === undefined ? FormatValue.AUTO : inlineElement.height.toString();
+ 				doUpdate(sourceString, widthString, heightString, true, true);
+ 			}
+			
+ 			protected function updateForInsert(range:ElementRange):void
+ 			{
+ 				doUpdate("", 
+ 					InlineGraphicElement.tlf_internal::widthPropertyDefinition.defaultValue.toString(),
+ 					InlineGraphicElement.tlf_internal::heightPropertyDefinition.defaultValue.toString(),
+ 					false, range && range.firstLeaf);
+	 		}
+	 		
+ 			private function doUpdate(url:String, width:String, height:String, modify:Boolean, enableImage:Boolean):void
+ 			{
+  				imageURL.text = url;
+ 				imageWidth.text = width;
+ 				imageHeight.text = height;
+ 				imageButton.label = modify ? "Change" : "Insert";
+ 				doChangeImage = modify;
+ 				imageButton.enabled = enableImage;			
+ 			}
+
+			private var onStage:Boolean = false;
+			private var addedFrameEventListener:Boolean = false;
+			protected var lastRange:ElementRange = null;
+			private function onAddedToStage():void
+			{
+				// the dataProviders aren't set up yet - delay to the frame
+				onStage = true;
+				if (!addedFrameEventListener)
+				{
+					addedFrameEventListener = true;
+					addEventListener("enterFrame",onEnterFrame);
+				}
+			}
+				
+			private function onEnterFrame(p:Event):void
+			{
+				this.removeEventListener("enterFrame",onEnterFrame);
+				addedFrameEventListener = false;	
+				
+				var temp:ElementRange = lastRange;
+				lastRange = null;
+				update(temp);
+					
+			}
+			
+			private function onRemovedFromStage():void
+			{
+				onStage = false;
+			}
+		]]>
+	</mx:Script>
+
+	<mx:Label text="Image URL:" fontWeight="bold"/>
+	<mx:TextInput id="imageURL" width="140"/>
+	<mx:Label text="Width:" fontWeight="bold"/>
+	<mx:TextInput id="imageWidth" width="60"/>
+	<mx:Label text="Height:" fontWeight="bold"/>
+	<mx:TextInput id="imageHeight" width="60"/>			
+	<mx:Button id="imageButton" label="Insert Image" 
+		click="applyChange();" />
+</mx:HBox>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicChangeEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicChangeEvent.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicChangeEvent.as
new file mode 100644
index 0000000..0128881
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/GraphicChangeEvent.as
@@ -0,0 +1,61 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 textEditBar
+{
+	import flash.events.Event;
+	
+	public class GraphicChangeEvent extends Event
+	{
+		private var _imageLink:String;
+		private var _imageWidth:Object;
+		private var _imageHeight:Object;
+		private var _float:String;
+		private var _replaceCurrent:Boolean;	
+		
+		public function GraphicChangeEvent(type:String, imageLink:String, imageWidth:Object, imageHeight:Object, float:String, replaceCurrent:Boolean = false, bubbles:Boolean=false, cancelable:Boolean=false)
+		{
+			_imageLink = imageLink;
+			_imageWidth = imageWidth;
+			_imageHeight = imageHeight;
+			_replaceCurrent = replaceCurrent;
+			_float = float;
+			super(type, bubbles, cancelable);
+		}
+		
+		override public function clone():Event
+		{
+			return new GraphicChangeEvent(type, _imageLink, _imageWidth, _imageHeight, _float, _replaceCurrent, bubbles, cancelable);
+		}
+		
+		public function get imageLink():String
+		{ return _imageLink; }		
+		
+		public function get imageWidth():Object
+		{ return _imageWidth; }
+		
+		public function get imageHeight():Object
+		{ return _imageHeight; }
+		
+		public function get float():String
+		{ return _float; }
+		
+		public function get replaceCurrent():Boolean
+		{ return _replaceCurrent; }
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkBar.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkBar.mxml b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkBar.mxml
new file mode 100644
index 0000000..61b8b6f
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkBar.mxml
@@ -0,0 +1,158 @@
+<?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.
+
+-->
+
+<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:textEditBar="textEditBar.*"
+		addedToStage="onAddedToStage()" removedFromStage="onRemovedFromStage()">
+	
+	<mx:Array id="targetArray"> 
+		<mx:String>_blank</mx:String>
+		<mx:String>_self</mx:String>
+		<mx:String>_parent</mx:String>
+		<mx:String>_top</mx:String>
+	</mx:Array>	
+	
+	<mx:Script>
+		<![CDATA[
+		    import mx.controls.Alert;
+			import flashx.textLayout.edit.ElementRange;
+			import flashx.textLayout.edit.IEditManager;
+			import flashx.textLayout.elements.LinkElement;
+			import flashx.textLayout.elements.FlowElement;
+			import flashx.textLayout.elements.ParagraphElement;
+			import flashx.textLayout.events.FlowElementMouseEvent;
+			import flashx.textLayout.elements.TextFlow;
+			
+			public var activeFlow:TextFlow;
+			
+	 		private function changeLink(urlText:String, targetText:String, extendToOverlappingLinks:Boolean):void
+	 		{
+	 			if (activeFlow && activeFlow.interactionManager is IEditManager)
+	 			{
+	  				IEditManager(activeFlow.interactionManager).applyLink(urlText, targetText, extendToOverlappingLinks);			
+	 				activeFlow.interactionManager.setFocus();
+	 			}
+	 		}
+ 		
+		    private var onStage:Boolean = false;
+    		private var addedFrameEventListener:Boolean = false;
+    		private var lastRange:ElementRange;
+    		
+			private function onAddedToStage():void
+			{
+				// the dataProviders aren't set up yet - delay to the frame
+				onStage = true;
+				if (!addedFrameEventListener)
+				{
+					addedFrameEventListener = true;
+					addEventListener("enterFrame",onEnterFrame);
+				}
+			}
+		
+			private function onEnterFrame(p:Event):void
+			{
+				this.removeEventListener("enterFrame",onEnterFrame);
+				addedFrameEventListener = false;
+			
+				update(lastRange);
+			}
+	
+			private function onRemovedFromStage():void
+			{
+				onStage = false;
+			}    		
+
+			protected function setTargetCombo(val:String):void
+			{
+				var length:uint = linkTargetCombo.dataProvider.length;
+		
+				for (var i:uint = 0; i < length; i++)
+				{
+					if (linkTargetCombo.dataProvider.getItemAt(i).toLowerCase() == val.toLowerCase())
+					{
+						linkTargetCombo.selectedIndex = i;
+						return;
+					}
+				}
+				linkTargetCombo.selectedIndex = -1;
+				linkTargetCombo.validateNow();
+				linkTargetCombo.text = val;
+			}
+    					
+			public function update(range:ElementRange):void
+			{
+				if (!range)
+				{
+					if (onStage)
+						visible = false;
+					lastRange = null;
+					return;
+				}
+				
+				var linkString:String = "";
+				var linkTarget:String = "";
+				var linkEl:LinkElement = range.firstLeaf.getParentByType(LinkElement) as LinkElement;
+				if (linkEl != null)
+				{
+					var linkElStart:int = linkEl.getAbsoluteStart();
+					var linkElEnd:int = linkElStart + linkEl.textLength;
+					if (linkElEnd < linkElStart)
+					{
+						var temp:int = linkElStart;
+						linkElStart = linkElEnd;
+						linkElEnd = temp;
+					}
+					
+					var beginRange:int = range.absoluteStart;
+					var endRange:int = range.absoluteEnd;
+					
+					var beginPara:ParagraphElement = range.firstParagraph;
+					if (endRange == (beginPara.getAbsoluteStart() + beginPara.textLength))
+					{
+						endRange--;
+					}
+					
+					if ((beginRange == endRange) || (endRange <= linkElEnd))
+					{
+						linkString = LinkElement(linkEl).href;
+						linkTarget = LinkElement(linkEl).target;
+					}
+				}
+				
+				if (onStage)
+				{
+					if (!visible)
+						visible = true;
+					linkTextInput.text = linkString ? linkString : "";
+					setTargetCombo(linkTarget ? linkTarget : "");
+				}
+				lastRange = range;
+			}			
+		]]>
+	</mx:Script>
+
+	<mx:Label text="Link Url:" fontWeight="bold"/>
+	<mx:TextInput id="linkTextInput" width="140"/>
+	<mx:Label text="Link Target:" fontWeight="bold"/>
+	<mx:ComboBox id="linkTargetCombo" editable="true"
+		selectedIndex="0" dataProvider = "{targetArray}"/>
+	<mx:CheckBox id = "linkExtendCheckBox" label="Extend"/>
+	<mx:Button label="Apply Link" 
+		click="changeLink(linkTextInput.text, linkTargetCombo.text, linkExtendCheckBox.selected);" />
+</mx:HBox>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkChangeEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkChangeEvent.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkChangeEvent.as
new file mode 100644
index 0000000..2c500dc
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/LinkChangeEvent.as
@@ -0,0 +1,51 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 textEditBar
+{
+	import flash.events.Event;
+	
+	public class LinkChangeEvent extends Event
+	{
+		private var _linkText:String;
+		private var _targetText:String;
+		private var _extendToOverlappingLinks:Boolean;
+		
+		public function LinkChangeEvent(type:String, linkText:String, targetText:String, extendToOverlappingLinks:Boolean=false, bubbles:Boolean=false, cancelable:Boolean=false)
+		{
+			_linkText = linkText;
+			_targetText = targetText;
+			_extendToOverlappingLinks = extendToOverlappingLinks;
+			super(type, bubbles, cancelable);
+		}
+		
+		override public function clone():Event
+		{
+			return new LinkChangeEvent(type, _linkText, _targetText, _extendToOverlappingLinks, bubbles, cancelable);
+		}
+		
+		public function get linkText():String
+		{ return _linkText; }		
+		
+		public function get linkTarget():String
+		{ return _targetText; }
+		
+		public function get extendToOverlappingLinks():Boolean
+		{ return _extendToOverlappingLinks; }
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SingleContainerView.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SingleContainerView.mxml b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SingleContainerView.mxml
new file mode 100644
index 0000000..85797c2
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SingleContainerView.mxml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+
+<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="0xffffff" resize="handleResize()">
+	
+	<mx:Script>
+		<![CDATA[
+		import flashx.textLayout.elements.TextFlow;
+		import flashx.textLayout.compose.StandardFlowComposer;
+		import flashx.textLayout.container.ContainerController;
+		import textEditBar.SpriteWithIME;
+		
+		
+		private var _activeFlow:TextFlow;
+		
+		public function changeContainerSetup(newActiveFlow:TextFlow):void
+ 		{
+ 			_activeFlow = newActiveFlow;
+ 			if (_activeFlow)
+ 			{
+ 				if (!_activeFlow.flowComposer)
+ 					_activeFlow.flowComposer = new StandardFlowComposer();
+ 				if (_activeFlow.flowComposer.numControllers < 1)
+ 					_activeFlow.flowComposer.addController(new ContainerController(new SpriteWithIME()));
+				rawChildren.addChild(_activeFlow.flowComposer.getControllerAt(0).container);	
+				handleResize();
+ 			}
+  		}
+ 		
+		public function handleResize():void
+		{
+			if (!_activeFlow)
+				return;
+				
+			var newFrameWidth:Number = width;
+			var newFrameHeight:Number = height;
+
+			var cont:ContainerController = _activeFlow.flowComposer.getControllerAt(0);
+			if (cont.container)
+				updateFrameDimensions(cont,0,0,newFrameWidth,newFrameHeight);
+
+			_activeFlow.flowComposer.updateAllControllers();
+				
+			if (_activeFlow.interactionManager && _activeFlow.interactionManager.hasSelection())
+				_activeFlow.flowComposer.getControllerAt(0).scrollToRange(_activeFlow.interactionManager.activePosition,_activeFlow.interactionManager.anchorPosition);	
+
+		}
+				
+ 		/** helper function to update a frame's dimensions */
+ 		private function updateFrameDimensions(controller:ContainerController,x:Number,y:Number,w:Number,h:Number):void
+ 		{
+ 			var tc:DisplayObject = controller.container;
+ 			
+   			if (tc.x != x)
+ 				tc.x = x;
+ 			if (tc.y != y)
+ 				tc.y = y;
+			controller.setCompositionSize(w,h);
+ 		}
+ 		
+		]]>
+	</mx:Script>
+</mx:Canvas>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SpriteWithIME.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SpriteWithIME.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SpriteWithIME.as
new file mode 100644
index 0000000..8abf701
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/SpriteWithIME.as
@@ -0,0 +1,102 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 textEditBar
+{
+	import flash.display.Sprite;
+	
+	import mx.core.IIMESupport;
+	import mx.managers.IFocusManagerComponent;
+
+	public class SpriteWithIME extends Sprite implements IIMESupport, IFocusManagerComponent
+	{
+		private var _imeMode:String;
+		
+		public function SpriteWithIME()
+		{
+			super();
+		}
+		
+		public function get enableIME():Boolean
+		{
+			return true;
+		}
+		
+		public function get imeMode():String
+		{
+			return _imeMode;
+		}
+		
+		public function set imeMode(value:String):void
+		{
+			_imeMode = value;
+		}
+		
+		public function get focusEnabled():Boolean
+		{
+			return true;
+		}
+		
+		public function set focusEnabled(value:Boolean):void
+		{
+		}
+		
+		// For now! Should be dependent on Configuration.manageTabKey
+		public function get tabFocusEnabled():Boolean
+		{
+			return true;
+		}
+		
+		public function set tabFocusEnabled(value:Boolean):void
+		{
+		}
+		
+		public function get hasFocusableChildren():Boolean
+		{
+			return false;
+		}
+		
+		public function set hasFocusableChildren(value:Boolean):void
+		{
+		}
+		
+		public function get mouseFocusEnabled():Boolean
+		{
+			return false;
+		}
+		
+		/*public function get tabEnabled():Boolean
+		{
+			return false;
+		}
+		
+		public function get tabIndex():int
+		{
+			return 0;
+		}*/
+		
+		public function setFocus():void
+		{
+		}
+		
+		public function drawFocus(isFocused:Boolean):void
+		{
+		}
+		
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StatusPopup.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StatusPopup.mxml b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StatusPopup.mxml
new file mode 100644
index 0000000..850df4c
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StatusPopup.mxml
@@ -0,0 +1,39 @@
+<?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.
+
+-->
+<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="500" height="390" verticalScrollPolicy="off"
+	horizontalScrollPolicy="off">
+	<mx:Script>
+		<![CDATA[
+			public var closeFunction:Function;
+			public var textFormat:String;
+			[Bindable]
+			public var importFunction:Function;
+			[Bindable]
+			public var saveFunction:Function;
+		]]>
+	</mx:Script>	
+	<mx:TextArea id="textArea" x="0" y="0" width="100%" height="100%" fontFamily="_sans">
+	</mx:TextArea>
+	<mx:ControlBar horizontalAlign="center">
+		<mx:Button label="Import" id="cmdImport" visible="{importFunction != null}" click="{if (importFunction != null) importFunction(this)}"/>
+		<mx:Button label="Save"   id="cmdSave"   visible="{saveFunction != null}" click="{if (saveFunction != null) saveFunction(this)}"/>
+		<mx:Button label="Close"  id="cmdClose"  click="closeFunction(this)"/>
+	</mx:ControlBar>
+</mx:Panel>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StyleChangeEvent.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StyleChangeEvent.as b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StyleChangeEvent.as
new file mode 100644
index 0000000..eb3273c
--- /dev/null
+++ b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/StyleChangeEvent.as
@@ -0,0 +1,46 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 textEditBar
+{
+	import flash.events.Event;
+	
+	import flashx.textLayout.formats.ITextLayoutFormat;
+
+	public class StyleChangeEvent extends Event
+	{
+		private var _attrs:Object;
+		
+		public function StyleChangeEvent(type:String, styleAttrs:Object, bubbles:Boolean=false, cancelable:Boolean=false)
+		{
+			_attrs = styleAttrs;
+			super(type, bubbles, cancelable);
+		}
+		
+		override public function clone():Event
+		{
+			return new StyleChangeEvent(type, _attrs, bubbles, cancelable);
+		}
+		
+		public function get format():ITextLayoutFormat
+		{ return _attrs as ITextLayoutFormat; }	
+		
+		public function get attrs():Object
+		{ return _attrs; }
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/%icon_tcy.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/%icon_tcy.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/%icon_tcy.png
new file mode 100644
index 0000000..47c3637
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/%icon_tcy.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/BreakOpportunityType.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/BreakOpportunityType.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/BreakOpportunityType.png
new file mode 100644
index 0000000..565003d
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/BreakOpportunityType.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIcon.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIcon.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIcon.png
new file mode 100644
index 0000000..7894025
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIcon.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIconDisabled.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIconDisabled.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIconDisabled.png
new file mode 100644
index 0000000..22975eb
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/EmbedDeleteIconDisabled.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignBottom_Sm_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignBottom_Sm_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignBottom_Sm_N.png
new file mode 100644
index 0000000..a6ec4b1
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignBottom_Sm_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignJustify_Sm_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignJustify_Sm_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignJustify_Sm_N.png
new file mode 100644
index 0000000..4c45bc2
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignJustify_Sm_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignMiddle_Sm_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignMiddle_Sm_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignMiddle_Sm_N.png
new file mode 100644
index 0000000..a1f5ae8
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignMiddle_Sm_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignTop_Sm_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignTop_Sm_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignTop_Sm_N.png
new file mode 100644
index 0000000..9981848
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextAlignTop_Sm_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBaselineShift_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBaselineShift_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBaselineShift_Md_N.png
new file mode 100644
index 0000000..e348d7c
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBaselineShift_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBottomOffset_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBottomOffset_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBottomOffset_Md_N.png
new file mode 100644
index 0000000..89b948e
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextBottomOffset_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextFirstLineIndent_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextFirstLineIndent_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextFirstLineIndent_Md_N.png
new file mode 100644
index 0000000..eebadec
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextFirstLineIndent_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftIndent_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftIndent_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftIndent_Md_N.png
new file mode 100644
index 0000000..b587cc6
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftIndent_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftOffset_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftOffset_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftOffset_Md_N.png
new file mode 100644
index 0000000..33c35a8
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextLeftOffset_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightIndent_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightIndent_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightIndent_Md_N.png
new file mode 100644
index 0000000..2c0f651
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightIndent_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightOffset_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightOffset_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightOffset_Md_N.png
new file mode 100644
index 0000000..1efc8e7
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextRightOffset_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSmallCaps_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSmallCaps_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSmallCaps_Md_N.png
new file mode 100644
index 0000000..72c3860
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSmallCaps_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceAfter_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceAfter_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceAfter_Md_N.png
new file mode 100644
index 0000000..3d31df2
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceAfter_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceBefore_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceBefore_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceBefore_Md_N.png
new file mode 100644
index 0000000..34a5bf6
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextSpaceBefore_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextTopOffset_Md_N.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextTopOffset_Md_N.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextTopOffset_Md_N.png
new file mode 100644
index 0000000..b5b98b0
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/P_TextTopOffset_Md_N.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/TextAutoLeadingPercent.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/TextAutoLeadingPercent.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/TextAutoLeadingPercent.png
new file mode 100644
index 0000000..f8726a1
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/TextAutoLeadingPercent.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitCase.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitCase.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitCase.png
new file mode 100644
index 0000000..b3da25b
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitCase.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitWidth.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitWidth.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitWidth.png
new file mode 100644
index 0000000..7e156f0
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/digitWidth.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/elementBaseline.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/elementBaseline.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/elementBaseline.png
new file mode 100644
index 0000000..056cf8f
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/elementBaseline.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_all_but_last.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_all_but_last.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_all_but_last.png
new file mode 100644
index 0000000..7475419
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_all_but_last.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_center.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_center.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_center.png
new file mode 100644
index 0000000..3fac48d
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_center.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_end.PNG
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_end.PNG b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_end.PNG
new file mode 100644
index 0000000..15d6ddf
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_end.PNG differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_justify.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_justify.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_justify.png
new file mode 100644
index 0000000..bf4a6d6
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_justify.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_left.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_left.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_left.png
new file mode 100644
index 0000000..c9f45f6
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_left.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_right.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_right.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_right.png
new file mode 100644
index 0000000..1bdcda3
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_right.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_start.PNG
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_start.PNG b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_start.PNG
new file mode 100644
index 0000000..039711b
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_align_start.PNG differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_bullet.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_bullet.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_bullet.png
new file mode 100644
index 0000000..a99e9a2
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_bullet.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_bold.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_bold.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_bold.png
new file mode 100644
index 0000000..a0a71d1
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_bold.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_italic.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_italic.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_italic.png
new file mode 100644
index 0000000..2d0221d
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_italic.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_strikethrough.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_strikethrough.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_strikethrough.png
new file mode 100644
index 0000000..3195a1b
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_strikethrough.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_underline.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_underline.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_underline.png
new file mode 100644
index 0000000..316b2f1
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_style_underline.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_tcy.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_tcy.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_tcy.png
new file mode 100644
index 0000000..04e02e9
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/icon_tcy.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/ligatures.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/ligatures.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/ligatures.png
new file mode 100644
index 0000000..7f72cb0
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/ligatures.png differ

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/47a67608/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/lineBaseline.png
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/lineBaseline.png b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/lineBaseline.png
new file mode 100644
index 0000000..b19b3c8
Binary files /dev/null and b/TourDeFlex/TourDeFlex3/src/spark/tlf/textEditBar/assets/lineBaseline.png differ