| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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; |
| } |
| |
| } |