import defaultValue from '../../Core/defaultValue.js'; import defined from '../../Core/defined.js'; import defineProperties from '../../Core/defineProperties.js'; import DeveloperError from '../../Core/DeveloperError.js'; import knockout from '../../ThirdParty/knockout.js'; import createCommand from '../createCommand.js'; /** * A view model that represents each item in the {@link BaseLayerPicker}. * * @alias ProviderViewModel * @constructor * * @param {Object} options The object containing all parameters. * @param {String} options.name The name of the layer. * @param {String} options.tooltip The tooltip to show when the item is moused over. * @param {String} options.iconUrl An icon representing the layer. * @param {String} [options.category] A category for the layer. * @param {ProviderViewModel~CreationFunction|Command} options.creationFunction A function or Command * that creates one or more providers which will be added to the globe when this item is selected. * * @see BaseLayerPicker * @see ImageryProvider * @see TerrainProvider */ function ProviderViewModel(options) { //>>includeStart('debug', pragmas.debug); if (!defined(options.name)) { throw new DeveloperError('options.name is required.'); } if (!defined(options.tooltip)) { throw new DeveloperError('options.tooltip is required.'); } if (!defined(options.iconUrl)) { throw new DeveloperError('options.iconUrl is required.'); } if (typeof options.creationFunction !== 'function') { throw new DeveloperError('options.creationFunction is required.'); } //>>includeEnd('debug'); var creationCommand = options.creationFunction; if (!defined(creationCommand.canExecute)) { creationCommand = createCommand(creationCommand); } this._creationCommand = creationCommand; /** * Gets the display name. This property is observable. * @type {String} */ this.name = options.name; /** * Gets the tooltip. This property is observable. * @type {String} */ this.tooltip = options.tooltip; /** * Gets the icon. This property is observable. * @type {String} */ this.iconUrl = options.iconUrl; this._category = defaultValue(options.category, ''); knockout.track(this, ['name', 'tooltip', 'iconUrl']); } defineProperties(ProviderViewModel.prototype, { /** * Gets the Command that creates one or more providers which will be added to * the globe when this item is selected. * @memberof ProviderViewModel.prototype * @memberof ProviderViewModel.prototype * @type {Command} * @readonly */ creationCommand : { get : function() { return this._creationCommand; } }, /** * Gets the category * @type {String} * @memberof ProviderViewModel.prototype * @readonly */ category : { get: function() { return this._category; } } }); /** * A function which creates one or more providers. * @callback ProviderViewModel~CreationFunction * @returns {ImageryProvider|TerrainProvider|ImageryProvider[]|TerrainProvider[]} * The ImageryProvider or TerrainProvider, or array of providers, to be added * to the globe. */ export default ProviderViewModel;