Pārlūkot izejas kodu

wxGUI: allow start monitor without toolbar and statusbar

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@63534 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 10 gadi atpakaļ
vecāks
revīzija
955301369f

+ 15 - 11
gui/wxpython/gui_core/mapdisp.py

@@ -276,8 +276,9 @@ class MapFrameBase(wx.Frame):
        
        
     def StatusbarUpdate(self):
     def StatusbarUpdate(self):
         """Update statusbar content"""
         """Update statusbar content"""
-        Debug.msg(5, "MapFrameBase.StatusbarUpdate()")
-        self.statusbarManager.Update()
+        if self.statusbarManager:
+            Debug.msg(5, "MapFrameBase.StatusbarUpdate()")
+            self.statusbarManager.Update()
         
         
     def IsAutoRendered(self):
     def IsAutoRendered(self):
         """Check if auto-rendering is enabled"""
         """Check if auto-rendering is enabled"""
@@ -292,12 +293,14 @@ class MapFrameBase(wx.Frame):
         """
         """
         # assuming that the first mode is coordinates
         # assuming that the first mode is coordinates
         # probably shold not be here but good solution is not available now
         # probably shold not be here but good solution is not available now
-        if self.statusbarManager.GetMode() == 0:
-            self.statusbarManager.ShowItem('coordinates')
+        if self.statusbarManager:
+            if self.statusbarManager.GetMode() == 0:
+                self.statusbarManager.ShowItem('coordinates')
         
         
     def StatusbarReposition(self):
     def StatusbarReposition(self):
         """Reposition items in statusbar"""
         """Reposition items in statusbar"""
-        self.statusbarManager.Reposition()
+        if self.statusbarManager:
+            self.statusbarManager.Reposition()
         
         
     def StatusbarEnableLongHelp(self, enable = True):
     def StatusbarEnableLongHelp(self, enable = True):
         """Enable/disable toolbars long help"""
         """Enable/disable toolbars long help"""
@@ -334,12 +337,13 @@ class MapFrameBase(wx.Frame):
     def _setUpMapWindow(self, mapWindow):
     def _setUpMapWindow(self, mapWindow):
         """Binds map windows' zoom history signals to map toolbar."""
         """Binds map windows' zoom history signals to map toolbar."""
         # enable or disable zoom history tool
         # enable or disable zoom history tool
-        mapWindow.zoomHistoryAvailable.connect(
-            lambda:
-            self.GetMapToolbar().Enable('zoomBack', enable=True))
-        mapWindow.zoomHistoryUnavailable.connect(
-            lambda:
-            self.GetMapToolbar().Enable('zoomBack', enable=False))
+        if self.GetMapToolbar():
+            mapWindow.zoomHistoryAvailable.connect(
+                lambda:
+                self.GetMapToolbar().Enable('zoomBack', enable=True))
+            mapWindow.zoomHistoryUnavailable.connect(
+                lambda:
+                self.GetMapToolbar().Enable('zoomBack', enable=False))
         mapWindow.mouseMoving.connect(self.CoordinatesChanged)
         mapWindow.mouseMoving.connect(self.CoordinatesChanged)
 
 
     def OnPointer(self, event):
     def OnPointer(self, event):

+ 49 - 38
gui/wxpython/mapdisp/frame.py

@@ -67,18 +67,20 @@ class MapFrame(SingleMapFrame):
     child double buffered drawing window.
     child double buffered drawing window.
     """
     """
     def __init__(self, parent, giface, title = _("GRASS GIS - Map display"),
     def __init__(self, parent, giface, title = _("GRASS GIS - Map display"),
-                 toolbars = ["map"], tree = None, notebook = None, lmgr = None,
+                 toolbars = ["map"], statusbar = True,
+                 tree = None, notebook = None, lmgr = None,
                  page = None, Map = None, auimgr = None, name = 'MapWindow', **kwargs):
                  page = None, Map = None, auimgr = None, name = 'MapWindow', **kwargs):
         """Main map display window with toolbars, statusbar and
         """Main map display window with toolbars, statusbar and
         2D map window, 3D map window and digitizer.
         2D map window, 3D map window and digitizer.
         
         
         :param toolbars: array of activated toolbars, e.g. ['map', 'digit']
         :param toolbars: array of activated toolbars, e.g. ['map', 'digit']
