text: /*
   * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
   *
   * 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/>.
   */
  
  Ext.define('Traccar.view.map.MapController', {
      extend: 'Traccar.view.map.MapMarkerController',
      alias: 'controller.map',
  
      requires: [
          'Traccar.GeofenceConverter'
      ],
  
      config: {
          listen: {
              controller: {
                  '*': {
                      mapstaterequest: 'getMapState',
                      zoomtoalldevices: 'zoomToAllDevices'
                  }
              },
              store: {
                  '#Geofences': {
                      load: 'updateGeofences',
                      add: 'updateGeofences',
                      update: 'updateGeofences',
                      remove: 'updateGeofences'
                  }
              }
          }
      },
  
      init: function () {
          this.callParent();
          this.lookupReference('showReportsButton').setVisible(
              Traccar.app.isMobile() && !Traccar.app.getBooleanAttributePreference('ui.disableReport'));
          this.lookupReference('showEventsButton').setVisible(Traccar.app.isMobile() && !Traccar.app.getBooleanAttributePreference('ui.disableEvents'));  
          this.eventWindow=Ext.create('Traccar.view.Events');      
      },
  
      showReports: function () {
          Traccar.app.showReports(true);
      },
  
      showEvents: function () {
          Traccar.app.showEvents(true);
      },
  
      onFollowClick: function (button, pressed) {
          if (pressed && this.selectedMarker) {
              this.getView().getMapView().setCenter(this.selectedMarker.getGeometry().getCoordinates());
          }
      },
  
      showLiveRoutes: function (button) {
          this.getView().getLiveRouteLayer().setVisible(button.pressed);
      },
  
      getMapState: function () {
          var zoom, center, projection;
          projection = this.getView().getMapView().getProjection();
          center = ol.proj.transform(this.getView().getMapView().getCenter(), projection, 'EPSG:4326');
          zoom = this.getView().getMapView().getZoom();
          this.fireEvent('mapstate', center[1], center[0], zoom);
      },
  
      updateGeofences: function () {
          this.getView().getGeofencesSource().clear();
          if (this.lookupReference('showGeofencesButton').pressed) {
              Ext.getStore('Geofences').each(function (geofence) {
                  var feature = new ol.Feature(
                      Traccar.GeofenceConverter.wktToGeometry(this.getView().getMapView(), geofence.get('area')));
                  feature.setStyle(this.getAreaStyle(
                      Ext.String.htmlDecode(geofence.get('name')),
                      geofence.get('attributes') ? geofence.get('attributes').color : null));
                  this.getView().getGeofencesSource().addFeature(feature);
                  return true;
              }, this);
          }
      },
  
      zoomToAllDevices: function () {
          this.zoomToAllPositions(Ext.getStore('LatestPositions').getData().items);
      },
      showEventsWindow:function(btn){
          if(btn.pressed){
              this.eventWindow.showAt(btn.getX(),btn.getY()+50);
          }
          else{
              this.eventWindow.hide();
          }
          
      },
      showStateWindow:function(btn){
          var stateView=Ext.ComponentQuery.query('stateView')[0];
          if(btn.pressed){
              stateView.setHidden(false);
          }
          else{
              stateView.setHidden(true);
          }
          
      }
  });
  