Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1251846 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/automation_dmv/src/mx/automation/delegates/advancedDataGrid/OLAPDataGridAutomationImpl.as
+++ frameworks/projects/automation_dmv/src/mx/automation/delegates/advancedDataGrid/OLAPDataGridAutomationImpl.as
@@ -0,0 +1,281 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.automation.delegates.advancedDataGrid
+{
+
+	import flash.display.DisplayObject;
+	import flash.events.MouseEvent;
+	import mx.automation.Automation;
+	import mx.automation.IAutomationObject;
+	import mx.automation.tabularData.OLAPDataGridTabularData;
+
+
+	import mx.controls.AdvancedDataGrid;
+	import mx.controls.OLAPDataGrid;
+	import mx.olap.IOLAPAxisPosition;
+	import mx.olap.IOLAPResult;
+	import mx.olap.IOLAPResultAxis;
+	import mx.olap.OLAPQuery;
+
+	import mx.controls.listClasses.IListItemRenderer;
+	import mx.core.mx_internal;
+	use namespace mx_internal;
+
+
+	// take the class place it in a Mixin array and the System manger calls init on this class.
+	[Mixin]
+	/**
+	 *
+	 *  Defines methods and properties required to perform instrumentation for the
+	 *  OLAPDataGrid control.
+	 *
+	 *  @see mx.controls.OLAPDataGrid
+	 *
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public class  OLAPDataGridAutomationImpl extends AdvancedDataGridAutomationImpl
+	{
+		/**
+		 *  Registers the delegate class for a component class with automation manager.
+		 *
+		 *  @param root The SystemManger of the application.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public static function init(root:DisplayObject):void
+		{
+			Automation.registerDelegateClass(OLAPDataGrid, OLAPDataGridAutomationImpl);
+		}
+
+		/**
+		 *  Constructor.
+		 *
+		 * @param obj OLAPDataGrid object to be automated.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public function OLAPDataGridAutomationImpl(obj:OLAPDataGrid)
+		{
+			super(obj);
+		}
+
+		/**
+		 *  @private
+		 *  get methods for internal use and the mouse Down Handler
+		 */
+		protected   function get odg():OLAPDataGrid
+		{
+			return uiComponent as OLAPDataGrid;
+		}
+
+
+		/*  this method is overwritten for the following reason
+		In DG and ADG, we used to record the basic mouse click event
+		when there is no item renderer at the click position
+		in ODG, we get valid item renderer when the user clicks on the
+		column Headers. But this does not result in a selection
+		Hence we want to record click in this case too. */
+		/**
+		 * @private
+		 */
+		override protected function mouseClickHandler(event:MouseEvent):void
+		{
+			var item:IListItemRenderer = odg.getItemRendererForMouseEvent(event);
+
+			if (!item)
+			{
+				//DataGrid overrides displayObjectToItemRenderer to return
+				//null if the item is the active item editor, so that's
+				//not a reliable way of determining if the user clicked on a blank
+				//row or now, so use mouseEventToItemRendererOrEditor instead
+				if (odg.mouseEventToItemRendererOrEditor(event) == null)
+					recordAutomatableEvent(event, true);
+
+				return;
+			}
+			else
+			{
+
+				// in case of ODG we get a valid item renderer when the user
+				// clicks on the column headers. In this case, we are not
+				// recording the select event, as no selection happens.
+				// hence check whether the element is a column Hedaer element
+				// in this case, record it as a mouse click event
+				var row:int = odg.itemRendererToIndex(item);
+				if(row == -1 )
+				{
+					recordAutomatableEvent(event, true)
+				}
+				else
+				{
+					// take the key modifiers from the mouseDown event because
+					// they were used by List for making the selection
+					event.ctrlKey = ctrlKeyDown;
+					event.shiftKey = shiftKeyDown;
+					recordListItemSelectEvent(item, event);
+				}
+
+			}
+		}
+
+		/**
+		 *  A matrix of the automationValues of each item in the grid1. The return value
+		 *  is an array of rows, each of which is an array of item renderers (row-major).
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		override public function get automationTabularData():Object
+		{
+			return  new OLAPDataGridTabularData(odg);
+		}
+
+
+		/**
+		 *  @private
+		 */
+
+
+		/**
+		 *  @private
+		 */
+		override protected function getItemAutomationNameOrValueHelper(delegate:IAutomationObject,
+																	   useName:Boolean):String
+		{
+			var result:Array = [];
+			var item:IListItemRenderer = delegate as IListItemRenderer;
+
+			if (item == odg.itemEditorInstance)
+				item = odg.editedItemRenderer;
+
+			var row:int = odg.itemRendererToIndex(item);
+			if ((row == int.MIN_VALUE)|| (row < 0 ))
+				return null;
+
+			// get the complete information from the tabular date
+
+			var tempTabData:OLAPDataGridTabularData = new  OLAPDataGridTabularData(odg);
+			result = tempTabData.getValues(row,row+1);
+			result = result[0];
+
+			// get the selected cell Index among the visible cell index
+			var selectedCellPos:Number = 0;
+
+			row = row < odg.lockedRowCount ?
+				row :
+				row - odg.verticalScrollPosition;
+
+
+			var listItems:Array = odg.rendererArray;
+			var selectedCellFound:Boolean = false;
+
+			var n:int = listItems[row].length;
+			for (var col:int = 0; col < n; col++)
+			{
+				var i:IListItemRenderer = listItems[row][col];
+				if (i == item)
+				{
+					selectedCellFound = true;
+					break;
+				}
+			}
+
+			if(selectedCellFound == true)
+				selectedCellPos = col ;
+
+			//change the sring at the selected cellposition
+			var tempString:String = result[selectedCellPos];
+			tempString = "*" + tempString + "*";
+			result[selectedCellPos]= tempString;
+
+			return result.join(" | ");
+
+		}
+
+
+		/**
+		 * @private
+		 */
+		override public function getAutomationChildAt(index:int):IAutomationObject
+		{
+
+			var listItems:Array = grid1.rendererArray;
+
+			var numCols:int = listItems[0].length;
+			var row:uint = uint(numCols == 0 ? 0 : index / numCols);
+			var col:uint = uint(numCols == 0 ? index : index % numCols);
+
+			var item:IListItemRenderer = listItems[row][col];
+
+			if (grid1.itemEditorInstance &&
+				grid1.editedItemPosition &&
+				item == grid1.editedItemRenderer)
+				return grid1.itemEditorInstance as IAutomationObject;
+
+			return  item as IAutomationObject;
+		}
+
+		/**
+		 * @private
+		 */
+		override public function getAutomationChildren():Array
+		{
+			var childrenList:Array = new Array();
+			var listItems:Array = grid1.rendererArray;
+
+			// we get this as the 2 dim array of row and columns
+			// we need to make this as single element array
+			//while (!listItems[row][col]
+			var  rowcount:int  = listItems?listItems.length:0;
+			if (rowcount != 0)
+			{
+				var coulumcount:int = 0;
+				if ((listItems[0]) is Array)
+					coulumcount = (listItems[0] as Array).length;
+
+				for (var i:int = 0; i < rowcount ; i++)
+				{
+					for(var j:int = 0; j < coulumcount ; j++)
+					{
+						var item:IListItemRenderer = listItems[i][j];
+						if (item)
+						{
+							if (grid1.itemEditorInstance &&
+								grid1.editedItemPosition &&
+								item == grid1.editedItemRenderer)
+								childrenList.push(grid1.itemEditorInstance as IAutomationObject);
+
+							childrenList.push(item as IAutomationObject);
+						}
+					}
+
+				}
+			}
+
+			return  childrenList;
+		}
+
+	}
+}
+


Still had old namespace (jivesoftware).

Still had old namespace (jivesoftware).

--- src/org/igniterealtime/xiff/logging/LoggerFactory.as
+++ src/org/igniterealtime/xiff/logging/LoggerFactory.as
@@ -7,9 +7,9 @@
 	import mx.logging.Log;
 	import mx.logging.LogEventLevel;
 	import mx.logging.targets.TraceTarget;
-  import mx.logging.targets.LineFormattedTarget;
-  import mx.controls.TextArea;
-
+	import mx.logging.targets.LineFormattedTarget;
+	import mx.controls.TextArea;
+
 	public final class LoggerFactory
 	{
 		public static function configureDefault( filters:Array, level:int ):void
@@ -17,21 +17,21 @@
 			configureTarget( new TraceTarget(), filters, level );
 		}

-    public static function configureTextAreaTarget( textArea:TextArea, filters:Array, level:int ):void
-    {
-      configureTarget( new TextAreaTarget( textArea ), filters, level );
-    }
+		public static function configureTextAreaTarget( textArea:TextArea, filters:Array, level:int ):void
+		{
+			configureTarget( new TextAreaTarget( textArea ), filters, level );
+		}

-    private static function configureTarget( logTarget:LineFormattedTarget, filters:Array, level:int ):void
-    {
-      logTarget.filters = new Array(["org.jivesoftware.*"]).concat(filters);
+		private static function configureTarget( logTarget:LineFormattedTarget, filters:Array, level:int ):void
+		{
+			logTarget.filters = new Array(["org.igniterealtime.*"]).concat(filters);
 			logTarget.level = level;
 			logTarget.includeTime = true;
 			logTarget.includeLevel = true;

 			Log.addTarget(logTarget);
-    }
-
+		}
+
 		public static function getLogger(category:String):ILogger
 		{
 			return Log.getLogger(category);


Transferred from the Adobe Open Source Subversion Repository

Revision: 17555
Author:   cframpto@adobe.com
Date:     2010-09-02T14:24:14.877787Z

Log Message:
-----------
If RET text is editable and multiline=false, let TLF's EditManager handle the ENTER key so that if the ENTER is pressed in the middle of a list the proper list handling is done - add a new list item or close off the list, depending on position in the list - and if not in a list, the paragraph is split.

Also fix selectionHightlighting metadata since it was in the same patch.

QE notes:
Doc notes:
Bugs: SDK-27623, SDK-25435
Reviewer: Alex
Tests run: checkintests, cyclone
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/RichEditableText.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1282521 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as
@@ -79,7 +79,8 @@
      *  @productversion Flex 4
      */
     public function RichEditableTextContainerManager(
-                        container:RichEditableText, configuration:IConfiguration)
+                        container:RichEditableText,
+                        configuration:IConfiguration=null)
     {
         super(container, configuration);

@@ -599,7 +600,7 @@

         if (!event.isDefaultPrevented())
             super.keyDownHandler(event);
-    }
+    }

     /**
      *  @private


Transferred from the Adobe Open Source Subversion Repository

Revision: 12322
Author:   cframpto@adobe.com
Date:     2009-12-01T14:50:07.041950Z

Log Message:
-----------
Add support for custom context menus to TextArea, TextInput and RichEditableText.  TLF has a context menu but we now allow it to be modified, or a totally different one (or none) to be used instead.

When pasting text into a field with multiline equal to false, strip the newlines from the pasted text.

For composite operations, the RET changing event is now dispatched only at the beginning of the composite operation, rather than at the beginning of each individual operation in the composite operation.  It is not possible to a composite operation as it is for individual operations.

The RET change event is now dispatched at flow operation complete rather than flow operation end.  At this point the text flow is no longer in an intermediary state and it can be modified if desired in the user's event handler.

QE notes:
Doc notes:
Bugs: SDK-23950, SDK-23926, SDK-24263
Reviewer: Gordon
Tests run: checkintests
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/RichEditableText.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1282510 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as
@@ -14,11 +14,13 @@

 import flash.display.BlendMode;
 import flash.display.Graphics;
+import flash.events.ContextMenuEvent;
 import flash.events.Event;
 import flash.events.FocusEvent;
 import flash.events.KeyboardEvent;
 import flash.events.MouseEvent;
 import flash.geom.Rectangle;
+import flash.ui.ContextMenu;
 import flash.ui.Keyboard;

 import flashx.textLayout.container.ContainerController;
@@ -179,6 +181,21 @@
     /**
      *  @private
      */
