UNPKG

@geoext/geoext

Version:

GeoExt is Open Source and enables building desktop-like GIS applications through the web. It is a JavaScript framework that combines the GIS functionality of OpenLayers with the user interface savvy of the ExtJS library provided by Sencha.

177 lines (164 loc) 4.49 kB
/* Copyright (c) 2015-present The Open Source Geospatial Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** * The layer model class used by the stores. * * @class GeoExt.data.model.Layer */ Ext.define('GeoExt.data.model.Layer', { extend: 'GeoExt.data.model.Base', mixins: ['GeoExt.mixin.SymbolCheck'], // <debug> symbols: ['ol.layer.Group', 'ol.layer.Base', 'ol.layer.Base#get'], // </debug> /** * The layer property that will be used to label the model in views. * * @cfg {string} */ textProperty: 'name', /** * The layer property that will be used to describe the model in views. * * @cfg {string} */ descriptionProperty: 'description', /** * The text label that will be shown in model views representing unnamed * layers. * * @cfg {string} */ unnamedLayerText: 'Unnamed Layer', /** * The text label that will be shown in model views representing unnamed * group layers. * * @cfg {string} */ unnamedGroupLayerText: 'Unnamed Group Layer', /** * This property specifies which properties are synchronized between * the store record and the ol layer object. * * By default this only the property `'title'`. * * @cfg {Array<string>} */ synchronizedProperties: ['title'], fields: [ { name: 'isLayerGroup', type: 'boolean', persist: false, convert: function (v, record) { const layer = record.getOlLayer(); if (layer) { return layer instanceof ol.layer.Group; } return undefined; }, }, { name: 'text', type: 'string', persist: false, convert: function (v, record) { let name = v; let defaultName; let textProp; if (!name) { textProp = record.textProperty; defaultName = record.get('isLayerGroup') ? record.unnamedGroupLayerText : record.unnamedLayerText; name = record.getOlLayerProp(textProp, defaultName); } return name; }, }, { name: 'opacity', type: 'number', persist: false, convert: function (v, record) { return record.getOlLayerProp('opacity'); }, }, { name: 'minResolution', type: 'number', persist: false, convert: function (v, record) { return record.getOlLayerProp('minResolution'); }, }, { name: 'maxResolution', type: 'number', persist: false, convert: function (v, record) { return record.getOlLayerProp('maxResolution'); }, }, { name: 'qtip', type: 'string', persist: false, convert: function (v, record) { return record.getOlLayerProp(record.descriptionProperty, ''); }, }, { name: 'qtitle', type: 'string', persist: false, convert: function (v, record) { return record.get('text'); }, }, ], proxy: { type: 'memory', reader: { type: 'json', }, }, /** * Returns the `ol.layer.Base` object used in this model instance. * * @return {ol.layer.Base} The `ol.layer.Base` object. */ getOlLayer: function () { if (this.data instanceof ol.layer.Base) { return this.data; } }, /** * Returns a property value of the `ol.layer.Base` object used in this model * instance. If the property is null, the optional default value will be * returned. * * @param {string} prop The property key. * @param {Object} defaultValue The optional default value. * @return {Object} The returned property. */ getOlLayerProp: function (prop, defaultValue) { const layer = this.getOlLayer(); const value = layer ? layer.get(prop) : undefined; return value !== undefined ? value : defaultValue; }, });