/**
 * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
 * @link https://truedirective.com/
 * @license MIT
*/
import { GridSettings } from './grid-settings.class';
import { GridLayout } from './grid-layout.class';
import { CellPosition } from './cell-position.class';
import { CellRange } from './cell-range.class';
import { Column } from './column.class';
import { SelectionMode } from './enums';
/**
 * Выделенные данные в таблице.
 * Содержит одну ячейку, на которой установлена фокусировка и набор
 * прямоугольных областей
 */
export declare class Selection {
    private _lastFocusedField;
    private _focusedCell;
    /**
     * Список выделенных областей
     */
    readonly ranges: CellRange[];
    /**
     * Последняя выделенная область
     * @return Последняя выделенная область, если есть (иначе null)
     */
    private readonly lastRange;
    /**
     * Позиция ячейки, на которой находится фокус
     */
    focusedCell: CellPosition;
    /**
     * Добавление области в список выделенных областей
     * @param  range Область
     */
    private addRange;
    /**
     * Очистка выделенного.
     */
    private clear;
    /**
     * Очистка выделенного и излучение события об изменении выделенного
     */
    clearAll(): void;
    /**
     * Начало выделения области пользователем
     * @param  pos  Позиция ячейки, с которой начато выделение
     * @param  ctrl Нажат ли Ctrl. Если true, то новая область будет добавлена к
     *              имеющемся. Иначе сначала производится очистка областей.
     */
    startSelect(pos: CellPosition, ctrl?: boolean): void;
    proceedToSelect(pos: CellPosition, scrollToPos?: boolean): boolean;
    /**
     * User finished selection
     * @param  sm Current grid's selectionMode
     * @return    If selection has been changed
     */
    endSelect(sm: SelectionMode): boolean;
    /**
     * Last position of the last range.
     * @return CellPosition
     */
    getLastPos(): CellPosition;
    cellPosition(row: any, rowIndex: number, fieldName: string, keyField: string): CellPosition;
    findRow(rows: any[], row: any, keyField?: string): number;
    /**
     * Updating indices of the selected rows.
     * @param  rows       Source rows list
     * @param  resultRows Resulting rows list
     * @param  keyField   Key field name
     * @return            Returns true if indices was changed
     */
    updateSelectionIndices(rows: any[], resultRows: any[], keyField?: string): boolean;
    selectRow(layouts: GridLayout[], r: any, ri: number, fieldName?: string, keyField?: string): CellPosition;
    selectFirstRow(layouts: GridLayout[], rows: Array<any>): CellPosition;
    move(layouts: GridLayout[], // Список частей грида, чтобы можно было переместиться между ними
    settings: GridSettings, // Настройки
    rows: Array<any>, // Отображаемый список строк
    pageCapacity: any, // Количество строк, вмещаемых в страницу
    keyEvent: any): CellPosition;
    private movePosition;
    findField(layouts: GridLayout[], fieldName: string): {
        layout: number;
        index: number;
    };
    private nextLayoutField;
    private prevLayoutField;
    private firstField;
    private lastField;
    isSingleCellSelected(): boolean;
    protected selectionChangedEvent(cp: CellPosition): void;
    protected focusChangedEvent(cp: CellPosition): void;
    columnIndex(lc: Column[], fieldName: string): number;
    /**
     * The row containing a focused cell.
     */
    readonly focusedRow: any;
    /**
     * Выделена ли ячейка в заданной позиции ячейки
     * @param  lc   Список колонок (по лэйаутам)
     * @param  pos  Позиция ячейки
     * @param  st   Настройки грида
     * @return      Да или нет
     */
    isSelected(lc: Column[], pos: CellPosition, st: GridSettings): boolean;
    /**
     * Returns value of column in the focused cell
     * @param  c Column
     * @return   Value
     */
    focusedValue(c: Column): any;
}