+        :param statusbar: True to add statusbar
         :param tree: reference to layer tree
         :param tree: reference to layer tree
         :param notebook: control book ID in Layer Manager
         :param notebook: control book ID in Layer Manager
         :param lmgr: Layer Manager
         :param lmgr: Layer Manager
         :param page: notebook page with layer tree
         :param page: notebook page with layer tree
         :param map: instance of render.Map
         :param map: instance of render.Map
-        :param auimgs: AUI manager
+        :param auimgr: AUI manager
         :param name: frame name
         :param name: frame name
         :param kwargs: wx.Frame attributes
         :param kwargs: wx.Frame attributes
         """
         """
@@ -119,41 +121,10 @@ class MapFrame(SingleMapFrame):
         #
         #
         # Add statusbar
         # Add statusbar
         #
         #
+        self.statusbarManager = None
+        if statusbar:
+            self.CreateStatusbar()
         
         
-        # items for choice
-        self.statusbarItems = [sb.SbCoordinates,
-                               sb.SbRegionExtent,
-                               sb.SbCompRegionExtent,
-                               sb.SbShowRegion,
-                               sb.SbAlignExtent,
-                               sb.SbResolution,
-                               sb.SbDisplayGeometry,
-                               sb.SbMapScale,
-                               sb.SbGoTo,
-                               sb.SbProjection]
-                            
-        self.statusbarItemsHiddenInNviz = (sb.SbAlignExtent,
-                                           sb.SbDisplayGeometry,
-                                           sb.SbShowRegion,
-                                           sb.SbResolution,
-                                           sb.SbMapScale)
-        
-        # create statusbar and its manager
-        statusbar = self.CreateStatusBar(number = 4, style = 0)
-        statusbar.SetStatusWidths([-5, -2, -1, -1])
-        self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
-        
-        # fill statusbar manager
-        self.statusbarManager.AddStatusbarItemsByClass(self.statusbarItems, mapframe = self, statusbar = statusbar)
-        self.statusbarManager.AddStatusbarItem(sb.SbMask(self, statusbar = statusbar, position = 2))
-        sbRender = sb.SbRender(self, statusbar = statusbar, position = 3)
-        self.statusbarManager.AddStatusbarItem(sbRender)
-        
-        self.statusbarManager.Update()
-        
-        #
-        self.Map.updateProgress.connect(self.statusbarManager.SetProgress)
-
         # init decoration objects
         # init decoration objects
         self.decorations = {}
         self.decorations = {}
         self.legend = LegendController(self.Map, self._giface)
         self.legend = LegendController(self.Map, self._giface)
@@ -196,7 +167,9 @@ class MapFrame(SingleMapFrame):
         # used by Nviz (3D display mode)
         # used by Nviz (3D display mode)
         self.MapWindow3D = None 
         self.MapWindow3D = None 
 
 
-        self.toolbars['map'].SelectDefault()
+        if 'map' in self.toolbars:
+            self.toolbars['map'].SelectDefault()
+        
         #
         #
         # Bind various events
         # Bind various events
         #
         #
@@ -233,7 +206,45 @@ class MapFrame(SingleMapFrame):
         self.measureController = None
         self.measureController = None
 
 
         self._resize()
         self._resize()
