VisApplication:
-Fixed tileWindows() so the resulting grid's rows and columns values
are as close to each other as possible and the last window is resized
to fill the rest of the stage

Change-Id: I361c5b06466ddc2ad35101f87adbfeb5c0f8e33b

--- WeaveClient/src/weave/VisApplication.as
+++ WeaveClient/src/weave/VisApplication.as
@@ -1188,10 +1188,9 @@

 			// Minimize All Windows: Get a list of all panels and call minimizePanel() on each sequentially
 			click = function():void {
-				var children:Array = Weave.root.getObjects(DraggablePanel);
-				while (children.length)
+				var panels:Array = Weave.root.getObjects(DraggablePanel);
+				for each( var panel:DraggablePanel in panels)
 				{
-					var panel:DraggablePanel = children.pop() as DraggablePanel;
 					if(panel.minimizable.value) panel.minimizePanel();
 				}
 			};
@@ -1199,23 +1198,17 @@

 			// Restore all minimized windows: Get a list of all panels and call restorePanel() on each sequentially
 			click = function():void {
-				var children:Array = Weave.root.getObjects(DraggablePanel);
-				while(children.length)
-				{
-					panel = children.shift() as DraggablePanel;
+				var panels:Array = Weave.root.getObjects(DraggablePanel);
+				for each (var panel:DraggablePanel in panels)
 					panel.restorePanel();
-				}
 			};
 			_weaveMenu.addMenuItemToMenu(_windowMenu, new WeaveMenuItem("Restore All Mimimized Windows", click, null, Weave.properties.enableRestoreAllMinimizedWindows.value ));

 			// Close All Windows: Get a list of all panels and call removePanel() on each sequentially
 			click = function():void {
-				var children:Array = Weave.root.getObjects(DraggablePanel);
-				while(children.length)
-				{
-					panel = children.pop() as DraggablePanel;
+				var panels:Array = Weave.root.getObjects(DraggablePanel);
+				for each( var panel:DraggablePanel in panels)
 					panel.removePanel();
-				}
 			};
 			_weaveMenu.addMenuItemToMenu(_windowMenu, new WeaveMenuItem("Close All Windows", click, null, Weave.properties.enableCloseAllWindows.value)) ;

