[GRASS-SVN] r45569 - grass/trunk/gui/wxpython/gui_modules
svn_grass at osgeo.org
svn_grass at osgeo.org
Sat Mar 5 10:54:49 EST 2011
Author: martinl
Date: 2011-03-05 07:54:49 -0800 (Sat, 05 Mar 2011)
New Revision: 45569
Modified:
grass/trunk/gui/wxpython/gui_modules/mapdisp.py
Log:
wxGUI: fix error when exiting vector digitizer
Modified: grass/trunk/gui/wxpython/gui_modules/mapdisp.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/mapdisp.py 2011-03-05 15:40:14 UTC (rev 45568)
+++ grass/trunk/gui/wxpython/gui_modules/mapdisp.py 2011-03-05 15:54:49 UTC (rev 45569)
@@ -253,7 +253,7 @@
#
# initialize region values
#
- self.__InitDisplay()
+ self._initDisplay()
#
# Bind various events
@@ -295,6 +295,136 @@
self.decorationDialog = None # decoration/overlays
+ def _addToolbarVDigit(self):
+ """!Add vector digitizer toolbar
+ """
+ from vdigit import haveVDigit
+
+ if not haveVDigit:
+ from vdigit import errorMsg
+ msg = _("Unable to start wxGUI vector digitizer.\nDo you want to start "
+ "TCL/TK digitizer (v.digit) instead?\n\n"
+ "Details: %s" % errorMsg)
+
+ self.toolbars['map'].combo.SetValue(_("2D view"))
+ dlg = wx.MessageDialog(parent = self,
+ message = msg,
+ caption=_("Vector digitizer failed"),
+ style = wx.YES_NO | wx.CENTRE)
+ if dlg.ShowModal() == wx.ID_YES:
+ mapName = self.tree.GetPyData(self.tree.layer_selected)[0]['maplayer'].GetName()
+ self._layerManager.goutput.RunCmd(['v.digit', 'map=%s' % mapName],
+ switchPage=False)
+ dlg.Destroy()
+
+ self.toolbars['map'].combo.SetValue(_("2D view"))
+ return
+
+ if self._layerManager:
+ log = self._layerManager.goutput
+ else:
+ log = None
+
+ if not self.MapWindowVDigit:
+ from mapdisp_vdigit import VDigitWindow
+ self.MapWindowVDigit = VDigitWindow(self, id = wx.ID_ANY,
+ Map = self.Map, tree = self.tree,
+ lmgr = self._layerManager)
+ self.MapWindowVDigit.Show()
+
+ self.MapWindow = self.MapWindowVDigit
+
+ self._mgr.DetachPane(self.MapWindow2D)
+ self.MapWindow2D.Hide()
+
+ self.toolbars['vdigit'] = toolbars.VDigitToolbar(parent = self, mapcontent = self.Map,
+ layerTree = self.tree,
+ log = log)
+ self.MapWindowVDigit.SetToolbar(self.toolbars['vdigit'])
+
+ self._mgr.AddPane(self.MapWindowVDigit, wx.aui.AuiPaneInfo().CentrePane().
+ Dockable(False).BestSize((-1,-1)).
+ CloseButton(False).DestroyOnClose(True).
+ Layer(0))
+ self._mgr.AddPane(self.toolbars['vdigit'],
+ wx.aui.AuiPaneInfo().
+ Name("vdigittoolbar").Caption(_("Vector digitizer toolbar")).
+ ToolbarPane().Top().Row(1).
+ LeftDockable(False).RightDockable(False).
+ BottomDockable(False).TopDockable(True).
+ CloseButton(False).Layer(2).
+ BestSize((self.toolbars['vdigit'].GetSize())))
+ # change mouse to draw digitized line
+ self.MapWindow.mouse['box'] = "point"
+ self.MapWindow.zoomtype = 0
+ self.MapWindow.pen = wx.Pen(colour = 'red', width = 2, style = wx.SOLID)
+ self.MapWindow.polypen = wx.Pen(colour = 'green', width = 2, style = wx.SOLID)
+
+ def _addToolbarNviz(self):
+ """!Add 3D view mode toolbar
+ """
+ import nviz
+
+ # check for GLCanvas and OpenGL
+ if not nviz.haveNviz:
+ self.toolbars['map'].combo.SetValue (_("2D view"))
+ wx.MessageBox(parent = self,
+ message = _("Unable to switch to 3D display mode.\nThe Nviz python extension "
+ "was not found or loaded properly.\n"
+ "Switching back to 2D display mode.\n\nDetails: %s" % nviz.errorMsg),
+ caption = _("Error"),
+ style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+ return
+
+ # add Nviz toolbar and disable 2D display mode tools
+ self.toolbars['nviz'] = toolbars.NvizToolbar(self, self.Map)
+ self.toolbars['map'].Enable2D(False)
+
+ # update status bar
+ self.statusbarWin['toggle'].Enable(False)
+
+ # erase map window
+ self.MapWindow.EraseMap()
+
+ self._layerManager.goutput.WriteCmdLog(_("Starting 3D view mode..."))
+ self.statusbar.SetStatusText(_("Please wait, loading data..."), 0)
+
+ # create GL window & NVIZ toolbar
+ if not self.MapWindow3D:
+ self.MapWindow3D = nviz.GLWindow(self, id = wx.ID_ANY,
+ Map = self.Map, tree = self.tree, lmgr = self._layerManager)
+ self.MapWindow = self.MapWindow3D
+ self.MapWindow.SetCursor(self.cursors["default"])
+
+ # add Nviz notebookpage
+ self._layerManager.AddNviz()
+
+ self.MapWindow3D.OnPaint(None) # -> LoadData
+ self.MapWindow3D.Show()
+ self.MapWindow3D.UpdateView(None)
+ else:
+ self.MapWindow = self.MapWindow3D
+ # add Nviz notebookpage
+ self._layerManager.AddNviz()
+
+ # switch from MapWindow to MapWindowGL
+ # add nviz toolbar
+ self._mgr.DetachPane(self.MapWindow2D)
+ self.MapWindow2D.Hide()
+ self._mgr.AddPane(self.MapWindow3D, wx.aui.AuiPaneInfo().CentrePane().
+ Dockable(False).BestSize((-1,-1)).
+ CloseButton(False).DestroyOnClose(True).
+ Layer(0))
+ self._mgr.AddPane(self.toolbars['nviz'],
+ wx.aui.AuiPaneInfo().
+ Name("nviztoolbar").Caption(_("3D view toolbar")).
+ ToolbarPane().Top().Row(1).
+ LeftDockable(False).RightDockable(False).
+ BottomDockable(False).TopDockable(True).
+ CloseButton(False).Layer(2))
+
+ self.SetStatusText("", 0)
+
def AddToolbar(self, name):
"""!Add defined toolbar to the window
@@ -320,71 +450,12 @@
# vector digitizer
elif name == "vdigit":
- from vdigit import haveVDigit
-
- if not haveVDigit:
- from vdigit import errorMsg
- msg = _("Unable to start wxGUI vector digitizer.\nDo you want to start "
- "TCL/TK digitizer (v.digit) instead?\n\n"
- "Details: %s" % errorMsg)
-
- self.toolbars['map'].combo.SetValue(_("2D view"))
- dlg = wx.MessageDialog(parent = self,
- message = msg,
- caption=_("Vector digitizer failed"),
- style = wx.YES_NO | wx.CENTRE)
- if dlg.ShowModal() == wx.ID_YES:
- self.lmgr.goutput.RunCmd(['v.digit', 'map=%s' % maplayer.GetName()],
- switchPage=False)
- dlg.Destroy()
-
- self.toolbars['map'].combo.SetValue (_("2D view"))
- return
-
- if self._layerManager:
- log = self._layerManager.goutput
- else:
- log = None
-
- if not self.MapWindowVDigit:
- from mapdisp_vdigit import VDigitWindow
- self.MapWindowVDigit = VDigitWindow(self, id = wx.ID_ANY,
- Map = self.Map, tree = self.tree,
- lmgr = self._layerManager)
- self.MapWindowVDigit.Show()
-
- self.MapWindow = self.MapWindowVDigit
-
- self._mgr.DetachPane(self.MapWindow2D)
- self.MapWindow2D.Hide()
-
- self.toolbars['vdigit'] = toolbars.VDigitToolbar(parent = self, mapcontent = self.Map,
- layerTree = self.tree,
- log = log)
- self.MapWindowVDigit.SetToolbar(self.toolbars['vdigit'])
-
- self._mgr.AddPane(self.MapWindowVDigit, wx.aui.AuiPaneInfo().CentrePane().
- Dockable(False).BestSize((-1,-1)).
- CloseButton(False).DestroyOnClose(True).
- Layer(0))
- self._mgr.AddPane(self.toolbars['vdigit'],
- wx.aui.AuiPaneInfo().
- Name("vdigittoolbar").Caption(_("Vector digitizer toolbar")).
- ToolbarPane().Top().Row(1).
- LeftDockable(False).RightDockable(False).
- BottomDockable(False).TopDockable(True).
- CloseButton(False).Layer(2).
- BestSize((self.toolbars['vdigit'].GetSize())))
-
- # change mouse to draw digitized line
- self.MapWindow.mouse['box'] = "point"
- self.MapWindow.zoomtype = 0
- self.MapWindow.pen = wx.Pen(colour = 'red', width = 2, style = wx.SOLID)
- self.MapWindow.polypen = wx.Pen(colour = 'green', width = 2, style = wx.SOLID)
+ self._addToolbarVDigit()
+
# georectifier
elif name == "georect":
self.toolbars['georect'] = toolbars.GRToolbar(self, self.Map)
-
+
self._mgr.AddPane(self.toolbars['georect'],
wx.aui.AuiPaneInfo().
Name("georecttoolbar").Caption(_("Georectification toolbar")).
@@ -392,93 +463,39 @@
LeftDockable(False).RightDockable(False).
BottomDockable(False).TopDockable(True).
CloseButton(False).Layer(2))
+
# nviz
elif name == "nviz":
- import nviz
-
- # check for GLCanvas and OpenGL
- if not nviz.haveNviz:
- self.toolbars['map'].combo.SetValue (_("2D view"))
- wx.MessageBox(parent = self,
- message = _("Unable to switch to 3D display mode.\nThe Nviz python extension "
- "was not found or loaded properly.\n"
- "Switching back to 2D display mode.\n\nDetails: %s" % nviz.errorMsg),
- caption = _("Error"),
- style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
- return
-
- # add Nviz toolbar and disable 2D display mode tools
- self.toolbars['nviz'] = toolbars.NvizToolbar(self, self.Map)
- self.toolbars['map'].Enable2D(False)
-
- # update status bar
- self.statusbarWin['toggle'].Enable(False)
-
- # erase map window
- self.MapWindow.EraseMap()
-
- self._layerManager.goutput.WriteCmdLog(_("Starting 3D view mode..."))
- self.statusbar.SetStatusText(_("Please wait, loading data..."), 0)
-
- # create GL window & NVIZ toolbar
- if not self.MapWindow3D:
- self.MapWindow3D = nviz.GLWindow(self, id = wx.ID_ANY,
- Map = self.Map, tree = self.tree, lmgr = self._layerManager)
- self.MapWindow = self.MapWindow3D
- self.MapWindow.SetCursor(self.cursors["default"])
-
- # add Nviz notebookpage
- self._layerManager.AddNviz()
-
- self.MapWindow3D.DoPaint() # -> LoadData
- self.MapWindow3D.Show()
- self.MapWindow3D.UpdateView(None)
- else:
- self.MapWindow = self.MapWindow3D
- # add Nviz notebookpage
- self._layerManager.AddNviz()
-
- # switch from MapWindow to MapWindowGL
- # add nviz toolbar
- self._mgr.DetachPane(self.MapWindow2D)
- self.MapWindow2D.Hide()
- self._mgr.AddPane(self.MapWindow3D, wx.aui.AuiPaneInfo().CentrePane().
- Dockable(False).BestSize((-1,-1)).
- CloseButton(False).DestroyOnClose(True).
- Layer(0))
- self._mgr.AddPane(self.toolbars['nviz'],
- wx.aui.AuiPaneInfo().
- Name("nviztoolbar").Caption(_("3D view toolbar")).
- ToolbarPane().Top().Row(1).
- LeftDockable(False).RightDockable(False).
- BottomDockable(False).TopDockable(True).
- CloseButton(False).Layer(2))
-
- self.SetStatusText("", 0)
-
+ self._addToolbarNviz()
+
self._mgr.Update()
-
+
def RemoveToolbar (self, name):
- """!Removes toolbar from the window
+ """!Removes defined toolbar from the window
@todo Only hide, activate by calling AddToolbar()
"""
# cannot hide main toolbar
if name == "map":
return
- elif name == "vdigit":
- # TODO: not destroy only hide
- self._mgr.DetachPane(self.toolbars['vdigit'])
- self.toolbars['vdigit'].Destroy()
- else:
- self._mgr.DetachPane (self.toolbars[name])
- self.toolbars[name].Destroy()
-
+
+ self._mgr.DetachPane(self.toolbars[name])
+ self.toolbars[name].Destroy()
self.toolbars[name] = None
-
- if name == 'nviz':
+
+ if name == 'vdigit':
+ self._mgr.DetachPane(self.MapWindowVDigit)
+ self.MapWindowVDigit.Hide()
+ self.MapWindow2D.Show()
+ self._mgr.AddPane(self.MapWindow2D, wx.aui.AuiPaneInfo().CentrePane().
+ Dockable(False).BestSize((-1,-1)).
+ CloseButton(False).DestroyOnClose(True).
+ Layer(0))
+ self.MapWindow = self.MapWindow2D
+
+ elif name == 'nviz':
# unload data
- # self.MapWindow3D.Reset()
+ # self.MapWindow3D.Reset()
# switch from MapWindowGL to MapWindow
self._mgr.DetachPane(self.MapWindow3D)
self.MapWindow3D.Hide()
@@ -492,28 +509,26 @@
self._layerManager.RemoveNviz()
self.MapWindow.UpdateMap()
-
- self.toolbars['map'].combo.SetValue (_("2D view"))
+
+ self.toolbars['map'].combo.SetValue(_("2D view"))
self.toolbars['map'].Enable2D(True)
self.statusbarWin['toggle'].Enable(True)
-
+
self._mgr.Update()
- def __InitDisplay(self):
+ def _initDisplay(self):
+ """!Initialize map display, set dimensions and map region
"""
- Initialize map display, set dimensions and map region
- """
self.width, self.height = self.GetClientSize()
-
- Debug.msg(2, "MapFrame.__InitDisplay():")
+
+ Debug.msg(2, "MapFrame._initDisplay():")
self.Map.ChangeMapSize(self.GetClientSize())
self.Map.region = self.Map.GetRegion() # g.region -upgc
# self.Map.SetRegion() # adjust region to match display window
def OnUpdateProgress(self, event):
+ """!Update progress bar info
"""
- Update progress bar info
- """
self.statusbarWin['progress'].SetValue(event.value)
event.Skip()
More information about the grass-commit
mailing list