-     
+
+    def CreateStatusbar(self):
+        if self.statusbarManager:
+            return
+        
+        # items for choice
+        self.statusbarItems = [sb.SbCoordinates,
+                               sb.SbRegionExtent,
+                               sb.SbCompRegionExtent,
+                               sb.SbShowRegion,
+                               sb.SbAlignExtent,
+                               sb.SbResolution,
+                               sb.SbDisplayGeometry,
+                               sb.SbMapScale,
+                               sb.SbGoTo,
+                               sb.SbProjection]
+                            
+        self.statusbarItemsHiddenInNviz = (sb.SbAlignExtent,
+                                           sb.SbDisplayGeometry,
+                                           sb.SbShowRegion,
+                                           sb.SbResolution,
+                                           sb.SbMapScale)
+        
+        # create statusbar and its manager
+        statusbar = self.CreateStatusBar(number = 4, style = 0)
+        statusbar.SetStatusWidths([-5, -2, -1, -1])
+        self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
+        
+        # fill statusbar manager
+        self.statusbarManager.AddStatusbarItemsByClass(self.statusbarItems, mapframe = self, statusbar = statusbar)
+        self.statusbarManager.AddStatusbarItem(sb.SbMask(self, statusbar = statusbar, position = 2))
+        sbRender = sb.SbRender(self, statusbar = statusbar, position = 3)
+        self.statusbarManager.AddStatusbarItem(sbRender)
+        
+        self.statusbarManager.Update()
+        
+        #
+        self.Map.updateProgress.connect(self.statusbarManager.SetProgress)
+        
     def GetMapWindow(self):
     def GetMapWindow(self):
         return self.MapWindow
         return self.MapWindow
 
 

+ 33 - 11
gui/wxpython/mapdisp/main.py

@@ -52,6 +52,7 @@ monFile = { 'cmd' : None,
             }
             }
 monName = None
 monName = None
 monSize = list(globalvar.MAP_WINDOW_SIZE)
 monSize = list(globalvar.MAP_WINDOW_SIZE)
+monDecor = False
 
 
 class DMonMap(Map):
 class DMonMap(Map):
     def __init__(self, giface, cmdfile=None, mapfile=None):
     def __init__(self, giface, cmdfile=None, mapfile=None):
@@ -341,9 +342,15 @@ class DMonGrassInterface(StandaloneGrassInterface):
         return self._mapframe.GetProgressBar()
         return self._mapframe.GetProgressBar()
 
 
     def ShowStatusbar(self, show=True):
     def ShowStatusbar(self, show=True):
+        if not self._mapframe.statusbarManager:
+            self._mapframe.CreateStatusbar()
+        
         self._mapframe.statusbarManager.Show(show)
         self._mapframe.statusbarManager.Show(show)
 
 
     def IsStatusbarShown(self):
     def IsStatusbarShown(self):
+        if not self._mapframe.statusbarManager:
+            return False
+        
         return self._mapframe.statusbarManager.IsShown()
         return self._mapframe.statusbarManager.IsShown()
 
 
     def ShowAllToolbars(self, show=True):
     def ShowAllToolbars(self, show=True):
@@ -351,11 +358,18 @@ class DMonGrassInterface(StandaloneGrassInterface):
             action = self._mapframe.RemoveToolbar
             action = self._mapframe.RemoveToolbar
         else:
         else:
             action = self._mapframe.AddToolbar
             action = self._mapframe.AddToolbar
-        for toolbar in self._mapframe.GetToolbarNames():
+        toolbars = self._mapframe.GetToolbarNames()
+        if not toolbars:
+            toolbars.append('map')
+        for toolbar in toolbars:
             action(toolbar)
             action(toolbar)
     
     
     def AreAllToolbarsShown(self):
     def AreAllToolbarsShown(self):
-        return self._mapframe.GetMapToolbar().IsShown()
+        toolbar = self._mapframe.GetMapToolbar()
+        if toolbar is None:
+            return False
+        
+        return toolbar.IsShown()
 
 
 class DMonFrame(MapFrame):
 class DMonFrame(MapFrame):
     def OnZoomToMap(self, event):
     def OnZoomToMap(self, event):
@@ -371,26 +385,25 @@ class MapApp(wx.App):
         grass.set_raise_on_error(True)
         grass.set_raise_on_error(True)
         # actual use of StandaloneGrassInterface not yet tested
         # actual use of StandaloneGrassInterface not yet tested
         # needed for adding functionality in future
         # needed for adding functionality in future
