/**
 * @param {JQuery} $element Element.
 * @param {angular.IScope} $scope Angular scope.
 * @param {import('ngeo/map/LayerHelper').LayerHelper} ngeoLayerHelper Ngeo Layer Helper.
 * @param {import('gmf/datasource/LayerBeingSwipe').LayerBeingSwipe} gmfLayerBeingSwipe
 * @param {import('gmf/datasource/DataSourceBeingFiltered').DataSourceBeingFiltered} gmfDataSourceBeingFiltered
 *    The Gmf value service that determines the data source currently being
 *    filtered.
 * @param {import('gmf/datasource/ExternalDataSourcesManager').ExternalDatSourcesManager} gmfExternalDataSourcesManager
 *    The Gmf external data sources manager service. Used here to fetch the external WMS groups.
 * @param {import('gmf/permalink/Permalink').PermalinkService} gmfPermalink The gmf permalink service.
 * @param {import('gmf/layertree/TreeManager').LayertreeTreeManager} gmfTreeManager
 *    gmf Tree Manager service.
 * @param {import('gmf/layertree/SyncLayertreeMap').SyncLayertreeMap} gmfSyncLayertreeMap
 *    gmfSyncLayertreeMap service.
 * @param {import('ngeo/misc/WMSTime').WMSTime} ngeoWMSTime wms time service.
 * @param {import('gmf/theme/Themes').ThemesService} gmfThemes The gmf Themes service.
 * @param {angular.ITimeoutService} $timeout Angular timeout service.
 * @param {import('gmf/options').gmfLayerTreeOptions} gmfLayerTreeOptions The options.
 * @class
 * @hidden
 * @ngdoc controller
 * @ngname gmfLayertreeController
 */
