瀏覽代碼

wxGUI: allow to hide/show toolbars and statusbar in map display

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@63424 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 10 年之前
父節點
當前提交
d85c64db71

+ 16 - 0
gui/wxpython/lmgr/giface.py

@@ -194,7 +194,23 @@ class LayerManagerGrassInterface(object):
 
     def UpdateCmdHistory(self, cmd):
         self.lmgr.goutput.GetPrompt().UpdateCmdHistory(cmd)
+        
+    def ShowStatusbar(self, show=True):
+        self.lmgr.GetMapDisplay().statusbarManager.Show(show)
 
+    def IsStatusbarShown(self):
+        return self.lmgr.GetMapDisplay().statusbarManager.IsShown()
+
+    def ShowAllToolbars(self, show=True):
+        if not show: # hide
+            action = self.lmgr.GetMapDisplay().RemoveToolbar
+        else:
+            action = self.lmgr.GetMapDisplay().AddToolbar
+        for toolbar in self.lmgr.GetMapDisplay().GetToolbarNames():
+            action(toolbar)
+            
+    def AreAllToolbarsShown(self):
+        return self.lmgr.GetMapDisplay().GetMapToolbar().IsShown()
 
 class LayerManagerGrassInterfaceForMapDisplay(object):
     """Provides reference only to the given layer list (according to tree),

+ 19 - 14
gui/wxpython/mapdisp/frame.py

@@ -298,9 +298,10 @@ class MapFrame(SingleMapFrame):
         elif self._mgr.GetPane('3d').IsShown():
             self._mgr.GetPane('3d').Hide()
         self._mgr.GetPane('vdigit').Show()
-        self.toolbars['vdigit'] = VDigitToolbar(parent=self, toolSwitcher=self._toolSwitcher,
-                                                MapWindow = self.MapWindow,
-                                                digitClass=VDigit, giface=self._giface)
+        if 'vdigit' not in self.toolbars:
+            self.toolbars['vdigit'] = VDigitToolbar(parent=self, toolSwitcher=self._toolSwitcher,
+                                                    MapWindow = self.MapWindow,
+                                                    digitClass=VDigit, giface=self._giface)
         self.MapWindowVDigit.SetToolbar(self.toolbars['vdigit'])
         
         self._mgr.AddPane(self.toolbars['vdigit'],
@@ -463,7 +464,8 @@ class MapFrame(SingleMapFrame):
         """
         # default toolbar
         if name == "map":