@@ -1320,24 +1313,16 @@
 		private function cascadeWindows():void
 		{
 			var panels:Array = getWindowsOnStage();
-			if(!panels.length) return;
-
-			var dpanel:DraggablePanel;
-			dpanel = panels[panels.length-1] as DraggablePanel;
-
-			dpanel.panelWidth.value = "50%";
-			dpanel.panelHeight.value = "50%";
+			if(!panels.length) return;

 			var increment:Number = 50/panels.length;
 			var dist:Number = 0 ;

-			for( var i:int = 0; i < panels.length ; i++ )
-			{
-				dpanel = panels[i] as DraggablePanel;
-				dpanel.panelX.value = dist.toString()+"%";
-				dpanel.panelY.value = dist.toString()+"%";
-				dpanel.panelWidth.value = "50%" ;
-				dpanel.panelHeight.value = "50%" ;
+			for each( var dp:DraggablePanel in panels)
+			{
+				dp.panelX.value = dp.panelY.value = dist.toString()+"%";
+				dp.panelHeight.value = dp.panelWidth.value = "50%" ;
+
 				dist += increment;
 			}
 		}
@@ -1354,70 +1339,55 @@
 			if(!numPanels) return;

 			var gridLength:Number = Math.ceil(Math.sqrt(numPanels));
-			var i:Number = gridLength; var j:Number = gridLength;
-			var factor1:uint = i; var factor2:uint = j;
-
-			if( numPanels == 2)
-			{
-				factor1 = 2;
-				factor2 = 1;
-			}
-			else if( (gridLength*gridLength != numPanels) && (numPanels != 1) )
-			{
-				/*if( !(numPanels % 5) );
-				else if( !(numPanels % 3));	*/
-				if( numPanels % 2 )numPanels++;
-				var minDiff:Number = numPanels;
-				while( i < numPanels )
-				{
-					j = gridLength;
-					while( j >= 1 )
-					{
-						if(i*j == numPanels)
-							if( (i-j <= minDiff) ) {
-								minDiff = i-j ;
-								factor1 = i; factor2 = j;
-							}
-						j--;
-					}
-					i++;
-				}
-			}
-
-			//trace( factor1 + " " + factor2 + " " + numPanels);
-
-			var dp:DraggablePanel;
-			var xPos:Number = 0; var yPos:Number = 0 ;
-			var width:Number = 100/((stage.stageWidth > stage.stageHeight) ? factor1 : factor2);
-			var height:Number = 100/((stage.stageWidth > stage.stageHeight) ? factor2 : factor1);
-			for( i = 0; i < panels.length; i++ )
-			{
-				dp = panels[i] as DraggablePanel;
+
+			var rows:uint = gridLength;
+			var columns:uint = gridLength;
+
+			if(gridLength*gridLength != numPanels)
+			{
+				rows = Math.round(Math.sqrt(numPanels));
+				columns = gridLength;
+			}
+
+			var xPos:Number = 0;
+			var yPos:Number = 0 ;
+			var width:Number = 100/((stage.stageWidth > stage.stageHeight) ? rows : columns);
+			var height:Number = 100/((stage.stageWidth > stage.stageHeight) ? columns : rows);
+
+			var i:int = 0;
+			for each( var dp:DraggablePanel in panels)
+			{
 				dp.panelX.value = xPos.toString() + "%";
 				dp.panelY.value = yPos.toString() + "%";
+
+				dp.panelHeight.value = height.toString() + "%";
 				dp.panelWidth.value = width.toString() + "%";
-				dp.panelHeight.value = height.toString() + "%";
+				if( i == (panels.length - 1))
+				{
+					// expand to fill the width of stage
+					dp.panelWidth.value = (100-xPos).toString() + "%";
+				}
+
 				xPos += width;
 				if(xPos >= 100) xPos = 0;
 				if( !xPos) yPos += height ;
+				i++;
 			}
 		}

 		/**
 		 * @author kmanohar
 		 * @return an Array containing all DraggablePanels on stage that are not minimized
-		 *
 		 */
 		private function getWindowsOnStage():Array
 		{
 			var panels:Array = Weave.root.getObjects(DraggablePanel);
 			var panelsOnStage:Array = [];
-			var panel:DraggablePanel;
-			for( var i:int = 0; i < panels.length; i++ )
-			{
-				panel = panels[i] as DraggablePanel;
+
+			for each( var panel:DraggablePanel in panels )
+			{
 				if(!panel.minimized.value)
-					panelsOnStage.push(panels[i]);
+					panelsOnStage.push(panel);
 			}
 			return panelsOnStage;
 		}


Transferred from the Adobe Open Source Subversion Repository

Revision: 9317
Author:   peterson@adobe.com
Date:     2009-08-14T21:13:16.349107Z

Log Message:
-----------
Added ASDoc version tagging to all parts of these files where it was missing. Code builds and Checkintest passes.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/Channel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/MessageAgent.as</path>

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

--- frameworks/projects/rpc/src/mx/messaging/Channel.as
+++ frameworks/projects/rpc/src/mx/messaging/Channel.as
@@ -42,6 +42,7 @@

 /**
  *  Dispatched after the channel has connected to its endpoint.
+ *
Channel and its subclasses issue a Channel.Connect.Failed code whenever there is an issue in a channel's  connect attempts to a remote destination. An AMFChannel object issues Channel.Call.Failed code when the channel is already connected but it gets a Call.Failed code from its underlying NetConnection.

  *
  *  @eventType mx.messaging.events.ChannelEvent.CONNECT
  */
@@ -51,6 +52,12 @@
  *  Dispatched after the channel has disconnected from its endpoint.
  *
  *  @eventType mx.messaging.events.ChannelEvent.DISCONNECT
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion BlazeDS 4
+ *  @productversion LCDS 3
  */
 [Event(name="channelDisconnect", type="mx.messaging.events.ChannelEvent")]

@@ -58,6 +65,12 @@
  *  Dispatched after the channel has faulted.
  *
  *  @eventType mx.messaging.events.ChannelFaultEvent.FAULT
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion BlazeDS 4
+ *  @productversion LCDS 3
  */
 [Event(name="channelFault", type="mx.messaging.events.ChannelFaultEvent")]

@@ -65,6 +78,12 @@
  *  Dispatched when a channel receives a message from its endpoint.
  *
  *  @eventType mx.messaging.events.MessageEvent.MESSAGE
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion BlazeDS 4
+ *  @productversion LCDS 3
  */
 [Event(name="message", type="mx.messaging.events.MessageEvent")]

@@ -72,6 +91,12 @@
  *  Dispatched when a property of the channel changes.
  *
  *  @eventType mx.events.PropertyChangeEvent.PROPERTY_CHANGE
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion BlazeDS 4
+ *  @productversion LCDS 3
  */
 [Event(name="propertyChange", type="mx.events.PropertyChangeEvent")]

@@ -98,6 +123,12 @@
  *
Note: This class is for advanced use only.
  *  Use this class for creating custom channels like the existing RTMPChannel,
  *  AMFChannel, and HTTPChannel.

+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion BlazeDS 4
+ *  @productversion LCDS 3
  */
 public class Channel extends EventDispatcher implements IMXMLObject
 {
@@ -134,6 +165,12 @@
      *  @param id The id of this channel.
      *
      *  @param uri The endpoint URI for this channel.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function Channel(id:String = null, uri:String = null)
     {
@@ -274,6 +311,12 @@

     /**
      *  Provides access to the ChannelSets connected to the Channel.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get channelSets():Array
     {
@@ -293,6 +336,12 @@
     /**
      *  Indicates whether this channel has established a connection to the
      *  remote destination.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get connected():Boolean
     {
@@ -334,6 +383,12 @@
      *  time to wait for a connection to be established.
      *  It is not reset for each failover URI that the channel may attempt
      *  to connect to.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get connectTimeout():int
     {
@@ -395,6 +450,12 @@
     /**
      * Channel property determines the level of performance information injection - whether
      * we inject timestamps or not.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get recordMessageTimes():Boolean
     {
@@ -413,6 +474,11 @@
     /**
      * Channel property determines the level of performance information injection - whether
      * we inject message sizes or not.
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion BlazeDS 4
+     *  @productversion LCDS 3
      */
     public function get recordMessageSizes():Boolean
     {
@@ -704,7 +770,7 @@
      *  Make sure to call super.applySettings() to apply common settings for the channel.
      *
      *  @param settings XML fragment of the services-config.xml file for this channel.
-     *  The following fragement includes the <channel> tag with
+     *  The following fragment includes the <channel> tag with
      *  all of its configuration settings:
      *

      *  <channel id="my-amf" type="mx.messaging.channels.AMFChannel">


added the "use as.." button for particular and universal statements

--- Arguments/src/classes/ArgumentPanel.as
+++ Arguments/src/classes/ArgumentPanel.as
@@ -38,13 +38,14 @@
 		public var buttonArea:Panel;
 		public var panelSkin:PanelSkin;
 		public var panelSkin1:PanelSkin;
-		public var reasonButton:spark.components.Button;
+		public var useButton:spark.components.Button;
 		public var argschemeButton:spark.components.Button;
 		public static var parentMap:AgoraMap;
 		public var inference:Inference;
 		public var logicalContainer:HGroup;
 		public var rules:Vector.<Inference>;
 		public var binders:Vector.<Binder>;
+		public var state:int;	//state=0 -> universal statement and state=1 -> particular statement

 		public static const ARGUMENT_PANEL:int = 0;
 		public static const INFERENCE:int = 1;
@@ -219,26 +220,17 @@
 			addElement(input1);
 			addElement(logicalContainer);

-			//Bottom Panel
-			/*
-			var bLayout:HorizontalLayout = new HorizontalLayout;
-			buttonArea = new Panel;
-			buttonArea.layout = bLayout;
-			reasonButton = new spark.components.Button;
-			argschemeButton = new spark.components.Button;
-			//buttonArea.addElement(reasonButton);
-			buttonArea.addElement(argschemeButton);
-			buttonArea.height = 20;
-			addElement(buttonArea);
-			this.reasonButton.label="+reason";
-			//this.reasonButton.addEventListener(MouseEvent.CLICK,addReasonHandler);
-			this.argschemeButton.label="argScheme";
-			this.argschemeButton.addEventListener(MouseEvent.CLICK,addArgSchemeHandler);
-			*/
 			argschemeButton = new spark.components.Button;
 			argschemeButton.label = "+ Args";
 			logicalContainer.addElement(argschemeButton);
 			argschemeButton.addEventListener(MouseEvent.CLICK,addArgSchemeHandler);
+
+			useButton = new spark.components.Button;
+			useButton.label = "use as..";
+			logicalContainer.addElement(useButton);
+			useButton.addEventListener(MouseEvent.CLICK,toggle);
+			useButton.toolTip="Whether a statement is universal or particular determines what kind of objections are possible against it. A 'universal statement' is defined here as a statement that can be falsified by one counter-example. In this sense, laws, rules, and all statements that include 'ought' or 'should,' etc., are universal statements. Anything else is treated as a particular statement, including statements about possibilities.";
+
 		}

 		public function onArgumentPanelCreate( e:FlexEvent):void
@@ -252,5 +244,18 @@
 			//panelSkin1.topGroup.includeInLayout = false;
 			//panelSkin1.topGroup.visible = false;
 		}
+
+		public function toggle(m:MouseEvent):void
+		{
+			if(this.state==0) {
+				Alert.show("Toggling to particular statement");
+				state = 1;
+			}
+			else {
+				state = 0;
+				Alert.show("Toggling to universal statement");
+			}
+
+		}
 	}
 }


added Mona's changes

added Mona's changes

--- Arguments/src/classes/ArgumentPanel.as
+++ Arguments/src/classes/ArgumentPanel.as
@@ -9,6 +9,7 @@
 package classes
 {
 	import flash.display.Sprite;
+	import flash.display.Stage;
 	import flash.events.Event;
 	import flash.events.MouseEvent;

@@ -24,6 +25,8 @@
 	import mx.managers.DragManager;
 	import mx.skins.Border;

+	import spark.components.Button;
+	import spark.components.Group;
 	import spark.components.Panel;
 	import spark.layouts.HorizontalAlign;
 	import spark.layouts.HorizontalLayout;
@@ -35,9 +38,15 @@
 		[bindable] public var input1:DynamicTextArea;
 		public var input2:DynamicTextArea;
 		public var topArea:UIComponent;
+		public var buttonArea:Panel;
 		public var panelSkin:PanelSkin;
+		public var panelSkin1:PanelSkin;
 		public var gridX:int;
 		public var gridY:int;
+		public var astage:Canvas;
+		[bindable] public var reasonButton:spark.components.Button;
+		[bindable] public var argschemeButton:spark.components.Button;
+
 		public function ArgumentPanel()
 		{
 			super();
@@ -47,8 +56,27 @@
 			uLayout.paddingRight = 10;
 			uLayout.paddingTop = 10;
 			this.layout = uLayout;
+			//this.height = 100; this.width = 200;
 			this.addEventListener(FlexEvent.CREATION_COMPLETE,onArgumentPanelCreate);
 			//this.addEventListener(MouseEvent.MOUSE_DOWN,beginDrag);
+			//this.astage = stage;
+			//this.stage.
+
+			var bLayout:HorizontalLayout = new HorizontalLayout;
+			buttonArea = new Panel;
+			buttonArea.layout = bLayout;
+			reasonButton = new spark.components.Button;
+			argschemeButton = new spark.components.Button;
+			buttonArea.addElement(reasonButton);
+			buttonArea.addElement(argschemeButton);
+
+			this.reasonButton.label="+reason";
+			this.reasonButton.addEventListener(MouseEvent.CLICK,addReasonHandler);
+			this.argschemeButton.label="+argScheme";
+			this.argschemeButton.addEventListener(MouseEvent.CLICK,addArgSchemeHandler);
+
+			//stage.addElement(this);
+
 		}
 		public function beginDrag( mouseEvent: MouseEvent ):void
 		{
@@ -56,6 +84,7 @@
 				var	dinitiator:UIComponent = UIComponent(mouseEvent.currentTarget);
 				//Alert.show(dinitiator.toString());
 				var dPInitiator:ArgumentPanel = ArgumentPanel(dinitiator.parent.parent.parent.parent.parent);
+				//Alert.show(dPInitiator.toString());
 				var ds:DragSource = new DragSource();
 				var tmpx:int = int(dPInitiator.mouseX);
 				var tmpy:int = int(dPInitiator.mouseY);
@@ -68,7 +97,44 @@
 			}
 		}

-
+		public function addReasonHandler(event:MouseEvent):void
+		{
+			var	mystage:UIComponent = UIComponent(event.currentTarget);
+			var currentGroup:Group = Group(mystage.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent);
+			var linkedBox:ArgumentPanel = ArgumentPanel(mystage.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent);
+			var tmp:ArgumentPanel = new ArgumentPanel();
+			tmp.x = linkedBox.x + 100;
+			tmp.y = linkedBox.y;
+			Alert.show("tuesday "+linkedBox.height);
+			linkBoxes(tmp,linkedBox,currentGroup);
+			currentGroup.addElement(tmp);
+		}
+
+		public function addArgSchemeHandler(event:MouseEvent):void
+		{
+			var	mystage:UIComponent = UIComponent(event.currentTarget);
+			var currentGroup:Group = Group(mystage.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent);
+			var linkedBox:ArgumentPanel = ArgumentPanel(mystage.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent);
+			var tmp:ArgumentPanel = new ArgumentPanel();
+			currentGroup.addElement(tmp);
+		}
+
+		public function linkBoxes(a:ArgumentPanel,b:ArgumentPanel,g:Group):void
+		{
+			var drawUtility:UIComponent = new UIComponent;
+			g.addElement(drawUtility);
+			try{
+				drawUtility.graphics.clear();
+				drawUtility.graphics.lineStyle(2.0,0x000000,1.0);
+				drawUtility.graphics.moveTo(a.x + 100, a.y + 40);
+				drawUtility.graphics.lineTo(b.x, b.y + 40);
+			}catch(problem:Error)
+			{
+				Alert.show(problem.toString());
+			}
+		}
+
+
 		//create children must be overriden to create dynamically allocated children
 		override protected function createChildren():void{
 			//create the children of MX Panel
@@ -96,7 +162,7 @@
 			topArea.graphics.drawRect(0,0,20,20);
 			topArea.width = 20;
 			topArea.height = 20;
-			this.topArea.addEventListener(MouseEvent.MOUSE_DOWN,beginDrag);
+			topArea.addEventListener(MouseEvent.MOUSE_DOWN,beginDrag);

 			//add the elements to the display list
 			//of the application.
@@ -104,6 +170,11 @@
 			//addElement --> Spark
 			addElement(topArea);
 			addElement(input1);
+
+			buttonArea.height = 20;
+			addElement(buttonArea);
+
+
 		}

@@ -113,6 +184,12 @@
 			panelSkin = this.skin as PanelSkin;
 			panelSkin.topGroup.includeInLayout = false;
 			panelSkin.topGroup.visible = false;
+
+			panelSkin1 = this.buttonArea.skin as PanelSkin;
+			panelSkin1.topGroup.includeInLayout = false;
+			panelSkin1.topGroup.visible = false;
+
+
 		}

 	}


