/
BaseLayerPickerViewModel.js
106 lines (95 loc) · 3.49 KB
/
BaseLayerPickerViewModel.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*global define*/
define([
'../../Core/DeveloperError',
'../createCommand',
'../../ThirdParty/knockout'
], function(
DeveloperError,
createCommand,
knockout) {
"use strict";
/**
* The ViewModel for {@link BaseLayerPicker}.
* @alias BaseLayerPickerViewModel
* @constructor
*
* @param {ImageryLayerCollection} imageryLayers The imagery layer collection to use.
* @param {Array} [imageryProviderViewModels] The array of ImageryProviderViewModel instances to use.
*
* @exception {DeveloperError} imageryLayers is required.
* @exception {DeveloperError} imageryProviderViewModels must be an array.
*
* @see ImageryProviderViewModel
*/
var BaseLayerPickerViewModel = function(imageryLayers, imageryProviderViewModels) {
if (typeof imageryLayers === 'undefined') {
throw new DeveloperError('imageryLayers is required');
}
if (typeof imageryProviderViewModels === 'undefined') {
imageryProviderViewModels = [];
} else if (!Array.isArray(imageryProviderViewModels)) {
throw new DeveloperError('imageryProviderViewModels must be an array');
}
var dropDownVisible = knockout.observable(false);
var selectedViewModel = knockout.observable();
/**
* Gets the ImageryLayerCollection.
* @type ImageryLayerCollection
*/
this.imageryLayers = imageryLayers;
/**
* Gets the observable array of ImageryProviderViewModel instances available for selection.
* @type Observable
*/
this.imageryProviderViewModels = knockout.observableArray(imageryProviderViewModels);
/**
* Gets or sets whether the imagery selection dropDown is currently visible.
* @type Observable
*/
this.dropDownVisible = dropDownVisible;
/**
* Command to toggle dropDown visibility.
* @type Command
*/
this.toggleDropDown = createCommand(function() {
dropDownVisible(!dropDownVisible());
});
/**
* Gets the name of the currently selected item.
* @type Observable
*/
this.selectedName = knockout.computed(function() {
var selected = selectedViewModel();
return typeof selected !== 'undefined' ? selected.name() : undefined;
});
/**
* Gets the image url of the currently selected item.
* @type Observable
*/
this.selectedIconUrl = knockout.computed(function() {
var viewModel = selectedViewModel();
return typeof viewModel !== 'undefined' ? viewModel.iconUrl() : undefined;
});
/**
* Gets a writable observable for the currently selected item.
* @type Observable
*/
this.selectedItem = knockout.computed({
read : function() {
return selectedViewModel();
},
write : function(value) {
if (imageryLayers.getLength() > 0) {
imageryLayers.remove(imageryLayers.get(0));
}
var newLayer = value.creationCommand();
if (typeof newLayer !== 'undefined') {
imageryLayers.addImageryProvider(newLayer, 0);
}
selectedViewModel(value);
dropDownVisible(false);
}
});
};
return BaseLayerPickerViewModel;
});