Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
wxGUI: Move statusbar checkboxes related to Map Display to a new Map …
…Display Settings dialog (#2031)
- Loading branch information
1 parent
3bd5de2
commit 31421ee
Showing
4 changed files
with
345 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,329 @@ | ||
""" | ||
@package mapdisp.properties | ||
@brief Classes for map display properties management | ||
Classes: | ||
- properties::PropertyItem | ||
- properties::ChBRender | ||
- properties::ChBShowRegion | ||
- properties::ChBAlignExtent | ||
- properties::ChBResolution | ||
- properties::MapDisplayPropertiesDialog | ||
(C) 2021 by the GRASS Development Team | ||
This program is free software under the GNU General Public License | ||
(>=v2). Read the file COPYING that comes with GRASS for details. | ||
@author Vaclav Petras <wenzeslaus gmail.com> | ||
@author Anna Kratochvilova <kratochanna gmail.com> | ||
@author Linda Kladivova <lindakladivova gmail.com> | ||
""" | ||
|
||
import wx | ||
import wx.lib.scrolledpanel as SP | ||
from gui_core.wrap import Button | ||
|
||
|
||
class PropertyItem: | ||
"""Base class for Map Display properties widgets that use property signals""" | ||
|
||
def __init__(self, mapWindowProperties): | ||
self._properties = mapWindowProperties | ||
|
||
@property | ||
def mapWindowProperty(self): | ||
pass | ||
|
||
@mapWindowProperty.setter | ||
def mapWindowProperty(self, value): | ||
pass | ||
|
||
def mapWindowPropertyChanged(self): | ||
"""Returns signal from MapWindowProperties.""" | ||
pass | ||
|
||
def _setValue(self, value): | ||
self.widget.SetValue(value) | ||
|
||
def GetWidget(self): | ||
"""Returns underlying widget. | ||
:return: widget or None if doesn't exist | ||
""" | ||
return self.widget | ||
|
||
def _connect(self): | ||
self.mapWindowPropertyChanged().connect(self._setValue) | ||
|
||
def _disconnect(self): | ||
self.mapWindowPropertyChanged().disconnect(self._setValue) | ||
|
||
def _onToggleCheckBox(self, event): | ||
self._disconnect() | ||
self.mapWindowProperty = self.widget.GetValue() | ||
self._connect() | ||
|
||
|
||
class ChBRender(PropertyItem): | ||
"""Checkbox to enable and disable auto-rendering.""" | ||
|
||
def __init__(self, parent, mapWindowProperties): | ||
PropertyItem.__init__(self, mapWindowProperties) | ||
self.name = "render" | ||
self.widget = wx.CheckBox( | ||
parent=parent, id=wx.ID_ANY, label=_("Enable auto-rendering") | ||
) | ||
self.widget.SetValue(self.mapWindowProperty) | ||
self.widget.SetToolTip(wx.ToolTip(_("Enable/disable auto-rendering"))) | ||
|
||
self.widget.Bind(wx.EVT_CHECKBOX, self._onToggleCheckBox) | ||
self._connect() | ||
|
||
@property | ||
def mapWindowProperty(self): | ||
return self._properties.autoRender | ||
|
||
@mapWindowProperty.setter | ||
def mapWindowProperty(self, value): | ||
self._properties.autoRender = value | ||
|
||
def mapWindowPropertyChanged(self): | ||
return self._properties.autoRenderChanged | ||
|
||
|
||
class ChBAlignExtent(PropertyItem): | ||
"""Checkbox to select zoom behavior. | ||
Used by BufferedWindow (through MapFrame property). | ||
See tooltip for explanation. | ||
""" | ||
|
||
def __init__(self, parent, mapWindowProperties): | ||
PropertyItem.__init__(self, mapWindowProperties) | ||
self.name = "alignExtent" | ||
self.widget = wx.CheckBox( | ||
parent=parent, | ||
id=wx.ID_ANY, | ||
label=_("Align region extent based on display size"), | ||
) | ||
self.widget.SetValue(self.mapWindowProperty) | ||
self.widget.SetToolTip( | ||
wx.ToolTip( | ||
_( | ||
"Align region extent based on display " | ||
"size from center point. " | ||
"Default value for new map displays can " | ||
"be set up in 'User GUI settings' dialog." | ||
) | ||
) | ||
) | ||
self.widget.Bind(wx.EVT_CHECKBOX, self._onToggleCheckBox) | ||
self._connect() | ||
|
||
@property | ||
def mapWindowProperty(self): | ||
return self._properties.alignExtent | ||
|
||
@mapWindowProperty.setter | ||
def mapWindowProperty(self, value): | ||
self._properties.alignExtent = value | ||
|
||
def mapWindowPropertyChanged(self): | ||
return self._properties.alignExtentChanged | ||
|
||
|
||
class ChBResolution(PropertyItem): | ||
"""Checkbox to select used display resolution.""" | ||
|
||
def __init__(self, parent, giface, mapWindowProperties): | ||
PropertyItem.__init__(self, mapWindowProperties) | ||
self.giface = giface | ||
self.name = "resolution" | ||
self.widget = wx.CheckBox( | ||
parent=parent, | ||
id=wx.ID_ANY, | ||
label=_("Constrain display resolution to computational settings"), | ||
) | ||
self.widget.SetValue(self.mapWindowProperty) | ||
self.widget.SetToolTip( | ||
wx.ToolTip( | ||
_( | ||
"Constrain display resolution " | ||
"to computational region settings. " | ||
"Default value for new map displays can " | ||
"be set up in 'User GUI settings' dialog." | ||
) | ||
) | ||
) | ||
self.widget.Bind(wx.EVT_CHECKBOX, self._onToggleCheckBox) | ||
self._connect() | ||
|
||
@property | ||
def mapWindowProperty(self): | ||
return self._properties.resolution | ||
|
||
@mapWindowProperty.setter | ||
def mapWindowProperty(self, value): | ||
self._properties.resolution = value | ||
|
||
def mapWindowPropertyChanged(self): | ||
return self._properties.resolutionChanged | ||
|
||
def _onToggleCheckBox(self, event): | ||
"""Update display when toggle display mode""" | ||
super()._onToggleCheckBox(event) | ||
|
||
# redraw map if auto-rendering is enabled | ||
if self._properties.autoRender: | ||
self.giface.updateMap.emit() | ||
|
||
|
||
class ChBShowRegion(PropertyItem): | ||
"""Checkbox to enable and disable showing of computational region.""" | ||
|
||
def __init__(self, parent, giface, mapWindowProperties): | ||
PropertyItem.__init__(self, mapWindowProperties) | ||
self.giface = giface | ||
self.name = "region" | ||
self.widget = wx.CheckBox( | ||
parent=parent, id=wx.ID_ANY, label=_("Show computational extent") | ||
) | ||
self.widget.SetValue(self.mapWindowProperty) | ||
self.widget.SetToolTip( | ||
wx.ToolTip( | ||
_( | ||
"Show/hide computational " | ||
"region extent (set with g.region). " | ||
"Display region drawn as a blue box inside the " | ||
"computational region, " | ||
"computational region inside a display region " | ||
"as a red box)." | ||
) | ||
) | ||
) | ||
self.widget.Bind(wx.EVT_CHECKBOX, self._onToggleCheckBox) | ||
self._connect() | ||
|
||
@property | ||
def mapWindowProperty(self): | ||
return self._properties.showRegion | ||
|
||
@mapWindowProperty.setter | ||
def mapWindowProperty(self, value): | ||
self._properties.showRegion = value | ||
|
||
def mapWindowPropertyChanged(self): | ||
return self._properties.showRegionChanged | ||
|
||
def _onToggleCheckBox(self, event): | ||
"""Shows/Hides extent (comp. region) in map canvas. | ||
Shows or hides according to checkbox value. | ||
""" | ||
super()._onToggleCheckBox(event) | ||
|
||
# redraw map if auto-rendering is enabled | ||
if self._properties.autoRender: | ||
self.giface.updateMap.emit(render=False) | ||
|
||
|
||
class MapDisplayPropertiesDialog(wx.Dialog): | ||
"""Map Display properties dialog""" | ||
|
||
def __init__( | ||
self, | ||
parent, | ||
giface, | ||
properties, | ||
title=_("Map Display Settings"), | ||
size=(-1, 250), | ||
style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, | ||
): | ||
wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY, title=title, style=style) | ||
|
||
self.parent = parent | ||
self.title = title | ||
self.size = size | ||
self.giface = giface | ||
self.mapWindowProperties = properties | ||
|
||
# notebook | ||
self.notebook = wx.Notebook(parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT) | ||
# create notebook pages | ||
self._createDisplayPage(parent=self.notebook) | ||
|
||
self.btnClose = Button(self, wx.ID_CLOSE) | ||
self.SetEscapeId(wx.ID_CLOSE) | ||
|
||
self._layout() | ||
|
||
def _layout(self): | ||
"""Layout window""" | ||
# sizers | ||
btnStdSizer = wx.StdDialogButtonSizer() | ||
btnStdSizer.AddButton(self.btnClose) | ||
btnStdSizer.Realize() | ||
|
||
mainSizer = wx.BoxSizer(wx.VERTICAL) | ||
mainSizer.Add(self.notebook, proportion=1, flag=wx.EXPAND | wx.ALL, border=5) | ||
mainSizer.Add(btnStdSizer, proportion=0, flag=wx.EXPAND | wx.ALL, border=5) | ||
|
||
self.SetSizer(mainSizer) | ||
self.SetMinSize(self.GetBestSize()) | ||
self.SetSize(self.size) | ||
|
||
def _createDisplayPage(self, parent): | ||
"""Create notebook page for display settings""" | ||
|
||
panel = SP.ScrolledPanel(parent=parent, id=wx.ID_ANY) | ||
panel.SetupScrolling(scroll_x=False, scroll_y=True) | ||
parent.AddPage(page=panel, text=_("General")) | ||
|
||
# General settings | ||
sizer = wx.BoxSizer(wx.VERTICAL) | ||
|
||
# Auto-rendering | ||
self.autoRendering = ChBRender(panel, self.mapWindowProperties) | ||
sizer.Add( | ||
self.autoRendering.GetWidget(), | ||
proportion=0, | ||
flag=wx.EXPAND | wx.ALL, | ||
border=3, | ||
) | ||
|
||
# Align extent to display size | ||
self.alignExtent = ChBAlignExtent(panel, self.mapWindowProperties) | ||
sizer.Add( | ||
self.alignExtent.GetWidget(), | ||
proportion=0, | ||
flag=wx.EXPAND | wx.ALL, | ||
border=3, | ||
) | ||
|
||
# Use computation resolution | ||
self.compResolution = ChBResolution( | ||
panel, self.giface, self.mapWindowProperties | ||
) | ||
sizer.Add( | ||
self.compResolution.GetWidget(), | ||
proportion=0, | ||
flag=wx.EXPAND | wx.ALL, | ||
border=3, | ||
) | ||
|
||
# Show computation extent | ||
self.showCompExtent = ChBShowRegion( | ||
panel, self.giface, self.mapWindowProperties | ||
) | ||
sizer.Add( | ||
self.showCompExtent.GetWidget(), | ||
proportion=0, | ||
flag=wx.EXPAND | wx.ALL, | ||
border=3, | ||
) | ||
|
||
panel.SetSizer(sizer) | ||
|
||
return panel |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters