dabo Commit
Revision 2561
Date: 2006-12-18 15:24:55 -0800 (Mon, 18 Dec 2006)
Author: Ed

Changed:
U   trunk/dabo/ui/uiwx/dGrid.py

Log:
Restored the code inadvertantly removed that 'enforced' selection when 
MultipleSelection=False. This is the main fix for Tracker #0248; the other is 
the setting of MultipleSelection to False in the prop grid that will be posted 
next.


Diff:
Modified: trunk/dabo/ui/uiwx/dGrid.py
===================================================================
--- trunk/dabo/ui/uiwx/dGrid.py 2006-12-17 22:51:05 UTC (rev 2560)
+++ trunk/dabo/ui/uiwx/dGrid.py 2006-12-18 23:24:55 UTC (rev 2561)
@@ -2714,6 +2714,11 @@
                self._syncColumnCount()
                self._syncRowCount()
                super(dGrid, self).refresh()
+       
+       
+       def update(self):
+               super(dGrid, self).update()
+               self.fillGrid()
 
 
        def _getWxHeader(self):
@@ -3147,16 +3152,94 @@
                        evt.Skip()
                        
        
+       def __onWxGridSelectCell(self, evt):
+               if getattr(self, "_inSelect", False):
+                       # Avoid recursion
+                       return
+               self._inSelect = True
+               if evt.Selecting():
+                       self._updateWxSelection(evt)
+               self.raiseEvent(dEvents.GridCellSelected, evt)
+               self._lastRow, self._lastCol = evt.GetRow(), evt.GetCol()
+               evt.Skip()
+               self._inSelect = False
+
+
        def __onWxGridRangeSelect(self, evt):
                if self._inRangeSelect:
                        # avoid recursive events
                        return
                self._inRangeSelect = True
+               if evt.Selecting():
+                       self._updateWxSelection(evt)
                self.raiseEvent(dEvents.GridRangeSelected, evt)
                evt.Skip()
                self._inRangeSelect = False
                
-               
+       
+       def _updateWxSelection(self, evt):
+               if self.MultipleSelection:
+                       # Nothing to do
+                       return
+               origRow, origCol = self.CurrentRow, self.CurrentColumn
+               mode = self.GetSelectionMode()
+               try:
+                       top, bott = evt.GetTopRow(), evt.GetBottomRow()
+               except AttributeError:
+                       top = bott = evt.GetRow()
+               try:
+                       left, right = evt.GetLeftCol(), evt.GetRightCol()
+               except AttributeError:
+                       left = right = evt.GetCol()
+               try:
+                       if mode == wx.grid.Grid.wxGridSelectRows:
+                               if (top != bott) or (top != origCol):
+                                       # Attempting to select a range
+                                       if top == origRow:
+                                               row = bott
+                                       else:
+                                               row = top
+                                       self.SetGridCursor(row, self._lastCol)
+                                       self.SelectRow(row)
+                       elif mode == wx.grid.Grid.wxGridSelectColumns:
+                               if (left != right) or (left != origCol):
+                                       # Attempting to select a range
+                                       if left == origCol:
+                                               col = right
+                                       else:
+                                               col = left
+                                       self.SetGridCursor(self._lastRow, col)
+                                       self.SelectCol(col)
+                       else:
+                               # Cells
+                               chg = False
+                               row, col = origRow, origCol
+                               if top != bott:
+                                       chg = True
+                                       if top == origRow:
+                                               row = bott
+                                       else:
+                                               row = top
+                               elif top != origRow:
+                                       # New row
+                                       chg = True
+                                       row = top
+                               if left != right:
+                                       chg = True
+                                       if left == origCol:
+                                               col = right
+                                       else:
+                                               col = left
+                               elif left != origCol:
+                                       # New col
+                                       chg = True
+                                       col = left
+                               if chg:
+                                       self.SetGridCursor(row, col)
+                                       self.SelectBlock(row, col, row, col)
+               except: pass
+
+
        def __onWxGridEditorShown(self, evt):
                self.raiseEvent(dEvents.GridCellEditBegin, evt)
                evt.Skip()
@@ -3193,17 +3276,6 @@
                        evt.Skip()
 
 
-       def __onWxGridSelectCell(self, evt):
-               if getattr(self, "_inSelect", False):
-                       # Avoid recursion
-                       return
-               self._inSelect = True
-               self.raiseEvent(dEvents.GridCellSelected, evt)
-               self._lastRow, self._lastCol = evt.GetRow(), evt.GetCol()
-               evt.Skip()
-               self._inSelect = False
-
-
        def __onWxHeaderContextMenu(self, evt):
                col, row = self._getColRowForPosition(evt.GetPosition())
                self.raiseEvent(dEvents.GridHeaderContextMenu, evt, col=col)




_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev

Reply via email to