fix for issue #49 - "ended" event firing before actual stream end

--- src/flash/htmlelements/VideoElement.as
+++ src/flash/htmlelements/VideoElement.as
@@ -114,6 +114,9 @@
 			switch (event.info.code) {

 				case "NetStream.Buffer.Empty":
+					_isEnded ? sendEvent(HtmlMediaEvent.ENDED) : null;
+					break;
+
 				case "NetStream.Buffer.Full":
 					_bytesLoaded = _stream.bytesLoaded;
 					_bytesTotal = _stream.bytesTotal;
@@ -147,9 +150,10 @@
 					break;

 				case "NetStream.Play.Stop":
+					_isEnded = true;
 					_isPaused = false;
 					_timer.stop();
-					sendEvent(HtmlMediaEvent.ENDED);
+					_bufferEmpty ? sendEvent(HtmlMediaEvent.ENDED) : null;
 					break;

 			}


Transferred from the Adobe Open Source Subversion Repository

Revision: 9054
Author:   clucier@adobe.com
Date:     2009-08-04T14:12:22.809061Z

Log Message:
-----------
Refactoring DataGroup a bit to allow for more robust delegation of renderer updates to owning components.  Found and addressed an issue where we were setting the label for each item renderer upwards of four times each update.

QE notes: None
Doc notes: None
Bugs: SDK-22153, SDK-22226
Reviewer: Ryan
Tests run: Checkin, Mustella Spark (List, ButtonBar, DataGroup)
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/ButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/SkinnableDataContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/DataGroup.as</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
@@ -739,7 +739,7 @@
     override public function updateRenderer(renderer:IVisualElement):void
     {
         var transitions:Array;
-
+
         // First clean up any old, stale properties like selected and caret
         if (renderer is IItemRenderer)
         {
@@ -770,8 +770,6 @@
         // come back into use.
         if (isItemIndexSelected(index))
             itemSelected(index, true);
-        if (renderer is IItemRenderer)
-            IItemRenderer(renderer).label = itemToLabel(IItemRenderer(renderer).data);
     }

     /**


Transferred from the Adobe Open Source Subversion Repository

Revision: 5200
Author:   jszeto@adobe.com
Date:     2009-03-07T01:30:55.705633Z

Log Message:
-----------
Continuing implementation of DropDownList

- updated skins classes
- slight improvements to PopUp
- updated LabelUtil.itemToLabel to match implementation in Halo ListBase

DropDownList:
- Added itemRendererFunction, labelField and labelFunction
- Implemented selectedIndex, selectedItem and dataProvider
- Dispatch change and valueCommit events
- Added keyboard handling
- Added collectionChange handling

QE Notes: None
Doc Notes: None
Bugs: None
Reviewer: Glenn

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/PopUp.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/DropDownListButtonSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/DropDownList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/utils/LabelUtil.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/DropDownListSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/FxListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/DropDownBase.as</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/ListBase.as
@@ -634,7 +634,7 @@
      *  Returns true if the selection was committed, or false if the selection
      *  was cancelled.
      */
-    private function commitSelectedIndex():Boolean
+    protected function commitSelectedIndex():Boolean
     {
         // Step 1: make sure the proposed selected index is in range.
         var maxIndex:int = dataProvider ? dataProvider.length - 1 : -1;


Transferred from the Adobe Open Source Subversion Repository

Revision: 7773
Author:   cframpto@adobe.com
Date:     2009-06-12T00:38:38.828487Z

Log Message:
-----------
If the composition height is specified, the composer will compose just enough text to fit within the compositionBounds.  It is possible that all the composed text fit within the bounds, so it is not overset, but there is more text that was not composed.  When updating the display list, if the height increased, need to recompose if overset or the composition height was specified since there could be more text (or not).

QA Notes:
Doc Notes:SDK-21707
Reviewers: Gordon

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/supportClasses/TextGraphicElement.as

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

--- frameworks/projects/spark/src/spark/components/supportClasses/TextBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/TextBase.as
@@ -1159,8 +1159,13 @@
      */
     private function composeOnHeightChange(unscaledHeight:Number):Boolean
     {
-        // Height increased and there is more content that can be composed.
-        if (unscaledHeight > bounds.height && isOverset)
+        // Height increased and there may be more text.  It is possible that
+        // there is more text even if isOverset isn't set.  If height
+        // was specified, it will compose just enough text to fit the
+        // composition bounds and depending on text placement, it may not
+        // be overset.
+        if (unscaledHeight > bounds.height &&
+            (isOverset || !isNaN(_composeHeight)))
             return true;

         if (truncation != 0 && getStyle("lineBreak") == "toFit")


utility methods

utility methods

--- collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/util/CollectionUtil.as
+++ collect-flex/collect-flex-client/src/main/flex/org/openforis/collect/util/CollectionUtil.as
@@ -17,6 +17,11 @@
 			return ! isEmpty(list);
 		}

+		public static function addAll(list:IList, addList:IList):void {
+			for each(var item:Object in addList) {
+				list.addItem(item);
+			}
+		}

 	}
 }