Explorar el Código

wxGUI: Projection checkbox from Map Display statusbar moved to Map Display Settings (#2087)

Co-authored-by: Anna Petrasova <kratochanna@gmail.com>
Linda Kladivova hace 3 años
padre
commit
02b305a15c

+ 8 - 2
gui/wxpython/gui_core/mapdisp.py

@@ -160,11 +160,17 @@ class MapPanelBase(wx.Panel):
 
     def SetProperty(self, name, value):
         """Sets property"""
-        self.statusbarManager.SetProperty(name, value)
+        if self.HasProperty("projection"):
+            self.statusbarManager.SetProperty(name, value)
+        else:
+            self.mapWindowProperties.useDefinedProjection = value
 
     def GetProperty(self, name):
         """Returns property"""
-        return self.statusbarManager.GetProperty(name)
+        if self.HasProperty("projection"):
+            return self.statusbarManager.GetProperty(name)
+        else:
+            return self.mapWindowProperties.useDefinedProjection
 
     def HasProperty(self, name):
         """Checks whether object has property"""

+ 0 - 1
gui/wxpython/mapdisp/frame.py

@@ -154,7 +154,6 @@ class MapPanel(SingleMapPanel):
                 sb.SbDisplayGeometry,
                 sb.SbMapScale,
                 sb.SbGoTo,
-                sb.SbProjection,
             ]
             self.statusbarItemsHiddenInNviz = (
                 sb.SbDisplayGeometry,

+ 70 - 2
gui/wxpython/mapdisp/properties.py

@@ -47,6 +47,9 @@ class PropertyItem:
     def _setValue(self, value):
         self.widget.SetValue(value)
 
+    def GetValue(self):
+        return self.widget.GetValue()
+
     def GetWidget(self):
         """Returns underlying widget.
 
@@ -62,7 +65,7 @@ class PropertyItem:
 
     def _onToggleCheckBox(self, event):
         self._disconnect()
-        self.mapWindowProperty = self.widget.GetValue()
+        self.mapWindowProperty = self.GetValue()
         self._connect()
 
 
@@ -229,6 +232,51 @@ class ChBShowRegion(PropertyItem):
             self.giface.updateMap.emit(render=False)
 
 
+class ChBProjection(PropertyItem):
+    """Checkbox to enable user defined projection"""
+
+    def __init__(self, parent, mapWindowProperties):
+        PropertyItem.__init__(self, mapWindowProperties)
+        self.name = "projection"
+        self.defaultLabel = _("Display coordinates in different CRS")
+        self.widget = wx.CheckBox(parent=parent, id=wx.ID_ANY, label=self.defaultLabel)
+        self.widget.SetValue(self.mapWindowProperty)
+        self.widget.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "Reproject coordinates displayed "
+                    "in the statusbar. Coordinate reference system can be "
+                    "specified in GUI preferences dialog "
+                    "(tab 'Projection')"
+                )
+            )
+        )
+        self.widget.Bind(wx.EVT_CHECKBOX, self._onToggleCheckBox)
+        self._connect()
+
+    @property
+    def mapWindowProperty(self):
+        return self._properties.useDefinedProjection
+
+    @mapWindowProperty.setter
+    def mapWindowProperty(self, value):
+        self._properties.useDefinedProjection = value
+
+    def mapWindowPropertyChanged(self):
+        return self._properties.useDefinedProjectionChanged
+
+    def _onToggleCheckBox(self, event):
+        super()._onToggleCheckBox(event)
+        epsg = self._properties.epsg
+        if epsg:
+            label = _("{label} (EPSG: {epsg})").format(
+                label=self.defaultLabel, epsg=epsg
+            )
+            self.widget.SetLabel(label)
+        else:
+            self.widget.SetLabel(self.defaultLabel)
+
+
 class MapDisplayPropertiesDialog(wx.Dialog):
     """Map Display properties dialog"""
 
@@ -253,6 +301,7 @@ class MapDisplayPropertiesDialog(wx.Dialog):
         self.notebook = wx.Notebook(parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
         # create notebook pages
         self._createDisplayPage(parent=self.notebook)
+        self._createStatusBarPage(parent=self.notebook)
 
         self.btnClose = Button(self, wx.ID_CLOSE)
         self.SetEscapeId(wx.ID_CLOSE)
@@ -326,4 +375,23 @@ class MapDisplayPropertiesDialog(wx.Dialog):
 
         panel.SetSizer(sizer)
 
-        return panel
+    def _createStatusBarPage(self, parent):
+        """Create notebook page for statusbar settings"""
+
+        panel = SP.ScrolledPanel(parent=parent, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        parent.AddPage(page=panel, text=_("Status bar"))
+
+        # General settings
+        sizer = wx.BoxSizer(wx.VERTICAL)
+
+        # Auto-rendering
+        self.projection = ChBProjection(panel, self.mapWindowProperties)
+        sizer.Add(
+            self.projection.GetWidget(),
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=3,
+        )
+
+        panel.SetSizer(sizer)

+ 16 - 0
gui/wxpython/mapwin/base.py

@@ -40,6 +40,10 @@ class MapWindowProperties(object):
         self.showRegionChanged = Signal("MapWindowProperties.showRegionChanged")
         self._alignExtent = None
         self.alignExtentChanged = Signal("MapWindowProperties.alignExtentChanged")
+        self._useDefinedProjection = False
+        self.useDefinedProjectionChanged = Signal(
+            "MapWindowProperties.useDefinedProjectionChanged"
+        )
 
     def setValuesFromUserSettings(self):
         """Convenient function to get values from user settings into this object."""
@@ -94,6 +98,18 @@ class MapWindowProperties(object):
             self._alignExtent = value
             self.alignExtentChanged.emit(value=value)
 
+    @property
+    def useDefinedProjection(self):
+        return self._useDefinedProjection
+
+    @useDefinedProjection.setter
+    def useDefinedProjection(self, value):
+        self._useDefinedProjection = value
+
+    @property
+    def epsg(self):
+        return UserSettings.Get(group="projection", key="statusbar", subkey="epsg")
+
 
 class MapWindowBase(object):
     """Abstract map display window class