-            self.toolbars['map'] = MapToolbar(self, toolSwitcher=self._toolSwitcher)
+            if 'map' not in self.toolbars:
+                self.toolbars['map'] = MapToolbar(self, toolSwitcher=self._toolSwitcher)
             
             self._mgr.AddPane(self.toolbars['map'],
                               wx.aui.AuiPaneInfo().
@@ -484,20 +486,19 @@ class MapFrame(SingleMapFrame):
          
         self._mgr.Update()
         
-    def RemoveToolbar (self, name):
+    def RemoveToolbar (self, name, destroy=False):
         """Removes defined toolbar from the window
 
-        .. todo::
-            Only hide, activate by calling AddToolbar()
+        :param name toolbar to remove
+        :param destroy True to destroy otherwise toolbar is only hidden
         """
-        # cannot hide main toolbar
-        if name == "map":
-            return
-        
         self._mgr.DetachPane(self.toolbars[name])
         self._toolSwitcher.RemoveToolbarFromGroup('mouseUse', self.toolbars[name])
-        self.toolbars[name].Destroy()
-        self.toolbars.pop(name)
+        if destroy:
+            self.toolbars[name].Destroy()
+            self.toolbars.pop(name)
+        else:
+            self.toolbars[name].Hide()
         
         if name == 'vdigit':
             self._mgr.GetPane('vdigit').Hide()
@@ -1412,8 +1413,12 @@ class MapFrame(SingleMapFrame):
 
     def GetMapToolbar(self):
         """Returns toolbar with zooming tools"""
-        return self.toolbars['map']
+        return self.toolbars['map'] if 'map' in self.toolbars else None
 
+    def GetToolbarNames(self):
+        """Return toolbar names"""
+        return self.toolbars.keys()
+    
     def OnVNet(self, event):
         """Dialog for v.net* modules 
         """

+ 17 - 1
gui/wxpython/mapdisp/main.py

@@ -327,7 +327,7 @@ class DMonGrassInterface(StandaloneGrassInterface):
     def __init__(self, mapframe):
         StandaloneGrassInterface.__init__(self)
         self._mapframe = mapframe
-
+        
     def GetLayerList(self):
         return LayerList(self._mapframe.GetMap(), giface=self)
 
@@ -337,6 +337,22 @@ class DMonGrassInterface(StandaloneGrassInterface):
     def GetProgress(self):
         return self._mapframe.GetProgressBar()
 
+    def ShowStatusbar(self, show=True):
+        self._mapframe.statusbarManager.Show(show)
+
+    def IsStatusbarShown(self):
+        return self._mapframe.statusbarManager.IsShown()
+
+    def ShowAllToolbars(self, show=True):
+        if not show: # hide
+            action = self._mapframe.RemoveToolbar
+        else:
+            action = self._mapframe.AddToolbar
+        for toolbar in self._mapframe.GetToolbarNames():
+            action(toolbar)
+    
+    def AreAllToolbarsShown(self):
+        return self._mapframe.GetMapToolbar().IsShown()
 
 class DMonFrame(MapFrame):
     def OnZoomToMap(self, event):

+ 9 - 1
gui/wxpython/mapdisp/statusbar.py

@@ -319,7 +319,15 @@ class SbManager:
         self.progressbar.SetValue(value)
         if text:
             self.statusbar.SetStatusText(text)
-        
+
+    def Show(self, show=True):
+        """Show/hide statusbar"""
+        self.statusbar.Show(show)
+
+    def IsShown(self):
+        """Check if statusbar is shown"""
+        return self.statusbar.IsShown()
+
 class SbItem:
     """Base class for statusbar items.
     

+ 21 - 0
gui/wxpython/mapwin/buffered.py

@@ -232,10 +232,23 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             self.popupCopyCoordinates = wx.NewId()
             self.Bind(wx.EVT_MENU, self.OnCopyCoordinates, id = self.popupCopyCoordinates)
         menu.Append(self.popupCopyCoordinates, _("Copy coordinates to clipboard"))
+        menu.AppendSeparator()
+        if not hasattr(self, "popupShowAllToolbars"):
+            self.popupShowAllToolbars = wx.NewId()
+            self.Bind(wx.EVT_MENU, self.OnShowAllToolbars, id = self.popupShowAllToolbars)
+        menu.Append(self.popupShowAllToolbars, _("Hide all toolbars") if self._giface.AreAllToolbarsShown() else _("Show all toolbars"))
+        if not hasattr(self, "popupShowStatusbar"):
+            self.popupShowStatusbar = wx.NewId()
+            self.Bind(wx.EVT_MENU, self.OnShowStatusbar, id = self.popupShowStatusbar)
+        menu.Append(self.popupShowStatusbar, _("Hide statusbar") if self._giface.IsStatusbarShown() else _("Show statusbar"))
 
         pos = self.ScreenToClient(event.GetPosition())
         idlist = self.pdc.FindObjects(pos[0], pos[1], self.hitradius)
+        separator = True
         if idlist and idlist[0] in (0, 1, 2):  # legend, scale bar, north arrow
+            if separator:
+                menu.AppendSeparator()
+                separator = False
             self._hide = wx.NewId()
             self.Bind(wx.EVT_MENU,
                       lambda evt: self.overlayHidden.emit(overlayId=idlist[0]),
@@ -1542,6 +1555,14 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             wx.TheClipboard.SetData(do)
             wx.TheClipboard.Close()
 
+    def OnShowStatusbar(self, event):
+        """Show/hide statusbar"""
+        self._giface.ShowStatusbar(not self._giface.IsStatusbarShown())
+
+    def OnShowAllToolbars(self, event):
+        """Show/hide all toolbars"""
+        self._giface.ShowAllToolbars(not self._giface.AreAllToolbarsShown())
+
     def ClearLines(self, pdc = None):
         """Clears temporary drawn lines from PseudoDC
         """