Forráskód Böngészése

wxGUI: fix d.histogram - save only after rendering done

Anna Petrasova 5 éve
szülő
commit
2c17c0c79d
1 módosított fájl, 11 hozzáadás és 9 törlés
  1. 11 9
      gui/wxpython/modules/histogram.py

+ 11 - 9
gui/wxpython/modules/histogram.py

@@ -88,6 +88,8 @@ class BufferedWindow(wx.Window):
         self.Map.region = self.Map.GetRegion()
         self.Map.SetRegion()
 
+        self._finishRenderingInfo = None
+
         self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
 
     def Draw(self, pdc, img=None, drawid=None,
@@ -96,7 +98,7 @@ class BufferedWindow(wx.Window):
         """
         if drawid is None:
             if pdctype == 'image':
-                drawid = imagedict[img]
+                drawid = self.imagedict[img]
             elif pdctype == 'clear':
                 drawid is None
             else:
@@ -188,23 +190,23 @@ class BufferedWindow(wx.Window):
         file. See the wx.Windows docs for wx.Bitmap::SaveFile for the
         details
         """
-        busy = wx.BusyInfo(_("Please wait, exporting image..."),
-                           parent=self)
         wx.GetApp().Yield()
-
+        self._finishRenderingInfo = (FileName, FileType, width, height)
+        self.Map.GetRenderMgr().updateMap.connect(self._finishSaveToFile)
         self.Map.ChangeMapSize((width, height))
-        ibuffer = EmptyBitmap(max(1, width), max(1, height))
         self.Map.Render(force=True, windres=True)
+
+    def _finishSaveToFile(self):
         img = self.GetImage()
         self.Draw(self.pdc, img, drawid=99)
+        FileName, FileType, width, height = self._finishRenderingInfo
+        ibuffer = EmptyBitmap(max(1, width), max(1, height))
         dc = wx.BufferedDC(None, ibuffer)
         dc.Clear()
-        # probably does nothing, removed from wxPython 2.9
-        # self.PrepareDC(dc)
         self.pdc.DrawToDC(dc)
         ibuffer.SaveFile(FileName, FileType)
-
-        del busy
+        self.Map.GetRenderMgr().updateMap.disconnect(self._finishSaveToFile)
+        self._finishRenderingInfo = None
 
     def GetImage(self):
         """Converts files to wx.Image