Browse Source

wxGUI: fix statusbar update

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@57108 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 11 years ago
parent
commit
2da5540499
2 changed files with 39 additions and 16 deletions
  1. 1 10
      gui/wxpython/mapdisp/frame.py
  2. 38 6
      gui/wxpython/mapdisp/statusbar.py

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

@@ -135,7 +135,7 @@ class MapFrame(SingleMapFrame):
         self.statusbarManager.Update()
         
         #
-        self.Map.updateProgress.connect(self.ProcessProgress)
+        self.Map.updateProgress.connect(self.statusbarManager.SetProgress)
 
         # init decoration objects
         self.decorations = {}
@@ -1347,12 +1347,3 @@ class MapFrame(SingleMapFrame):
         toolbar.action['id'] = vars(toolbar)["pointer"]
         toolbar.OnTool(None)
         self.OnPointer(event=None)
-
-    def ProcessProgress(self, range, value, text):
-        """!Update progress bar during rendering"""
-        bar = self.statusbarManager.GetProgressBar()
-        bar.SetRange(range)
-        bar.SetValue(value)
-        # minimalize the damage in the status bar text
-        if text:
-            self.SetStatusText(text)

+ 38 - 6
gui/wxpython/mapdisp/statusbar.py

@@ -84,7 +84,11 @@ class SbManager:
         self._postInitialized = False
         
         self.progressbar = SbProgress(self.mapFrame, self.statusbar, self)
-        
+        self.progressbar.progressShown.connect(self._progressShown)
+        self.progressbar.progressHidden.connect(self._progressHidden)
+
+        self._oldStatus = ''
+
         self._hiddenItems = {}
     
     def SetProperty(self, name, value):
@@ -271,7 +275,15 @@ class SbManager:
     def GetProgressBar(self):
         """!Returns progress bar"""
         return self.progressbar
-    
+
+    def _progressShown(self):
+        self._oldStatus = self.statusbar.GetStatusText(0)
+        print 'show:'+self._oldStatus
+
+    def _progressHidden(self):
+        self.statusbar.SetStatusText(self._oldStatus, 0)
+        print 'hide:'+self._oldStatus
+
     def OnToggleStatus(self, event):
         """!Toggle status text
         """
@@ -288,6 +300,13 @@ class SbManager:
         """!Returns current mode"""
         return self.choice.GetSelection()
 
+    def SetProgress(self, range, value, text):
+        """Update progress."""
+        self.progressbar.SetRange(range)
+        self.progressbar.SetValue(value)
+        if text:
+            self.statusbar.SetStatusText(text)
+        
 class SbItem:
     """!Base class for statusbar items.
     
@@ -969,13 +988,16 @@ class SbProgress(SbItem):
     Underlaying widget is wx.Gauge.
     """
     def __init__(self, mapframe, statusbar, sbManager, position = 0):
+        self.progressShown = Signal('SbProgress.progressShown')
+        self.progressHidden = Signal('SbProgress.progressHidden')
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'progress'
         self.sbManager = sbManager
         # on-render gauge
         self.widget = wx.Gauge(parent = self.statusbar, id = wx.ID_ANY,
                                range = 0, style = wx.GA_HORIZONTAL)
-        self.widget.Hide()
+        self.Hide()
+        
         
     def GetRange(self):
         """!Returns progress range."""
@@ -986,10 +1008,20 @@ class SbProgress(SbItem):
         if range > 0:        
             if self.GetRange() != range:
                 self.widget.SetRange(range)
-            self.widget.Show()
+            self.Show()
         else:
-            self.widget.Hide()
+            self.Hide()
     
+    def Show(self):
+        if not self.IsShown():
+            self.progressShown.emit()
+            self.widget.Show()
+
+    def Hide(self):
+        if self.IsShown():
+            self.progressHidden.emit()
+            self.widget.Hide()
+
     def IsShown(self):
         """!Is progress bar shown
         """
@@ -1000,7 +1032,7 @@ class SbProgress(SbItem):
             return
         self.widget.SetValue(value)
         if value == self.GetRange():
-            self.widget.Hide()
+            self.Hide()
 
         wx.Yield()