diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2016-07-03 20:03:23 +1200 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2016-07-03 20:03:23 +1200 |
commit | ebb43a1d910595462b384e3d1bd6375672da5b84 (patch) | |
tree | c0cb06b37f1c9d3fb2260e7bd259a9141a4118f9 | |
parent | dbb2e88db2c5af22172ea3642b27899b8164b40a (diff) | |
download | trackermap-server-ebb43a1d910595462b384e3d1bd6375672da5b84.tar.gz trackermap-server-ebb43a1d910595462b384e3d1bd6375672da5b84.tar.bz2 trackermap-server-ebb43a1d910595462b384e3d1bd6375672da5b84.zip |
Implement geofence saving
-rw-r--r-- | src/org/traccar/geofence/GeofencePolygon.java | 6 | ||||
-rw-r--r-- | web/app/Application.js | 2 | ||||
-rw-r--r-- | web/app/store/GeofenceTypes.js (renamed from web/app/store/GeozoneTypes.js) | 6 | ||||
-rw-r--r-- | web/app/view/GeofenceDialog.js | 5 | ||||
-rw-r--r-- | web/app/view/GeofenceDialogController.js | 14 | ||||
-rw-r--r-- | web/app/view/GeofenceMap.js | 25 | ||||
-rw-r--r-- | web/app/view/GeofenceMapController.js | 13 | ||||
-rw-r--r-- | web/app/view/SettingsMenu.js | 2 |
8 files changed, 58 insertions, 15 deletions
diff --git a/src/org/traccar/geofence/GeofencePolygon.java b/src/org/traccar/geofence/GeofencePolygon.java index be5f971a5..4ce61a623 100644 --- a/src/org/traccar/geofence/GeofencePolygon.java +++ b/src/org/traccar/geofence/GeofencePolygon.java @@ -118,7 +118,7 @@ public class GeofencePolygon extends GeofenceGeometry { @Override public String toWkt() { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); buf.append("POLYGON ("); for (Coordinate coordinate : coordinates) { buf.append(String.valueOf(coordinate.getLat())); @@ -132,7 +132,7 @@ public class GeofencePolygon extends GeofenceGeometry { @Override public void fromWkt(String wkt) throws ParseException { if (coordinates == null) { - coordinates = new ArrayList<Coordinate>(); + coordinates = new ArrayList<>(); } else { coordinates.clear(); } @@ -141,7 +141,7 @@ public class GeofencePolygon extends GeofenceGeometry { throw new ParseException("Mismatch geometry type", 0); } String content = wkt.substring(wkt.indexOf("(") + 1, wkt.indexOf(")")); - if (content == null || content.equals("")) { + if (content.isEmpty()) { throw new ParseException("No content", 0); } String[] commaTokens = content.split(","); diff --git a/web/app/Application.js b/web/app/Application.js index 392a9907f..ec942d21e 100644 --- a/web/app/Application.js +++ b/web/app/Application.js @@ -56,7 +56,7 @@ Ext.define('Traccar.Application', { 'AllGeofences', 'Notifications', 'AllNotifications', - 'GeozoneTypes' + 'GeofenceTypes' ], controllers: [ diff --git a/web/app/store/GeozoneTypes.js b/web/app/store/GeofenceTypes.js index a41bf1501..cf378341b 100644 --- a/web/app/store/GeozoneTypes.js +++ b/web/app/store/GeofenceTypes.js @@ -14,15 +14,15 @@ * limitations under the License. */ -Ext.define('Traccar.store.GeozoneTypes', { +Ext.define('Traccar.store.GeofenceTypes', { extend: 'Ext.data.Store', fields: ['key', 'name'], data: [{ key: 'Polygon', name: Strings.mapShapePolygon - }, { + }/*, { key: 'Circle', name: Strings.mapShapeCircle - }] + }*/] }); diff --git a/web/app/view/GeofenceDialog.js b/web/app/view/GeofenceDialog.js index fa3bbe87f..febef235e 100644 --- a/web/app/view/GeofenceDialog.js +++ b/web/app/view/GeofenceDialog.js @@ -34,6 +34,11 @@ Ext.define('Traccar.view.GeofenceDialog', { xtype: 'textfield', name: 'description', fieldLabel: Strings.sharedDescription + }, { + xtype: 'hiddenfield', + name: 'area', + allowBlank: false, + reference: 'areaField' }] }, diff --git a/web/app/view/GeofenceDialogController.js b/web/app/view/GeofenceDialogController.js index d8597457f..c8d518514 100644 --- a/web/app/view/GeofenceDialogController.js +++ b/web/app/view/GeofenceDialogController.js @@ -22,6 +22,20 @@ Ext.define('Traccar.view.GeofenceDialogController', { 'Traccar.view.GeofenceMap' ], + config: { + listen: { + controller: { + '*': { + saveArea: 'saveArea' + } + } + } + }, + + saveArea: function (value) { + this.lookupReference('areaField').setValue(value); + }, + onAreaClick: function (button) { Ext.create('Traccar.view.BaseWindow', { title: Strings.sharedArea, diff --git a/web/app/view/GeofenceMap.js b/web/app/view/GeofenceMap.js index 2538a8b16..e8a4dc5de 100644 --- a/web/app/view/GeofenceMap.js +++ b/web/app/view/GeofenceMap.js @@ -28,9 +28,12 @@ Ext.define('Traccar.view.GeofenceMap', { tbar: { items: [{ xtype: 'combobox', - store: 'GeozoneTypes', - valueField: 'id', - displayField: 'name' + store: 'GeofenceTypes', + valueField: 'key', + displayField: 'name', + listeners: { + select: 'onTypeSelect' + } }, { xtype: 'tbfill' }, { @@ -42,6 +45,10 @@ Ext.define('Traccar.view.GeofenceMap', { }] }, + getFeatures: function () { + return this.features; + }, + initMap: function () { var map, featureOverlay; this.callParent(); @@ -79,15 +86,21 @@ Ext.define('Traccar.view.GeofenceMap', { })); }, - addInteraction: function () { + addInteraction: function (type) { this.draw = new ol.interaction.Draw({ features: this.features, - type: 'Polygon' // (typeSelect.value) + type: type }); + this.draw.on('drawstart', function () { + this.features.clear(); + }, this); this.map.addInteraction(this.draw); }, removeInteraction: function () { - this.map.removeInteraction(this.draw); + if (this.draw) { + this.map.removeInteraction(this.draw); + this.draw = null; + } } }); diff --git a/web/app/view/GeofenceMapController.js b/web/app/view/GeofenceMapController.js index d3915fd46..1d20ba966 100644 --- a/web/app/view/GeofenceMapController.js +++ b/web/app/view/GeofenceMapController.js @@ -19,10 +19,21 @@ Ext.define('Traccar.view.GeofenceMapController', { alias: 'controller.geofenceMap', onSaveClick: function (button) { - button.up('window').close(); + var feature, formatter; + if (this.getView().getFeatures().getLength() > 0) { + feature = this.getView().getFeatures().pop(); + formatter = new ol.format.WKT(); + this.fireEvent('saveArea', formatter.writeFeature(feature)); + button.up('window').close(); + } }, onCancelClick: function (button) { button.up('window').close(); + }, + + onTypeSelect: function (combo) { + this.getView().removeInteraction(); + this.getView().addInteraction(combo.getValue()); } }); diff --git a/web/app/view/SettingsMenu.js b/web/app/view/SettingsMenu.js index 70041bd63..8c230f36f 100644 --- a/web/app/view/SettingsMenu.js +++ b/web/app/view/SettingsMenu.js @@ -49,7 +49,7 @@ Ext.define('Traccar.view.SettingsMenu', { reference: 'settingsUsersButton' }, { text: Strings.sharedNotifications, - handler: 'onNotificationsClick', + handler: 'onNotificationsClick' }, { text: Strings.loginLogout, handler: 'onLogoutClick' |