import { ElementRef, QueryList, ChangeDetectorRef, KeyValueDiffers, EventEmitter, DoCheck, OnDestroy } from '@angular/core';
import { Subject, Observable, Subscription } from 'rxjs';
import { GridPart } from '@true-directive/base';
import { Column, CellPosition, GridSettings, RowLayout, DataQuery } from '@true-directive/base';
import { RowCalculator } from '@true-directive/base';
import { ScrollerComponent } from './scroller.component';
import { BaseComponent } from './base.component';
import { RowDirective } from './row.directive';
import { GridStateService } from './grid-state.service';
import { FilterPopupComponent } from './filters/filter-popup.component';
export declare class GridViewComponent extends BaseComponent implements DoCheck, OnDestroy {
    state: GridStateService;
    protected elementRef: ElementRef;
    protected changeDetector: ChangeDetectorRef;
    protected keyValueDiffers: KeyValueDiffers;
    protected destroy$: Subject<boolean>;
    private _data;
    private _dataSubscription;
    /**
     * Источник данных грида. Можно задать наблюдаемый объект или массив
     */
    data: any[] | Observable<any[]>;
    columns: Column[];
    settings: GridSettings;
    /**
     * Общий текстовый фильтр
     */
    commonFilter: string;
    dataQuery: EventEmitter<any>;
    startProcess: EventEmitter<string>;
    endProcess: EventEmitter<string>;
    readonly resultRows: any[];
    scroller: ScrollerComponent;
    grid: any;
    gridHeader: any;
    gridData: any;
    dragItem: any;
    filterPopup: FilterPopupComponent;
    displayedRows_template: QueryList<RowDirective>;
    displayedRowsCenter: QueryList<RowDirective>;
    customTemplate: any;
    private _initialUpdating;
    private _lastUpdateTime;
    protected _lastScroll: {
        pos: number;
        time: number;
    };
    protected _subscription: Subscription;
    dataUpdating: boolean;
    readonly displayedRows: QueryList<RowDirective>;
    protected need_recalc_page: boolean;
    private _prevOffset;
    private _prevLimit;
    /**
     * Текущий css-класс внешнего вида
     */
    private _currentAppearance;
    /**
     * Список строк, которые должны быть отображены и подлежат рендерингу
     */
    private _currentRendered;
    private _settingsDiffer;
    private _appearanceDiffer;
    viewPortLeft: number;
    viewPortWidth: number;
    RC: RowCalculator;
    protected readonly headerParts: BaseComponent[];
    protected readonly dataParts: Array<QueryList<RowDirective>>;
    protected _headerParts(): BaseComponent[];
    protected _dataParts(): Array<QueryList<RowDirective>>;
    immediateFilter(filter: string): void;
    getRows(): any[];
    private saveRowHeights;
    /**
     * Обновление страницы
     * @param  forceChanges Форсировать обновление, даже если не было прокрутки
     * @param  overwork     Количество строк, которые будут rendered вне вьюпорта
     */
    updatePage(log?: string, forceChanges?: boolean, overwork?: any): void;
    updateView(): void;
    hideHeaderBtns(): void;
    updateDataAsync(data: any[]): Observable<any>;
    /**
     * Обновление данных при внешнем или внутреннем изменении
     */
    updateData(async?: boolean): void;
    fetchData(query: DataQuery, data: Array<any>): void;
    protected renderData(): void;
    /**
     * Происходит прокрутка данных по вертикали
     * @param  e Событие прокрутки
     */
    gridScroll(e: any): void;
    gridAutoScrollX(dx: number): void;
    detectChanges(log?: string, dataAffected?: boolean): void;
    protected displayedRowsByXY(x: number, y: number, place?: GridPart): QueryList<RowDirective>;
    protected rowLayouts(rows: QueryList<RowDirective>): RowLayout[];
    protected rowByXY(rows: QueryList<RowDirective>, x: number, y: number): RowLayout;
    protected cellByXY(x: number, y: number, place?: GridPart): CellPosition;
    protected refreshSelection(scrollTo: CellPosition): void;
    scrollToFocused(): void;
    /**
     * Прокрутка к указанной ячейке.
     * Обычно вызываем после обработки нажатия клавиши, чтобы была видна строка
     * с фокусом.
     * Также вызывается после клика мышью по ячейке.. Если ячейка видна на экране
     * только частично - немного скроллим.
     * @param  cellPos Позиция ячейки, к которой прокручиваем грид
     */
    scrollTo(cellPos: CellPosition): void;
    protected toggleClass(v: boolean, c: string): void;
    /**
     * Проверить, нужно ли отобразить левую или правую область для зафиксированных
     * колонок
     * @param  xx         [description]
     * @param  scrollRect [description]
     * @param  target     [description]
     * @return            [description]
     */
    protected checkParts(xx: number, scrollRect: any, target: any): void;
    locateRow(r: any): void;
    locateByKey(keyValue: any, keyField?: string): void;
    clearSelection(): void;
    trackRow(index: number, data: any): any;
    checkResize(update_page?: boolean): boolean;
    protected windowResize(e: any): void;
    showHeaderBtn(fieldName: string): void;
    filterClosed(result: any): void;
    setFilter(f: any): void;
    resetFilter(f: any): void;
    private showFilter;
    focus(): void;
    setAppearance(appearanceClass: string): void;
    ngAfterViewInit(): void;
    ngOnInit(): void;
    ngDoCheck(): void;
    ngOnDestroy(): void;
    ngAfterContentInit(): void;
    constructor(state: GridStateService, elementRef: ElementRef, changeDetector: ChangeDetectorRef, keyValueDiffers: KeyValueDiffers);
}
