浏览代码

wxGUI: fix trac https://trac.osgeo.org/grass/ticket/452 and https://trac.osgeo.org/grass/ticket/453

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@35498 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 16 年之前
父节点
当前提交
015d25f054
共有 2 个文件被更改,包括 77 次插入3 次删除
  1. 14 0
      gui/wxpython/gui_modules/preferences.py
  2. 63 3
      gui/wxpython/wxgui.py

+ 14 - 0
gui/wxpython/gui_modules/preferences.py

@@ -79,6 +79,10 @@ class Settings:
                 'askOnRemoveLayer' : {
                     'enabled' : True
                     },
+                # ask when quiting wxGUI or closing display
+                'askOnQuit' : {
+                    'enabled' : True
+                    },
                 },
             #
             # display
@@ -934,6 +938,16 @@ class PreferencesDialog(wx.Dialog):
         gridSizer.Add(item=askOnRemoveLayer,
                       pos=(row, 0), span=(1, 2))
 
+        row += 1
+        askOnQuit = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                label=_("Ask when quiting wxGUI or closing display"),
+                                name='IsChecked')
+        askOnQuit.SetValue(self.settings.Get(group='manager', key='askOnQuit', subkey='enabled'))
+        self.winId['manager:askOnQuit:enabled'] = askOnQuit.GetId()
+
+        gridSizer.Add(item=askOnQuit,
+                      pos=(row, 0), span=(1, 2))
+        
         sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
         border.Add(item=sizer, proportion=0, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
 

+ 63 - 3
gui/wxpython/wxgui.py

@@ -407,9 +407,38 @@ class GMFrame(wx.Frame):
         Page of notebook closed
         Also close associated map display
         """
-
+        if UserSettings.Get(group='manager', key='askOnQuit', subkey='enabled'):
+            maptree = self.curr_page.maptree
+            
+            if self.workspaceFile:
+                message = _("Do you want to save changes in the workspace?")
+            else:
+                message = _("Do you want to store current settings "
+                            "to workspace file?")
+            
+            # ask user to save current settings
+            if maptree.GetCount() > 0:
+                dlg = wx.MessageDialog(self,
+                                       message=_("Do you want to close display %d?\n\n%s") % \
+                                           (self.curr_pagenum + 1, message),
+                                       caption=_("Close display"),
+                                       style=wx.YES_NO | wx.YES_DEFAULT |
+                                       wx.CANCEL | wx.ICON_QUESTION | wx.CENTRE)
+                ret = dlg.ShowModal()
+                if ret == wx.ID_YES:
+                    if not self.workspaceFile:
+                        self.OnWorkspaceSaveAs()
+                    else:
+                        self.SaveToWorkspaceFile(self.workspaceFile)
+                elif ret == wx.ID_CANCEL:
+                    event.Veto()
+                    dlg.Destroy()
+                    return
+                dlg.Destroy()
+        
         self.gm_cb.GetPage(event.GetSelection()).maptree.Map.Clean()
         self.gm_cb.GetPage(event.GetSelection()).maptree.Close(True)
+        
         event.Skip()
 
     def OnRunCmd(self, event):
@@ -1410,13 +1439,44 @@ class GMFrame(wx.Frame):
         
     def OnCloseWindow(self, event):
         """Cleanup when wxgui.py is quit"""
+        if UserSettings.Get(group='manager', key='askOnQuit', subkey='enabled'):
+            maptree = self.curr_page.maptree
+            
+            if self.workspaceFile:
+                message = _("Do you want to save changes in the workspace?")
+            else:
+                message = _("Do you want to store current settings "
+                            "to workspace file?")
+            
+            # ask user to save current settings
+            if maptree.GetCount() > 0:
+                dlg = wx.MessageDialog(self,
+                                       message=message,
+                                       caption=_("Quit GRASS GUI"),
+                                       style=wx.YES_NO | wx.YES_DEFAULT |
+                                       wx.CANCEL | wx.ICON_QUESTION | wx.CENTRE)
+                ret = dlg.ShowModal()
+                if ret == wx.ID_YES:
+                    if not self.workspaceFile:
+                        self.OnWorkspaceSaveAs()
+                    else:
+                        self.SaveToWorkspaceFile(self.workspaceFile)
+                elif ret == wx.ID_CANCEL:
+                    event.Veto()
+                    dlg.Destroy()
+                    return
+                dlg.Destroy()
+        
+        # don't ask any more...
+        UserSettings.Set(group = 'manager', key = 'askOnQuit', subkey = 'enabled',
+                         value = False)
         for page in range(self.gm_cb.GetPageCount()):
-            self.gm_cb.GetPage(page).maptree.mapdisplay.OnCloseWindow(event)
+            self.gm_cb.GetPage(0).maptree.mapdisplay.OnCloseWindow(event)
         self.gm_cb.DeleteAllPages()
         # self.DestroyChildren()
         self._auimgr.UnInit()
         self.Destroy()
-
+        
     def MsgNoLayerSelected(self):
         """Show dialog message 'No layer selected'"""
         wx.MessageBox(parent=self,