-        giface = DMonGrassInterface(None)
+        self._giface = DMonGrassInterface(None)
 
 
         if __name__ == "__main__":
         if __name__ == "__main__":
             self.cmdTimeStamp = os.path.getmtime(monFile['cmd'])
             self.cmdTimeStamp = os.path.getmtime(monFile['cmd'])
-            self.Map = DMonMap(giface=giface, cmdfile=monFile['cmd'],
+            self.Map = DMonMap(giface=self._giface, cmdfile=monFile['cmd'],
                                mapfile = monFile['map'])
                                mapfile = monFile['map'])
         else:
         else:
             self.Map = None
             self.Map = None
 
 
         self.mapFrm = DMonFrame(parent = None, id = wx.ID_ANY, Map = self.Map,
         self.mapFrm = DMonFrame(parent = None, id = wx.ID_ANY, Map = self.Map,
-                                giface = giface, size = monSize)
+                                giface = self._giface, size = monSize, toolbars = [], statusbar = False)
         # FIXME: hack to solve dependency
         # FIXME: hack to solve dependency
-        giface._mapframe = self.mapFrm
+        self._giface._mapframe = self.mapFrm
         # self.SetTopWindow(Map)
         # self.SetTopWindow(Map)
         self.mapFrm.GetMapWindow().SetAlwaysRenderEnabled(True)
         self.mapFrm.GetMapWindow().SetAlwaysRenderEnabled(True)
         self.Map.saveToFile.connect(lambda cmd: self.mapFrm.DOutFile(cmd))
         self.Map.saveToFile.connect(lambda cmd: self.mapFrm.DOutFile(cmd))
         self.Map.dToRast.connect(lambda cmd: self.mapFrm.DToRast(cmd))
         self.Map.dToRast.connect(lambda cmd: self.mapFrm.DToRast(cmd))
         self.Map.query.connect(lambda ltype, maps: self.mapFrm.SetQueryLayersAndActivate(ltype=ltype, maps=maps))
         self.Map.query.connect(lambda ltype, maps: self.mapFrm.SetQueryLayersAndActivate(ltype=ltype, maps=maps))
-        self.mapFrm.Show()
-        
+                
         if __name__ == "__main__":
         if __name__ == "__main__":
             self.timer = wx.PyTimer(self.watcher)
             self.timer = wx.PyTimer(self.watcher)
             #check each 0.5s
             #check each 0.5s
@@ -459,12 +472,17 @@ if __name__ == "__main__":
         except ValueError:
         except ValueError:
             pass
             pass
     
     
-    if len(sys.argv) == 7:
+    if len(sys.argv) >= 7:
         try:
         try:
             monSize[1] = int(sys.argv[6])
             monSize[1] = int(sys.argv[6])
         except ValueError:
         except ValueError:
             pass
             pass
 
 
+    if len(sys.argv) == 8:
+        try:
+            monDecor = True if sys.argv[7] == "0" else False
+        except ValueError:
+            monDecor = True
     
     
     grass.verbose(_("Starting map display <%s>...") % (monName))
     grass.verbose(_("Starting map display <%s>...") % (monName))
 
 
@@ -472,8 +490,12 @@ if __name__ == "__main__":
                set = 'MONITOR_%s_PID=%d' % (monName.upper(), os.getpid()))
                set = 'MONITOR_%s_PID=%d' % (monName.upper(), os.getpid()))
     
     
     gmMap = MapApp(0)
     gmMap = MapApp(0)
-    # set title
-    gmMap.mapFrm.SetTitle(monName)
+    mapFrame = gmMap.GetMapFrame()
+    mapFrame.SetTitle(monName)
+    if monDecor:
+        mapFrame._giface.ShowAllToolbars(monDecor)
+        mapFrame._giface.ShowStatusbar(monDecor)
+    mapFrame.Show()
     
     
     gmMap.MainLoop()
     gmMap.MainLoop()