blob: 7bae4a473b5705c014daf4160bd7fa8699600eef [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 mx.collections
{
import flash.events.IEventDispatcher;
/**
* Dispatched whenever the cursor position is updated.
*
* @eventType mx.events.FlexEvent.CURSOR_UPDATE
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
[Event(name="cursorUpdate", type="mx.events.FlexEvent")]
/**
* Defines the interface for enumerating a collection view bi-directionally.
* This cursor provides find, seek, and bookmarking capabilities along
* with the modification methods insert and remove.
* When a cursor is first retrieved from a view, (typically by the ICollectionView
* <code>createCursor()</code> method) the value of the
* <code>current</code> property should be the first
* item in the view, unless the view is empty.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public interface IViewCursor extends IEventDispatcher
{
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// afterLast
//----------------------------------
[Bindable("cursorUpdate")]
/**
* If the cursor is located after the last item in the view,
* this property is <code>true</code> .
* If the ICollectionView is empty (length == 0),
* this property is <code>true</code>.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get afterLast():Boolean;
//----------------------------------
// beforeFirst
//----------------------------------
[Bindable("cursorUpdate")]
/**
* If the cursor is located before the first item in the view,
* this property is <code>true</code>.
* If the ICollectionView is empty (length == 0),
* this property is <code>true</code>.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get beforeFirst():Boolean;
//----------------------------------
// bookmark
//----------------------------------
[Bindable("cursorUpdate")]
/**
* Provides access to a bookmark that corresponds to the item
* returned by the <code>current</code> property.
* The bookmark can be used to move the cursor
* to a previously visited item, or to a position relative to that item.
* (See the <code>seek()</code> method for more information.)
*
* @see #current
* @see #seek()
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get bookmark():CursorBookmark;
//----------------------------------
// current
//----------------------------------
[Bindable("cursorUpdate")]
/**
* Provides access the object at the location
* in the source collection referenced by this cursor.
* If the cursor is beyond the ends of the collection
* (<code>beforeFirst</code>, <code>afterLast</code>)
* this will return <code>null</code>.
*
* @see #moveNext()
* @see #movePrevious()
* @see #seek()
* @see #beforeFirst
* @see #afterLast
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get current():Object;
//----------------------------------
// view
//----------------------------------
/**
* A reference to the ICollectionView with which this cursor is associated.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get view():ICollectionView;
//--------------------------------------------------------------------------
//
// Methods
//
//--------------------------------------------------------------------------
/**
* Finds an item with the specified properties within the collection
* and positions the cursor to that item.
* If the item can not be found, the cursor location does not change.
*
* <p>The <code>findAny()</code> method can only be called on sorted views;
* if the view isn't sorted, a <code>CursorError</code> is thrown.</p>
*
* <p>If the associated collection is remote, and not all of the items
* have been cached locally, this method begins an asynchronous fetch
* from the remote collection. If one is already in progress, this method
* waits for it to complete before making another fetch request.</p>
*
* <p>If multiple items can match the search criteria then the item found
* is non-deterministic.
* If it is important to find the first or last occurrence of an item
* in a non-unique index, use the <code>findFirst()</code> or
* <code>findLast()</code> method.</p>
*
* <p>If the data is not local and an asynchronous operation must be
* performed, an ItemPendingError is thrown.</p>
*
* @param values The search criteria. The values in the Object must be configured as name-value pairs,
* as in an associative array (or be the actual object to search for). The values of the names specified must match properties
* specified in the sort. For example, if properties <code>x</code>, <code>y</code>, and
* <code>z</code> are in the current sort, the values specified should be
* <code>{x: <i>x-value</i>, y: <i>y-value</i>, z: <i>z-value</i>}</code>.
*
* @return When all of the data is local this method returns
* <code>true</code> if the item can be found and <code>false</code>
* otherwise.
*
* @see #findFirst()
* @see #findLast()
* @see mx.collections.errors.ItemPendingError
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function findAny(values:Object):Boolean;
/**
* Finds the first item with the specified properties within the collection
* and positions the cursor to that item.
* If the item can not be found, no cursor location does not change.
*
* <p>The <code>findFirst()</code> method can only be called on sorted views;
* if the view isn't sorted, a <code>CursorError</code> is thrown.</p>
*
* <p>If the associated collection is remote, and not all of the items
* have been cached locally, this method begins an asynchronous fetch
* from the remote collection. If one is already in progress, this method
* waits for it to complete before making another fetch request.</p>
*
* <p>If it is not important to find the first occurrence of an item
* in a non-unique index, use <code>findAny()</code>, which may be
* a little faster than the <code>findFirst() method</code>.</p>
*
* <p>If the data is not local and an asynchronous operation must be
* performed, an ItemPendingError is thrown.</p>
*
* @param values The search criteria. The values in the Object must be configured as name-value pairs,
* as in an associative array (or be the actual object to search for). The values of the names specified must match properties
* specified in the sort. For example, if properties <code>x</code>, <code>y</code>, and
* <code>z</code> are in the current sort, the values specified should be
* <code>{x: <i>x-value</i>, y: <i>y-value</i>, z: <i>z-value</i>}</code>.
*
* @return When all of the data is local this method returns
* <code>true</code> if the item can be found and <code>false</code>
* otherwise.
*
* @see #findAny()
* @see #findLast()
* @see mx.collections.errors.ItemPendingError
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function findFirst(values:Object):Boolean;
/**
* Finds the last item with the specified properties within the collection
* and positions the cursor on that item.
* If the item can not be found, the cursor location does not chanage.
*
* <p>The <code>findLast()</code> method can only be called on sorted views;
* if the view isn't sorted, a <code>CursorError</code> is thrown.</p>
*
* <p>If the associated collection is remote, and not all of the items
* have been cached locally, this method begins an asynchronous fetch
* from the remote collection. If one is already in progress, this method
* waits for it to complete before making another fetch request.</p>
*
* <p>If it is not important to find the last occurrence of an item
* in a non-unique index, use the <code>findAny()</code> method, which
* may be a little faster.</p>
*
* <p>If the data is not local and an asynchronous operation must be
* performed, an ItemPendingError is thrown.</p>
*
* @param values The search criteria. The values in the Object must be configured as name-value pairs,
* as in an associative array (or be the actual object to search for). The values of the names specified must match properties
* specified in the sort. For example, if properties <code>x</code>, <code>y</code>, and
* <code>z</code> are in the current sort, the values specified should be
* <code>{x: <i>x-value</i>, y: <i>y-value</i>, z: <i>z-value</i>}</code>.
*
* @return When all of the data is local this method returns
* <code>true</code> if the item can be found and <code>false</code>
* otherwise.
*
* @see #findAny()
* @see #findFirst()
* @see mx.collections.errors.ItemPendingError
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function findLast(values:Object):Boolean;
/**
* Inserts the specified item before the cursor's current position.
* If the cursor is <code>afterLast</code>,
* the insertion occurs at the end of the view.
* If the cursor is <code>beforeFirst</code> on a non-empty view,
* an error is thrown.
*
* @param item The item to insert before the cursor's current position.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function insert(item:Object):void;
/**
* Moves the cursor to the next item within the collection.
* On success the <code>current</code> property is updated
* to reference the object at this new location.
* Returns <code>true</code> if the resulting <code>current</code>
* property is valid, or <code>false</code> if not
* (the property value is <code>afterLast</code>).
*
* <p>If the data is not local and an asynchronous operation must be performed,
* an ItemPendingError is thrown.
* See the ItemPendingError documentation and the collections
* documentation for more information on using the ItemPendingError.</p>
*
* @return <code>true</code> if still in the list,
* <code>false</code> if the <code>current</code> value initially was
* or now is <code>afterLast</code>.
*
* @see #current
* @see #movePrevious()
* @see mx.collections.errors.ItemPendingError
*
* @example
* <pre>
* var myArrayCollection:ICollectionView = new ArrayCollection([ "Bobby", "Mark", "Trevor", "Jacey", "Tyler" ]);
* var cursor:IViewCursor = myArrayCollection.createCursor();
* while (!cursor.afterLast)
* {
* trace(cursor.current);
* cursor.moveNext();
* }
* </pre>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function moveNext():Boolean;
/**
* Moves the cursor to the previous item within the collection.
* On success the <code>current</code> property is updated
* to reference the object at this new location.
* Returns <code>true</code> if the resulting <code>current</code>
* property is valid, or <code>false</code> if not
* (the property value is <code>beforeFirst</code>).
*
* <p>If the data is not local and an asynchronous operation must be performed,
* an ItemPendingError is thrown.
* See the ItemPendingError documentation and the collections
* documentation for more information on using the ItemPendingError.</p>
*
* @return <code>true</code> if still in the list,
* <code>false</code> if the <code>current</code> value initially was or
* now is <code>beforeFirst</code>.
*
* For example:
* <pre>
* var myArrayCollection:ICollectionView = new ArrayCollection([ "Bobby", "Mark", "Trevor", "Jacey", "Tyler" ]);
* var cursor:IViewCursor = myArrayCollection.createCursor();
* cursor.seek(CursorBookmark.last);
* while (!cursor.beforeFirst)
* {
* trace(current);
* cursor.movePrevious();
* }
* </pre>
*
* @see #current
* @see #moveNext()
* @see mx.collections.errors.ItemPendingError
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function movePrevious():Boolean;
/**
* Removes the current item and returns it.
* If the cursor location is <code>beforeFirst</code> or
* <code>afterLast</code>, throws a CursorError.
* If you remove any item other than the last item,
* the cursor moves to the next item. If you remove the last item, the
* cursor is at the AFTER_LAST bookmark.
*
* <p>If the item after the removed item is not local and an asynchronous
* operation must be performed, an ItemPendingError is thrown.
* See the ItemPendingError documentation and the collections
* documentation for more information on using the ItemPendingError.</p>
*
* @return The item that was removed.
*
* @see mx.collections.errors.ItemPendingError
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function remove():Object;
/**
* Moves the cursor to a location at an offset from the specified
* bookmark.
* The offset can be negative, in which case the cursor is positioned
* an <code>offset</code> number of items prior to the specified bookmark.
*
* <p>If the associated collection is remote, and not all of the items
* have been cached locally, this method begins an asynchronous fetch
* from the remote collection.</p>
*
* <p>If the data is not local and an asynchronous operation
* must be performed, an ItemPendingError is thrown.
* See the ItemPendingError documentation and the collections
* documentation for more information on using the ItemPendingError.</p>
*
* @param bookmark <code>CursorBookmark</code> reference to marker
* information that allows repositioning to a specific location.
* You can set this parameter to value returned from the
* <code>bookmark</code> property, or to one of the following constant
* bookmark values:
* <ul>
* <li><code>CursorBookmark.FIRST</code> -
* Seek from the start (first element) of the collection</li>
* <li><code>CursorBookmark.CURRENT</code> -
* Seek from the current position in the collection</li>
* <li><code>CursorBookmark.LAST</code> -
* Seek from the end (last element) of the collection</li>
* </ul>
*
* @param offset Indicates how far from the specified bookmark to seek.
* If the specified number is negative, the cursor attempts to
* move prior to the specified bookmark.
* If the offset specified is beyond the end of the collection,
* the cursor is be positioned off the end, to the
* <code>beforeFirst</code> or <code>afterLast</code> location.
*
* @param prefetch Used for remote data. Indicates an intent to iterate
* in a specific direction once the seek operation completes.
* This reduces the number of required network round trips during a seek.
* If the iteration direction is known at the time of the request,
* the appropriate amount of data can be returned ahead of the request
* to iterate it.
*
* @see mx.collections.errors.ItemPendingError
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function seek(bookmark:CursorBookmark, offset:int = 0, prefetch:int = 0):void;
}
}