import { CellValue, RawCellContent, SimpleCellAddress } from 'hyperformula';
import { IWithId } from '../../stateChanger/StateChanger.module';
import { EventDispatcher } from '../../events/Events.module';
import * as DM from '../Data.module';
export interface DataTableJSON {
    columns: DM.DataColumn[];
    rows: DM.DataRow[];
    uniqueName: string;
    id: string;
}
export declare class DataTable implements IWithId {
    private static _hashCounter;
    private _hashCode;
    private _columns;
    private _rows;
    private _sheetId;
    private _uniqueName;
    private _ds;
    id: string;
    get hashCode(): number;
    private _onDataRowAdded;
    get onDataRowAdded(): EventDispatcher<DataRowAddedArg>;
    private _onDataRowRemoved;
    get onDataRowRemoved(): EventDispatcher<DataRowRemovedArg>;
    private _onDataColumnAdded;
    get onDataColumnAdded(): EventDispatcher<DataColumnAddedArg>;
    private _onDataColumnRemoved;
    get onDataColumnRemoved(): EventDispatcher<DataColumnRemovedArg>;
    /**
     * Конструктор. Не предназначен для использования внешним кодом.
     * Следует использовать DataTable.createNew(), DataSet.addTable()
     */
    constructor();
    static createNew(dataSet: DM.DataSet, uniqueName: string, id?: string): DataTable;
    static fromJSON(json: DataTableJSON | string): DataTable;
    toJSON(): DataTableJSON;
    private onDataSetValuesUpdated;
    /**
     * Возвращает объект набора данных, к которому принадлежит таблица
     */
    get dataSet(): DM.DataSet;
    /**
     * Возвращает уникальное имя таблицы
     */
    get uniqueName(): string;
    /**
     * Задает уникальное имя таблицы
     */
    set uniqueName(value: string);
    /**
     * Задает значение идентификатора листа в HyperFormula
     */
    get sheetId(): number;
    /**
     * Возвращает значение идентификатора листа в HyperFormula
     */
    set sheetId(value: number);
    get columns(): DM.DataColumn[];
    get columnCollection(): DM.DataColumnCollection;
    get rowCollection(): DM.DataRowCollection;
    /**
     * Возвращает количество колонок
     */
    get columnsCount(): number;
    /**
     * Возвращает объект колонки
     * @param index Индекс колонки
     */
    getColumnByIndex(index: number): DM.DataColumn;
    /**
     * Возвращает колонку по имени. Если не найдено - возвращает undefined
     */
    getColumnByName(columnName: string): DM.DataColumn;
    /**
     * Вставляет колонку в таблицу в указанной позиции
     * @param index Индекс по которому будет вставлена колонка
     * @param columnName Имя колонки
     * @param dataType Тип данных. По умолчанию - string
     */
    insertColumn(index: number, columnName: string, dataType?: DM.DataType, values?: RawCellContent[]): DM.DataColumn;
    /**
     * Добавляет колонку в таблицу
     * @param columnName Имя колонки
     * @param dataType Тип данных. По умолчанию - string
     */
    addColumn(columnName: string, dataType?: DM.DataType): DM.DataColumn;
    /**
     * Изменить тип колонки
     * @param column Название колонки
     * @param type Тип колонки
     * @returns Колонка
     */
    changeTypeColumn(name: string, type: DM.DataType): DM.DataColumn;
    /**
     * Изменить тип колонки
     * @param index Index колонки
     * @param type Тип колонки
     * @returns Колонка
     */
    changeTypeColumn(index: number, type: DM.DataType): DM.DataColumn;
    /**
     * Изменить тип колонки
     * @param column Колонка
     * @param type Тип колонки
     * @returns Колонка
     */
    changeTypeColumn(column: DM.DataColumn, type: DM.DataType): DM.DataColumn;
    /**
     * Удаляет колонку и возвращает количество удаленных колонок
     */
    removeColumn(column: DM.DataColumn): number;
    /**
     * Удаляет колонку по индексу и возвращает количество удаленных колонок
     */
    removeColumnByIndex(index: number): number;
    /**
     * Удаляет колонку по имени и возвращает количество удаленных колонок
     */
    removeColumnByName(columnName: string): number;
    /**
     * Возвращает индекс колонки по имени. Если не найдено - возвращает -1
     */
    getColumnOrdinal(columnName: string): number;
    /**
     * Возвращает количество строк в таблице
     */
    get rowCount(): number;
    /**
     * Удаляет все строки таблицы
     */
    removeAllRows(): void;
    /**
     * Не предназначен для использования внешним кодом
     */
    addRowsItem(index: number): void;
    /**
     * Не предназначен для использования внешним кодом
     */
    removeRowsItem(index: number): void;
    getCellAddress(row: number, col: number): SimpleCellAddress;
    /**
     * Возвращает оригинальные значения колонки по индексу. Если не найдено - undefined
     */
    getColumnValues(col: number): Array<DM.DataItem>;
    /**
     * Возвращает оригинальные значения строки по индексу. Если не найдено - undefined
     */
    getRowValues(row: number): Array<any>;
    getRowValuesTest(row: number): Array<DM.DataItem>;
    /**
     * Возвращает значение формулы в ячейке
     * @param row индекс строки
     * @param col индекс колонки
     */
    getCellFormula(row: number, col: number): string;
    /**
     * Возвращает рассчитанное значение ячейки
     * @param row Индекс строки
     * @param col Индекс колонки
     */
    getCellValue(row: number, col: number): CellValue;
    /**
     * Задает оригинальное значение ячейки
     * @param row Индекс строки
     * @param col Индекс колонки
     * @param value Значение
     */
    setCellValue(row: number, col: number, value: RawCellContent): void;
    private assignDataRowsToSheet;
    refreshAfterRestore(): void;
    getRowIndex(row: DM.DataRow): number;
    /**
     * Возвращает коллекцию записей таблицы
     */
    getRowCollection(): DM.DataRowCollection;
    /**
     * Возвращает расчитанные значения строки по индексу. Если не найдено - undefined
     * @param index Индект строки
     */
    getRowSheetValues(index: number): RawCellContent[];
    /**
     * Добавить новую запись
     */
    addRow(values?: RawCellContent[]): DM.DataRow;
    /**
     * Вставляет новую запись по указанному индексу
     */
    insertRow(index: number, values?: RawCellContent[]): DM.DataRow;
    private addRowToHyperformulaShadow;
    private addRowToHyperformula;
    /**
     * Удалить запись
     */
    removeRow(index: number): number;
    /**
     * Возвращает рассчитанные значения таблицы
     */
    getSheetValues(): RawCellContent[][];
    /**
     * Задает DataSet для таблицы
     */
    setDataSet(dataSet: DM.DataSet | null): void;
    /**
     * Получить новое имя для колонки
     * @param indexColumn Index колонки
     * @returns Имя колонки
     */
    generationColumnName(indexColumn: number): string;
    private throwIfDataSetIsNull;
    private isDataSetEmpty;
    private raiseDataRowAdded;
    private raiseDataRowRemoved;
    private raiseDataColumnAdded;
    private raiseDataColumnRemoved;
}
export declare class DataRowAddedArg {
    sender: any;
    row: DM.DataRow;
    constructor(sender: any, row: DM.DataRow);
}
export declare class DataRowRemovedArg {
    sender: any;
    row: DM.DataRow;
    constructor(sender: any, row: DM.DataRow);
}
export declare class DataColumnAddedArg {
    sender: any;
    column: DM.DataColumn;
    constructor(sender: any, column: DM.DataColumn);
}
export declare class DataColumnRemovedArg {
    sender: any;
    column: DM.DataColumn;
    constructor(sender: any, column: DM.DataColumn);
}
