/**
 * @class Ext.grid.Location
 * @extend Ext.dataview.Location
 * Instances of this class encapsulate a position in a grid's row/column coordinate system.
 *
 * Cell addresses are configured using the owning {@link #cfg!record} and {@link #cfg!column}
 * for robustness.
 *
 * The column may be moved, the store may be sorted, and the grid Location will still reference
 * the same *logical* cell. Be aware that due to buffered rendering the *physical* cell may
 * be recycled and used by another record.
 *
 * The {@link #setPosition}, {@link #setRecord} and {@link #setColumn} methods however,
 * allow numeric row and column values to be passed in. These are immediately converted.
 *
 * Be careful not to make `grid Location` objects *too* persistent. If the owning record
 * is removed or filtered out, or the owning column is removed, the reference will be stale.
 *
 * Note that due to buffered rendering, a valid `location` object might be scrolled out of
 * visibility, and therefore derendered, and may not not have a corresponding rendered
 * row.
 *
 * Also, when using {@link Ext.data.virtual.Store virtual stores}, the record referenced may
 * not be present in the store, and may require an asynchronous load to bring it into the
 * store before the location can be realized.
 *
 * Freshly created Location objects, such as those exposed by events from the
 * {@link Ext.grid.Selectable grid selection model} are safe to use until your
 * application mutates the store, or changes the column set.
 */
 
/**
 * @property {Boolean} [isGridLocation=true]
 * @readonly
 * `true` in this class to identify an object as an instantiated grid Location, or subclass thereof.
 */
 
/**
 * @cfg {Ext.grid.column.Column} column
 * The grid column which owns this location.
 * @accessor
 */
 
/**
 * @method getRow
 * Returns the {@link Ext.grid.Row row} Component referenced *at the time of calling*.
 * Note that grid DOM is recycled, and the row referenced may be repurposed for use by
 * another record.
 *
 * @return {Ext.grid.Row} The Row component referenced by this Location.
 */
 
/**
 * @method getCell
 * Returns the {@link Ext.grid.Cell cell} Component referenced *at the time of calling*.
 * Note that grid DOM is recycled, and the cell referenced may be repurposed for use by
 * another record.
 *
 * @param {"cmp"/"dom"/"el"} [as=el] Pass `"dom"` to always return the cell's `HTMLElement`.
 * Pass `"el"` to return the cell's `Ext.dom.Element` . Pass `"cmp"` to
 * return the cell `Ext.Component` reference for this location (if one exists).
 * @return {Ext.grid.cell.Cell} The Cell component referenced by this Location.
 */
 
/**
 * @method get
 * Returns the {@link Ext.grid.cell.Cell cell} Component referenced *at the time of
 * calling*. Note that grid DOM is recycled, and the cell referenced may be repurposed
 * for use by another record.
 *
 * @return {Ext.grid.cell.Cell} The Cell component referenced by this Location.
 */
 
/**
 * @method next
 * Navigates to the next visible Location.
 * @param {Boolean/Object} options An options object or a boolean flag meaning wrap
 * @param {Boolean} [options.wrap] `true` to wrap from the last to the first Location.
 * @param {Boolean} [options.move=false] `true` to change this location's position.
 * @returns {Ext.grid.Location} A Location object representing the new location.
 * By default, this will be a new instance. If the `move` option is passed as `true`
 * this instance will be mutated.
 */
 
/**
 * @method previous
 * Navigates to the previous visible Location.
 * @param {Boolean/Object} options An options object or a boolean flag meaning wrap
 * @param {Boolean} [options.wrap] `true` to wrap from the first to the last Location.
 * @param {Boolean} [options.move=false] `true` to change this location's position.
 * @returns {Ext.grid.Location} A Location object representing the new location.
 * By default, this will be a new instance. If the `move` option is passed as `true`
 * this instance will be mutated.
 */
 
/**
 * @method down
 * Navigates to the next visible Location.
 * @param {Boolean/Object} options An options object or a boolean flag meaning wrap
 * @param {Boolean} [options.wrap] `true` to wrap from the last to the first Location.
 * @param {Number} [options.column] The column to move to if not the current column.
 * @returns {Ext.dataview.Location} A *new* Location object representing the new location.
 */
 
/**
 * @method up
 * Navigates to the previous visible Location.
 * @param {Boolean/Object} options An options object or a boolean flag meaning wrap
 * @param {Boolean} [options.wrap] `true` to wrap from the first to the last Location.
 * @param {Number} [options.column] The column to move to if not the current column.
 * @returns {Ext.dataview.Location} A *new* Location object representing the new location.
 */