[GRASS-SVN] r32330 - grass/branches/develbranch_6/gui/wxpython/gui_modules

svn_grass at osgeo.org svn_grass at osgeo.org
Sun Jul 27 06:59:14 EDT 2008


Author: martinl
Date: 2008-07-27 06:59:14 -0400 (Sun, 27 Jul 2008)
New Revision: 32330

Modified:
   grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py
   grass/branches/develbranch_6/gui/wxpython/gui_modules/preferences.py
Log:
wxGUI/atm: fix trac #235 (edits in the table are not saved)
[merged from trunk, r32329]


Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py	2008-07-27 10:57:39 UTC (rev 32329)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py	2008-07-27 10:59:14 UTC (rev 32330)
@@ -28,13 +28,14 @@
 for details.
 
 @author Jachym Cepicky <jachym.cepicky gmail.com>
-Martin Landa <landa.martin gmail.com>
+ at author Martin Landa <landa.martin gmail.com>
 """
 
 import sys
 import os
 import locale
 import tempfile
+import copy
 
 ### i18N
 import gettext
@@ -87,7 +88,6 @@
         self.layer   = layer
 
         self.columns              = {} # <- LoadData()
-        self.itemCatsMap          = {} # <- LoadData() (first call)
 
         # self.selectedCats         = []
         # self.lastTurnSelectedCats = [] # just temporary, for comparation
@@ -153,6 +153,7 @@
         # setting the numbers of items = number of elements in the dictionary
         self.itemDataMap  = {}
         self.itemIndexMap = []
+        self.itemCatsMap  = {}
 
         self.DeleteAllItems()
 
@@ -172,14 +173,11 @@
         else:
             columnNames = self.mapDBInfo.GetColumns(tableName)
 
-        if len(self.itemCatsMap) > 0:
+        try:
+            # for maps connected via v.external
+            keyId = columnNames.index(keyColumn)
+        except:
             keyId = -1
-        else:
-            try:
-                # for maps connected via v.external
-                keyId = columnNames.index(keyColumn)
-            except:
-                keyId = -1
 
         i = 0
         info = wx.ListItem()
@@ -481,12 +479,9 @@
         #
         # buttons
         #
-        # self.btnApply      = wx.Button(parent=self.panel, id=wx.ID_APPLY)
         self.btnQuit       = wx.Button(parent=self.panel, id=wx.ID_EXIT)
-        # self.btn_unselect = wx.Button(self, -1, "Unselect")
 
         # events
-        # self.btnApply.Bind(wx.EVT_BUTTON,           self.OnApply)
         self.btnQuit.Bind(wx.EVT_BUTTON,            self.OnCloseWindow)
         self.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnLayerPageChanged, self.browsePage)
         self.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnLayerPageChanged, self.manageTablePage)
@@ -567,6 +562,7 @@
 
             # sql statement box
             btnApply = wx.Button(parent=panel, id=wx.ID_APPLY)
+            btnApply.SetToolTipString(_("Apply SELECT statement and reload data records"))
             btnApply.Bind(wx.EVT_BUTTON, self.OnApplySqlStatement)
             btnSqlBuilder = wx.Button(parent=panel, id=wx.ID_ANY, label=_("SQL Builder"))
             btnSqlBuilder.Bind(wx.EVT_BUTTON, self.OnBuilder)
@@ -958,25 +954,75 @@
         table    = self.mapDBInfo.layers[self.layer]["table"]
         key      = self.mapDBInfo.layers[self.layer]["key"]
 
+        indeces = []
+        # collect SQL statements
         while item != -1:
-            # list.DeleteItem(item)
-            cat = int(list.GetItemText(item)) # FIXME
+            index = list.itemIndexMap[item]
+            indeces.append(index)
+
+            cat = list.itemCatsMap[index]
             
             self.listOfSQLStatements.append('DELETE FROM %s WHERE %s=%d' % \
                                                 (table, key, cat))
 
-            index = list.itemIndexMap[item]
-            del list.itemIndexMap[item]
-            del list.itemDataMap[index]
-            list.SetItemCount(list.GetItemCount()-1)
+            item = list.GetNextSelected(item)
+
+        if UserSettings.Get(group='atm', key='askOnDeleteRec', subkey='enabled'):
+            deleteDialog = wx.MessageBox(parent=self,
+                                         message=_("Selected data records (%d) will permanently deleted "
+                                                   "from table. Do you want to delete them?") % \
+                                             (len(self.listOfSQLStatements)),
+                                         caption=_("Delete records"),
+                                         style=wx.YES_NO | wx.CENTRE)
+            if deleteDialog != wx.YES:
+                self.listOfSQLStatements = []
+                return
+
+        # restore maps
+        i = 0
+        indexTemp = copy.copy(list.itemIndexMap)
+        list.itemIndexMap = []
+        dataTemp = copy.deepcopy(list.itemDataMap)
+        list.itemDataMap = {}
+        catsTemp = copy.deepcopy(list.itemCatsMap)
+        list.itemCatsMap = {}
+
+        i = 0
+        for index in indexTemp:
+            if index in indeces:
+                continue
+            list.itemIndexMap.append(i)
+            list.itemDataMap[i] = dataTemp[index]
+            list.itemCatsMap[i] = catsTemp[index]
+
+            i += 1
             
+        list.SetItemCount(len(list.itemIndexMap))
+
+        # deselect items
+        item = list.GetFirstSelected()
+        while item != -1:
+            list.SetItemState(item, 0, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
             item = list.GetNextSelected(item)
-
+        
+        # submit SQL statements
+        self.ApplyCommands()
+        
         event.Skip()
 
     def OnDataItemDeleteAll(self, event):
         """Delete all items from the list"""
         list = self.FindWindowById(self.layerPage[self.layer]['data'])
+        if UserSettings.Get(group='atm', key='askOnDeleteRec', subkey='enabled'):
+            deleteDialog = wx.MessageBox(parent=self,
+                                         message=_("All data records (%d) will permanently deleted "
+                                                   "from table. Do you want to delete them?") % \
+                                             (len(list.itemIndexMap)),
+                                         caption=_("Delete records"),
+                                         style=wx.YES_NO | wx.CENTRE)
+            if deleteDialog != wx.YES:
+                return
+
         list.DeleteAllItems()
         list.itemDataMap  = {}
         list.itemIndexMap = []
@@ -985,6 +1031,8 @@
         table = self.mapDBInfo.layers[self.layer]["table"]
         self.listOfSQLStatements.append('DELETE FROM %s' % table)
 
+        self.ApplyCommands()
+        
         event.Skip()
 
     def OnDataDrawSelected(self, event):
@@ -1090,11 +1138,11 @@
             list.itemCatsMap[index] = cat
             list.SetItemCount(list.GetItemCount() + 1)
 
-            # store statement for OnApply()
             self.listOfSQLStatements.append('INSERT INTO %s (%s) VALUES(%s)' % \
                                                 (table,
                                                  columnsString.strip(','),
                                                  valuesString.strip(',')))
+            self.ApplyCommands()
             
     def OnDataItemEdit(self, event):
         """Edit selected record of the attribute table"""
@@ -1180,8 +1228,10 @@
 
             if len(updateString) > 0:
                 self.listOfSQLStatements.append('UPDATE %s SET %s WHERE %s=%d' % \
-                                                     (table, updateString.strip(','),
-                                                      keyColumn, cat))
+                                                    (table, updateString.strip(','),
+                                                     keyColumn, cat))
+                self.ApplyCommands()
+                
     def OnDataReload(self, event):
         """Reload list of records"""
         self.OnApplySqlStatement(None)
@@ -1287,7 +1337,7 @@
                 return
             
         # apply changes
-        self.OnApply(event)
+        self.ApplyCommands()
 
         # update widgets
         self.FindWindowById(self.layerPage[self.layer]['renameCol']).SetItems(self.mapDBInfo.GetColumns(table))
@@ -1332,7 +1382,7 @@
             item = list.GetFirstSelected()
 
         # apply changes
-        self.OnApply(event)
+        self.ApplyCommands()
 
         # update widgets
         table = self.mapDBInfo.layers[self.layer]['table']
@@ -1353,7 +1403,7 @@
         self.FindWindowById(self.layerPage[self.layer]['tableData']).DeleteAllItems()
 
         # apply changes
-        self.OnApply(event)
+        self.ApplyCommands()
 
         # update widgets
         table = self.mapDBInfo.layers[self.layer]['table']
@@ -1362,7 +1412,7 @@
 
         event.Skip()
 
-    def OnTableReload(self, event):
+    def OnTableReload(self, event=None):
         """Reload table description"""
         self.FindWindowById(self.layerPage[self.layer]['tableData']).Populate(update=True)
         self.listOfCommands = []
@@ -1413,7 +1463,7 @@
                                     'columns=%s %s' % (name, type)])
 
         # apply changes
-        self.OnApply(event)
+        self.ApplyCommands()
 
         # update widgets
         self.FindWindowById(self.layerPage[self.layer]['addColName']).SetValue('')
@@ -1446,14 +1496,12 @@
             self.FindWindowById(self.layerPage[self.layer]['statement']).Enable(True)
             self.FindWindowById(self.layerPage[self.layer]['builder']).Enable(True)
 
-    def OnApply(self, event):
-        """Apply button pressed"""
-        # page = self.notebook.GetSelection()
-
+    def ApplyCommands(self):
+        """Apply changes"""
         # perform GRASS commands (e.g. v.db.addcol)
         if len(self.listOfCommands) > 0:
             for cmd in self.listOfCommands:
-                Debug.msg(3, 'AttributeManager.OnApply() cmd=\'%s\'' %
+                Debug.msg(3, 'AttributeManager.ApplyCommands() cmd=\'%s\'' %
                           ' '.join(cmd))
                 gcmd.Command(cmd)
 
@@ -1488,7 +1536,7 @@
                    'driver=%s' % driver,
                    'database=%s' % database]
 
-            Debug.msg(3, 'AttributeManger.OnApply(): %s' %
+            Debug.msg(3, 'AttributeManger.ApplyCommands(): %s' %
                       ';'.join(["%s" % s for s in self.listOfSQLStatements]))
 
             gcmd.Command(cmd)
@@ -1496,9 +1544,6 @@
             # reset list of statements
             self.listOfSQLStatements = []
 
-            # perform select statement
-            self.OnApplySqlStatement(event)
-
     def OnApplySqlStatement(self, event):
         """Apply simple/advanced sql statement"""
         keyColumn = -1 # index of key column
@@ -3250,7 +3295,7 @@
         # buttons
         #
         self.btnCancel = wx.Button(self.panel, wx.ID_CANCEL)
-        self.btnSubmit = wx.Button(self.panel, wx.ID_OK)
+        self.btnSubmit = wx.Button(self.panel, wx.ID_OK, _("Submit"))
         self.btnSubmit.SetDefault()
 
         #

Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/preferences.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/preferences.py	2008-07-27 10:57:39 UTC (rev 32329)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/preferences.py	2008-07-27 10:59:14 UTC (rev 32330)
@@ -120,6 +120,9 @@
                 'leftDbClick' : {
                     'selection' : 0
                     },
+                'askOnDeleteRec' : {
+                    'enabled' : True
+                    },
             },
             #
             # Command
@@ -1004,6 +1007,15 @@
         flexSizer.Add(label, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
         flexSizer.Add(leftDbClick, proportion=0, flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
 
+        # ask on delete record
+        askOnDeleteRec = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                     label=_("Ask when deleting data record(s) from table"),
+                                     name='IsChecked')
+        askOnDeleteRec.SetValue(self.settings.Get(group='atm', key='askOnDeleteRec', subkey='enabled'))
+        self.winId['atm:askOnDeleteRec:enabled'] = askOnDeleteRec.GetId()
+
+        flexSizer.Add(askOnDeleteRec, proportion=0, flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+
         dataBrowserSizer.Add(item=flexSizer,
                            proportion=0,
                            flag=wx.ALL | wx.EXPAND,



More information about the grass-commit mailing list