/**
 * The controller for the "tree node" directive.
 *
 * @param {angular.IScope} $scope Scope.
 * @param {angular.IScope} $rootScope Angular rootScope.
 * @param {angular.IAttributes} $attrs Attributes.
 * @class
 * @ngdoc controller
 * @ngname NgeoLayertreeController
 * @hidden
 */
export function LayertreeController($scope: angular.IScope, $rootScope: angular.IScope, $attrs: angular.IAttributes): void;
export class LayertreeController {
    /**
     * The controller for the "tree node" directive.
     *
     * @param {angular.IScope} $scope Scope.
     * @param {angular.IScope} $rootScope Angular rootScope.
     * @param {angular.IAttributes} $attrs Attributes.
     * @class
     * @ngdoc controller
     * @ngname NgeoLayertreeController
     * @hidden
     */
    constructor($scope: angular.IScope, $rootScope: angular.IScope, $attrs: angular.IAttributes);
    /**
     * @type {boolean}
     */
    isRoot: boolean;
    /**
     * @type {angular.IScope}
     */
    rootScope_: angular.IScope;
    /**
     * @type {Object<string, string|boolean>}
     */
    properties: {
        [x: string]: string | boolean;
    };
    /**
     * @type {string}
     */
    state_: string;
    node: import("gmf/themes").GmfGroup | import("gmf/themes").GmfLayer;
    /**
     * @type {import('ngeo/layertree/Controller').LayertreeController}
     */
    parent: import("ngeo/layertree/Controller").LayertreeController;
    /**
     * @type {import('ngeo/layertree/Controller').LayertreeController[]}
     */
    children: import("ngeo/layertree/Controller").LayertreeController[];
    /**
     * @type {string}
     */
    uid: string;
    /**
     * @type {number}
     */
    depth: number;
    /**
     * @type {import('ol/Map').default}
     */
    map: import("ol/Map").default;
    /**
     * @type {string}
     */
    nodelayerExpr: string;
    /**
     * @type {?import('ol/layer/Layer').default<import('ol/source/Source').default>|
     *    import('ol/layer/Group').default}
     */
    layer: (import("ol/layer/Layer").default<import("ol/source/Source").default> | import("ol/layer/Group").default) | null;
    /**
     * @type {?import('ngeo/datasource/DataSource').default}
     */
    dataSource_: import("ngeo/datasource/DataSource").default | null;
    /**
     * @type {string|undefined}
     */
    listenersExpr: string | undefined;
    /**
     * Return the current state.
     *
     * @returns {string} 'on', 'off', 'indeterminate', or '' if the children are not initialized.
     */
    getState(): string;
    /**
     * Set the state of this treeCtrl. Update its children with its value and then
     * ask its parent to refresh its state.
     *
     * @param {string} state 'on' or 'off'.
     * @param {boolean} [opt_broadcast] Broadcast.
     */
    setState(state: string, opt_broadcast?: boolean): void;
    /**
     * @param {string} state 'on' or 'off'.
     */
    setStateInternal_(state: string): void;
    /**
     * Refresh the state of this treeCtrl based on it's children value. The call its
     * parent to do the same.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} [opt_onChild] Child tree
     *     controller that had its state changed to 'on'.
     * @param {boolean} [opt_broadcast] Broadcast.
     * @public
     */
    public refreshState(opt_onChild?: import("ngeo/layertree/Controller").LayertreeController, opt_broadcast?: boolean): void;
    /**
     * Return the current state, calculate on all its children recursively.
     *
     * @returns {string} 'on', 'off', 'indeterminate', or '' if the children are not initialized.
     */
    getCalculateState(): string;
    /**
     * @param {boolean|undefined} val Value.
     * @returns {boolean|undefined} Value.
     */
    getSetActive(val: boolean | undefined): boolean | undefined;
    /**
     * @returns {?import('ngeo/datasource/DataSource').default} dataSource The data source bound to
     *     this layer tree controller.
     */
    getDataSource(): import("ngeo/datasource/DataSource").default | null;
    /**
     * @param {?import('ngeo/datasource/DataSource').default} dataSource Data source or null.
     */
    setDataSource(dataSource: import("ngeo/datasource/DataSource").default | null): void;
    /**
     * @typedef {function(LayertreeController): (LayertreeVisitorDecision|undefined|void)} Visitor
     */
    /**
     * Recursive method to traverse the layertree controller graph.
     *
     * @param {Visitor} visitor A visitor called for each node.
     * @returns {boolean} whether to stop traversing.
     */
    traverseDepthFirst(visitor: Visitor): boolean;
}
export namespace LayertreeController {
    let $inject: string[];
}
/**
 * Get the "top level" layertree (one of the first level child under the root
 * layertree). Can return itself.
 *
 * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller.
 * @returns {import('ngeo/layertree/Controller').LayertreeController} the top level layertree.
 * @public
 * @hidden
 */
export function getFirstParentTree(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): import("ngeo/layertree/Controller").LayertreeController;
/**
 * *
 */
export type LayertreeVisitorDecision = string;
export namespace LayertreeVisitorDecision {
    let STOP: string;
    let SKIP: string;
    let DESCEND: string;
}
export default myModule;
export type Visitor = (arg0: LayertreeController) => (LayertreeVisitorDecision | undefined | void);
import angular from 'angular';
/**
 * @type {angular.IModule}
 * @hidden
 */
declare const myModule: angular.IModule;
