diff --git a/doc/gui/wxpython/example/frame.py b/doc/gui/wxpython/example/frame.py index 39671173952..8a90c542894 100644 --- a/doc/gui/wxpython/example/frame.py +++ b/doc/gui/wxpython/example/frame.py @@ -114,13 +114,9 @@ def __init__( sb.SbCoordinates, sb.SbRegionExtent, sb.SbCompRegionExtent, - sb.SbShowRegion, - sb.SbAlignExtent, - sb.SbResolution, sb.SbDisplayGeometry, sb.SbMapScale, sb.SbGoTo, - sb.SbProjection, ] self.statusbar = self.CreateStatusbar(statusbarItems) diff --git a/gui/wxpython/core/workspace.py b/gui/wxpython/core/workspace.py index 365ace9dbf6..3e523bb152d 100644 --- a/gui/wxpython/core/workspace.py +++ b/gui/wxpython/core/workspace.py @@ -950,7 +950,7 @@ def __init__(self, lmgr, file): ) ) # projection statusbar info - if mapdisp.GetProperty("projection") and UserSettings.Get( + if mapdisp.GetProperty("useDefinedProjection") and UserSettings.Get( group="display", key="projection", subkey="proj4" ): self.indent += 4 diff --git a/gui/wxpython/gcp/mapdisplay.py b/gui/wxpython/gcp/mapdisplay.py index e7596e5e984..5d78186cad5 100644 --- a/gui/wxpython/gcp/mapdisplay.py +++ b/gui/wxpython/gcp/mapdisplay.py @@ -103,16 +103,13 @@ def __init__( sb.SbCoordinates, sb.SbRegionExtent, sb.SbCompRegionExtent, - sb.SbShowRegion, - sb.SbResolution, sb.SbDisplayGeometry, sb.SbMapScale, - sb.SbProjection, sbgcp.SbGoToGCP, sbgcp.SbRMSError, ] self.statusbar = self.CreateStatusbar(statusbarItems) - self.statusbarManager.SetMode(8) # goto GCP + self.statusbarManager.SetMode(5) # goto GCP # # Init map display (buffered DC & set default cursor) diff --git a/gui/wxpython/gcp/toolbars.py b/gui/wxpython/gcp/toolbars.py index e475e667c34..9f1cf2ffcbb 100644 --- a/gui/wxpython/gcp/toolbars.py +++ b/gui/wxpython/gcp/toolbars.py @@ -126,6 +126,12 @@ def _toolbarData(self): ("zoomback", BaseIcons["zoomBack"], self.parent.OnZoomBack), ("zoomtomap", BaseIcons["zoomExtent"], self.parent.OnZoomToMap), (None,), + ( + "mapDispSettings", + BaseIcons["mapDispSettings"], + self.parent.OnMapDisplayProperties, + ), + (None,), ("settings", icons["settings"], self.parent.OnSettings), ("help", icons["help"], self.parent.OnHelp), (None,), diff --git a/gui/wxpython/gui_core/mapdisp.py b/gui/wxpython/gui_core/mapdisp.py index d18655191df..801b979d1ff 100644 --- a/gui/wxpython/gui_core/mapdisp.py +++ b/gui/wxpython/gui_core/mapdisp.py @@ -160,17 +160,17 @@ def GetToolSwitcher(self): def SetProperty(self, name, value): """Sets property""" - if self.HasProperty("projection"): - self.statusbarManager.SetProperty(name, value) + if hasattr(self.mapWindowProperties, name): + setattr(self.mapWindowProperties, name, value) else: - self.mapWindowProperties.useDefinedProjection = value + self.statusbarManager.SetProperty(name, value) def GetProperty(self, name): """Returns property""" - if self.HasProperty("projection"): - return self.statusbarManager.GetProperty(name) + if hasattr(self.mapWindowProperties, name): + return getattr(self.mapWindowProperties, name) else: - return self.mapWindowProperties.useDefinedProjection + return self.statusbarManager.GetProperty(name) def HasProperty(self, name): """Checks whether object has property""" @@ -484,6 +484,16 @@ def OnZoomToDefault(self, event): """Set display geometry to match default region settings""" self.MapWindow.ZoomToDefault() + def OnMapDisplayProperties(self, event): + """Show Map Display Properties dialog""" + from mapdisp.properties import MapDisplayPropertiesDialog + + dlg = MapDisplayPropertiesDialog( + parent=self, mapframe=self, properties=self.mapWindowProperties + ) + dlg.CenterOnParent() + dlg.Show() + class SingleMapPanel(MapPanelBase): """Panel with one map window. diff --git a/gui/wxpython/gui_core/toolbars.py b/gui/wxpython/gui_core/toolbars.py index c7dabd19223..a6a9dabe2be 100644 --- a/gui/wxpython/gui_core/toolbars.py +++ b/gui/wxpython/gui_core/toolbars.py @@ -79,6 +79,7 @@ img="layer-raster-histogram", label=_("Create histogram with d.histogram") ), "settings": MetaIcon(img="settings", label=_("Settings")), + "mapDispSettings": MetaIcon(img="map-settings", label=_("Map Display Settings")), } diff --git a/gui/wxpython/iclass/frame.py b/gui/wxpython/iclass/frame.py index 2c2f9e1c10a..4ffdef8add5 100644 --- a/gui/wxpython/iclass/frame.py +++ b/gui/wxpython/iclass/frame.py @@ -195,13 +195,9 @@ def __init__( sb.SbCoordinates, sb.SbRegionExtent, sb.SbCompRegionExtent, - sb.SbShowRegion, - sb.SbAlignExtent, - sb.SbResolution, sb.SbDisplayGeometry, sb.SbMapScale, sb.SbGoTo, - sb.SbProjection, ] self.statusbar = self.CreateStatusbar(statusbarItems) self._addPanes() diff --git a/gui/wxpython/iclass/toolbars.py b/gui/wxpython/iclass/toolbars.py index a9caa2cbd33..b4a56711a30 100644 --- a/gui/wxpython/iclass/toolbars.py +++ b/gui/wxpython/iclass/toolbars.py @@ -112,6 +112,11 @@ def _toolbarData(self): (None,), ("zoomBack", icons["zoomBack"], self.parent.OnZoomBack), ("zoomToMap", icons["zoomExtent"], self.parent.OnZoomToMap), + ( + "mapDispSettings", + icons["mapDispSettings"], + self.parent.OnMapDisplayProperties, + ), ) ) diff --git a/gui/wxpython/image2target/ii2t_mapdisplay.py b/gui/wxpython/image2target/ii2t_mapdisplay.py index c8972242e82..236fb57588d 100644 --- a/gui/wxpython/image2target/ii2t_mapdisplay.py +++ b/gui/wxpython/image2target/ii2t_mapdisplay.py @@ -105,11 +105,8 @@ def __init__( sb.SbCoordinates, sb.SbRegionExtent, sb.SbCompRegionExtent, - sb.SbShowRegion, - sb.SbResolution, sb.SbDisplayGeometry, sb.SbMapScale, - sb.SbProjection, sbgcp.SbGoToGCP, sbgcp.SbRMSError, ] @@ -117,7 +114,7 @@ def __init__( # create statusbar and its manager self.statusbar = self.CreateStatusbar(statusbarItems) - self.statusbarManager.SetMode(8) # goto GCP + self.statusbarManager.SetMode(5) # goto GCP # # Init map display (buffered DC & set default cursor) diff --git a/gui/wxpython/image2target/ii2t_toolbars.py b/gui/wxpython/image2target/ii2t_toolbars.py index e475e667c34..9f1cf2ffcbb 100644 --- a/gui/wxpython/image2target/ii2t_toolbars.py +++ b/gui/wxpython/image2target/ii2t_toolbars.py @@ -126,6 +126,12 @@ def _toolbarData(self): ("zoomback", BaseIcons["zoomBack"], self.parent.OnZoomBack), ("zoomtomap", BaseIcons["zoomExtent"], self.parent.OnZoomToMap), (None,), + ( + "mapDispSettings", + BaseIcons["mapDispSettings"], + self.parent.OnMapDisplayProperties, + ), + (None,), ("settings", icons["settings"], self.parent.OnSettings), ("help", icons["help"], self.parent.OnHelp), (None,), diff --git a/gui/wxpython/mapdisp/frame.py b/gui/wxpython/mapdisp/frame.py index 48d85b9b1fd..c05c5626a67 100644 --- a/gui/wxpython/mapdisp/frame.py +++ b/gui/wxpython/mapdisp/frame.py @@ -1555,16 +1555,6 @@ def OnZoomMenu(self, event): self.PopupMenu(zoommenu) zoommenu.Destroy() - def OnMapDisplayProperties(self, event): - """Show Map Display Properties dialog""" - from mapdisp.properties import MapDisplayPropertiesDialog - - dlg = MapDisplayPropertiesDialog( - parent=self, giface=self._giface, properties=self.mapWindowProperties - ) - dlg.CenterOnParent() - dlg.Show() - def SetProperties( self, render=False, @@ -1579,7 +1569,7 @@ def SetProperties( if self.statusbarManager: self.statusbarManager.SetMode(mode) self.StatusbarUpdate() - self.SetProperty("projection", projection) + self.mapWindowProperties.useDefinedProjection = projection self.mapWindowProperties.showRegion = showCompExtent self.mapWindowProperties.alignExtent = alignExtent self.mapWindowProperties.resolution = constrainRes diff --git a/gui/wxpython/mapdisp/properties.py b/gui/wxpython/mapdisp/properties.py index a5888903e75..f7c4dfc5e08 100644 --- a/gui/wxpython/mapdisp/properties.py +++ b/gui/wxpython/mapdisp/properties.py @@ -140,9 +140,9 @@ def mapWindowPropertyChanged(self): class ChBResolution(PropertyItem): """Checkbox to select used display resolution.""" - def __init__(self, parent, giface, mapWindowProperties): + def __init__(self, parent, mapframe, mapWindowProperties): PropertyItem.__init__(self, mapWindowProperties) - self.giface = giface + self.mapFrame = mapframe self.name = "resolution" self.widget = wx.CheckBox( parent=parent, @@ -180,16 +180,16 @@ def _onToggleCheckBox(self, event): # redraw map if auto-rendering is enabled if self._properties.autoRender: - self.giface.updateMap.emit() + self.mapFrame.GetWindow().UpdateMap() class ChBShowRegion(PropertyItem): """Checkbox to enable and disable showing of computational region.""" - def __init__(self, parent, giface, mapWindowProperties): + def __init__(self, parent, mapframe, mapWindowProperties): PropertyItem.__init__(self, mapWindowProperties) - self.giface = giface - self.name = "region" + self.mapFrame = mapframe + self.name = "showRegion" self.widget = wx.CheckBox( parent=parent, id=wx.ID_ANY, label=_("Show computational extent") ) @@ -229,7 +229,7 @@ def _onToggleCheckBox(self, event): # redraw map if auto-rendering is enabled if self._properties.autoRender: - self.giface.updateMap.emit(render=False) + self.mapFrame.GetWindow().UpdateMap(render=False) class ChBProjection(PropertyItem): @@ -237,7 +237,7 @@ class ChBProjection(PropertyItem): def __init__(self, parent, mapWindowProperties): PropertyItem.__init__(self, mapWindowProperties) - self.name = "projection" + self.name = "useDefinedProjection" 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) @@ -283,7 +283,7 @@ class MapDisplayPropertiesDialog(wx.Dialog): def __init__( self, parent, - giface, + mapframe, properties, title=_("Map Display Settings"), size=(-1, 250), @@ -294,7 +294,7 @@ def __init__( self.parent = parent self.title = title self.size = size - self.giface = giface + self.mapframe = mapframe self.mapWindowProperties = properties # notebook @@ -353,7 +353,7 @@ def _createDisplayPage(self, parent): # Use computation resolution self.compResolution = ChBResolution( - panel, self.giface, self.mapWindowProperties + panel, self.mapframe, self.mapWindowProperties ) sizer.Add( self.compResolution.GetWidget(), @@ -364,7 +364,7 @@ def _createDisplayPage(self, parent): # Show computation extent self.showCompExtent = ChBShowRegion( - panel, self.giface, self.mapWindowProperties + panel, self.mapframe, self.mapWindowProperties ) sizer.Add( self.showCompExtent.GetWidget(), diff --git a/gui/wxpython/mapdisp/statusbar.py b/gui/wxpython/mapdisp/statusbar.py index 61c33bef796..c3186078a98 100644 --- a/gui/wxpython/mapdisp/statusbar.py +++ b/gui/wxpython/mapdisp/statusbar.py @@ -8,12 +8,8 @@ - statusbar::SbManager - statusbar::SbItem - statusbar::SbRender - - statusbar::SbShowRegion - - statusbar::SbAlignExtent - - statusbar::SbResolution - statusbar::SbMapScale - statusbar::SbGoTo - - statusbar::SbProjection - statusbar::SbTextItem - statusbar::SbDisplayGeometry - statusbar::SbCoordinates @@ -298,12 +294,6 @@ def _progressHidden(self): def OnToggleStatus(self, event): """Toggle status text""" self.Update() - if event.GetSelection() == 3 and self.HasProperty("region"): - # show computation region extent by default - self.statusbarItems["region"].SetValue(True) - # redraw map if auto-rendering is enabled - if self.mapFrame.IsAutoRendered(): - self.mapFrame.GetWindow().UpdateMap(render=False) def SetMode(self, modeIndex): """Sets current mode @@ -434,172 +424,6 @@ def Update(self): self.Show() -class SbShowRegion(SbItem): - """Checkbox to enable and disable showing of computational region. - - Requires MapFrame.OnRender, MapFrame.IsAutoRendered, MapFrame.GetWindow. - """ - - def __init__(self, mapframe, statusbar, position=0): - SbItem.__init__(self, mapframe, statusbar, position) - self.name = "region" - self.label = _("Show comp. extent") - self._properties = mapframe.mapWindowProperties - - self.widget = wx.CheckBox( - parent=self.statusbar, id=wx.ID_ANY, label=_("Show computational extent") - ) - self.widget.SetValue(self._properties.showRegion) - self.widget.Hide() - 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.OnToggleShowRegion) - self._connectShowRegion() - - def _setValue(self, value): - self.widget.SetValue(value) - - def _connectShowRegion(self): - self._properties.showRegionChanged.connect(self._setValue) - - def _disconnectShowRegion(self): - self._properties.showRegionChanged.disconnect(self._setValue) - - def OnToggleShowRegion(self, event): - """Shows/Hides extent (comp. region) in map canvas. - - Shows or hides according to checkbox value. - - .. todo:: - needs refactoring - """ - self._disconnectShowRegion() - self._properties.showRegion = self.widget.GetValue() - self._connectShowRegion() - - # redraw map if auto-rendering is enabled - if self.mapFrame.IsAutoRendered(): - self.mapFrame.GetWindow().UpdateMap(render=False) - - def SetValue(self, value): - self._disconnectShowRegion() - self._properties.showRegion = value - SbItem.SetValue(self, value) - self._connectShowRegion() - - -class SbAlignExtent(SbItem): - """Checkbox to select zoom behavior. - - Used by BufferedWindow (through MapFrame property). - See tooltip for explanation. - """ - - def __init__(self, mapframe, statusbar, position=0): - SbItem.__init__(self, mapframe, statusbar, position) - self.name = "alignExtent" - self.label = _("Display mode") - self._properties = mapframe.mapWindowProperties - - self.widget = wx.CheckBox( - parent=self.statusbar, - id=wx.ID_ANY, - label=_("Align region extent based on display size"), - ) - self.widget.SetValue(self._properties.alignExtent) - self.widget.Hide() - 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._connectAlignExtent() - self.widget.Bind(wx.EVT_CHECKBOX, self._onCheckbox) - - # TODO: these four methods are in many stitems - # some generalization? - # passing properties as stings and set/get attr would work, but it is nice? - def _setValue(self, value): - self.widget.SetValue(value) - - def _connectAlignExtent(self): - self._properties.alignExtentChanged.connect(self._setValue) - - def _disconnectAlignExtent(self): - self._properties.alignExtentChanged.disconnect(self._setValue) - - def _onCheckbox(self, event): - self._disconnectAlignExtent() - self._properties.alignExtent = self.widget.GetValue() - self._connectAlignExtent() - - -class SbResolution(SbItem): - """Checkbox to select used display resolution. - - Requires MapFrame.OnRender method. - """ - - def __init__(self, mapframe, statusbar, position=0): - SbItem.__init__(self, mapframe, statusbar, position) - self.name = "resolution" - self.label = _("Display resolution") - self._properties = self.mapFrame.mapWindowProperties - self.widget = wx.CheckBox( - parent=self.statusbar, - id=wx.ID_ANY, - label=_("Constrain display resolution to computational settings"), - ) - self.widget.SetValue(self._properties.resolution) - self.widget.Hide() - 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.OnToggleUpdateMap) - self._connectResolutionChange() - - def _setValue(self, value): - self.widget.SetValue(value) - - def _connectResolutionChange(self): - self._properties.resolutionChanged.connect(self._setValue) - - def _disconnectResolutionChange(self): - self._properties.resolutionChanged.disconnect(self._setValue) - - def OnToggleUpdateMap(self, event): - """Update display when toggle display mode""" - self._disconnectResolutionChange() - self._properties.resolution = self.widget.GetValue() - self._connectResolutionChange() - # redraw map if auto-rendering is enabled - if self.mapFrame.IsAutoRendered(): - self.mapFrame.GetWindow().UpdateMap() - - class SbMapScale(SbItem): """Editable combobox to get/set current map scale. @@ -744,7 +568,9 @@ def OnGoTo(self, event): """Go to position""" try: e, n = self.GetValue().split(";") - e, n = self.ReprojectENToMap(e, n, self.mapFrame.GetProperty("projection")) + e, n = self.ReprojectENToMap( + e, n, self.mapFrame.GetProperty("useDefinedProjection") + ) self.mapFrame.GetWindow().GoTo(e, n) self.widget.SetFocus() except ValueError: @@ -790,7 +616,7 @@ def GetCenterString(self, map): group="projection", key="statusbar", subkey="proj4" ) - if self.mapFrame.GetProperty("projection"): + if self.mapFrame.GetProperty("useDefinedProjection"): if not projection: raise SbException(_("Projection not defined (check the settings)")) else: @@ -841,52 +667,6 @@ def Update(self): self.mapFrame.StatusbarEnableLongHelp(False) -class SbProjection(SbItem): - """Checkbox to enable user defined projection (can be set in settings)""" - - def __init__(self, mapframe, statusbar, position=0): - SbItem.__init__(self, mapframe, statusbar, position) - self.name = "projection" - self.label = _("Projection") - - self.defaultLabel = _("Use defined projection") - - self.widget = wx.CheckBox( - parent=self.statusbar, id=wx.ID_ANY, label=self.defaultLabel - ) - - self.widget.SetValue(False) - - # necessary? - size = self.widget.GetSize() - self.widget.SetMinSize((size[0] + 150, size[1])) - - self.widget.Hide() - self.widget.SetToolTip( - wx.ToolTip( - _( - "Reproject coordinates displayed " - "in the statusbar. Projection can be " - "defined in GUI preferences dialog " - "(tab 'Projection')" - ) - ) - ) - - def Update(self): - self.statusbar.SetStatusText("") - epsg = UserSettings.Get(group="projection", key="statusbar", subkey="epsg") - if epsg: - label = "%s (EPSG: %s)" % (self.defaultLabel, epsg) - self.widget.SetLabel(label) - else: - self.widget.SetLabel(self.defaultLabel) - self.Show() - - # disable long help - self.mapFrame.StatusbarEnableLongHelp(False) - - class SbTextItem(SbItem): """Base class for items without widgets. @@ -966,7 +746,7 @@ def Show(self): UserSettings.Get(group="projection", key="format", subkey="precision") ) format = UserSettings.Get(group="projection", key="format", subkey="ll") - projection = self.mapFrame.GetProperty("projection") + projection = self.mapFrame.GetProperty("useDefinedProjection") try: e, n = self.mapFrame.GetWindow().GetLastEN() self._basicValue = self.ReprojectENFromMap( @@ -1049,7 +829,7 @@ def Show(self): UserSettings.Get(group="projection", key="format", subkey="precision") ) format = UserSettings.Get(group="projection", key="format", subkey="ll") - projection = self.mapFrame.GetProperty("projection") + projection = self.mapFrame.GetProperty("useDefinedProjection") region = self._getRegion() try: regionReprojected = self.ReprojectRegionFromMap( diff --git a/gui/wxpython/mapdisp/toolbars.py b/gui/wxpython/mapdisp/toolbars.py index e1145d44eb2..025b84adf85 100644 --- a/gui/wxpython/mapdisp/toolbars.py +++ b/gui/wxpython/mapdisp/toolbars.py @@ -184,8 +184,8 @@ def _toolbarData(self): ("overlay", BaseIcons["overlay"], self.OnDecoration), ("saveFile", BaseIcons["saveFile"], self.parent.SaveToFile), ( - "showMapSettings", - BaseIcons["settings"], + "mapDispSettings", + BaseIcons["mapDispSettings"], self.parent.OnMapDisplayProperties, ), ) diff --git a/gui/wxpython/mapswipe/frame.py b/gui/wxpython/mapswipe/frame.py index ecb39cc1fee..3693acee5ca 100644 --- a/gui/wxpython/mapswipe/frame.py +++ b/gui/wxpython/mapswipe/frame.py @@ -102,13 +102,9 @@ def __init__( sb.SbCoordinates, sb.SbRegionExtent, sb.SbCompRegionExtent, - sb.SbShowRegion, - sb.SbAlignExtent, - sb.SbResolution, sb.SbDisplayGeometry, sb.SbMapScale, sb.SbGoTo, - sb.SbProjection, ] self.statusbar = self.CreateStatusbar(statusbarItems) diff --git a/gui/wxpython/mapswipe/toolbars.py b/gui/wxpython/mapswipe/toolbars.py index d425310f3e1..7d2e2e679ef 100644 --- a/gui/wxpython/mapswipe/toolbars.py +++ b/gui/wxpython/mapswipe/toolbars.py @@ -71,6 +71,11 @@ def _toolbarData(self): ("zoomToMap", icons["zoomExtent"], self.parent.OnZoomToMap), (None,), ("saveFile", icons["saveFile"], self.parent.SaveToFile), + ( + "mapDispSettings", + BaseIcons["mapDispSettings"], + self.parent.OnMapDisplayProperties, + ), ) ) diff --git a/gui/wxpython/photo2image/ip2i_mapdisplay.py b/gui/wxpython/photo2image/ip2i_mapdisplay.py index f512a635f5f..ea36f09802e 100644 --- a/gui/wxpython/photo2image/ip2i_mapdisplay.py +++ b/gui/wxpython/photo2image/ip2i_mapdisplay.py @@ -99,18 +99,15 @@ def __init__( sb.SbCoordinates, sb.SbRegionExtent, sb.SbCompRegionExtent, - sb.SbShowRegion, - sb.SbResolution, sb.SbDisplayGeometry, sb.SbMapScale, - sb.SbProjection, sbgcp.SbGoToGCP, sbgcp.SbRMSError, ] # create statusbar and its manager self.statusbar = self.CreateStatusbar(statusbarItems) - self.statusbarManager.SetMode(8) # goto GCP + self.statusbarManager.SetMode(5) # goto GCP # # Init map display (buffered DC & set default cursor) diff --git a/gui/wxpython/photo2image/ip2i_toolbars.py b/gui/wxpython/photo2image/ip2i_toolbars.py index 6b403eb89f6..15697e094c6 100644 --- a/gui/wxpython/photo2image/ip2i_toolbars.py +++ b/gui/wxpython/photo2image/ip2i_toolbars.py @@ -126,6 +126,12 @@ def _toolbarData(self): ("zoomback", BaseIcons["zoomBack"], self.parent.OnZoomBack), ("zoomtomap", BaseIcons["zoomExtent"], self.parent.OnZoomToMap), (None,), + ( + "mapDispSettings", + BaseIcons["mapDispSettings"], + self.parent.OnMapDisplayProperties, + ), + (None,), ("settings", icons["settings"], self.parent.OnSettings), ("help", icons["help"], self.parent.OnHelp), (None,),