+    override tlf_internal function getContextMenu():ContextMenu
+    {
+        // Do not call textDisplay.contextMenu if the context menu is not
+        // set since it calls this function to get the default context menu
+        // from the text container manager.
+
+        if (!textDisplay.contextMenuSet)
+            return super.getContextMenu();
+
+        return textDisplay.contextMenu;
+    }
+
+    /**
+     *  @private
+     */
     override protected function getUndoManager():IUndoManager
     {
         if (!textDisplay.undoManager)
@@ -564,6 +581,52 @@
                     anchorPosition : activePosition;
     }

+    /**
+     *  @private
+     *  The textContainerManager is setting the context menu on the
+     *  container which is the RichEditableText component.
+     */
+    mx_internal function resetContextMenuListener(contextMenu:ContextMenu):void
+    {
+        // Remove the listener from the old context menu and add it to the new
+        // context menu if we're in a state where there was a listener already
+        // set up.
+        if (composeState == TextContainerManager.COMPOSE_FACTORY)
+        {
+            if (handlersState == TextContainerManager.HANDLERS_ACTIVE)
+            {
+                if (textDisplay.contextMenu)
+                {
+                    textDisplay.contextMenu.removeEventListener(
+                        ContextMenuEvent.MENU_SELECT, menuSelectHandler);
+                }
+
+                if (contextMenu)
+                {
+                    contextMenu.addEventListener(
+                        ContextMenuEvent.MENU_SELECT, menuSelectHandler);
+                }
+            }
+        }
+        else
+        {
+            var controller:ContainerController =
+                getTextFlow().flowComposer.getControllerAt(0);
+
+            if (textDisplay.contextMenu)
+            {
+                textDisplay.contextMenu.removeEventListener(
+                    ContextMenuEvent.MENU_SELECT, controller.menuSelectHandler);
+            }
+
+            if (contextMenu)
+            {
+                contextMenu.addEventListener(
+                    ContextMenuEvent.MENU_SELECT, controller.menuSelectHandler);
+            }
+        }
+    }
+
     //--------------------------------------------------------------------------
     //
     //  Overridden event handlers


Transferred from the Adobe Open Source Subversion Repository

Revision: 9433
Author:   clucier@adobe.com
Date:     2009-08-20T23:54:36.373816Z

Log Message:
-----------
Code complete for runtime design layers.  Incorporated PARB renames and refactoring.  Finished off all compiler optimizations that were spec'd.  Some minor bug fixes.

QE notes: Candidate checkin for code complete. You are welcome to write test plan against the current API.
Doc notes:  DesignLayer docs should be scrubbed.
Bugs:  N/A
Reviewer: Peter (compiler), Chet (renames), Paul (will review MXMLDocument post PTO).
Tests run: Checkin, added new basic test.
Is noteworthy for integration: Yes.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/core/SpriteVisualElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/builder/ComponentBuilder.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/DesignLayer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IVisualElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/supportClasses/TextGraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/rep/MxmlDocument.java</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/tests/basicTests/spark/scripts/DesignLayerTestScript.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/lang/StandardDefs.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/UIMovieClip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/tests/basicTests/BasicTests.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/tests/basicTests/spark/views/DesignLayerTests.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/rep/init/ValueInitializer.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/tests/basicTests/BasicTests-config.xml</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1283313 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/core/SpriteVisualElement.as
+++ frameworks/projects/spark/src/spark/core/SpriteVisualElement.as
@@ -278,8 +278,8 @@
         {
             _alpha = value;

-            if (layer)
-                value = value * layer.computedAlpha;
+            if (designLayer)
+                value = value * designLayer.effectiveAlpha;

             super.alpha = value;
         }
@@ -593,38 +593,38 @@
      *  @private
      *  Storage for the layer property.
      */
-    private var _layer:DesignLayer;
+    private var _designLayer:DesignLayer;

     [Inspectable (environment='none')]

     /**
-     *  @copy mx.core.IVisualElement#layer
+     *  @copy mx.core.IVisualElement#designLayer
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
      *  @playerversion AIR 1.5
      *  @productversion Flex 4
      */
-    public function get layer():DesignLayer
-    {
-        return _layer;
+    public function get designLayer():DesignLayer
+    {
+        return _designLayer;
     }

     /**
      *  @private
      */
-    public function set layer(value:DesignLayer):void
-    {
-        if (_layer)
-            _layer.removeEventListener("layerPropertyChange", layer_PropertyChange, false);
+    public function set designLayer(value:DesignLayer):void
+    {
+        if (_designLayer)
+            _designLayer.removeEventListener("layerPropertyChange", layer_PropertyChange, false);

-        _layer = value;
+        _designLayer = value;

-        if (_layer)
+        if (_designLayer)
         {
-            _layer.addEventListener("layerPropertyChange", layer_PropertyChange, false, 0, true);
-            super.alpha = _alpha * _layer.computedAlpha;
-            super.visible = _visible && _layer.computedVisibility;
+            _designLayer.addEventListener("layerPropertyChange", layer_PropertyChange, false, 0, true);
+            super.alpha = _alpha * _designLayer.effectiveAlpha;
+            super.visible = _visible && _designLayer.effectiveVisibility;
         }
     }

@@ -1129,7 +1129,7 @@
     {
         _visible = value;

-        if (layer && !layer.computedVisibility)
+        if (designLayer && !designLayer.effectiveVisibility)
             value = false;

         if (super.visible == value)
@@ -1342,14 +1342,14 @@
     {
         switch (event.property)
         {
-            case "computedVisibility":
+            case "effectiveVisibility":
             {
                 var newValue:Boolean = (event.newValue && _visible);
                 if (newValue != super.visible)
                     super.visible = newValue;
                 break;
             }
-            case "computedAlpha":
+            case "effectiveAlpha":
             {
                 var newAlpha:Number = Number(event.newValue) * _alpha;
                 if (newAlpha != super.alpha)


Transferred from the Adobe Open Source Subversion Repository

Revision: 10606
Author:   egeorgie@adobe.com
Date:     2009-09-25T23:01:50.455888Z

Log Message:
-----------
White space cleanup.

Doc notes: None
Bugs: None
Reviewer: Evtim
Tests run: build
Is noteworthy for integration: Nope

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DropDownList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/TransformOffsets.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/states/AddItems.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/OnDemandEventDispatcher.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/VideoDisplay.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/PopUpAnchor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/MatrixUtil.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/supportClasses/Block.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ViewStack.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ToggleButtonBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/EffectManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/CompoundTransform.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Effect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/LayoutElementUIComponentUtils.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/BitmapFill.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/ArrayList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/GradientBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/DropDownController.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/BasicLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/ListCollectionView.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/geom/Transform.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/scrollClasses/ScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/supportClasses/LinearLayoutVector.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/Path.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/DescribeTypeCache.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/sparkTest/src/testWheel.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/AnimateTransform.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/TileLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/skins/SparkSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/supportClasses/AnimateTransformInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DataGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/AdvancedLayoutFeatures.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1283502 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/effects/AnimateTransform.as
+++ frameworks/projects/spark/src/spark/effects/AnimateTransform.as
@@ -600,11 +600,11 @@
             // the target, but that's not the case currently.
             computedTransformCenter = new Vector3D(target.transformX,
                 target.transformY, target.transformZ);
-            if(!isNaN(transformX))
+            if (!isNaN(transformX))
                 computedTransformCenter.x = transformX;
-            if(!isNaN(transformY))
+            if (!isNaN(transformY))
                 computedTransformCenter.y = transformY;
-            if(!isNaN(transformZ))
+            if (!isNaN(transformZ))
                 computedTransformCenter.z = transformZ;
         }
         return computedTransformCenter;
@@ -767,18 +767,18 @@
                         isNaN(offsetTranslation.z))
                     {

-                        if(currentXFormPositionComputed == false)
+                        if (currentXFormPositionComputed == false)
                         {
                             target.transformPointToParent(xformCenter,
                                 xformPosition, postLayoutPosition);
                             currentXFormPositionComputed = true;
                         }

-                        if(isNaN(offsetTranslation.x))
+                        if (isNaN(offsetTranslation.x))
                             offsetTranslation.x = postLayoutPosition.x;
-                        if(isNaN(offsetTranslation.y))
+                        if (isNaN(offsetTranslation.y))
                             offsetTranslation.y = postLayoutPosition.y;
-                        if(isNaN(offsetTranslation.z))
+                        if (isNaN(offsetTranslation.z))
                             offsetTranslation.z = postLayoutPosition.z;
                     }

@@ -1008,7 +1008,7 @@
             // flag.  In that case, we can assume that they need an offsets object if one doesn't already exist.
             // Second, if we captured post-layout changes from a state change. In that case, we can assume that since values were captured,
             // offsets must already exist.
-            if(target.postLayoutTransformOffsets == null)
+            if (target.postLayoutTransformOffsets == null)
                 target.postLayoutTransformOffsets = new TransformOffsets();
         }
         // Feed startDelay directly into keyframe times


Transferred from the Adobe Open Source Subversion Repository

Revision: 13359
Author:   smgilson@adobe.com
Date:     2010-01-08T01:12:34.344962Z

Log Message:
-----------
ASDoc updates for major axis changes

QE notes:
Doc notes:
Bugs:
Reviewer:
Tests run: checkintests
Is noteworthy for integration:

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/HGroup.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1285153 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/layouts/HorizontalLayout.as
+++ frameworks/projects/spark/src/spark/layouts/HorizontalLayout.as
@@ -671,6 +671,17 @@

     /**
      *  The horizontal alignment of the content relative to the container's width.
+     *  If the value is "left", "right", or "center" then the
+     *  layout element is aligned relative to the container's contentWidth property.
+     *
+     *
If the value is "contentJustify", then the layout element's actual
+     *  width is set to the contentWidth of the container.
+     *  The contentWidth of the container is the width of the largest layout element.
+     *  If all layout elements are smaller than the width of the container,
+     *  then set the width of all layout elements to the width of the container.

+     *
+     *
If the value is "justify" then the layout element's actual width
+     *  is set to the container's width.

      *
      *
This property has no effect when clipAndEnableScrolling is true
      *  and the contentWidth is greater than the container's width.


Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1290389 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/advancedgrids/src/mx/controls/advancedDataGridClasses/AdvancedDataGridListData.as
+++ frameworks/projects/advancedgrids/src/mx/controls/advancedDataGridClasses/AdvancedDataGridListData.as
@@ -0,0 +1,195 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.controls.advancedDataGridClasses
+{
+
+import mx.controls.dataGridClasses.DataGridListData;
+import mx.core.IUIComponent;
+
+/**
+ *  The AdvancedDataGridListData class defines the data type of the listData property
+ *  implemented by drop-in item renderers or drop-in item editors for the AdvancedDataGrid control.
+ *  All drop-in item renderers and drop-in item editors must implement the
+ *  IDropInListItemRenderer interface, which defines the listData property.
+ *
+ *
While the properties of this class are writable, you should consider them to
+ *  be read only. They are initialized by the AdvancedDataGrid class, and read by an item renderer
+ *  or item editor. Changing these values can lead to unexpected results.

+ *
+ *  @see mx.controls.listClasses.IDropInListItemRenderer
+ *  @see mx.controls.AdvancedDataGrid
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
+ */
+public class AdvancedDataGridListData extends DataGridListData
+{
+    include "../../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @param text Text representation of the item data.
+     *
+     *  @param dataField Name of the field or property
+     *    in the data provider associated with the column.
+     *
+     *  @param uid A unique identifier for the item.
+     *
+     *  @param owner A reference to the AdvancedDataGrid control.
+     *
+     *  @param rowIndex The index of the item in the data provider for the AdvancedDataGrid control.
+     *
+     *  @param columnIndex The index of the column in the currently visible columns of the
+     *  control.
+     *
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function AdvancedDataGridListData(text:String, dataField:String,
+                                 columnIndex:int, uid:String,
+                                 owner:IUIComponent, rowIndex:int = 0 )
+    {
+        super(text, dataField, columnIndex, uid, owner, rowIndex);
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  depth
+    //----------------------------------
+
+	[Bindable("__NoChangeEvent__")]
+
+    /**
+     *  The level of the item in the AdvancedDataGrid control. The top level is 1.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var depth:int;
+
+    //----------------------------------
+    //  disclosureIcon
+    //----------------------------------
+
+	[Bindable("__NoChangeEvent__")]
+
+    /**
+     *  A Class representing the disclosure icon for the item in the AdvancedDataGrid control.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var disclosureIcon:Class;
+
+    //----------------------------------
+    //  hasChildren
+    //----------------------------------
+
+	[Bindable("__NoChangeEvent__")]
+
+    /**
+     *  Contains true if the item has children.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var hasChildren:Boolean;
+
+    //----------------------------------
+    //  icon
+    //----------------------------------
+
+	[Bindable("__NoChangeEvent__")]
+
+    /**
+     *  A Class representing the icon for the item in the AdvancedDataGrid control.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var icon:Class;
+
+    //----------------------------------
+    //  indent
+    //----------------------------------
+
+	[Bindable("__NoChangeEvent__")]
+
+    /**
+     *  The default indentation for this row of the AdvancedDataGrid control.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var indent:int;
+
+    //----------------------------------
+    //  node
+    //----------------------------------
+
+	[Bindable("__NoChangeEvent__")]
+
+    /**
+     *  The data for this item in the AdvancedDataGrid control.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var item:Object;
+
+    //----------------------------------
+    //  open
+    //----------------------------------
+
+	[Bindable("__NoChangeEvent__")]
+
+    /**
+     *  Contains true if the item is open and it has children.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public var open:Boolean;
+}
+
+}


Added isEmpty

Added isEmpty

git-svn-id: 27326a786375daad9d33dc990c6f272e4c8f567c@945 fda5f131-174c-0410-8613-e0905860106b

--- org.openwms/trunk/source/org.openwms.common.domain.as/src/main/flex/org/openwms/common/domain/values/Barcode.as
+++ org.openwms/trunk/source/org.openwms.common.domain.as/src/main/flex/org/openwms/common/domain/values/Barcode.as
@@ -37,5 +37,10 @@
         {
             return this.value;
         }
+
+        public function isEmpty():Boolean
+        {
+        	return ((this.value == null||this.value.length == 0) ? true : false);
+        }
     }
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 12368
Author:   dsubrama@adobe.com
Date:     2009-12-02T16:37:28.078960Z

Log Message:
-----------
Rename spark.components.supportClasses.Slider to spark.components.supportClasses.SliderBase as well as spark.components.supportClasses.ScrollBar to spark.components.supportClasses.ScrollBarBase. This means the spark manifest entries have also changed (for CSS styling purposes, not for use as mxml tags) (Slider -> SliderBase, ScrollBar -> ScrollBarBase).

Change is PARB approved.

QE notes: Please check-in the updated tests
Doc notes: ASDoc has been updated. If any updates need to happen in livedocs, please do so.
Bugs: SDK-24401
Reviewer: Ryan/Jason
Tests run: Jacob ran a cyclone
Is noteworthy for integration: Yes

Modified Paths:
--------------
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/Slider.as" copyfrom-rev="12283" action="A">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/SliderBase.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/SliderAccImpl.as" copyfrom-rev="12283" action="A">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/SliderBaseAccImpl.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ScrollBar.as" copyfrom-rev="12283" action="A">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ScrollBarBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/VScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/HSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/HScrollBar.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/Slider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/spark-manifest.xml</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/spark/src/spark/accessibility/SliderAccImpl.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/sparkTest/src/components/CircularScrollBar.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1279362 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/HSlider.as
+++ frameworks/projects/spark/src/spark/components/HSlider.as
@@ -18,7 +18,7 @@

 import mx.core.IDataRenderer;

-import spark.components.supportClasses.Slider;
+import spark.components.supportClasses.SliderBase;

 //--------------------------------------
 //  Other metadata
@@ -85,7 +85,7 @@
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public class HSlider extends Slider
+public class HSlider extends SliderBase
 {
     include "../core/Version.as";


Transferred from the Adobe Open Source Subversion Repository

Revision: 4546
Author:   egeorgie@adobe.com
Date:     2009-01-16T00:18:37.466034Z

Log Message:
-----------
Code complete for TileLayout.
In this change:
1. Modify measured minimum size to guarantee all elements will fit, including any explicit whitespace requested by the user (from size for a single cell which doesn’t make sense in Gumbo anymore after the ARB decision on Group’s measured minimums).
2. Min/max limits for element dimensions for certain cases.
3. Optimizations to eliminate duplicate work during measure & updateDisplayList
4. Correct includeInLayout element support.

QE Notes:
Doc Notes:
Bugs: None
Reviewer: Hans
tests: compile

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/TileLayout.as

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1285192 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/layouts/TileLayout.as
+++ frameworks/projects/spark/src/spark/layouts/TileLayout.as
@@ -21,7 +21,40 @@
 import mx.layout.VerticalAlign;

 /**
- *  Documentation is not currently available.
+ *  TileLayout arranges the layout elements in columns and rows
+ *  of equally-sized cells.
+ *
+ *  There are a number of properties that control orientation,
+ *  count, size, gap and justification of the columns and the rows
+ *  as well as element alignment within the cells.
+ *
+ *  Per-element supported constraints are percentWidth, percentHeight.
+ *  Element's minimum and maximum sizes will always be respected and
+ *  where possible, element's size will be limited to less then or equal
+ *  of the cell size.
+ *
+ *  When not explicitly set, the columnWidth is calculated as the maximum
+ *  preferred bounds width of all elements and the columnHeight is calculated
+ *  as the maximum preferred bounds height of all elements.
+ *
+ *  When not explicitly set, the columnCount and rowCount are calculated from
+ *  any explicit width/height settings for the layout target and columnWidth
+ *  and columnHeight.  In case none is specified, the coulumnCount and rowCount
+ *  values are picked so that the resulting pixel area is as square as possible.
+ *
+ *  The measured size is calculated from the columnCount, rowCount,
+ *  columnWidth, rowHeight and the gap sizes.
+ *
+ *  The default measured size, when no properties were explicitly set, is
+ *  as square as possible area and is enough to fit all elements.
+ *
+ *  In other cases the measured size may not be big enough to fit all elements -
+ *  for example when both columnCount and rowCount are explicitly set to values
+ *  such that columnCount * rowCount < element count.
+ *
+ *  The minimum measured size is calculated the same way as the measured size but
+ *  it's guaranteed to encompass enough rows/columns along the minor axis to fit
+ *  all elements.
  */
 public class TileLayout extends LayoutBase
 {
@@ -429,6 +462,7 @@
     //  justifyRows
     //----------------------------------

+    // TODO EGeorgie: add enum class
     private var _justifyRows:String = "none";

     [Inspectable(category="General")]
@@ -526,6 +560,13 @@
     private var oldRowCount:int = -1;
     private var oldHorizontalGap:Number = NaN;
     private var oldVerticalGap:Number = NaN;
+
+    // Cache storage to avoid repeating work from measure() in updateDisplayList().
+    // These are set the first time the value is calculated and are reset at the end
+    // of updateDisplayList().
+    private var _tileWidthCached:Number = NaN;
+    private var _tileHeightCached:Number = NaN;
+    private var _numLayoutElementsCached:int = -1;

     //--------------------------------------------------------------------------
     //
@@ -572,10 +613,6 @@
      */
     protected function updateActualValues(width:Number, height:Number):void
     {
-        _columnWidth = _rowHeight = NaN;
-        _horizontalGap = _verticalGap = NaN;
-        _columnCount = _rowCount = -1;
-
         // First, figure the tile size
         calculateTileSize();

@@ -609,7 +646,7 @@
         }

         // Last, if we have explicit overrides for both rowCount and columnCount, then
-        // make sure that we can fit all the elements. If we need to, we will increase
+        // make sure that we can fit all the elements. If we need to, we will increase
         // the count along the minor axis based on the element count
         // and the count along the major axis.
         // Note that we do this *after* justification is taken into account as we want to
@@ -631,6 +668,8 @@
      */
     private function calculateColumnAndRowCount(width:Number, height:Number, elementCount:int):void
     {
+        _columnCount = _rowCount = -1;
+
         if (-1 != explicitColumnCount || -1 != explicitRowCount)
         {
             if (-1 != explicitRowCount)
@@ -787,24 +826,33 @@
      */
     private function calculateTileSize():void
     {
-        _columnWidth = explicitColumnWidth;
-        _rowHeight = explicitRowHeight;
-
+        _columnWidth = _tileWidthCached;
+        _rowHeight = _tileHeightCached;
         if (!isNaN(_columnWidth) && !isNaN(_rowHeight))
             return;

-        // TODO EGeorgie: make sure we cache the values so that we don't calculate twice
-        // on measure and updateDisplayList
+        // Are both dimensions explicitly set?
+        _columnWidth = _tileWidthCached = explicitColumnWidth;
+        _rowHeight = _tileHeightCached = explicitRowHeight;
+        if (!isNaN(_columnWidth) && !isNaN(_rowHeight))
+            return;
+
+        // Find the maxmimums of element's preferred sizes
         var columnWidth:Number = 0;
         var rowHeight:Number = 0;

         var layoutTarget:GroupBase = target;
         var count:int = layoutTarget.numLayoutElements;
+        // Remember the number of includeInLayout elements
+        _numLayoutElementsCached = count;
         for (var i:int = 0; i < count; i++)
         {
             var el:ILayoutElement = layoutTarget.getLayoutElementAt(i);
             if (!el || !el.includeInLayout)
+            {
+                _numLayoutElementsCached--;
                 continue;
+            }

             if (isNaN(_columnWidth))
                 columnWidth = Math.max(columnWidth, el.getPreferredBoundsWidth());
@@ -813,9 +861,9 @@
         }

         if (isNaN(_columnWidth))
-            _columnWidth = columnWidth;
+            _columnWidth = _tileWidthCached = columnWidth;
         if (isNaN(_rowHeight))
-            _rowHeight = rowHeight;
+            _rowHeight = _tileHeightCached = rowHeight;
     }

     /**
@@ -824,10 +872,20 @@
      */
     private function calculateElementCount():int
     {
-        // TODO EGeorgie: make sure we cache the values so that we don't calculate twice
-        // on measure and updateDisplayList.
-        // TODO EGeorgie: subtract number of "includeInLayout==false" elements.
-        return target.numLayoutElements;
+        if (-1 != _numLayoutElementsCached)
+            return _numLayoutElementsCached;
+
+        var layoutTarget:GroupBase = target;
+        var count:int = layoutTarget.numLayoutElements;
+        _numLayoutElementsCached = count;
+        for (var i:int = 0; i < count; i++)
+        {
+            var el:ILayoutElement = layoutTarget.getLayoutElementAt(i);
+            if (!el || !el.includeInLayout)
+                _numLayoutElementsCached--;
+        }
+
+        return _numLayoutElementsCached;
     }

     /**
@@ -848,24 +906,29 @@
         var childHeight:Number = NaN;

         // Determine size of the element
-        // TODO EGeorgie: Should we respect minimum element width?
-        if (!isNaN(element.percentWidth))
-            childWidth = Math.round(cellWidth * Math.min(100, element.percentWidth) / 100);
-
-        // TODO EGeorgie: Should we respect minimum element height?
-        if (!isNaN(element.percentHeight))
-            childHeight = Math.round(cellHeight * Math.min(100, element.percentHeight) / 100);
-
         if (elementHorizontalAlign == "justify")
             childWidth = cellWidth;
+        else if (!isNaN(element.percentWidth))
+            childWidth = Math.round(cellWidth * element.percentWidth * 0.01);
+        else
+            childWidth = element.getPreferredBoundsWidth();
+
         if (elementVerticalAlign == "justify")
             childHeight = cellHeight;
-
-        // TODO EGeorgie: compare childWidth/childHeight against min/max.
-        // The cell size should be a maximum for the element (in cases where the cell has explicit width/height).
+        else if (!isNaN(element.percentHeight))
+            childHeight = Math.round(cellHeight * element.percentHeight * 0.01);
+        else
+            childHeight = element.getPreferredBoundsHeight();
+
+        // Enforce min and max limits
+        var maxChildWidth:Number = Math.min(element.getMaxBoundsWidth(), _columnWidth);
+        var maxChildHeight:Number = Math.min(element.getMaxBoundsHeight(), _rowHeight);
+        // Make sure we enforce element's minimum last, since it has the highest priority
+        childWidth = Math.max(element.getMinBoundsWidth(), Math.min(maxChildWidth, childWidth));
+        childHeight = Math.max(element.getMinBoundsHeight(), Math.min(maxChildHeight, childHeight));

         // Size the element
-        element.setLayoutBoundsSize(childWidth, childHeight, true /*postTransform*/);
+        element.setLayoutBoundsSize(childWidth, childHeight);

         var x:Number = cellX;
         switch (elementHorizontalAlign)
@@ -896,26 +959,26 @@
     }

     /**
-     *  @private
-     *  @return Returns the x coordinate of the left edge for the specified column.
+     *  @private
+     *  @return Returns the x coordinate of the left edge for the specified column.
      */
     final private function leftEdge(columnIndex:int):Number
     {
         return Math.max(0, columnIndex * (_columnWidth + _horizontalGap));
     }
-
-    /**
-     *  @private
-     *  @return Returns the x coordinate of the right edge for the specified column.
+
+    /**
+     *  @private
+     *  @return Returns the x coordinate of the right edge for the specified column.
      */
     final private function rightEdge(columnIndex:int):Number
     {
         return Math.min(target.contentWidth, columnIndex * (_columnWidth + _horizontalGap) + _columnWidth);
     }
-
-    /**
-     *  @private
-     *  @return Returns the y coordinate of the top edge for the specified row.
+
+    /**
+     *  @private
+     *  @return Returns the y coordinate of the top edge for the specified row.
      */
     final private function topEdge(rowIndex:int):Number
     {
@@ -923,14 +986,14 @@
     }

     /**
-     *  @private
-     *  @return Returns the y coordinate of the bottom edge for the specified row.
+     *  @private
+     *  @return Returns the y coordinate of the bottom edge for the specified row.
      */
     final private function bottomEdge(rowIndex:int):Number
     {
         return Math.min(target.contentHeight, rowIndex * (_rowHeight + _verticalGap) + _rowHeight);
     }
-
+
     //--------------------------------------------------------------------------
     //
     //  Overriden methods from LayoutBase
@@ -949,15 +1012,15 @@
         updateActualValues(layoutTarget.explicitWidth, layoutTarget.explicitHeight);

         // For measure, any explicit overrides for rowCount and columnCount take precedence
-        var columnCount:int = explicitColumnCount != -1 ? explicitColumnCount : _columnCount;
-        var rowCount:int = explicitRowCount != -1 ? explicitRowCount : _rowCount;
+        var columnCount:int = explicitColumnCount != -1 ? Math.max(1, explicitColumnCount) : _columnCount;
+        var rowCount:int = explicitRowCount != -1 ? Math.max(1, explicitRowCount) : _rowCount;

         layoutTarget.measuredWidth = Math.round(columnCount * (_columnWidth + _horizontalGap) - _horizontalGap);
         layoutTarget.measuredHeight = Math.round(rowCount * (_rowHeight + _verticalGap) - _verticalGap);

-        // Minimum size is just enough to display a single cell
-        layoutTarget.measuredMinWidth = Math.round(_columnWidth);
-        layoutTarget.measuredMinHeight = Math.round(_rowHeight);
+        // measured min size is guaranteed to have enough rows/columns to fit all elements
+        layoutTarget.measuredMinWidth = Math.round(_columnCount * (_columnWidth + _horizontalGap) - _horizontalGap);
+        layoutTarget.measuredMinHeight = Math.round(_rowCount * (_rowHeight + _verticalGap) - _verticalGap);
     }

     /**
@@ -1044,13 +1107,17 @@
         layoutTarget.setContentSize(Math.round(_columnCount * (_columnWidth + _horizontalGap) - _horizontalGap),
                                     Math.round(_rowCount * (_rowHeight + _verticalGap) - _verticalGap));

+        // Reset the cache
+        _tileWidthCached = _tileHeightCached = NaN;
+        _numLayoutElementsCached = -1;
+
         // If actual values have chnaged, notify listeners
         dispatchEventsForActualValueChanges();
     }

     /**
-     *  @private
-     */
+     *  @private
+     */
     override protected function elementBoundsLeftOfScrollRect(scrollRect:Rectangle):Rectangle
     {
         var bounds:Rectangle = new Rectangle();
@@ -1059,11 +1126,11 @@
         bounds.left = leftEdge(column);
         bounds.right = rightEdge(column);
         return bounds;
-    }
-
-    /**
-     *  @private
-     */
+    }
+
+    /**
+     *  @private
+     */
     override protected function elementBoundsRightOfScrollRect(scrollRect:Rectangle):Rectangle
     {
         var bounds:Rectangle = new Rectangle();
@@ -1072,11 +1139,11 @@
         bounds.left = leftEdge(column);
         bounds.right = rightEdge(column);
         return bounds;
-    }
-
-    /**
-     *  @private
-     */
+    }
+
+    /**
+     *  @private
+     */
     override protected function elementBoundsAboveScrollRect(scrollRect:Rectangle):Rectangle
     {
         var bounds:Rectangle = new Rectangle();
@@ -1085,11 +1152,11 @@
         bounds.top = topEdge(row);
         bounds.bottom = bottomEdge(row);
         return bounds;
-    }
-
-    /**
-     *  @private
-     */
+    }
+
+    /**
+     *  @private
+     */
     override protected function elementBoundsBelowScrollRect(scrollRect:Rectangle):Rectangle
     {
         var bounds:Rectangle = new Rectangle();
@@ -1098,6 +1165,6 @@
         bounds.top = topEdge(row);
         bounds.bottom = bottomEdge(row);
         return bounds;
-    }
+    }
 }
 }


Fixed spanning tree repeated generation bug
Added spanning tree twice test case

git-svn-id: 6aa7ccb0a2048310a30f08a72aaff4ca39d980ed@85 91848ab2-c4ae-4e4f-8e6a-6a52ea0dccc3

--- flare.tests/flare/tests/TreeTests.as
+++ flare.tests/flare/tests/TreeTests.as
@@ -14,6 +14,7 @@
 			addTest("bfsTest");
 			addTest("dfsTest");
 			addTest("mstTest");
+			addTest("bfsTwiceTest");
 		}

 		// --------------------------------------------------------------------
@@ -140,5 +141,37 @@
 			assertFalse(tree.contains(cg));
 		}

+		//  a--b--c--d
+		//  |  |  |
+		//  e  f  g
+		public function bfsTwiceTest():void
+		{
+			data.treeBuilder = TreeUtil.breadthFirstTree;
+			data.root = c;
+			var tree:Tree = data.tree;
+
+			data.root = a;
+			tree = data.tree;
+
+			assertEquals(7, tree.nodes.size);
+			assertEquals(6, tree.edges.size);
+			assertEquals(a, tree.root);
+			assertEquals(a, b.parentNode);
+			assertEquals(a, e.parentNode);
+			assertEquals(b, c.parentNode);
+			assertEquals(b, f.parentNode);
+			assertEquals(c, d.parentNode);
+			assertEquals(c, g.parentNode);
+			assertTrue(tree.contains(ab));
+			assertTrue(tree.contains(ae));
+			assertTrue(tree.contains(bc));
+			assertTrue(tree.contains(bf));
+			assertTrue(tree.contains(cd));
+			assertTrue(tree.contains(cg));
+			assertFalse(tree.contains(ef));
+			assertFalse(tree.contains(fg));
+			assertFalse(tree.contains(dg));
+		}
+
 	}
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 5101
Author:   gauravj@adobe.com
Date:     2009-02-27T05:22:45.887116Z

