blob: c6384fcc32733f8ef9ec57d46dc2c3367a57deb3 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package spark.events
{
import flash.events.Event;
import spark.components.DataGrid;
/**
* The GridSortEvent class represents events that are dispatched when
* the data provider of a Spark DataGrid control is sorted as the
* result of the user clicking on the header of a column in the DataGrid.
*
* @see spark.components.DataGrid
* @see spark.components.gridClasses.GridColumn
* @see spark.components.GridColumnHeaderGroup
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 2.5
* @productversion Flex 4.5
*/
public class GridSortEvent extends Event
{
include "../core/Version.as";
//--------------------------------------------------------------------------
//
// Class constants
//
//--------------------------------------------------------------------------
/**
* The <code>GridSortEvent.SORT_CHANGE</code> constant defines
* the value of the <code>type</code> property of the event object for a
* <code>sortChange</code> event, which indicates that a sort filter has just been
* applied to the grid's <code>dataProvider</code> collection.
*
* <p>Typically, if a column header mouse click triggered the sort, then the last index of
* <code>columnIndices</code> is the column's index.
* Note that interactive sorts are not necessarily triggered by a mouse click.</p>
*
* <p>This event is dispatched when the user interacts with the control.
* When you sort the data provider's collection programmatically,
* the component does not dispatch the <code>sortChange</code> event. </p>
*
* <p>The properties of the event object have the following values:</p>
* <table class="innertable">
* <tr><th>Property</th><th>Value</th></tr>
* <tr><td><code>bubbles</code></td><td>false</td></tr>
* <tr><td><code>cancelable</code></td><td>false</td></tr>
* <tr><td><code>columnIndices</code></td><td>The vector of column indices of the
* sorted columns.</td></tr>
* <tr><td><code>currentTarget</code></td><td>The Object that defines the
* event listener that handles the event. For example, if you use
* <code>myDataGrid.addEventListener()</code> to register an event listener,
* myDataGrid is the value of the <code>currentTarget</code>. </td></tr>
* <tr><td><code>newSortFields</code></td><td>The array of ISortFields for this
* sort.</td></tr>
* <tr><td><code>oldSortFields</code></td><td>The array of ISortFields for the
* last sort.</td></tr>
* <tr><td><code>target</code></td><td>The Object that dispatched the event;
* it is not always the Object listening for the event.
* Use the <code>currentTarget</code> property to always access the
* Object listening for the event.</td></tr>
* <tr><td><code>type</code></td><td>GridSortEvent.SORT_CHANGE</td></tr>
* </table>
*
* @eventType sortChange
*
* @see spark.components.DataGrid#dataProvider
* @see spark.components.DataGrid#sortByColumns
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 2.5
* @productversion Flex 4.5
*/
public static const SORT_CHANGE:String = "sortChange";
/**
* The <code>GridSortEvent.SORT_CHANGING</code> constant defines
* the value of the <code>type</code> property of the event object for a
* <code>sortChanging</code> event, which indicates that a sort filter is about to be
* applied to the grid's <code>dataProvider</code> collection.
* Call preventDefault() on this event to prevent the sort from occurring
* or you modify <code>columnIndices</code> and <code>newSortFields</code> if you want to
* change the default behavior of the sort.
*
* <p>Typically, if a column header mouse click triggered the sort, then the last index of
* <code>columnIndices</code> is the column's index.
* Note that interactive sorts are not necessarily triggered by a mouse click.</p>
*
* <p>This event is dispatched when the user interacts with the control.
* When you sort the data provider's collection programmatically,
* the component does not dispatch the <code>sortChanging</code> event. </p>
*
* <p>The properties of the event object have the following values:</p>
* <table class="innertable">
* <tr><th>Property</th><th>Value</th></tr>
* <tr><td><code>bubbles</code></td><td>false</td></tr>
* <tr><td><code>cancelable</code></td><td>false</td></tr>
* <tr><td><code>columnIndices</code></td><td>The vector of column indices of the
* columns to be sorted.</td></tr>
* <tr><td><code>currentTarget</code></td><td>The Object that defines the
* event listener that handles the event. For example, if you use
* <code>myDataGrid.addEventListener()</code> to register an event listener,
* myDataGrid is the value of the <code>currentTarget</code>. </td></tr>
* <tr><td><code>newSortFields</code></td><td>The array of ISortFields for this
* sort.</td></tr>
* <tr><td><code>oldSortFields</code></td><td>The array of ISortFields for the
* last sort.</td></tr>
* <tr><td><code>target</code></td><td>The Object that dispatched the event;
* it is not always the Object listening for the event.
* Use the <code>currentTarget</code> property to always access the
* Object listening for the event.</td></tr>
* <tr><td><code>type</code></td><td>GridSortEvent.SORT_CHANGING</td></tr>
* </table>
*
* @eventType sortChanging
*
* @see spark.components.DataGrid#dataProvider
* @see spark.components.DataGrid#sortByColumns
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 2.5
* @productversion Flex 4.5
*/
public static const SORT_CHANGING:String = "sortChanging";
//--------------------------------------------------------------------------
//
// Constructor
//
//--------------------------------------------------------------------------
/**
* Constructor.
*
* @param type The event type; indicates the action that caused the event.
*
* @param bubbles Specifies whether the event can bubble
* up the display list hierarchy.
*
* @param cancelable Specifies whether the behavior
* associated with the event can be prevented.
*
* @param columnIndices The vector of column indices of the sorted columns.
*
* @param oldSortFields The array of ISortFields for the last sort.
*
* @param newSortFields The array of ISortFields for this sort.
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 2.5
* @productversion Flex 4.5
*/
public function GridSortEvent(type:String,
bubbles:Boolean,
cancelable:Boolean,
columnIndices:Vector.<int>,
oldSortFields:Array, /* ISortField */
newSortFields:Array) /* ISortField */
{
super(type, bubbles, cancelable);
this.columnIndices = columnIndices ? columnIndices.concat() : null;
// These are shallow copies.
_oldSortFields = oldSortFields ? oldSortFields.concat() : null;
this.newSortFields = newSortFields ? newSortFields.concat() : null;
}
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// columnIndices
//----------------------------------
/**
* The vector of column indices of the sorted columns.
* If <code>type</code> is <code>GridSortEvent.SORT_CHANGING</code> this value
* can be modified and it will be used to update the grid's <code>columnHeaderGroup</code>
* <code>visibleSortIndicatorIndices</code>.
*
* @see spark.components.DataGrid#columnHeaderGroup
* @see spark.components.GridColumnHeaderGroup#visibleSortIndicatorIndices
* @see spark.components.gridClasses.GridColumn#columnIndex
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 2.5
* @productversion Flex 4.5
*/
public var columnIndices:Vector.<int>;
//----------------------------------
// newSortFields
//----------------------------------
/**
* The array of ISortFields for this sort.
* If <code>type</code> is <code>GridSortEvent.SORT_CHANGING</code> this value
* can be modified and it will be used to sort the <code>dataProvider</code> of the grid.
*
* @see spark.components.DataGrid#dataProvider
* @see spark.components.gridClasses.GridColumn#sortCompareFunction
* @see spark.components.gridClasses.GridColumn#sortDescending
* @see spark.components.gridClasses.GridColumn#sortField
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 2.5
* @productversion Flex 4.5
*/
public var newSortFields:Array; /* of ISortField */
//----------------------------------
// oldSortFields
//----------------------------------
private var _oldSortFields:Array; /* of ISortField */
/**
* The array of ISortFields for the last sort. This can be <code>null</code>.
* The elements in this Array should not be modified.
*
* @see spark.components.DataGrid#dataProvider
* @see spark.components.gridClasses.GridColumn#sortCompareFunction
* @see spark.components.gridClasses.GridColumn#sortDescending
* @see spark.components.gridClasses.GridColumn#sortField
*
* @langversion 3.0
* @playerversion Flash 10
* @playerversion AIR 2.5
* @productversion Flex 4.5
*/
public function get oldSortFields():Array
{
return _oldSortFields;
}
//--------------------------------------------------------------------------
//
// Overridden methods: Object
//
//--------------------------------------------------------------------------
/**
* @private
*/
override public function toString():String
{
return formatToString(
"GridSortEvent", "type",
"bubbles", "cancelable", "eventPhase",
"columnIndices");
}
//--------------------------------------------------------------------------
//
// Overridden methods: Event
//
//--------------------------------------------------------------------------
/**
* @private
*/
override public function clone():Event
{
return new GridSortEvent(
type, bubbles, cancelable,
columnIndices, oldSortFields, newSortFields);
}
}
}