incubator-flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Harui <aha...@adobe.com>
Subject Re: svn commit: r1234229 [4/4] - in /incubator/flex/whiteboard/frishy: ./ FastGroupingCollection/ FastGroupingCollection/.settings/ FastGroupingCollection/libs/ FastGroupingCollection/src/ FastGroupingCollection/src/com/ FastGroupingCollection/src/com/...
Date Sat, 21 Jan 2012 01:44:35 GMT
Adobe header?


On 1/20/12 5:33 PM, "frishy@apache.org" <frishy@apache.org> wrote:

> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/PriorityQueue.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/com/frishy/collections/PriorityQueue.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/PriorityQueue.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/PriorityQueue.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,284 @@
> +////////////////////////////////////////////////////////////////////////////
> ///
> +//
> +//  ADOBE SYSTEMS INCORPORATED
> +//  Copyright 2003-2006 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 com.frishy.collections
> +{
> +
> +    import flash.display.DisplayObject;
> +    import flash.display.DisplayObjectContainer;
> +    import flash.utils.Dictionary;
> +
> +
> +    /**
> +     *  The PriorityQueue class mx.managrs.layoutClasses.PriorityQueue, but
> it has been
> +     *  made slightly more general purpose so that it can hold
> non-ILayoutManagerClients,
> +     *  removeSmallestChild() and removeLargestChild() have been axed, and
> +     *  so that it can return the current largest or smallest priority number
> +     */
> +    public class PriorityQueue
> +    {
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Constructor
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  Constructor.
> +         */
> +        public function PriorityQueue()
> +        {
> +            super();
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Variables
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  @private
> +         */
> +        private var priorityBins:Array = [];
> +
> +        /**
> +         *  @private
> +         *  Thesmallest occupied index in arrayOfDictionaries.
> +         */
> +        private var minPriority:int = 0;
> +
> +        /**
> +         *  @private
> +         *  The largest occupied index in arrayOfDictionaries.
> +         */
> +        private var maxPriority:int = -1;
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Methods
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  @private
> +         */
> +        public function addObject(obj:Object, priority:int):void
> +        {
> +            // Update our min and max priorities.
> +            if (maxPriority < minPriority)
> +            {
> +                minPriority = maxPriority = priority;
> +            }
> +            else
> +            {
> +                if (priority < minPriority)
> +                    minPriority = priority;
> +                if (priority > maxPriority)
> +                    maxPriority = priority;
> +            }
> +
> +            var bin:PriorityBin = priorityBins[priority];
> +
> +            if (!bin)
> +            {
> +                // If no hash exists for the specified priority, create one.
> +                bin = new PriorityBin();
> +                priorityBins[priority] = bin;
> +                bin.items[obj] = true;
> +                bin.length++;
> +            }
> +            else
> +            {
> +                // If we don't already hold the obj in the specified hash,
> add it
> +                // and update our item count.
> +                if (bin.items[obj] == null)
> +                {
> +                    bin.items[obj] = true;
> +                    bin.length++;
> +                }
> +            }
> +
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function removeLargest():Object
> +        {
> +            var obj:Object = null;
> +
> +            if (minPriority <= maxPriority)
> +            {
> +                var bin:PriorityBin = priorityBins[maxPriority];
> +                while (!bin || bin.length == 0)
> +                {
> +                    maxPriority--;
> +                    if (maxPriority < minPriority)
> +                        return null;
> +                    bin = priorityBins[maxPriority];
> +                }
> +
> +                // Remove the item with largest priority from our priority
> queue.
> +                // Must use a for loop here since we're removing a specific
> item
> +                // from a 'Dictionary' (no means of directly indexing).
> +                for (var key:Object in bin.items )
> +                {
> +                    obj = key;
> +                    removeItem(key, maxPriority);
> +                    break;
> +                }
> +
> +                // Update maxPriority if applicable.
> +                while (!bin || bin.length == 0)
> +                {
> +                    maxPriority--;
> +                    if (maxPriority < minPriority)
> +                        break;
> +                    bin = priorityBins[maxPriority];
> +                }
> +
> +            }
> +
> +            return obj;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function removeSmallest():Object
> +        {
> +            var obj:Object = null;
> +
> +            if (minPriority <= maxPriority)
> +            {
> +                var bin:PriorityBin = priorityBins[minPriority];
> +                while (!bin || bin.length == 0)
> +                {
> +                    minPriority++;
> +                    if (minPriority > maxPriority)
> +                        return null;
> +                    bin = priorityBins[minPriority];
> +                }
> +
> +                // Remove the item with smallest priority from our priority
> queue.
> +                // Must use a for loop here since we're removing a specific
> item
> +                // from a 'Dictionary' (no means of directly indexing).
> +                for (var key:Object in bin.items )
> +                {
> +                    obj = key;
> +                    removeItem(key, minPriority);
> +                    break;
> +                }
> +
> +                // Update minPriority if applicable.
> +                while (!bin || bin.length == 0)
> +                {
> +                    minPriority++;
> +                    if (minPriority > maxPriority)
> +                        break;
> +                    bin = priorityBins[minPriority];
> +                }
> +            }
> +
> +            return obj;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        protected function removeItem(client:Object, priority:int):Object
> +        {
> +            var bin:PriorityBin = priorityBins[priority];
> +            if (bin && bin.items[client] != null)
> +            {
> +                delete bin.items[client];
> +                bin.length--;
> +                return client;
> +            }
> +            return null;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function removeAll():void
> +        {
> +            priorityBins.length = 0;
> +            minPriority = 0;
> +            maxPriority = -1;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function isEmpty():Boolean
> +        {
> +            return minPriority > maxPriority;
> +        }
> +
> +        /**
> +         *  Returns the max priority an item as it or -1 if there is none
> +         */
> +        public function getMaxPriority():int
> +        {
> +            var bin:PriorityBin = priorityBins[maxPriority];
> +
> +            // TODO (frishbry): not sure if we need to do this loop
> +            // since it's done at the end of removeSmallest() and
> removeLargest()
> +            // but it's done in the beginning, so perhaps there's a reason
> why it's in there
> +            while (!bin || bin.length == 0)
> +            {
> +                maxPriority--;
> +                if (maxPriority < minPriority)
> +                    return -1;
> +                bin = priorityBins[maxPriority];
> +            }
> +
> +            return maxPriority;
> +        }
> +
> +        /**
> +         *  Returns the min priority an item as it or -1 if there is none
> +         */
> +        public function getMinPriority():int
> +        {
> +            var bin:PriorityBin = priorityBins[minPriority];
> +
> +            // TODO (frishbry): not sure if we need to do this loop
> +            // since it's done at the end of removeSmallest() and
> removeLargest()
> +            // but it's done in the beginning, so perhaps there's a reason
> why it's in there
> +            while (!bin || bin.length == 0)
> +            {
> +                minPriority++;
> +                if (minPriority > maxPriority)
> +                    return -1;
> +                bin = priorityBins[minPriority];
> +            }
> +
> +            return minPriority;
> +        }
> +    }
> +
> +}
> +
> +import flash.utils.Dictionary;
> +
> +/**
> + *  Represents one priority bucket of entries.
> + *  @private
> + */
> +class PriorityBin
> +{
> +    public var length:int;
> +    public var items:Dictionary = new Dictionary();
> +
> +}
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/PriorityQueue.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnArrayOfChildValuesSummaryCalculator.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/com/frishy/collections/summarycalculators/ReturnArrayOfChildValuesS
> ummaryCalculator.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnArrayOfChildValuesSummaryCalculator.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnArrayOfChildValuesSummaryCalculator.as Sat Jan
> 21 01:33:26 2012
> @@ -0,0 +1,133 @@
> +package com.frishy.collections.summarycalculators
> +{
> +    import com.frishy.collections.CollectionUtil;
> +    import com.frishy.collections.ISummaryCalculator2;
> +
> +    import mx.collections.SummaryField2;
> +
> +    /**
> +     *  Special summary calculator for use in FastGroupingCollection that
> creates an array
> +     *  of values from the children.  This can be useful if you are
> implementing the composite
> +     *  pattern.  If the values are themselves arrays, it will
> +     *  not create an array of arrays, but instead will create a single array
> out of
> +     *  those values.  This way, multiple levels will still calculate
> summaries easily.
> +     */
> +    public class ReturnArrayOfChildValuesSummaryCalculator implements
> ISummaryCalculator2
> +    {
> +
> //--------------------------------------------------------------------------
> +        //
> +        // Class Members
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        private static function addUniqueValuesToArray(newValue:Object,
> currentValueArray:Array):void
> +        {
> +            var newValues:Array = newValue as Array;
> +
> +            if (newValues)
> +            {
> +                for (var i:int = 0; i < newValues.length; i++)
> +                {
> +                    if (currentValueArray.indexOf(newValues[i]) == -1)
> +                    {
> +                        currentValueArray.push(newValues[i]);
> +                    }
> +                }
> +            }
> +            else
> +            {
> +                if (currentValueArray.indexOf(newValue) == -1)
> +                {
> +                    currentValueArray.push(newValue);
> +                }
> +            }
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        // Constructor
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        public function ReturnArrayOfChildValuesSummaryCalculator()
> +        {
> +            super();
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        // Methods: ISummaryCalculator
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function summaryCalculationBegin(field:SummaryField2):Object
> +        {
> +            return {value: []};
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function calculateSummary(data:Object, field:SummaryField2,
> rowData:Object):void
> +        {
> +            var newValue:Object = CollectionUtil.getDataFieldValue(rowData,
> field.dataField);
> +            var currentValueArray:Array = data.value;
> +
> +            addUniqueValuesToArray(newValue, currentValueArray)
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummary(data:Object,
> field:SummaryField2):Number
> +        {
> +            return returnSummary2(data, field) as Number;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummary2(data:Object,
> field:SummaryField2):Object
> +        {
> +            return data.value;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function summaryOfSummaryCalculationBegin(value:Object,
> field:SummaryField2):Object
> +        {
> +            return {value: value.value.concat()};
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function calculateSummaryOfSummary(value:Object,
> newValue:Object, field:SummaryField2):void
> +        {
> +            var newValue:Object = newValue.value;
> +            var currentValueArray:Array = value.value;
> +
> +            addUniqueValuesToArray(newValue, currentValueArray);
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummaryOfSummary(value:Object,
> field:SummaryField2):Number
> +        {
> +            return returnSummaryOfSummary2(value, field) as Number;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummaryOfSummary2(value:Object,
> field:SummaryField2):Object
> +        {
> +            return value.value;
> +        }
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnArrayOfChildValuesSummaryCalculator.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnChildValueSummaryCalculator.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/com/frishy/collections/summarycalculators/ReturnChildValueSummaryCa
> lculator.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnChildValueSummaryCalculator.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnChildValueSummaryCalculator.as Sat Jan 21
> 01:33:26 2012
> @@ -0,0 +1,99 @@
> +package com.frishy.collections.summarycalculators
> +{
> +    import com.frishy.collections.CollectionUtil;
> +    import com.frishy.collections.ISummaryCalculator2;
> +
> +    import mx.collections.SummaryField2;
> +
> +    /**
> +     *  Special summary calculator for use in FastGroupingCollection that
> returns
> +     *  the same value as one of its children.  This is useful if you are
> attempting to
> +     *  implement the composite pattern and all children have the same value
> for a particular
> +     *  property.  If children have unique values for the property, this
> class is not as
> +     *  as useful, and it may return a random children's value.
> +     */
> +    public class ReturnChildValueSummaryCalculator implements
> ISummaryCalculator2
> +    {
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        // Constructor
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        public function ReturnChildValueSummaryCalculator()
> +        {
> +            super();
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        // Methods: ISummaryCalculator
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function summaryCalculationBegin(field:SummaryField2):Object
> +        {
> +            return {};
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function calculateSummary(data:Object, field:SummaryField2,
> rowData:Object):void
> +        {
> +            data.value = CollectionUtil.getDataFieldValue(rowData,
> field.dataField);
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummary(data:Object,
> field:SummaryField2):Number
> +        {
> +            return returnSummary2(data, field) as Number;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummary2(data:Object,
> field:SummaryField2):Object
> +        {
> +            return data.value;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function summaryOfSummaryCalculationBegin(value:Object,
> field:SummaryField2):Object
> +        {
> +            return {value: value.value};
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function calculateSummaryOfSummary(value:Object,
> newValue:Object, field:SummaryField2):void
> +        {
> +            value.value = newValue.value;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummaryOfSummary(value:Object,
> field:SummaryField2):Number
> +        {
> +            return returnSummaryOfSummary2(value, field) as Number;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function returnSummaryOfSummary2(value:Object,
> field:SummaryField2):Object
> +        {
> +            return value.value;
> +        }
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/collect
> ions/summarycalculators/ReturnChildValueSummaryCalculator.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/utils/L
> ayoutManagerClientHelper.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/com/frishy/utils/LayoutManagerClientHelper.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/utils/L
> ayoutManagerClientHelper.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/utils/L
> ayoutManagerClientHelper.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,310 @@
> +package com.frishy.utils
> +{
> +    import flash.events.EventDispatcher;
> +    import flash.events.IEventDispatcher;
> +
> +    import mx.core.IInvalidating;
> +    import mx.core.UIComponentGlobals;
> +    import mx.core.mx_internal;
> +    import mx.managers.ILayoutManagerClient;
> +
> +    use namespace mx_internal;
> +
> +    public class LayoutManagerClientHelper extends EventDispatcher
> +        implements ILayoutManagerClient, IInvalidating
> +    {
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Constructor
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  Constructor
> +         */
> +        public function
> LayoutManagerClientHelper(validatePropertiesCallback:Function = null,
> +
> validateSizeCallback:Function = null,
> +
> validateDisplayListCallback:Function = null)
> +        {
> +            super();
> +
> +            this.validatePropertiesCallback = validatePropertiesCallback;
> +            this.validateSizeCallback = validateSizeCallback;
> +            this.validateDisplayListCallback = validateDisplayListCallback;
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Variables
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  @private
> +         *  Whether validateProperties() needs to be called
> +         */
> +        private var invalidatePropertiesFlag:Boolean = false;
> +
> +        /**
> +         *  @private
> +         *  Whether validateSize() needs to be called
> +         */
> +        private var invalidateSizeFlag:Boolean = false;
> +
> +        /**
> +         *  @private
> +         *  Whether validateDisplayList() needs to be called
> +         */
> +        private var invalidateDisplayListFlag:Boolean = false;
> +
> +        /**
> +         *  Callback for the validateProperties() pass
> +         */
> +        public var validatePropertiesCallback:Function;
> +
> +        /**
> +         *  Callback for the validateSize() pass
> +         */
> +        public var validateSizeCallback:Function;
> +
> +        /**
> +         *  Callback for the validateDisplayList() pass
> +         */
> +        public var validateDisplayListCallback:Function;
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Properties
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        //----------------------------------
> +        //  needsValidation
> +        //----------------------------------
> +
> +        /**
> +         *  Whether this object is invalid
> +         */
> +        public function get needsValidation():Boolean
> +        {
> +            // if any of the flags are invalid, then we need validation
> +            return (invalidatePropertiesFlag || invalidateSizeFlag ||
> invalidateDisplayListFlag);
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Properties: ILayoutManagerClient
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        //----------------------------------
> +        //  initialized
> +        //----------------------------------
> +
> +        /**
> +         *  @private
> +         *  Storage for the initialized property.
> +         */
> +        private var _initialized:Boolean = false;
> +
> +        /**
> +         *  @copy mx.core.UIComponent#initialized
> +         */
> +        public function get initialized():Boolean
> +        {
> +            return _initialized;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function set initialized(value:Boolean):void
> +        {
> +            _initialized = value;
> +        }
> +
> +        //----------------------------------
> +        //  nestLevel
> +        //----------------------------------
> +
> +        /**
> +         *  @private
> +         *  Storage for the nestLevel property.
> +         */
> +        private var _nestLevel:int = 1;
> +
> +        // no one will likely set nestLevel (but there's a setter in case
> +        // someone wants to.  We default nestLevel to 1 so it's a top-level
> component
> +
> +        /**
> +         *  @copy mx.core.UIComponent#nestLevel
> +         */
> +        public function get nestLevel():int
> +        {
> +            return _nestLevel;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function set nestLevel(value:int):void
> +        {
> +            _nestLevel = value;
> +        }
> +
> +        //----------------------------------
> +        //  processedDescriptors
> +        //----------------------------------
> +
> +        /**
> +         *  @private
> +         *  Storage for the processedDescriptors property.
> +         */
> +        private var _processedDescriptors:Boolean = false;
> +
> +        /**
> +         *  @copy mx.core.UIComponent#processedDescriptors
> +         */
> +        public function get processedDescriptors():Boolean
> +        {
> +            return _processedDescriptors;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function set processedDescriptors(value:Boolean):void
> +        {
> +            _processedDescriptors = value;
> +        }
> +
> +        //----------------------------------
> +        //  updateCompletePendingFlag
> +        //----------------------------------
> +
> +        /**
> +         *  @private
> +         *  Storage for the updateCompletePendingFlag property.
> +         */
> +        private var _updateCompletePendingFlag:Boolean = false;
> +
> +        /**
> +         *  A flag that determines if an object has been through all three
> phases
> +         *  of layout validation (provided that any were required).
> +         */
> +        public function get updateCompletePendingFlag():Boolean
> +        {
> +            return _updateCompletePendingFlag;
> +        }
> +
> +        /**
> +         *  @private
> +         */
> +        public function set updateCompletePendingFlag(value:Boolean):void
> +        {
> +            _updateCompletePendingFlag = value;
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Methods: IInvalidating
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  @copy mx.core.IInvalidating#invalidateProperties()
> +         */
> +        public function invalidateProperties():void
> +        {
> +            // Don't try to add the object to the display list queue until
> we've
> +            // been assigned a nestLevel, or we'll get added at the wrong
> place in
> +            // the LayoutManager's priority queue.
> +            if (!invalidatePropertiesFlag && nestLevel > 0)
> +            {
> +                invalidatePropertiesFlag = true;
> +                UIComponentGlobals.layoutManager.invalidateProperties(this);
> +            }
> +        }
> +
> +        /**
> +         *  @copy mx.core.IInvalidating#invalidateSize()
> +         */
> +        public function invalidateSize():void
> +        {
> +            // Don't try to add the object to the display list queue until
> we've
> +            // been assigned a nestLevel, or we'll get added at the wrong
> place in
> +            // the LayoutManager's priority queue.
> +            if (!invalidateSizeFlag && nestLevel > 0)
> +            {
> +                invalidateSizeFlag = true;
> +                UIComponentGlobals.layoutManager.invalidateSize(this);
> +            }
> +        }
> +
> +        /**
> +         *  @copy mx.core.IInvalidating#invalidateDisplayList()
> +         */
> +        public function invalidateDisplayList():void
> +        {
> +            // Don't try to add the object to the display list queue until
> we've
> +            // been assigned a nestLevel, or we'll get added at the wrong
> place in
> +            // the LayoutManager's priority queue.
> +            if (!invalidateDisplayListFlag && nestLevel > 0)
> +            {
> +                invalidateDisplayListFlag = true;
> +                UIComponentGlobals.layoutManager.invalidateDisplayList(this);
> +            }
> +        }
> +
> +        /**
> +         *  @copy mx.core.IInvalidating#validateNow()
> +         */
> +        public function validateNow():void
> +        {
> +            if (invalidatePropertiesFlag)
> +                validateProperties();
> +
> +            if (invalidateSizeFlag)
> +                validateSize();
> +
> +            if (invalidateDisplayListFlag)
> +                validateDisplayList();
> +        }
> +
> +
> //--------------------------------------------------------------------------
> +        //
> +        //  Methods: Validation
> +        //
> +
> //--------------------------------------------------------------------------
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function validateProperties():void
> +        {
> +            if (validatePropertiesCallback != null)
> +                validatePropertiesCallback();
> +
> +            invalidatePropertiesFlag = false;
> +        }
> +
> +        /**
> +         *  @inheritDoc
> +         */
> +        public function validateSize(recursive:Boolean=false):void
> +        {
> +            if (validateSizeCallback != null)
> +                validateSizeCallback(recursive);
> +
> +            invalidateSizeFlag = false;
> +        }
> +
> +        public function validateDisplayList():void
> +        {
> +            if (validateDisplayListCallback != null)
> +                validateDisplayListCallback();
> +
> +            invalidateDisplayListFlag = false;
> +        }
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/com/frishy/utils/L
> ayoutManagerClientHelper.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/ChangeWatcherAdvancedDataGridItemRenderer.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/fastdatagridhelpers/ChangeWatcherAdvancedDataGridItemRenderer.as?re
> v=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/ChangeWatcherAdvancedDataGridItemRenderer.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/ChangeWatcherAdvancedDataGridItemRenderer.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,109 @@
> +package fastdatagridhelpers
> +{
> +    import flash.events.Event;
> +
> +    import mx.binding.utils.ChangeWatcher;
> +    import mx.controls.advancedDataGridClasses.AdvancedDataGridItemRenderer;
> +    import mx.controls.advancedDataGridClasses.AdvancedDataGridListData;
> +    import mx.core.UIComponentGlobals;
> +    import mx.core.mx_internal;
> +
> +    use namespace mx_internal;
> +
> +    public class ChangeWatcherAdvancedDataGridItemRenderer extends
> AdvancedDataGridItemRenderer
> +    {
> +        public function ChangeWatcherAdvancedDataGridItemRenderer()
> +        {
> +            super();
> +        }
> +
> +        private var invalidatePropertiesFlag:Boolean = false;
> +
> +        private var invalidateSizeFlag:Boolean = false;
> +
> +        private var changeWatcher:ChangeWatcher;
> +
> +        override public function set data(value:Object):void
> +        {
> +            if (data)
> +            {
> +                removeChangeWatcher();
> +            }
> +
> +            super.data = value;
> +
> +            if (data)
> +            {
> +                addChangeWatcher();
> +            }
> +        }
> +
> +        protected function addChangeWatcher():void
> +        {
> +            var adgListData:AdvancedDataGridListData =
> AdvancedDataGridListData(listData);
> +            if (adgListData.dataField)
> +            {
> +                changeWatcher = ChangeWatcher.watch(data,
> adgListData.dataField.split("."), dataHasUpdated);
> +            }
> +        }
> +
> +        protected function removeChangeWatcher():void
> +        {
> +            if (changeWatcher)
> +            {
> +                changeWatcher.unwatch();
> +                changeWatcher = null;
> +            }
> +        }
> +
> +        protected function dataHasUpdated(event:Event = null):void
> +        {
> +            if (nestLevel && !invalidatePropertiesFlag)
> +            {
> +                UIComponentGlobals.layoutManager.invalidateProperties(this);
> +                invalidatePropertiesFlag = true;
> +//                UIComponentGlobals.layoutManager.invalidateSize(this);
> +//                invalidateSizeFlag = true;
> +            }
> +        }
> +
> +        override public function validateProperties():void
> +        {
> +            invalidatePropertiesFlag = false;
> +
> +            // update listData.label so super.validateProperties() will
> update the text correctly
> +            var _listData:AdvancedDataGridListData = listData as
> AdvancedDataGridListData;
> +            if (_listData)
> +            {
> +                var label:String;
> +                try
> +                {
> +                    var isComplexDataField:Boolean =
> (_listData.dataField.indexOf(".") >= 0);
> +                    if (isComplexDataField)
> +                    {
> +                        var pathElements:Array =
> _listData.dataField.split(".");
> +                        var currentItemData:Object = data;
> +
> +                        for each (var pathElement:String in pathElements)
> +                        {
> +                            currentItemData = currentItemData[pathElement];
> +                        }
> +
> +                        if (currentItemData != null)
> +                            label = currentItemData.toString();
> +                    }
> +                    else if (data.hasOwnProperty(_listData.dataField))
> +                    {
> +                        label = data[_listData.dataField];
> +                    }
> +                }
> +                catch(ignored:Error)
> +                {
> +                }
> +
> +                _listData.label = label;
> +            }
> +            super.validateProperties();
> +        }
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/ChangeWatcherAdvancedDataGridItemRenderer.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/FastAdvancedDataGrid.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/fastdatagridhelpers/FastAdvancedDataGrid.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/FastAdvancedDataGrid.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/FastAdvancedDataGrid.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,25 @@
> +package fastdatagridhelpers
> +{
> +    import flash.events.Event;
> +
> +    import mx.controls.AdvancedDataGrid;
> +    import mx.events.CollectionEvent;
> +    import mx.events.CollectionEventKind;
> +
> +    public class FastAdvancedDataGrid extends AdvancedDataGrid
> +    {
> +        public function FastAdvancedDataGrid()
> +        {
> +            super();
> +        }
> +
> +        override protected function collectionChangeHandler(event:Event):void
> +        {
> +            var ce:CollectionEvent = CollectionEvent(event);
> +            if (ce.kind != CollectionEventKind.UPDATE)
> +            {
> +                super.collectionChangeHandler(event);
> +            }
> +        }
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/fastdatagridhelper
> s/FastAdvancedDataGrid.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NestedProper
> tyObject.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/model/NestedPropertyObject.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NestedProper
> tyObject.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NestedProper
> tyObject.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,15 @@
> +package model
> +{
> +    public class NestedPropertyObject
> +    {
> +        public function NestedPropertyObject()
> +        {
> +        }
> +
> +        [Bindable]
> +        public var propertyChangeBindableObject:PropertyChangeBindableObject;
> +
> +        [Bindable]
> +        public var uniqueEventBindableObject:UniqueEventBindableObject;
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NestedProper
> tyObject.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NonBindableO
> bject.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/model/NonBindableObject.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NonBindableO
> bject.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NonBindableO
> bject.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,109 @@
> +package model
> +{
> +    import flash.events.EventDispatcher;
> +
> +    public class NonBindableObject extends EventDispatcher
> +    {
> +        public function NonBindableObject()
> +        {
> +            super();
> +        }
> +
> +        public static const NUM_PROPERTIES:int = 30;
> +
> +        public function fillAllProperties():void
> +        {
> +            for (var i:int = 0; i < NUM_PROPERTIES; i++)
> +            {
> +                fillProperty(i);
> +            }
> +        }
> +
> +        public function fillNRandomProperties(numPropertiesToUpdate:int):void
> +        {
> +            for (var j:int = 0; j < numPropertiesToUpdate; j++)
> +            {
> +                fillARandomProperty();
> +            }
> +        }
> +
> +        private function fillARandomProperty():void
> +        {
> +            var propertyIndex:int = Math.floor(Math.random() *
> NUM_PROPERTIES);
> +            fillProperty(propertyIndex);
> +        }
> +
> +        private function fillProperty(propertyIndex:int):void
> +        {
> +            if (propertyIndex % 3 == 0)
> +            {
> +                // Number
> +                this["property" + propertyIndex] = Math.random();
> +            }
> +            else
> +            {
> +                this["property" + propertyIndex] = Math.random().toString();
> +            }
> +        }
> +
> +        public var property0:Number;
> +
> +        public var property1:String;
> +
> +        public var property2:String;
> +
> +        public var property3:Number;
> +
> +        public var property4:String;
> +
> +        public var property5:String;
> +
> +        public var property6:Number;
> +
> +        public var property7:String;
> +
> +        public var property8:String;
> +
> +        public var property9:Number;
> +
> +        public var property10:String;
> +
> +        public var property11:String;
> +
> +        public var property12:Number;
> +
> +        public var property13:String;
> +
> +        public var property14:String;
> +
> +        public var property15:Number;
> +
> +        public var property16:String;
> +
> +        public var property17:String;
> +
> +        public var property18:Number;
> +
> +        public var property19:String;
> +
> +        public var property20:String;
> +
> +        public var property21:Number;
> +
> +        public var property22:String;
> +
> +        public var property23:String;
> +
> +        public var property24:Number;
> +
> +        public var property25:String;
> +
> +        public var property26:String;
> +
> +        public var property27:Number;
> +
> +        public var property28:String;
> +
> +        public var property29:String;
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/NonBindableO
> bject.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/PropertyChan
> geBindableObject.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/model/PropertyChangeBindableObject.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/PropertyChan
> geBindableObject.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/PropertyChan
> geBindableObject.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,159 @@
> +package model
> +{
> +    import flash.events.EventDispatcher;
> +
> +    import mx.events.PropertyChangeEvent;
> +
> +    public class PropertyChangeBindableObject extends EventDispatcher
> +    {
> +        public function PropertyChangeBindableObject()
> +        {
> +            super();
> +        }
> +
> +        public static const NUM_PROPERTIES:int = 30;
> +
> +        public function fillAllProperties():void
> +        {
> +            for (var i:int = 0; i < NUM_PROPERTIES; i++)
> +            {
> +                fillProperty(i);
> +            }
> +        }
> +
> +        public function fillNRandomProperties(numPropertiesToUpdate:int):void
> +        {
> +            for (var j:int = 0; j < numPropertiesToUpdate; j++)
> +            {
> +                fillARandomProperty();
> +            }
> +        }
> +
> +        private function fillARandomProperty():void
> +        {
> +            var propertyIndex:int = Math.floor(Math.random() *
> NUM_PROPERTIES);
> +            fillProperty(propertyIndex);
> +        }
> +
> +        private function fillProperty(propertyIndex:int):void
> +        {
> +            if (propertyIndex % 3 == 0)
> +            {
> +                // Number
> +                this["property" + propertyIndex] = Math.random();
> +            }
> +            else
> +            {
> +                this["property" + propertyIndex] = Math.random().toString();
> +            }
> +        }
> +
> +        [Bindable]
> +        public var property0:Number;
> +
> +        [Bindable]
> +        public var property1:String;
> +
> +        [Bindable]
> +        public var property2:String;
> +
> +//        [Bindable]
> +//        public var property3:Number;
> +        private var _property3:Number;
> +
> +        [Bindable("propertyChange")]
> +        public function get property3():Number
> +        {
> +            return _property3;
> +        }
> +
> +        public function set property3(value:Number):void
> +        {
> +            if (value == _property3)
> +                return;
> +
> +            var oldValue:Number = _property3;
> +            _property3 = value;
> +
> +            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "property3", oldValue, _property3));
> +        }
> +
> +        [Bindable]
> +        public var property4:String;
> +
> +        [Bindable]
> +        public var property5:String;
> +
> +        [Bindable]
> +        public var property6:Number;
> +
> +        [Bindable]
> +        public var property7:String;
> +
> +        [Bindable]
> +        public var property8:String;
> +
> +        [Bindable]
> +        public var property9:Number;
> +
> +        [Bindable]
> +        public var property10:String;
> +
> +        [Bindable]
> +        public var property11:String;
> +
> +        [Bindable]
> +        public var property12:Number;
> +
> +        [Bindable]
> +        public var property13:String;
> +
> +        [Bindable]
> +        public var property14:String;
> +
> +        [Bindable]
> +        public var property15:Number;
> +
> +        [Bindable]
> +        public var property16:String;
> +
> +        [Bindable]
> +        public var property17:String;
> +
> +        [Bindable]
> +        public var property18:Number;
> +
> +        [Bindable]
> +        public var property19:String;
> +
> +        [Bindable]
> +        public var property20:String;
> +
> +        [Bindable]
> +        public var property21:Number;
> +
> +        [Bindable]
> +        public var property22:String;
> +
> +        [Bindable]
> +        public var property23:String;
> +
> +        [Bindable]
> +        public var property24:Number;
> +
> +        [Bindable]
> +        public var property25:String;
> +
> +        [Bindable]
> +        public var property26:String;
> +
> +        [Bindable]
> +        public var property27:Number;
> +
> +        [Bindable]
> +        public var property28:String;
> +
> +        [Bindable]
> +        public var property29:String;
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/PropertyChan
> geBindableObject.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/SingleVersio
> nEventBindableObject.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/model/SingleVersionEventBindableObject.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/SingleVersio
> nEventBindableObject.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/SingleVersio
> nEventBindableObject.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,503 @@
> +package model
> +{
> +    import flash.events.Event;
> +    import flash.events.EventDispatcher;
> +
> +    import mx.events.PropertyChangeEvent;
> +
> +    public class SingleVersionEventBindableObject extends EventDispatcher
> +    {
> +        public function SingleVersionEventBindableObject()
> +        {
> +            super();
> +        }
> +
> +        public static function createProperties(start:int, end:int):void
> +        {
> +            for (var i:int = start; i <= end; i++)
> +            {
> +                var type:String = (i % 3 == 0 ? "Number" : "String");
> +
> +                trace('private var _property' + i + ':' + type + ';');
> +                trace('');
> +                trace('[Bindable("versionNumberChanged")]');
> +                trace('public function get property' + i + '():' + type +
> '');
> +                trace('{');
> +                    trace('return _property' + i + ';');
> +                trace('}');
> +                trace('');
> +                trace('public function set property' + i + '(value:' + type +
> '):void');
> +                trace('{');
> +                    trace('_property' + i + ' = value;');
> +                trace('}');
> +                trace('');
> +            }
> +
> +        }
> +
> +        public static const NUM_PROPERTIES:int = 30;
> +
> +        public function fillAllProperties():void
> +        {
> +            for (var i:int = 0; i < NUM_PROPERTIES; i++)
> +            {
> +                fillProperty(i);
> +            }
> +
> +            versionNumber++;
> +        }
> +
> +        public function fillNRandomProperties(numPropertiesToUpdate:int):void
> +        {
> +            for (var j:int = 0; j < numPropertiesToUpdate; j++)
> +            {
> +                fillARandomProperty();
> +            }
> +
> +            versionNumber++;
> +        }
> +
> +        // doesn't update version.... so no binding here
> +        private function fillARandomProperty():void
> +        {
> +            var propertyIndex:int = Math.floor(Math.random() *
> NUM_PROPERTIES);
> +            fillProperty(propertyIndex);
> +        }
> +
> +        private function fillProperty(propertyIndex:int):void
> +        {
> +            if (propertyIndex % 3 == 0)
> +            {
> +                // Number
> +                this["property" + propertyIndex] = Math.random();
> +            }
> +            else
> +            {
> +                this["property" + propertyIndex] = Math.random().toString();
> +            }
> +        }
> +
> +        private var _versionNumber:Number = 0;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get versionNumber():int
> +        {
> +            return _versionNumber;
> +        }
> +
> +        public function set versionNumber(value:int):void
> +        {
> +            if (_versionNumber == value)
> +                return;
> +
> +            var oldValue:Number = _versionNumber;
> +
> +            _versionNumber = value;
> +
> +            dispatchEvent(new Event("versionNumberChanged"));
> +
> +//            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "versionNumber", oldValue, _versionNumber));
> +
> +            // prop0 is filter
> +            // prop1 is sort
> +            // prop3 is grouping
> +//            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "property0", property0, property0));
> +//            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "property1", property1, property1));
> +            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "property3", property3, property3));
> +        }
> +
> +
> +
> +
> +
> +        private var _property0:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property0():Number
> +        {
> +            return _property0;
> +        }
> +
> +        public function set property0(value:Number):void
> +        {
> +            _property0 = value;
> +        }
> +
> +        private var _property1:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property1():String
> +        {
> +            return _property1;
> +        }
> +
> +        public function set property1(value:String):void
> +        {
> +            _property1 = value;
> +        }
> +
> +        private var _property2:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property2():String
> +        {
> +            return _property2;
> +        }
> +
> +        public function set property2(value:String):void
> +        {
> +            _property2 = value;
> +        }
> +
> +        private var _property3:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property3():Number
> +        {
> +            return _property3;
> +        }
> +
> +        public function set property3(value:Number):void
> +        {
> +            _property3 = value;
> +        }
> +
> +        private var _property4:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property4():String
> +        {
> +            return _property4;
> +        }
> +
> +        public function set property4(value:String):void
> +        {
> +            _property4 = value;
> +        }
> +
> +        private var _property5:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property5():String
> +        {
> +            return _property5;
> +        }
> +
> +        public function set property5(value:String):void
> +        {
> +            _property5 = value;
> +        }
> +
> +        private var _property6:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property6():Number
> +        {
> +            return _property6;
> +        }
> +
> +        public function set property6(value:Number):void
> +        {
> +            _property6 = value;
> +        }
> +
> +        private var _property7:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property7():String
> +        {
> +            return _property7;
> +        }
> +
> +        public function set property7(value:String):void
> +        {
> +            _property7 = value;
> +        }
> +
> +        private var _property8:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property8():String
> +        {
> +            return _property8;
> +        }
> +
> +        public function set property8(value:String):void
> +        {
> +            _property8 = value;
> +        }
> +
> +        private var _property9:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property9():Number
> +        {
> +            return _property9;
> +        }
> +
> +        public function set property9(value:Number):void
> +        {
> +            _property9 = value;
> +        }
> +
> +        private var _property10:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property10():String
> +        {
> +            return _property10;
> +        }
> +
> +        public function set property10(value:String):void
> +        {
> +            _property10 = value;
> +        }
> +
> +        private var _property11:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property11():String
> +        {
> +            return _property11;
> +        }
> +
> +        public function set property11(value:String):void
> +        {
> +            _property11 = value;
> +        }
> +
> +        private var _property12:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property12():Number
> +        {
> +            return _property12;
> +        }
> +
> +        public function set property12(value:Number):void
> +        {
> +            _property12 = value;
> +        }
> +
> +        private var _property13:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property13():String
> +        {
> +            return _property13;
> +        }
> +
> +        public function set property13(value:String):void
> +        {
> +            _property13 = value;
> +        }
> +
> +        private var _property14:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property14():String
> +        {
> +            return _property14;
> +        }
> +
> +        public function set property14(value:String):void
> +        {
> +            _property14 = value;
> +        }
> +
> +        private var _property15:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property15():Number
> +        {
> +            return _property15;
> +        }
> +
> +        public function set property15(value:Number):void
> +        {
> +            _property15 = value;
> +        }
> +
> +        private var _property16:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property16():String
> +        {
> +            return _property16;
> +        }
> +
> +        public function set property16(value:String):void
> +        {
> +            _property16 = value;
> +        }
> +
> +        private var _property17:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property17():String
> +        {
> +            return _property17;
> +        }
> +
> +        public function set property17(value:String):void
> +        {
> +            _property17 = value;
> +        }
> +
> +        private var _property18:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property18():Number
> +        {
> +            return _property18;
> +        }
> +
> +        public function set property18(value:Number):void
> +        {
> +            _property18 = value;
> +        }
> +
> +        private var _property19:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property19():String
> +        {
> +            return _property19;
> +        }
> +
> +        public function set property19(value:String):void
> +        {
> +            _property19 = value;
> +        }
> +
> +        private var _property20:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property20():String
> +        {
> +            return _property20;
> +        }
> +
> +        public function set property20(value:String):void
> +        {
> +            _property20 = value;
> +        }
> +
> +        private var _property21:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property21():Number
> +        {
> +            return _property21;
> +        }
> +
> +        public function set property21(value:Number):void
> +        {
> +            _property21 = value;
> +        }
> +
> +        private var _property22:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property22():String
> +        {
> +            return _property22;
> +        }
> +
> +        public function set property22(value:String):void
> +        {
> +            _property22 = value;
> +        }
> +
> +        private var _property23:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property23():String
> +        {
> +            return _property23;
> +        }
> +
> +        public function set property23(value:String):void
> +        {
> +            _property23 = value;
> +        }
> +
> +        private var _property24:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property24():Number
> +        {
> +            return _property24;
> +        }
> +
> +        public function set property24(value:Number):void
> +        {
> +            _property24 = value;
> +        }
> +
> +        private var _property25:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property25():String
> +        {
> +            return _property25;
> +        }
> +
> +        public function set property25(value:String):void
> +        {
> +            _property25 = value;
> +        }
> +
> +        private var _property26:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property26():String
> +        {
> +            return _property26;
> +        }
> +
> +        public function set property26(value:String):void
> +        {
> +            _property26 = value;
> +        }
> +
> +        private var _property27:Number;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property27():Number
> +        {
> +            return _property27;
> +        }
> +
> +        public function set property27(value:Number):void
> +        {
> +            _property27 = value;
> +        }
> +
> +        private var _property28:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property28():String
> +        {
> +            return _property28;
> +        }
> +
> +        public function set property28(value:String):void
> +        {
> +            _property28 = value;
> +        }
> +
> +        private var _property29:String;
> +
> +        [Bindable("versionNumberChanged")]
> +        public function get property29():String
> +        {
> +            return _property29;
> +        }
> +
> +        public function set property29(value:String):void
> +        {
> +            _property29 = value;
> +        }
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/SingleVersio
> nEventBindableObject.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/UniqueEventB
> indableObject.as
> URL:
> http://svn.apache.org/viewvc/incubator/flex/whiteboard/frishy/FastGroupingColl
> ection/src/model/UniqueEventBindableObject.as?rev=1234229&view=auto
> ==============================================================================
> ---
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/UniqueEventB
> indableObject.as (added)
> +++
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/UniqueEventB
> indableObject.as Sat Jan 21 01:33:26 2012
> @@ -0,0 +1,626 @@
> +package model
> +{
> +    import flash.events.Event;
> +    import flash.events.EventDispatcher;
> +
> +    import mx.events.PropertyChangeEvent;
> +
> +    public class UniqueEventBindableObject extends EventDispatcher
> +    {
> +        public function UniqueEventBindableObject()
> +        {
> +            super();
> +        }
> +
> +        public static function createProperties(start:int, end:int):void
> +        {
> +            for (var i:int = start; i <= end; i++)
> +            {
> +                var type:String = (i % 3 == 0 ? "Number" : "String");
> +
> +                trace('private var _property' + i + ':' + type + ';');
> +                trace('');
> +                trace('[Bindable("property' + i + 'Changed")]');
> +                trace('public function get property' + i + '():' + type +
> '');
> +                trace('{');
> +                    trace('return _property' + i + ';');
> +                trace('}');
> +                trace('');
> +                trace('public function set property' + i + '(value:' + type +
> '):void');
> +                trace('{');
> +                    trace('if (_property' + i + ' == value)');
> +                        trace('return;');
> +                    trace('');
> +                    trace('_property' + i + ' = value;');
> +                    trace('if (hasEventListener("property' + i +
> 'Changed"))');
> +                        trace('dispatchEvent(new Event("property' + i +
> 'Changed"));');
> +                trace('}');
> +                trace('');
> +            }
> +
> +        }
> +
> +        public static const NUM_PROPERTIES:int = 30;
> +
> +        public function fillAllProperties():void
> +        {
> +            for (var i:int = 0; i < NUM_PROPERTIES; i++)
> +            {
> +                fillProperty(i);
> +            }
> +        }
> +
> +        public function fillNRandomProperties(numPropertiesToUpdate:int):void
> +        {
> +            for (var j:int = 0; j < numPropertiesToUpdate; j++)
> +            {
> +                fillARandomProperty();
> +            }
> +        }
> +
> +        private function fillARandomProperty():void
> +        {
> +            var propertyIndex:int = Math.floor(Math.random() *
> NUM_PROPERTIES);
> +            fillProperty(propertyIndex);
> +        }
> +
> +        private function fillProperty(propertyIndex:int):void
> +        {
> +            if (propertyIndex % 3 == 0)
> +            {
> +                // Number
> +                this["property" + propertyIndex] = Math.random();
> +            }
> +            else
> +            {
> +                this["property" + propertyIndex] = Math.random().toString();
> +            }
> +        }
> +
> +        private var _property0:Number;
> +
> +        [Bindable("property0Changed")]
> +        public function get property0():Number
> +        {
> +            return _property0;
> +        }
> +
> +        public function set property0(value:Number):void
> +        {
> +            if (_property0 == value)
> +                return;
> +
> +            _property0 = value;
> +            if (hasEventListener("property0Changed"))
> +                dispatchEvent(new Event("property0Changed"));
> +
> +            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "property0", property0, property0));
> +        }
> +
> +        private var _property1:String;
> +
> +        [Bindable("property1Changed")]
> +        public function get property1():String
> +        {
> +            return _property1;
> +        }
> +
> +        public function set property1(value:String):void
> +        {
> +            if (_property1 == value)
> +                return;
> +
> +            _property1 = value;
> +            if (hasEventListener("property1Changed"))
> +                dispatchEvent(new Event("property1Changed"));
> +
> +            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "property1", property1, property1));
> +        }
> +
> +        private var _property2:String;
> +
> +        [Bindable("property2Changed")]
> +        public function get property2():String
> +        {
> +            return _property2;
> +        }
> +
> +        public function set property2(value:String):void
> +        {
> +            if (_property2 == value)
> +                return;
> +
> +            _property2 = value;
> +            if (hasEventListener("property2Changed"))
> +                dispatchEvent(new Event("property2Changed"));
> +        }
> +
> +        private var _property3:Number;
> +
> +        [Bindable("property3Changed")]
> +        public function get property3():Number
> +        {
> +            return _property3;
> +        }
> +
> +        public function set property3(value:Number):void
> +        {
> +            if (_property3 == value)
> +                return;
> +
> +            _property3 = value;
> +            if (hasEventListener("property3Changed"))
> +                dispatchEvent(new Event("property3Changed"));
> +
> +            dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
> "property3", property3, property3));
> +        }
> +
> +        private var _property4:String;
> +
> +        [Bindable("property4Changed")]
> +        public function get property4():String
> +        {
> +            return _property4;
> +        }
> +
> +        public function set property4(value:String):void
> +        {
> +            if (_property4 == value)
> +                return;
> +
> +            _property4 = value;
> +            if (hasEventListener("property4Changed"))
> +                dispatchEvent(new Event("property4Changed"));
> +        }
> +
> +        private var _property5:String;
> +
> +        [Bindable("property5Changed")]
> +        public function get property5():String
> +        {
> +            return _property5;
> +        }
> +
> +        public function set property5(value:String):void
> +        {
> +            if (_property5 == value)
> +                return;
> +
> +            _property5 = value;
> +            if (hasEventListener("property5Changed"))
> +                dispatchEvent(new Event("property5Changed"));
> +        }
> +
> +        private var _property6:Number;
> +
> +        [Bindable("property6Changed")]
> +        public function get property6():Number
> +        {
> +            return _property6;
> +        }
> +
> +        public function set property6(value:Number):void
> +        {
> +            if (_property6 == value)
> +                return;
> +
> +            _property6 = value;
> +            if (hasEventListener("property6Changed"))
> +                dispatchEvent(new Event("property6Changed"));
> +        }
> +
> +        private var _property7:String;
> +
> +        [Bindable("property7Changed")]
> +        public function get property7():String
> +        {
> +            return _property7;
> +        }
> +
> +        public function set property7(value:String):void
> +        {
> +            if (_property7 == value)
> +                return;
> +
> +            _property7 = value;
> +            if (hasEventListener("property7Changed"))
> +                dispatchEvent(new Event("property7Changed"));
> +        }
> +
> +        private var _property8:String;
> +
> +        [Bindable("property8Changed")]
> +        public function get property8():String
> +        {
> +            return _property8;
> +        }
> +
> +        public function set property8(value:String):void
> +        {
> +            if (_property8 == value)
> +                return;
> +
> +            _property8 = value;
> +            if (hasEventListener("property8Changed"))
> +                dispatchEvent(new Event("property8Changed"));
> +        }
> +
> +        private var _property9:Number;
> +
> +        [Bindable("property9Changed")]
> +        public function get property9():Number
> +        {
> +            return _property9;
> +        }
> +
> +        public function set property9(value:Number):void
> +        {
> +            if (_property9 == value)
> +                return;
> +
> +            _property9 = value;
> +            if (hasEventListener("property9Changed"))
> +                dispatchEvent(new Event("property9Changed"));
> +        }
> +
> +        private var _property10:String;
> +
> +        [Bindable("property10Changed")]
> +        public function get property10():String
> +        {
> +            return _property10;
> +        }
> +
> +        public function set property10(value:String):void
> +        {
> +            if (_property10 == value)
> +                return;
> +
> +            _property10 = value;
> +            if (hasEventListener("property10Changed"))
> +                dispatchEvent(new Event("property10Changed"));
> +        }
> +
> +        private var _property11:String;
> +
> +        [Bindable("property11Changed")]
> +        public function get property11():String
> +        {
> +            return _property11;
> +        }
> +
> +        public function set property11(value:String):void
> +        {
> +            if (_property11 == value)
> +                return;
> +
> +            _property11 = value;
> +            if (hasEventListener("property11Changed"))
> +                dispatchEvent(new Event("property11Changed"));
> +        }
> +
> +        private var _property12:Number;
> +
> +        [Bindable("property12Changed")]
> +        public function get property12():Number
> +        {
> +            return _property12;
> +        }
> +
> +        public function set property12(value:Number):void
> +        {
> +            if (_property12 == value)
> +                return;
> +
> +            _property12 = value;
> +            if (hasEventListener("property12Changed"))
> +                dispatchEvent(new Event("property12Changed"));
> +        }
> +
> +        private var _property13:String;
> +
> +        [Bindable("property13Changed")]
> +        public function get property13():String
> +        {
> +            return _property13;
> +        }
> +
> +        public function set property13(value:String):void
> +        {
> +            if (_property13 == value)
> +                return;
> +
> +            _property13 = value;
> +            if (hasEventListener("property13Changed"))
> +                dispatchEvent(new Event("property13Changed"));
> +        }
> +
> +        private var _property14:String;
> +
> +        [Bindable("property14Changed")]
> +        public function get property14():String
> +        {
> +            return _property14;
> +        }
> +
> +        public function set property14(value:String):void
> +        {
> +            if (_property14 == value)
> +                return;
> +
> +            _property14 = value;
> +            if (hasEventListener("property14Changed"))
> +                dispatchEvent(new Event("property14Changed"));
> +        }
> +
> +        private var _property15:Number;
> +
> +        [Bindable("property15Changed")]
> +        public function get property15():Number
> +        {
> +            return _property15;
> +        }
> +
> +        public function set property15(value:Number):void
> +        {
> +            if (_property15 == value)
> +                return;
> +
> +            _property15 = value;
> +            if (hasEventListener("property15Changed"))
> +                dispatchEvent(new Event("property15Changed"));
> +        }
> +
> +        private var _property16:String;
> +
> +        [Bindable("property16Changed")]
> +        public function get property16():String
> +        {
> +            return _property16;
> +        }
> +
> +        public function set property16(value:String):void
> +        {
> +            if (_property16 == value)
> +                return;
> +
> +            _property16 = value;
> +            if (hasEventListener("property16Changed"))
> +                dispatchEvent(new Event("property16Changed"));
> +        }
> +
> +        private var _property17:String;
> +
> +        [Bindable("property17Changed")]
> +        public function get property17():String
> +        {
> +            return _property17;
> +        }
> +
> +        public function set property17(value:String):void
> +        {
> +            if (_property17 == value)
> +                return;
> +
> +            _property17 = value;
> +            if (hasEventListener("property17Changed"))
> +                dispatchEvent(new Event("property17Changed"));
> +        }
> +
> +        private var _property18:Number;
> +
> +        [Bindable("property18Changed")]
> +        public function get property18():Number
> +        {
> +            return _property18;
> +        }
> +
> +        public function set property18(value:Number):void
> +        {
> +            if (_property18 == value)
> +                return;
> +
> +            _property18 = value;
> +            if (hasEventListener("property18Changed"))
> +                dispatchEvent(new Event("property18Changed"));
> +        }
> +
> +        private var _property19:String;
> +
> +        [Bindable("property19Changed")]
> +        public function get property19():String
> +        {
> +            return _property19;
> +        }
> +
> +        public function set property19(value:String):void
> +        {
> +            if (_property19 == value)
> +                return;
> +
> +            _property19 = value;
> +            if (hasEventListener("property19Changed"))
> +                dispatchEvent(new Event("property19Changed"));
> +        }
> +
> +        private var _property20:String;
> +
> +        [Bindable("property20Changed")]
> +        public function get property20():String
> +        {
> +            return _property20;
> +        }
> +
> +        public function set property20(value:String):void
> +        {
> +            if (_property20 == value)
> +                return;
> +
> +            _property20 = value;
> +            if (hasEventListener("property20Changed"))
> +                dispatchEvent(new Event("property20Changed"));
> +        }
> +
> +        private var _property21:Number;
> +
> +        [Bindable("property21Changed")]
> +        public function get property21():Number
> +        {
> +            return _property21;
> +        }
> +
> +        public function set property21(value:Number):void
> +        {
> +            if (_property21 == value)
> +                return;
> +
> +            _property21 = value;
> +            if (hasEventListener("property21Changed"))
> +                dispatchEvent(new Event("property21Changed"));
> +        }
> +
> +        private var _property22:String;
> +
> +        [Bindable("property22Changed")]
> +        public function get property22():String
> +        {
> +            return _property22;
> +        }
> +
> +        public function set property22(value:String):void
> +        {
> +            if (_property22 == value)
> +                return;
> +
> +            _property22 = value;
> +            if (hasEventListener("property22Changed"))
> +                dispatchEvent(new Event("property22Changed"));
> +        }
> +
> +        private var _property23:String;
> +
> +        [Bindable("property23Changed")]
> +        public function get property23():String
> +        {
> +            return _property23;
> +        }
> +
> +        public function set property23(value:String):void
> +        {
> +            if (_property23 == value)
> +                return;
> +
> +            _property23 = value;
> +            if (hasEventListener("property23Changed"))
> +                dispatchEvent(new Event("property23Changed"));
> +        }
> +
> +        private var _property24:Number;
> +
> +        [Bindable("property24Changed")]
> +        public function get property24():Number
> +        {
> +            return _property24;
> +        }
> +
> +        public function set property24(value:Number):void
> +        {
> +            if (_property24 == value)
> +                return;
> +
> +            _property24 = value;
> +            if (hasEventListener("property24Changed"))
> +                dispatchEvent(new Event("property24Changed"));
> +        }
> +
> +        private var _property25:String;
> +
> +        [Bindable("property25Changed")]
> +        public function get property25():String
> +        {
> +            return _property25;
> +        }
> +
> +        public function set property25(value:String):void
> +        {
> +            if (_property25 == value)
> +                return;
> +
> +            _property25 = value;
> +            if (hasEventListener("property25Changed"))
> +                dispatchEvent(new Event("property25Changed"));
> +        }
> +
> +        private var _property26:String;
> +
> +        [Bindable("property26Changed")]
> +        public function get property26():String
> +        {
> +            return _property26;
> +        }
> +
> +        public function set property26(value:String):void
> +        {
> +            if (_property26 == value)
> +                return;
> +
> +            _property26 = value;
> +            if (hasEventListener("property26Changed"))
> +                dispatchEvent(new Event("property26Changed"));
> +        }
> +
> +        private var _property27:Number;
> +
> +        [Bindable("property27Changed")]
> +        public function get property27():Number
> +        {
> +            return _property27;
> +        }
> +
> +        public function set property27(value:Number):void
> +        {
> +            if (_property27 == value)
> +                return;
> +
> +            _property27 = value;
> +            if (hasEventListener("property27Changed"))
> +                dispatchEvent(new Event("property27Changed"));
> +        }
> +
> +        private var _property28:String;
> +
> +        [Bindable("property28Changed")]
> +        public function get property28():String
> +        {
> +            return _property28;
> +        }
> +
> +        public function set property28(value:String):void
> +        {
> +            if (_property28 == value)
> +                return;
> +
> +            _property28 = value;
> +            if (hasEventListener("property28Changed"))
> +                dispatchEvent(new Event("property28Changed"));
> +        }
> +
> +        private var _property29:String;
> +
> +        [Bindable("property29Changed")]
> +        public function get property29():String
> +        {
> +            return _property29;
> +        }
> +
> +        public function set property29(value:String):void
> +        {
> +            if (_property29 == value)
> +                return;
> +
> +            _property29 = value;
> +            if (hasEventListener("property29Changed"))
> +                dispatchEvent(new Event("property29Changed"));
> +        }
> +    }
> +}
> \ No newline at end of file
>
> Propchange:
> incubator/flex/whiteboard/frishy/FastGroupingCollection/src/model/UniqueEventB
> indableObject.as
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
>

--
Alex Harui
Flex SDK Team
Adobe Systems, Inc.
http://blogs.adobe.com/aharui


Mime
View raw message