Log Message:
-----------
Update action script files with asdoc version tags.

QE Notes: None.
Doc Notes: Please review and update as necessary.
tests: checkintests

Modified Paths:
--------------
663 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1259475 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/core/IStateClient.as
+++ frameworks/projects/framework/src/mx/core/IStateClient.as
@@ -15,6 +15,11 @@
 /**
  *  The IStateClient interface defines the interface that
  *  components must implement to support view states.
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 3
  */
 public interface IStateClient
 {
@@ -30,6 +35,11 @@

     /**
      *  The current view state.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     function get currentState():String;


Transferred from the Adobe Open Source Subversion Repository

Revision: 23247
Author:   cframpto@adobe.com
Date:     2011-12-20T19:21:13.134833Z

Log Message:
-----------
Remove ADOBE SYSTEMS license and replace with Apache license in headers - frameworks.  A 2nd pass will be needed to get the files not handled up by the scripts.

Modified Paths:
--------------
4959 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1269714 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mx/src/mx/skins/halo/ActivatorSkin.as
+++ frameworks/projects/mx/src/mx/skins/halo/ActivatorSkin.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2003-2007 Adobe Systems Incorporated
-//  All Rights Reserved.
+//  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
 //
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//      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.
 //
 ////////////////////////////////////////////////////////////////////////////////


Transferred from the Adobe Open Source Subversion Repository

Revision: 7089
Author:   srahim@adobe.com
Date:     2009-05-19T20:50:14.933082Z

Log Message:
-----------
ASDoc updates
QE Notes: None
Doc Notes: None
Bugs: FLEXDOCS-831
Checkintests: passed

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/filters/BevelFilter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/filters/ColorMatrixFilter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/filters/BlurFilter.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1284660 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/filters/BlurFilter.as
+++ frameworks/projects/spark/src/spark/filters/BlurFilter.as
@@ -6,8 +6,84 @@
 import mx.filters.BaseFilter;
 import mx.filters.IBitmapFilter;

+/**
+ * The BlurFilter class lets you apply a blur visual effect to display objects.
+ * A blur effect softens the details of an image. You can produce blurs that
+ * range from a softly unfocused look to a Gaussian blur, a hazy
+ * appearance like viewing an image through semi-opaque glass. When the quality property
+ * of this filter is set to low, the result is a softly unfocused look.
+ * When the quality property is set to high, it approximates a Gaussian blur
+ * filter.  You can apply the filter to any display object (that is, objects that inherit
+ * from the DisplayObject class),
+ * such as MovieClip, SimpleButton, TextField, and Video objects, as well as to BitmapData objects.
+ *
+ *
To create a new filter, use the constructor new BlurFilter().
+ * The use of filters depends on the object to which you apply the filter:

+ *

To apply filters to movie clips, text fields, buttons, and video, use the
+ * filters property (inherited from DisplayObject). Setting the filters
+ * property of an object does not modify the object, and you can remove the filter by clearing the
+ * filters property.

+ *
+ *
To apply filters to BitmapData objects, use the BitmapData.applyFilter() method.
+ * Calling applyFilter() on a BitmapData object takes the source BitmapData object
+ * and the filter object and generates a filtered image as a result.

+ *

+ *
+ *
If you apply a filter to a display object, the cacheAsBitmap property of the
+ * display object is set to true. If you remove all filters, the original value of
+ * cacheAsBitmap is restored.

+ *
+ *
This filter supports Stage scaling. However, it does not support general scaling,
+ * rotation, and skewing. If the object itself is scaled (scaleX and scaleY are not set to 100%), the
+ * filter effect is not scaled. It is scaled only when the user zooms in on the Stage.

+ *
+ *
A filter is not applied if the resulting image exceeds the maximum dimensions.
+ * In  AIR 1.5 and Flash Player 10, the maximum is 8,191 pixels in width or height,
+ * and the total number of pixels cannot exceed 16,777,215 pixels. (So, if an image is 8,191 pixels
+ * wide, it can only be 2,048 pixels high.) If, for example, you zoom in on a large movie clip
+ * with a filter applied, the filter is turned off if the resulting image exceeds the maximum dimensions.

+ *
+ * @tiptext A blur effect.
+ *
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10
+ * @playerversion AIR 1.5
+ * @productversion Flex 4
+ *
+ * @see flash.display.DisplayObject#filters
+ * @see flash.display.DisplayObject#cacheAsBitmap
+ * @see flash.display.BitmapData#applyFilter()
+ */
+
 public class BlurFilter extends BaseFilter implements IBitmapFilter
 {
+	/**
+	 * Constructor. The default values create a soft, unfocused image.
+	 *
+	 * @tiptext Initializes the filter.
+	 * @langversion 3.0
+	 * @playerversion Flash 10
+	 * @playerversion AIR 1.5
+	 * @productversion Flex 4
+	 *
+	 * @param blurX The amount to blur horizontally. Valid values are from 0 to 255.0 (floating-point
+	 * value).
+	 * @param blurY The amount to blur vertically. Valid values are from 0 to 255.0 (floating-point
+	 * value).
+	 * @param quality The number of times to apply the filter. You can specify the quality using
+	 * the flash.filters.BitmapFilterQuality constants:
+	 *

+	 *
flash.filters.BitmapFilterQuality.LOW

+	 *
flash.filters.BitmapFilterQuality.MEDIUM

+	 *
flash.filters.BitmapFilterQuality.HIGH

+	 *

+	 *
High quality approximates a Gaussian blur.
+	 * For most applications, these three values are sufficient.
+	 * Although you can use additional numeric values up to 15 to achieve different effects, be aware
+	 * that higher values are rendered more slowly.

+	 */
+
 	public function BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)
 	{
 		this.blurX = blurX;
@@ -115,7 +191,19 @@
 			notifyFilterChanged();
 		}
 	}
-
+
+	/**
+	 * Returns a copy of this filter object.
+	 *
+	 * @return A new BlurFilter instance with all the same
+	 * properties as the original BlurFilter instance.
+	 *
+	 * @langversion 3.0
+ 	 * @playerversion Flash 10
+ 	 * @playerversion AIR 1.5
+	 * @productversion Flex 4
+	 */
+
 	public function clone():BitmapFilter
 	{
 		return new flash.filters.BlurFilter(blurX, blurY, quality);


Added subtractor to square test

Added subtractor to square test

--- src/Levels/Level.as
+++ src/Levels/Level.as
@@ -185,7 +185,7 @@
 			(L_SingleOp = new OpTutorial).predecessors.push(L_Accumulation);
 			(L_DoubleOp = new Op2Tutorial).predecessors.push(L_SingleOp, L_Double);

-			L_Square = new Level("Square", new SquareGoal, false, [ConstIn, Adder, Latch, DataReader, DataWriter, Equals, And, Or, Not, Demux]);
+			L_Square = new Level("Square", new SquareGoal, false, [ConstIn, Adder, Subtractor, Latch, DataReader, DataWriter, Equals, And, Or, Not, Demux]);
 			L_Square.predecessors.push(L_Double);


VCard updates:

VCard updates:

- getVCard now requires a jid:
The contact param has been removed.
Using an UnescapedJID instead of a RosterItemVO allows for vCard requests on chat room participants that aren't necessarily in the user's roster.
To request the vCard of the current user, pass the user's jid just like any other request. Passing null will no longer request the current user's vCard.

- Made cache a dictionary instead of generic object.

- Added clearCache() method to immediately remove all cached vCard references.

git-svn-id: c197267f952b24206666de142881703007ca05d5@11774 b35dd754-fafc-0310-a699-88a17e54d16e

--- src/org/igniterealtime/xiff/vcard/VCard.as
+++ src/org/igniterealtime/xiff/vcard/VCard.as
@@ -35,7 +35,6 @@
 	import org.igniterealtime.xiff.core.XMPPConnection;
 	import org.igniterealtime.xiff.data.IQ;
 	import org.igniterealtime.xiff.data.XMPPStanza;
-	import org.igniterealtime.xiff.data.im.RosterItemVO;
 	import org.igniterealtime.xiff.data.vcard.VCardExtension;
 	import org.igniterealtime.xiff.events.VCardEvent;
 	import org.igniterealtime.xiff.util.DateTimeParser;
@@ -73,9 +72,9 @@
 		public static var cacheFlushInterval:Number = ( 6 * 60 * 60 * 1000 );

 		/**
-		 * VCard cache indexed by the UnescapedJID.bareJID of the contact or current user.
-		 */
-		private static var cache:Object = {};
+		 * VCard cache indexed by the UnescapedJID.bareJID of the user.
+		 */
+		private static var cache:Dictionary = new Dictionary();

 		/**
 		 * Flush the vCard cache every 6 hours by default.
@@ -242,11 +241,6 @@
 		 * Work telephone number.
 		 */
 		public var workTelephone:VCardTelephone;
-
-		/**
-		 * @private
-		 */
-		private var contact:RosterItemVO;

 		/**
 		 * @private
@@ -272,13 +266,13 @@

 		/**
 		 * The way a vCard is requested and then later referred to.
-		 * var vCard:VCard = VCard.getVCard( connection );

+		 * var vCard:VCard = VCard.getVCard( connection, jid );

 		 * vCard.addEventListener( VCardEvent.LOADED, onVCardLoaded );
 		 * @param connection
-		 * @param contact (if null, will get current user's vCard)
+		 * @param jid
 		 * @return Reference to the vCard which will be filled once the loaded event occurs.
 		 */
-		public static function getVCard( connection:XMPPConnection, contact:RosterItemVO=null ):VCard
+		public static function getVCard( connection:XMPPConnection, jid:UnescapedJID ):VCard
 		{
 			if ( !cacheFlushTimer.running )
 			{
@@ -291,25 +285,20 @@
 					{
 						pushRequest( connection, card );
 					}
-					cache = {};
+					clearCache();
 				} );
 			}

-			var bareJID:String = contact ? contact.jid.bareJID : connection.jid.bareJID;
-
-			var cachedCard:VCard = cache[ bareJID ] as VCard;
+			var cachedCard:VCard = cache[ jid.bareJID ] as VCard;
 			if ( cachedCard )
 			{
 				return cachedCard;
 			}

 			var vCard:VCard = new VCard();
-			if( contact )
-			{
-				vCard.contact = contact;
-				vCard.jid = contact.jid;
-			}
-			cache[ bareJID ] = vCard;
+			vCard.jid = jid;
+
+			cache[ jid.bareJID ] = vCard;

 			pushRequest( connection, vCard );

@@ -325,6 +314,14 @@
 			{
 				cacheFlushTimer.stop();
 			}