export function Controller($element: JQuery, $scope: angular.IScope, ngeoLayerHelper: import("ngeo/map/LayerHelper").LayerHelper, gmfLayerBeingSwipe: import("gmf/datasource/LayerBeingSwipe").LayerBeingSwipe, gmfDataSourceBeingFiltered: import("gmf/datasource/DataSourceBeingFiltered").DataSourceBeingFiltered, gmfExternalDataSourcesManager: import("gmf/datasource/ExternalDataSourcesManager").ExternalDatSourcesManager, gmfPermalink: import("gmf/permalink/Permalink").PermalinkService, gmfTreeManager: import("gmf/layertree/TreeManager").LayertreeTreeManager, gmfSyncLayertreeMap: import("gmf/layertree/SyncLayertreeMap").SyncLayertreeMap, ngeoWMSTime: import("ngeo/misc/WMSTime").WMSTime, gmfThemes: import("gmf/theme/Themes").ThemesService, $timeout: angular.ITimeoutService, gmfLayerTreeOptions: import("gmf/options").gmfLayerTreeOptions): void;
export class Controller {
    /**
     * @param {JQuery} $element Element.
     * @param {angular.IScope} $scope Angular scope.
     * @param {import('ngeo/map/LayerHelper').LayerHelper} ngeoLayerHelper Ngeo Layer Helper.
     * @param {import('gmf/datasource/LayerBeingSwipe').LayerBeingSwipe} gmfLayerBeingSwipe
     * @param {import('gmf/datasource/DataSourceBeingFiltered').DataSourceBeingFiltered} gmfDataSourceBeingFiltered
     *    The Gmf value service that determines the data source currently being
     *    filtered.
     * @param {import('gmf/datasource/ExternalDataSourcesManager').ExternalDatSourcesManager} gmfExternalDataSourcesManager
     *    The Gmf external data sources manager service. Used here to fetch the external WMS groups.
     * @param {import('gmf/permalink/Permalink').PermalinkService} gmfPermalink The gmf permalink service.
     * @param {import('gmf/layertree/TreeManager').LayertreeTreeManager} gmfTreeManager
     *    gmf Tree Manager service.
     * @param {import('gmf/layertree/SyncLayertreeMap').SyncLayertreeMap} gmfSyncLayertreeMap
     *    gmfSyncLayertreeMap service.
     * @param {import('ngeo/misc/WMSTime').WMSTime} ngeoWMSTime wms time service.
     * @param {import('gmf/theme/Themes').ThemesService} gmfThemes The gmf Themes service.
     * @param {angular.ITimeoutService} $timeout Angular timeout service.
     * @param {import('gmf/options').gmfLayerTreeOptions} gmfLayerTreeOptions The options.
     * @class
     * @hidden
     * @ngdoc controller
     * @ngname gmfLayertreeController
     */
    constructor($element: JQuery, $scope: angular.IScope, ngeoLayerHelper: import("ngeo/map/LayerHelper").LayerHelper, gmfLayerBeingSwipe: import("gmf/datasource/LayerBeingSwipe").LayerBeingSwipe, gmfDataSourceBeingFiltered: import("gmf/datasource/DataSourceBeingFiltered").DataSourceBeingFiltered, gmfExternalDataSourcesManager: import("gmf/datasource/ExternalDataSourcesManager").ExternalDatSourcesManager, gmfPermalink: import("gmf/permalink/Permalink").PermalinkService, gmfTreeManager: import("gmf/layertree/TreeManager").LayertreeTreeManager, gmfSyncLayertreeMap: import("gmf/layertree/SyncLayertreeMap").SyncLayertreeMap, ngeoWMSTime: import("ngeo/misc/WMSTime").WMSTime, gmfThemes: import("gmf/theme/Themes").ThemesService, $timeout: angular.ITimeoutService, gmfLayerTreeOptions: import("gmf/options").gmfLayerTreeOptions);
    /**
     * @type {import('gmf/options').gmfLayerTreeOptions}
     */
    options: import("gmf/options").gmfLayerTreeOptions;
    /**
     * @type {import('ol/Map').default}
     */
    map: import("ol/Map").default;
    /**
     * @type {?Object<string, string>}
     */
    dimensions: {
        [x: string]: string;
    } | null;
    /**
     * @type {angular.IScope}
     */
    scope_: angular.IScope;
    /**
     * @type {import('ngeo/map/LayerHelper').LayerHelper}
     */
    layerHelper_: import("ngeo/map/LayerHelper").LayerHelper;
    /**
     * @type {import('gmf/datasource/LayerBeingSwipe').LayerBeingSwipe}
     */
    gmfLayerBeingSwipe: import("gmf/datasource/LayerBeingSwipe").LayerBeingSwipe;
    /**
     * @type {import('gmf/datasource/DataSourceBeingFiltered').DataSourceBeingFiltered}
     */
    gmfDataSourceBeingFiltered: import("gmf/datasource/DataSourceBeingFiltered").DataSourceBeingFiltered;
    /**
     * @type {import('gmf/datasource/ExternalDataSourcesManager').ExternalDatSourcesManager}
     */
    gmfExternalDataSourcesManager: import("gmf/datasource/ExternalDataSourcesManager").ExternalDatSourcesManager;
    /**
     * @type {import('gmf/permalink/Permalink').PermalinkService}
     */
    gmfPermalink_: import("gmf/permalink/Permalink").PermalinkService;
    /**
     * @type {import('gmf/layertree/TreeManager').LayertreeTreeManager}
     */
    gmfTreeManager_: import("gmf/layertree/TreeManager").LayertreeTreeManager;
    /**
     * @type {import('gmf/themes').GmfRootNode}
     */
    root: import("gmf/themes").GmfRootNode;
    /**
     * @type {import('gmf/layertree/SyncLayertreeMap').SyncLayertreeMap}
     */
    gmfSyncLayertreeMap_: import("gmf/layertree/SyncLayertreeMap").SyncLayertreeMap;
    /**
     * @type {import('ngeo/misc/WMSTime').WMSTime}
     */
    ngeoWMSTime_: import("ngeo/misc/WMSTime").WMSTime;
    /**
     * @type {Object<number, string[]>}
     */
    groupNodeStates_: {
        [x: number]: string[];
    };
    /**
     * @type {?import('ol/layer/Group').default}
     */
    dataLayerGroup_: import("ol/layer/Group").default | null;
    /**
     * @type {import('ol/layer/Base').default[]}
     */
    layers: import("ol/layer/Base").default[];
    /**
     * @type {import('gmf/theme/Themes').ThemesService}
     */
    gmfThemes_: import("gmf/theme/Themes").ThemesService;
    /**
     * @type {angular.ITimeoutService}
     */
    $timeout_: angular.ITimeoutService;
    /**
     * Init the controller,
     */
    $onInit(): void;
    /**
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl Layer tree controller.
     */
    updateDimensions_(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): void;
    /**
     * @param {olLayerLayer<import('ol/source/Source').default>} layer Layer to update.
     * @param {import('gmf/themes').GmfGroup|import('gmf/themes').GmfLayer} node Layer tree node.
     */
    updateLayerDimensions_(layer: olLayerLayer<import("ol/source/Source").default>, node: import("gmf/themes").GmfGroup | import("gmf/themes").GmfLayer): void;
    /**
     * Use the gmfSyncLayertreeMap_ to create and get layer corresponding to this
     * treeCtrl. The layer will be inserted into the map. The layer can be null
     * if the treeCtrl is based on a node inside a mixed node. It this case, the
     * layer will be in the first parent declared as a mixed node.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl tree controller of the
     *    node.
     * @returns {import('ol/layer/Base').default|import('ol/layer/Group').default|null} The OpenLayers
     *    layer or group for the node.
     */
    getLayer(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): import("ol/layer/Base").default | import("ol/layer/Group").default | null;
    /**
     * Remove layer from this component's layergroup (and then, from the map) on
     * a ngeo layertree destroy event.
     *
     * @param {angular.IScope} scope treeCtrl scope.
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     */
    listeners(scope: angular.IScope, treeCtrl: import("ngeo/layertree/Controller").LayertreeController): void;
    /**
     * Toggle the state of treeCtrl's node.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     */
    toggleActive(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): void;
    /**
     * Return the current state of the given treeCtrl's node.
     * Return a class name that match with the current node activation state.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     * @returns {string} 'on' or 'off' or 'indeterminate'.
     */
    getNodeState(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): string;
    /**
     * Update the `timeRangeValue` property of the data source bound to the
     * given tree controller and the state of the permalink using the given time.
     *
     * LayertreeController.prototype.updateTimeData - description
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} layertreeCtrl ngeo layertree controller
     * @param {import('ngeo/datasource/OGC').TimeRange} time The start
     * and optionally the end datetime (for time range selection) selected by user
     */
    updateTimeData(layertreeCtrl: import("ngeo/layertree/Controller").LayertreeController, time: import("ngeo/datasource/OGC").TimeRange): void;
    /**
     * Update the `timeRangeValue` property of the data source bound to the
     * given tree controller using the given time. If the tree controller has
     * no data source, it means that it has children and they might have
     * data sources.
     *
     * The setting of the TIME parameter on the layer occurs in the
     * `gmf.datasource.Manager` service
     *
     * LayertreeController.prototype.updateWMSTimeLayerState - description
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} layertreeCtrl ngeo layertree controller
     * @param {import('ngeo/datasource/OGC').TimeRange} time The start
     * and optionally the end datetime (for time range selection) selected by user
     */
    updateWMSTimeLayerState(layertreeCtrl: import("ngeo/layertree/Controller").LayertreeController, time: import("ngeo/datasource/OGC").TimeRange): void;
    /**
     * Get the icon image URL for the given treeCtrl's layer. It can only return a
     * string for internal WMS layers without multiple childlayers in the node.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     * @returns {string|undefined} The icon legend URL or undefined.
     */
    getLegendIconURL(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): string | undefined;
    /**
     * Get the legends object (<LayerName: url> for each layer) for the given treeCtrl.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     * @returns {?Object<string, string>} A <layerName: url> object that provides a
     *     layer for each layer.
     */
    getLegendsObject(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): {
        [x: string]: string;
    } | null;
    /**
     * Get the number of legends object for this layertree controller.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     * @returns {number} The number of Legends object.
     */
    getNumberOfLegendsObject(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): number;
    /**
     * Return the current scale of the map.
     *
     * @returns {number} Scale.
     */
    getScale_(): number;
    /**
     * Is snapping activated for this LayertreeController
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller.
     * @returns {boolean} True if snapping is activated for that layer.
     */
    isSnappingActivated(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): boolean;
    /**
     * Toggle snapping for this LayertreeController.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller.
     */
    toggleSnapping(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): void;
    /**
     * Opens a openIframePopup with the content of the metadata url of a node.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     */
    displayMetadata(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): void;
    /**
     * Update the layers order in the map and the treeCtrl in the treeManager after
     * a reorder of the first-level groups. Then update the permalink.
     */
    afterReorder(): void;
    /**
     * @param {import('gmf/themes').GmfGroup} node Layer tree node to tag popup identifier.
     */
    tagPopup(node: import("gmf/themes").GmfGroup): void;
    /**
     * @param {import('gmf/themes').GmfGroup} node Layer tree node to remove.
     */
    removeNode(node: import("gmf/themes").GmfGroup): void;
    removeAllNodes(): void;
    /**
     * @returns {number} first level node count.
     */
    nodesCount(): number;
    /**
     * Return 'out-of-resolution' if the current resolution of the map is out of
     * the min/max resolution in the node.
     *
     * @param {import('gmf/themes').GmfLayerWMS} gmfLayer the GeoMapFish Layer. WMTS layer is
     *     also allowed (the type is defined as GmfLayerWMS only to avoid some
     *     useless tests to know if a minResolutionHint property can exist
     *     on the node).
     * @returns {string|undefined} 'out-of-resolution' or undefined.
     */
    getResolutionStyle(gmfLayer: import("gmf/themes").GmfLayerWMS): string | undefined;
    /**
     * Set the resolution of the map with the max or min resolution of the node.
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl ngeo layertree controller,
     *    from the current node.
     */
    zoomToResolution(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): void;
    /**
     * Toggle the legend for a node
     *
     * @param {string} legendNodeId The DOM node legend id to toggle
     */
    toggleNodeLegend(legendNodeId: string): void;
    /**
     * Toggle the menu for a node
     *
     * @param {string} menuNodeId The DOM node menu id to toggle
     */
    toggleNodeMenu(menuNodeId: string): void;
    /**
     * @param {import('gmf/datasource/OGC').default} ds Data source to filter.
     */
    toggleFiltrableDataSource(ds: import("gmf/datasource/OGC").default): void;
    /**
     * @param {string} legendNodeId The DOM node legend id
     * @returns {boolean} Whenever the legend is currently displayed.
     */
    isNodeLegendVisible(legendNodeId: string): boolean;
    /**
     * Determines whether the layer tree controller supports being customized.
     * For example, having its layer opacity changed, displaying its legend, etc.
     *
     * If any requirement is met, then the treeCtrl is considered supporting
     * "customization", regardless of what it actually is.
     *
     * The requirements are:
     *
     * - must not be the root controller, any of the following:
     *   - it supports legend
     *   - it supports having the layer opacity being changed
     *
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl Ngeo tree controller.
     * @returns {boolean} Whether the layer tree controller supports being
     *     "customized" or not.
     */
    supportsCustomization(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): boolean;
    /**
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl Ngeo tree controller.
     * @returns {boolean} Whether the layer tree controller supports having a
     *     legend being shown.
     */
    supportsLegend(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): boolean;
    /**
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl Ngeo tree controller.
     * @returns {boolean} Whether the layer tree controller supports having its
     *     layer opacity being changed or not.
     */
    supportsOpacityChange(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): boolean;
    /**
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl Ngeo tree controller.
     * @returns {boolean} Whether the layer tree controller has a filtrable datasource or not.
     */
    isFiltrable(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): boolean;
    /**
     * @param {import('ngeo/layertree/Controller').LayertreeController} treeCtrl Ngeo tree controller.
     * @returns {import('ngeo/layertree/Controller').LayertreeController} first parent that supports
     *     opacity change or is filtrable. Or null if there is any parent with layer functions.
     */
    getFirstParentWithLayerFunctions(treeCtrl: import("ngeo/layertree/Controller").LayertreeController): import("ngeo/layertree/Controller").LayertreeController;
}
export namespace Controller {
    let $inject: string[];
}
export default myModule;
/**
 * Static function to create a popup with an iframe.
 */
export type openIframePopup = Function;
import angular from 'angular';
import olLayerLayer from 'ol/layer/Layer';
/**
 * Static function to create a popup with an iframe.
 *
 * @typedef {Function} openIframePopup
 * @param {string} url an url.
 * @param {string} title (text).
 * @param {string} [opt_width] CSS width.
 * @param {string} [opt_height] CSS height.
 * @param {boolean} [opt_apply] If true, trigger the Angular digest loop. Default to true.
 */
/**
 * @type {angular.IModule}
 * @hidden
 */
declare const myModule: angular.IModule;
