123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- /*global define*/
- define([
- '../../Core/defaultValue',
- '../../Core/defined',
- '../../Core/defineProperties',
- '../../Core/destroyObject',
- '../../Core/DeveloperError',
- '../../Core/EventHelper',
- '../../Scene/SceneMode',
- '../../ThirdParty/knockout',
- '../createCommand'
- ], function(
- defaultValue,
- defined,
- defineProperties,
- destroyObject,
- DeveloperError,
- EventHelper,
- SceneMode,
- knockout,
- createCommand) {
- "use strict";
- /**
- * The view model for {@link SceneModePicker}.
- * @alias SceneModePickerViewModel
- * @constructor
- *
- * @param {Scene} scene The Scene to morph
- * @param {Number} [duration=2.0] The duration of scene morph animations, in seconds
- */
- var SceneModePickerViewModel = function(scene, duration) {
- //>>includeStart('debug', pragmas.debug);
- if (!defined(scene)) {
- throw new DeveloperError('scene is required.');
- }
- //>>includeEnd('debug');
- this._scene = scene;
- var that = this;
- var morphStart = function(transitioner, oldMode, newMode, isMorphing) {
- that.sceneMode = newMode;
- that.dropDownVisible = false;
- };
- this._eventHelper = new EventHelper();
- this._eventHelper.add(scene.morphStart, morphStart);
- this._duration = defaultValue(duration, 2.0);
- /**
- * Gets or sets the current SceneMode. This property is observable.
- * @type {SceneMode}
- */
- this.sceneMode = scene.mode;
- /**
- * Gets or sets whether the button drop-down is currently visible. This property is observable.
- * @type {Boolean}
- * @default false
- */
- this.dropDownVisible = false;
- /**
- * Gets or sets the 2D tooltip. This property is observable.
- * @type {String}
- * @default '2D'
- */
- this.tooltip2D = '2D';
- /**
- * Gets or sets the 3D tooltip. This property is observable.
- * @type {String}
- * @default '3D'
- */
- this.tooltip3D = '3D';
- /**
- * Gets or sets the Columbus View tooltip. This property is observable.
- * @type {String}
- * @default 'Columbus View'
- */
- this.tooltipColumbusView = 'Columbus View';
- knockout.track(this, ['sceneMode', 'dropDownVisible', 'tooltip2D', 'tooltip3D', 'tooltipColumbusView']);
- /**
- * Gets the currently active tooltip. This property is observable.
- * @type {String}
- */
- this.selectedTooltip = undefined;
- knockout.defineProperty(this, 'selectedTooltip', function() {
- var mode = that.sceneMode;
- if (mode === SceneMode.SCENE2D) {
- return that.tooltip2D;
- }
- if (mode === SceneMode.SCENE3D) {
- return that.tooltip3D;
- }
- return that.tooltipColumbusView;
- });
- this._toggleDropDown = createCommand(function() {
- that.dropDownVisible = !that.dropDownVisible;
- });
- this._morphTo2D = createCommand(function() {
- scene.morphTo2D(that._duration);
- });
- this._morphTo3D = createCommand(function() {
- scene.morphTo3D(that._duration);
- });
- this._morphToColumbusView = createCommand(function() {
- scene.morphToColumbusView(that._duration);
- });
- //Used by knockout
- this._sceneMode = SceneMode;
- };
- defineProperties(SceneModePickerViewModel.prototype, {
- /**
- * Gets the scene
- * @memberof SceneModePickerViewModel.prototype
- * @type {Scene}
- */
- scene : {
- get : function() {
- return this._scene;
- }
- },
- /**
- * Gets or sets the the duration of scene mode transition animations in seconds.
- * A value of zero causes the scene to instantly change modes.
- * @memberof SceneModePickerViewModel.prototype
- * @type {Number}
- */
- duration : {
- get : function() {
- return this._duration;
- },
- set : function(value) {
- //>>includeStart('debug', pragmas.debug);
- if (value < 0.0) {
- throw new DeveloperError('duration value must be positive.');
- }
- //>>includeEnd('debug');
- this._duration = value;
- }
- },
- /**
- * Gets the command to toggle the drop down box.
- * @memberof SceneModePickerViewModel.prototype
- *
- * @type {Command}
- */
- toggleDropDown : {
- get : function() {
- return this._toggleDropDown;
- }
- },
- /**
- * Gets the command to morph to 2D.
- * @memberof SceneModePickerViewModel.prototype
- *
- * @type {Command}
- */
- morphTo2D : {
- get : function() {
- return this._morphTo2D;
- }
- },
- /**
- * Gets the command to morph to 3D.
- * @memberof SceneModePickerViewModel.prototype
- *
- * @type {Command}
- */
- morphTo3D : {
- get : function() {
- return this._morphTo3D;
- }
- },
- /**
- * Gets the command to morph to Columbus View.
- * @memberof SceneModePickerViewModel.prototype
- *
- * @type {Command}
- */
- morphToColumbusView : {
- get : function() {
- return this._morphToColumbusView;
- }
- }
- });
- /**
- * @returns {Boolean} true if the object has been destroyed, false otherwise.
- */
- SceneModePickerViewModel.prototype.isDestroyed = function() {
- return false;
- };
- /**
- * Destroys the view model.
- */
- SceneModePickerViewModel.prototype.destroy = function() {
- this._eventHelper.removeAll();
- destroyObject(this);
- };
- return SceneModePickerViewModel;
- });
|