+		}
+
+		/**
+		 * Immediately clears the vCard cache.
+		 */
+		public static function clearCache():void
+		{
+			cache = new Dictionary();
 		}

 		/**
@@ -357,11 +354,10 @@
 			var req:Object = requestQueue.pop();
 			var connection:XMPPConnection = req.connection;
 			var vCard:VCard = req.card;
-			var contact:RosterItemVO = vCard.contact;
-
-			var recipient:EscapedJID = contact ? contact.jid.escaped : null;
+			var jid:UnescapedJID = vCard.jid;
+
+			var recipient:EscapedJID = jid.equals( connection.jid, true ) ? null : jid.escaped;
 			var iq:IQ = new IQ( recipient, IQ.TYPE_GET );
-			vCard.jid = contact ? contact.jid : connection.jid;

 			iq.callback = vCard.handleVCard;
 			iq.addExtension( new VCardExtension() );
@@ -715,7 +711,7 @@
 			if ( photo && ( ( photo.type && photo.binaryValue ) || photo.externalValue ) )
 			{
 				var photoNode:XML = <PHOTO/>;
-
+
 				if ( photo.binaryValue )
 				{
 					try
@@ -728,7 +724,7 @@
 					{
 						throw new Error( "VCard:saveVCard Error converting bytes to string " + error.message );
 					}
-
+
 					var photoTypeNode:XML = <TYPE/>;
 					photoTypeNode.appendChild( photo.type );
 					photoNode.appendChild( photoTypeNode );
@@ -739,7 +735,7 @@
 					photoExtNode.appendChild( photo.externalValue );
 					photoNode.appendChild( photoExtNode );
 				}
-
+
 				vcardExtNode.appendChild( photoNode );
 			}

@@ -754,85 +750,85 @@
 			{
 				var workAddressNode:XML = <ADR/>;
 				workAddressNode.appendChild( <WORK/> );
-
+
 				if ( workAddress.poBox )
 				{
 					workAddressNode.POBOX = workAddress.poBox;
 				}
-
+
 				if ( workAddress.extendedAddress )
 				{
 					workAddressNode.EXTADD = workAddress.extendedAddress;
 				}
-
+
 				if ( workAddress.street )
 				{
 					workAddressNode.STREET = workAddress.street;
 				}
-
+
 				if ( workAddress.locality )
 				{
 					workAddressNode.LOCALITY = workAddress.locality;
 				}
-
+
 				if ( workAddress.region )
 				{
 					workAddressNode.REGION = workAddress.region;
 				}
-
+
 				if ( workAddress.postalCode )
 				{
 					workAddressNode.PCODE = workAddress.postalCode;
 				}
-
+
 				if ( workAddress.country )
 				{
 					workAddressNode.CTRY = workAddress.country;
 				}
-
+
 				vcardExtNode.appendChild( workAddressNode );
 			}
-
+
 			if ( homeAddress )
 			{
 				var homeAddressNode:XML = <ADR/>;
 				homeAddressNode.appendChild( <HOME/> );
-
+
 				if ( homeAddress.poBox )
 				{
 					homeAddressNode.POBOX = homeAddress.poBox;
 				}
-
+
 				if ( homeAddress.extendedAddress )
 				{
 					homeAddressNode.EXTADD = homeAddress.extendedAddress;
 				}
-
+
 				if ( homeAddress.street )
 				{
 					homeAddressNode.STREET = homeAddress.street;
 				}
-
+
 				if ( homeAddress.locality )
 				{
 					homeAddressNode.LOCALITY = homeAddress.locality;
 				}
-
+
 				if ( homeAddress.region )
 				{
 					homeAddressNode.REGION = homeAddress.region;
 				}
-
+
 				if ( homeAddress.postalCode )
 				{
 					homeAddressNode.PCODE = homeAddress.postalCode;
 				}
-
+
 				if ( homeAddress.country )
 				{
 					homeAddressNode.CTRY = homeAddress.country;
 				}
-
+
 				vcardExtNode.appendChild( homeAddressNode );
 			}

@@ -844,7 +840,7 @@
 				workAddressLabelNode.LINE = workAddressLabel;
 				vcardExtNode.appendChild( workAddressLabelNode );
 			}
-
+
 			if ( homeAddressLabel )
 			{
 				var homeAddressLabelNode:XML = ;
@@ -858,7 +854,7 @@
 			if ( workTelephone )
 			{
 				phoneNode.setChildren( <WORK/> );
-
+
 				if ( workTelephone.voice )
 				{
 					var workVoiceNode:XML = phoneNode.copy();
@@ -866,7 +862,7 @@
 					workVoiceNode.NUMBER = workTelephone.voice;
 					vcardExtNode.appendChild( workVoiceNode );
 				}
-
+
 				if ( workTelephone.fax )
 				{
 					var workFaxNode:XML = phoneNode.copy();
@@ -874,7 +870,7 @@
 					workFaxNode.NUMBER = workTelephone.fax;
 					vcardExtNode.appendChild( workFaxNode );
 				}
-
+
 				if ( workTelephone.pager )
 				{
 					var workPagerNode:XML = phoneNode.copy();
@@ -882,7 +878,7 @@
 					workPagerNode.NUMBER = workTelephone.pager;
 					vcardExtNode.appendChild( workPagerNode );
 				}
-
+
 				if ( workTelephone.msg )
 				{
 					var workMsgNode:XML = phoneNode.copy();
@@ -890,7 +886,7 @@
 					workMsgNode.NUMBER = workTelephone.msg;
 					vcardExtNode.appendChild( workMsgNode );
 				}
-
+
 				if ( workTelephone.cell )
 				{
 					var workCellNode:XML = phoneNode.copy();
@@ -898,7 +894,7 @@
 					workCellNode.NUMBER = workTelephone.cell;
 					vcardExtNode.appendChild( workCellNode );
 				}
-
+
 				if ( workTelephone.video )
 				{
 					var workVideoNode:XML = phoneNode.copy();
@@ -987,22 +983,22 @@
 			{
 				vcardExtNode.TZ = DateTimeParser.date2string( timezone );
 			}
-
+
 			//GEO
 			if( geographicalPosition )
 			{
 				var geoNode:XML = <GEO/>;
-
+
 				if ( geographicalPosition.latitude )
 				{
 					geoNode.LAT = geographicalPosition.latitude;
 				}
-
+
 				if ( geographicalPosition.longitude )
 				{
 					geoNode.LON = geographicalPosition.longitude;
 				}
-
+
 				vcardExtNode.appendChild( geoNode );
 			}


Fix missing import

Fix missing import

--- Arguments/src/logic/ModusTollens.as
+++ Arguments/src/logic/ModusTollens.as
@@ -21,6 +21,7 @@

 	 */
 	import classes.ArgumentPanel;
+	import classes.Language;

 	import mx.controls.Alert;


OFC-488 Blue shaded date is not responding

--- collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/presenter/DateAttributePresenter.as
+++ collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/presenter/DateAttributePresenter.as
@@ -1,114 +1,115 @@
-package org.openforis.collect.presenter {
-	import flash.events.Event;
-
-	import mx.collections.ArrayCollection;
-	import mx.collections.ListCollectionView;
-	import mx.events.CalendarLayoutChangeEvent;
-
-	import org.openforis.collect.Application;
-	import org.openforis.collect.client.ClientFactory;
-	import org.openforis.collect.client.DataClient;
-	import org.openforis.collect.model.CollectRecord$Step;
-	import org.openforis.collect.remoting.service.UpdateRequest;
-	import org.openforis.collect.remoting.service.UpdateRequestOperation;
-	import org.openforis.collect.ui.component.input.DateAttributeRenderer;
-	import org.openforis.collect.ui.component.input.DateField;
-	import org.openforis.collect.ui.component.input.InputField;
-	import org.openforis.collect.util.StringUtil;
-
-	import spark.events.DropDownEvent;
-
-	/**
-	 *
-	 * @author S. Ricci
-	 * */
-	public class DateAttributePresenter extends CompositeAttributePresenter {
-
-		private static var _dataClient:DataClient;
-
-		{
-			_dataClient = ClientFactory.dataClient;
-		}
-
-		public function DateAttributePresenter(view:DateAttributeRenderer) {
-
-			super(view);
-
-			view.day.textFormatFunction = twoCharsZeroPaddingFormatFunction;
-			view.month.textFormatFunction = twoCharsZeroPaddingFormatFunction;
-			view.year.textFormatFunction = fourCharsZeroPaddingFormatFunction;
-		}
-
-		override internal function initEventListeners():void {
-			super.initEventListeners();
-
-			//dateField (calendar button)
-			view.dateField.addEventListener(CalendarLayoutChangeEvent.CHANGE, dateFieldChangeHandler);
-			view.dateField.addEventListener(DropDownEvent.OPEN, dateFieldOpenHandler);
-		}
-
-		private function get view():DateAttributeRenderer {
-			return DateAttributeRenderer(_view);
-		}
-
-		protected function dateFieldOpenHandler(event:Event):void {
-			var date:Date = getDateFromFields();
-			if(date != null){
-				view.dateField.selectedDate = date;
-			}
-		}
-
-		protected function dateFieldChangeHandler(event:Event):void {
-			if(Application.activeRecord.step != CollectRecord$Step.ANALYSIS) {
-				var date:Date = (event.target as DateField).selectedDate;
-				if(date != null) {
-					setDateOnFields(date.fullYear, date.month + 1, date.date);
-				}
-			}
-		}
-
-		protected function setDateOnFields(year:Number, month:Number, day:Number):void {
-			view.year.text = StringUtil.zeroPad(year, 4);
-			view.month.text = StringUtil.zeroPad(month, 2);
-			view.day.text = StringUtil.zeroPad(day, 2);
-
-			var fields:Array = [view.year, view.month, view.day];
-			var operations:ListCollectionView = new ArrayCollection();
-			for each (var field:InputField in fields) {
-				var o:UpdateRequestOperation = field.presenter.createUpdateValueOperation();
-				operations.addItem(o);
+package org.openforis.collect.presenter {
+	import flash.events.Event;
+
+	import mx.collections.ArrayCollection;
+	import mx.collections.ListCollectionView;
+	import mx.events.CalendarLayoutChangeEvent;
+	import mx.events.DropdownEvent;
+
+	import org.openforis.collect.Application;
+	import org.openforis.collect.client.ClientFactory;
+	import org.openforis.collect.client.DataClient;
+	import org.openforis.collect.model.CollectRecord$Step;
+	import org.openforis.collect.remoting.service.UpdateRequest;
+	import org.openforis.collect.remoting.service.UpdateRequestOperation;
+	import org.openforis.collect.ui.component.input.DateAttributeRenderer;
+	import org.openforis.collect.ui.component.input.DateField;
+	import org.openforis.collect.ui.component.input.InputField;
+	import org.openforis.collect.util.StringUtil;
+
+	import spark.events.DropDownEvent;
+
+	/**
+	 *
+	 * @author S. Ricci
+	 * */
+	public class DateAttributePresenter extends CompositeAttributePresenter {
+
+		private static var _dataClient:DataClient;
+
+		{
+			_dataClient = ClientFactory.dataClient;
+		}
+
+		public function DateAttributePresenter(view:DateAttributeRenderer) {
+
+			super(view);
+
+			view.day.textFormatFunction = twoCharsZeroPaddingFormatFunction;
+			view.month.textFormatFunction = twoCharsZeroPaddingFormatFunction;
+			view.year.textFormatFunction = fourCharsZeroPaddingFormatFunction;
+		}
+
+		override internal function initEventListeners():void {
+			super.initEventListeners();
+
+			//dateField (calendar button)
+			view.dateField.addEventListener(DropdownEvent.CLOSE, dateFieldCloseHandler);
+			view.dateField.addEventListener(DropDownEvent.OPEN, dateFieldOpenHandler);
+		}
+
+		private function get view():DateAttributeRenderer {
+			return DateAttributeRenderer(_view);
+		}
+
+		protected function dateFieldOpenHandler(event:Event):void {
+			var date:Date = getDateFromFields();
+			if(date != null){
+				view.dateField.selectedDate = date;
 			}
-			var req:UpdateRequest = new UpdateRequest();
-			req.operations = operations;
-			_dataClient.updateActiveRecord(req, null, faultHandler);
-		}
-
-		protected function getDateFromFields():Date {
-			//check if input text is valid
-			if(StringUtil.isNotBlank(view.day.text) &&
-				StringUtil.isNotBlank(view.month.text) &&
-				StringUtil.isNotBlank(view.year.text)) {
-				var year:Number = Number(view.year.text);
-				var month:Number = Number(view.month.text) - 1;
-				var day:Number = Number(view.day.text);
-				if(!isNaN(year) && !isNaN(month) && !isNaN(day)) {
-					var tempDate:Date = new Date(year, month, day);
-					if(! isNaN(tempDate.valueOf()) && tempDate.fullYear == year && tempDate.month == month && tempDate.date == day) {
-						//valid date
-						return tempDate;
-					}
-				}
-			}
-			return null;
-		}
-
-		protected function twoCharsZeroPaddingFormatFunction(value:String):String {
-			return InputField.zeroPaddingFormatFunction(value, 2);
-		}
-
-		protected function fourCharsZeroPaddingFormatFunction(value:String):String {
-			return InputField.zeroPaddingFormatFunction(value, 4);
-		}
-
-	}
-}
+		}
+
+		protected function dateFieldCloseHandler(event:Event):void {
+			if(Application.activeRecord.step != CollectRecord$Step.ANALYSIS) {
+				var date:Date = (event.target as DateField).dropdown.selectedDate;
+				if(date != null) {
+					setDateOnFields(date.fullYear, date.month + 1, date.date);
+				}
+			}
+		}
+
+		protected function setDateOnFields(year:Number, month:Number, day:Number):void {
+			view.year.text = StringUtil.zeroPad(year, 4);
+			view.month.text = StringUtil.zeroPad(month, 2);
+			view.day.text = StringUtil.zeroPad(day, 2);
+
+			var fields:Array = [view.year, view.month, view.day];
+			var operations:ListCollectionView = new ArrayCollection();
+			for each (var field:InputField in fields) {
+				var o:UpdateRequestOperation = field.presenter.createUpdateValueOperation();
+				operations.addItem(o);
+			}
+			var req:UpdateRequest = new UpdateRequest();
+			req.operations = operations;
+			_dataClient.updateActiveRecord(req, null, faultHandler);
+		}
+
+		protected function getDateFromFields():Date {
+			//check if input text is valid
+			if(StringUtil.isNotBlank(view.day.text) &&
+				StringUtil.isNotBlank(view.month.text) &&
+				StringUtil.isNotBlank(view.year.text)) {
+				var year:Number = Number(view.year.text);
+				var month:Number = Number(view.month.text) - 1;
+				var day:Number = Number(view.day.text);
+				if(!isNaN(year) && !isNaN(month) && !isNaN(day)) {
+					var tempDate:Date = new Date(year, month, day);
+					if(! isNaN(tempDate.valueOf()) && tempDate.fullYear == year && tempDate.month == month && tempDate.date == day) {
+						//valid date
+						return tempDate;
+					}
+				}
+			}
+			return null;
+		}
+
+		protected function twoCharsZeroPaddingFormatFunction(value:String):String {
+			return InputField.zeroPaddingFormatFunction(value, 2);
+		}
+
+		protected function fourCharsZeroPaddingFormatFunction(value:String):String {
+			return InputField.zeroPaddingFormatFunction(value, 4);
+		}
+
+	}
+}


Modification for CubeGeometry

Modification for CubeGeometry

--- src/aerys/minko/render/geometry/primitive/CubeGeometry.as
+++ src/aerys/minko/render/geometry/primitive/CubeGeometry.as
@@ -29,6 +29,17 @@
 		public function CubeGeometry(vertexStreamUsage 	: uint 	= 3,
 									 indexStreamUsage	: uint	= 3)
 		{
+
+			var vertexStream : VertexStream = buildVertexStream(vertexStreamUsage);
+
+			super(
+				new <IVertexStream>[vertexStream],
+				new IndexStream(indexStreamUsage, IndexStream.dummyData(vertexStream.numVertices, 0))
+			);
+		}
+
+		protected function buildVertexStream(vertexStreamUsage : uint = 3) : VertexStream
+		{
 			var data : Vector.<Number> = new <Number>[
 				// top
 				0.5, 0.5, 0.5, 1., 0., -0.5, 0.5, -0.5, 0., 1., 0.5, 0.5, -0.5, 1., 1.,
@@ -50,13 +61,8 @@
 				0.5, 0.5, -0.5, 0., 0., 0.5, -0.5, -0.5, 0., 1., 0.5, -0.5, 0.5, 1., 1.
 			];

-			var vertexStream : VertexStream = VertexStream.fromVector(
+			return VertexStream.fromVector(
 				vertexStreamUsage, VertexFormat.XYZ_UV, data
-			);
-
-			super(
-				new <IVertexStream>[vertexStream],
-				new IndexStream(indexStreamUsage, IndexStream.dummyData(vertexStream.numVertices, 0))
 			);
 		}


Force float on FindInLine

Force float on FindInLine

--- Scripts/Weapons/main.as
+++ Scripts/Weapons/main.as
@@ -61,7 +61,7 @@

 		if (int(time * 40) % 10 == 0 && oldTime % 10 != 0)
 		{
-			array<Character@>@ targets = FindInLine(owner.Position, owner.AimVec, 512, 8);
+			array<Character@>@ targets = FindInLine(owner.Position, owner.AimVec, 512.f, 8.f);

 			for (uint i = 0; i < targets.length; ++i)
 			{


Added CSVDataSource.getColumnByName().

Added CSVDataSource.getColumnByName().

--- WeaveData/src/weave/data/DataSources/CSVDataSource.as
+++ WeaveData/src/weave/data/DataSources/CSVDataSource.as
@@ -37,6 +37,7 @@
 	import weave.api.data.IQualifiedKey;
 	import weave.api.getCallbackCollection;
 	import weave.api.getLinkableOwner;
+	import weave.api.newDisposableChild;
 	import weave.api.newLinkableChild;
 	import weave.api.reportError;
 	import weave.core.ErrorManager;
@@ -51,7 +52,6 @@
 	import weave.utils.VectorUtils;

 	/**
-	 * CSVDataSource
 	 *
 	 * @author adufilie
 	 * @author skolman
@@ -83,6 +83,20 @@
 		}

 		/**
+		 * This function will get a column by name.
+		 * @param csvColumnName The name of the CSV column to get.
+		 * @return The column.
+		 */
+		public function getColumnByName(csvColumnName:String):IAttributeColumn
+		{
+			_reusableReference.hierarchyPath.value = <attribute title={csvColumnName} csvColumn={ csvColumnName }/>;
+			return getAttributeColumn(_reusableReference);
+		}
+
+		// used by getColumnByName
+		private const _reusableReference:HierarchyColumnReference = newDisposableChild(this, HierarchyColumnReference);
+
+		/**
 		 * This function will create a column in an ILinkableHashMap that references a column from this CSVDataSource.
 		 * @param csvColumnName The name of the CSV column to put in the hash map.
 		 * @param destinationHashMap The hash map to put the column in.
@@ -93,10 +107,17 @@
 			var sourceOwner:ILinkableHashMap = getLinkableOwner(this) as ILinkableHashMap;
 			if (!sourceOwner)
 				return null;
+
+			getCallbackCollection(destinationHashMap).delayCallbacks();
 			var refCol:ReferencedColumn = destinationHashMap.requestObject(null, ReferencedColumn, false);
 			var hierarchyColRef1:HierarchyColumnReference =  refCol.dynamicColumnReference.requestLocalObject(HierarchyColumnReference, false);
+
+			getCallbackCollection(hierarchyColRef1).delayCallbacks();
 			hierarchyColRef1.hierarchyPath.value = <attribute title={csvColumnName} csvColumn={ csvColumnName }/>;
 			hierarchyColRef1.dataSourceName.value = sourceOwner.getName(this);
+			getCallbackCollection(hierarchyColRef1).resumeCallbacks();
+
+			getCallbackCollection(destinationHashMap).resumeCallbacks();
 			return refCol;
 		}

@@ -184,7 +205,6 @@
 		}

 		/**
-		 * handleCSVDownload
 		 * Called when the CSV data is downloaded from a URL.
 		 */
 		private function handleCSVDownload(event:ResultEvent, token:Object = null):void
@@ -204,7 +224,6 @@
 		}

 		/**
-		 * handleCSVDownloadError
 		 * Called when the CSV data fails to download from a URL.
 		 */
 		private function handleCSVDownloadError(event:FaultEvent, token:Object = null):void
@@ -213,7 +232,6 @@
 		}

 		/**
-		 * requestHierarchyFromSource
 		 * This function must be implemented by classes by extend AbstractDataSource.
 		 * This function should make a request to the source to fill in the hierarchy.
 		 * @param subtreeNode A pointer to a node in the hierarchy representing the root of the subtree to request from the source.
@@ -224,7 +242,6 @@
 		}

 		/**
-		 * requestColumnFromSource
 		 * This function must be implemented by classes by extend AbstractDataSource.
 		 * This function should make a request to the source to fill in the proxy column.
 		 * @param columnReference An object that contains all the information required to request the column from this IDataSource.


Removed servletParams option from CSVDataSource.

--- WeaveData/src/weave/data/DataSources/CSVDataSource.as
+++ WeaveData/src/weave/data/DataSources/CSVDataSource.as
@@ -23,7 +23,6 @@
 	import flash.net.URLRequest;
 	import flash.utils.getQualifiedClassName;

-	import mx.rpc.AsyncToken;
 	import mx.rpc.events.FaultEvent;
 	import mx.rpc.events.ResultEvent;
 	import mx.utils.StringUtil;
@@ -37,16 +36,13 @@
 	import weave.api.data.IQualifiedKey;
 	import weave.api.data.IWeaveTreeNode;
 	import weave.api.detectLinkableObjectChange;
-	import weave.api.disposeObject;
 	import weave.api.getCallbackCollection;
 	import weave.api.getLinkableOwner;
-	import weave.api.getSessionState;
 	import weave.api.newLinkableChild;
 	import weave.api.registerLinkableChild;
 	import weave.api.reportError;
 	import weave.core.LinkableString;
 	import weave.core.LinkableVariable;
-	import weave.core.UntypedLinkableVariable;
 	import weave.data.AttributeColumns.DateColumn;
 	import weave.data.AttributeColumns.DynamicColumn;
 	import weave.data.AttributeColumns.NumberColumn;
@@ -55,8 +51,6 @@
 	import weave.data.AttributeColumns.StringColumn;
 	import weave.data.CSVParser;
 	import weave.data.QKeyManager;
-	import weave.services.AMF3Servlet;
-	import weave.services.addAsyncResponder;
 	import weave.utils.HierarchyUtils;

 	/**
@@ -80,21 +74,6 @@

 		private function typeofIsObject(value:Object):Boolean { return typeof value == 'object'; }

-		/**
-		 * Session state of servletParams must be an object with two properties: 'method' and 'params'
-		 * If this is set, it assumes that url.value points to a Weave AMF3Servlet and the servlet method returns a table of data.
-		 */
-		public const servletParams:UntypedLinkableVariable = registerLinkableChild(this, new UntypedLinkableVariable(null, verifyServletParams));
-		public static const SERVLETPARAMS_PROPERTY_METHOD:String = 'method';
-		public static const SERVLETPARAMS_PROPERTY_PARAMS:String = 'params';
-		private var _servlet:AMF3Servlet = null;
-		private function verifyServletParams(value:Object):Boolean
-		{
-			return value != null
-				&& value.hasOwnProperty(SERVLETPARAMS_PROPERTY_METHOD)
-				&& value.hasOwnProperty(SERVLETPARAMS_PROPERTY_PARAMS);
-		}
-
 		private const asyncParser:CSVParser = registerLinkableChild(this, new CSVParser(true), handleCSVParser);
 		/**
 		 * Called when csv parser finishes its task
@@ -134,7 +113,7 @@
 		private var columnIds:Array = [];
 		private var keysVector:Vector.<IQualifiedKey>;

-		private function handleParsedRows(rows:Array):void
+		protected function handleParsedRows(rows:Array):void
 		{
 			parsedRows = rows;
 			columnIds = rows && rows[0] is Array ? (rows[0] as Array).concat() : [];
@@ -331,60 +310,14 @@
 		/**
 		 * Called when url session state changes
 		 */
-		private function handleURLChange():void
-		{
-			var urlChanged:Boolean = detectLinkableObjectChange(handleURLChange, url);
-			var servletParamsChanged:Boolean = detectLinkableObjectChange(handleURLChange, servletParams);
-			if (urlChanged || servletParamsChanged)
-			{
-				if (url.value)
-				{
-					// if url is specified, do not use csvDataString
-					csvData.setSessionState(null);
-					if (servletParams.value)
-					{
-						if (!_servlet || _servlet.servletURL != url.value)
-						{
-							disposeObject(_servlet);
-							_servlet = registerLinkableChild(this, new AMF3Servlet(url.value));
-						}
-						var token:AsyncToken = _servlet.invokeAsyncMethod(
-							servletParams.value[SERVLETPARAMS_PROPERTY_METHOD],
-							servletParams.value[SERVLETPARAMS_PROPERTY_PARAMS]
-						);
-						addAsyncResponder(token, handleServletResponse, handleServletError, getSessionState(this));
-					}
-					else
-					{
-						disposeObject(_servlet);
-						_servlet = null;
-						WeaveAPI.URLRequestUtils.getURL(this, new URLRequest(url.value), handleCSVDownload, handleCSVDownloadError, url.value, URLLoaderDataFormat.TEXT);
-					}
-				}
-			}
-		}
-
-		private function handleServletResponse(event:ResultEvent, sessionState:Object):void
-		{
-			if (WeaveAPI.SessionManager.computeDiff(sessionState, getSessionState(this)) !== undefined)
-				return;
-			var data:Array = event.result as Array;
-			if (!data)
-			{
-				reportError('Result from servlet is not an Array');
-				return;
-			}
-			if (data.length && !(data[0] is Array))
-				data = WeaveAPI.CSVParser.convertRecordsToRows(data);
-
-			handleParsedRows(data);
-			getCallbackCollection(this).triggerCallbacks();
-		}
-		private function handleServletError(event:FaultEvent, sessionState:Object):void
-		{
-			if (WeaveAPI.SessionManager.computeDiff(sessionState, getSessionState(this)) !== undefined)
-				return;
-			reportError(event);
+		protected function handleURLChange():void
+		{
+			if (detectLinkableObjectChange(handleURLChange, url) && url.value)
+			{
+				// if url is specified, do not use csvDataString
+				csvData.setSessionState(null);
+				WeaveAPI.URLRequestUtils.getURL(this, new URLRequest(url.value), handleCSVDownload, handleCSVDownloadError, url.value, URLLoaderDataFormat.TEXT);
+			}
 		}

 		/**
@@ -468,7 +401,7 @@
 		/**
 		 * Called when the CSV data is downloaded from a URL.
 		 */
-		private function handleCSVDownload(event:ResultEvent, token:Object = null):void
+		protected function handleCSVDownload(event:ResultEvent, token:Object = null):void
 		{
 			//debugTrace(this, "handleCSVDownload", url.value);
 			// Only handle this download if it is for current url.
@@ -481,7 +414,7 @@
 		/**
 		 * Called when the CSV data fails to download from a URL.
 		 */
-		private function handleCSVDownloadError(event:FaultEvent, token:Object = null):void
+		protected function handleCSVDownloadError(event:FaultEvent, token:Object = null):void
 		{
 			reportError(event);
 		}


windowName is deterministic again.

windowName is deterministic again.

--- WeaveUI/src/weave/visualization/tools/ExternalTool.as
+++ WeaveUI/src/weave/visualization/tools/ExternalTool.as
@@ -18,12 +18,16 @@
 */
 package weave.visualization.tools
 {
+	import com.hurlant.crypto.hash.MD5;
+
+	import mx.utils.Base64Encoder;
 	import mx.utils.UIDUtil;

 	import weave.api.WeaveAPI;
 	import weave.api.data.IAttributeColumn;
 	import weave.api.reportError;
 	import weave.api.ui.IObjectWithSelectableAttributes;
+	import weave.compiler.Compiler;
 	import weave.compiler.StandardLib;
 	import weave.core.LinkableHashMap;
 	import weave.core.LinkableString;
@@ -44,8 +48,23 @@
 		/**
 		 * The popup's window.name
 		 */
-		public const windowName:String = StandardLib.replace(UIDUtil.createUID(), '-', '');
-
+		public function get windowName():String
+		{
+			var object:Object = {
+				id: JavaScript.objectID,
+				path: path
+			};
+
+			var encoder:Base64Encoder = new Base64Encoder();
+			encoder.encode(Compiler.stringify(object));
+			return StandardLib.replace(encoder.drain(), '+', '_p', '/', '_s', '=', '_e');
+		}
+
+		public function get path():Array
+		{
+			return WeaveAPI.SessionManager.getPath(WeaveAPI.globalHashMap, this);
+		}
+
 		public function ExternalTool()
 		{
 			super();
@@ -70,7 +89,7 @@
 					"url": toolUrl.value,
 					"windowName": windowName,
 					"features": "menubar=no,status=no,toolbar=no",
-					"path": WeaveAPI.SessionManager.getPath(WeaveAPI.globalHashMap, this)
+					"path": path
 				},
 				'if (!window[WEAVE_EXTERNAL_TOOLS])',
 				'    window[WEAVE_EXTERNAL_TOOLS] = {};',


Facebook chat updated to support new authentication with access_token instead of session_key and sig.

--- src/org/igniterealtime/xiff/auth/XFacebookPlatform.as
+++ src/org/igniterealtime/xiff/auth/XFacebookPlatform.as
@@ -42,9 +42,8 @@

 		public static const NS:String = "urn:ietf:params:xml:ns:xmpp-sasl";

-		public static var fb_api_key:String;
-		public static var fb_secret:String;
-		public static var fb_session_key:String;
+		public static var fb_app_id:String;
+		public static var fb_access_token:String;

 		/**
 		 * Creates a new XFacebookPlatform authentication object.
@@ -59,45 +58,6 @@
 			response.setNamespace( XFacebookPlatform.NS );

 			stage = 0;
-		}
-
-		public static function setFacebookSessionValues( api_key:String, secret:String, session_key:String ):void
-		{
-			fb_api_key = api_key;
-			fb_secret = secret;
-			fb_session_key = session_key;
-		}
-
-		/**
-		 * Construct the signature as described by Facebook api documentation.
-		 */
-		public static function formatSig( map:Dictionary ):String
-		{
-			var md5:MD5 = new MD5();
-
-			var a:Array = [];
-
-			for( var p:String in map )
-			{
-				var arg:* = map[ p ];
-
-				a.push( p + '=' + arg.toString() );
-			}
-
-			a.sort();
-
-			var s:String = a.join( '' );
-
-			if( fb_secret != null )
-			{
-				s += fb_secret;
-			}
-
-			var sig:ByteArray = new ByteArray();
-			sig.writeUTFBytes( s );
-			sig = md5.hash( sig );
-
-			return Hex.fromArray( sig );
 		}

 		/**
@@ -120,21 +80,19 @@
 			}

 			var responseMap:Dictionary = new Dictionary();
-			responseMap.api_key = fb_api_key;
+			responseMap.method = challengeMap.method;
+			responseMap.api_key = fb_app_id;
+			responseMap.access_token = fb_access_token;
 			responseMap.call_id = new Date().time;
-			responseMap.method = challengeMap.method;
+			responseMap.v = "1.0";
 			responseMap.nonce = challengeMap.nonce;
-			responseMap.session_key = fb_session_key;
-			responseMap.v = "1.0";
-			responseMap.sig = formatSig( responseMap );

-			var challengeResponse:String = "api_key=" + responseMap.api_key;
+			var challengeResponse:String = "method=" + responseMap.method;
+			challengeResponse += "&api_key=" + responseMap.api_key;
+			challengeResponse += "&access_token=" + responseMap.access_token;
 			challengeResponse += "&call_id=" + responseMap.call_id;
-			challengeResponse += "&method=" + responseMap.method;
+			challengeResponse += "&v=" + responseMap.v;
 			challengeResponse += "&nonce=" + responseMap.nonce;
-			challengeResponse += "&session_key=" + responseMap.session_key;
-			challengeResponse += "&sig=" + responseMap.sig;
-			challengeResponse += "&v=" + responseMap.v;
 			challengeResponse = Base64.encode( challengeResponse );

 			var resp:XML = response;