dabo Commit
Revision 2237
Date: 2006-06-23 13:30:29 -0700 (Fri, 23 Jun 2006)
Author: ed
Changed:
U trunk/dabo/dEvents.py
U trunk/dabo/lib/eventMixin.py
U trunk/dabo/ui/uiwx/dGrid.py
Log:
Added the GridBeforeSort and GridAfterSort events. They are raised before and
after, respectively, sorting occurs in the dGrid class.
Added the option of specifying event data to be included in the raiseEvent
call. Sending a dictionary of values as the 'eventData' parameter will result
in those values being added to the event object's EventData dict.
Diff:
Modified: trunk/dabo/dEvents.py
===================================================================
--- trunk/dabo/dEvents.py 2006-06-23 17:23:25 UTC (rev 2236)
+++ trunk/dabo/dEvents.py 2006-06-23 20:30:29 UTC (rev 2237)
@@ -15,7 +15,7 @@
User code can define custom events by simply subclassing Event and then
using self.bindEvent() and self.raiseEvent() in your objects.
"""
- def __init__(self, eventObject, uiEvent=None, *args, **kwargs):
+ def __init__(self, eventObject, uiEvent=None, eventData=None, *args,
**kwargs):
# Event objects get instantiated with every single event, so try
# to keep code to a minimum here.
@@ -30,6 +30,8 @@
self._baseClass = Event
self._insertEventData()
+ if eventData:
+ self._eventData.update(eventData)
if dabo.eventLogging:
self._logEvent()
@@ -155,7 +157,6 @@
return issubclass(objectClass, dabo.ui.dGrid)
appliesToClass = classmethod(appliesToClass)
-
class KeyEvent(Event):
def appliesToClass(eventClass, objectClass):
return issubclass(objectClass, (dabo.ui.dPemMixin, dabo.dApp))
@@ -705,6 +706,16 @@
pass
+class GridBeforeSort(GridEvent):
+ """Occurs before the grid is sorted"""
+ pass
+
+
+class GridAfterSort(GridEvent):
+ """Occurs after the grid is sorted"""
+ pass
+
+
class DocumentationHint(EditorEvent):
"""Occurs when the editor wants documentation information to change.
Modified: trunk/dabo/lib/eventMixin.py
===================================================================
--- trunk/dabo/lib/eventMixin.py 2006-06-23 17:23:25 UTC (rev 2236)
+++ trunk/dabo/lib/eventMixin.py 2006-06-23 20:30:29 UTC (rev 2237)
@@ -66,9 +66,19 @@
return None
else:
self.__raisedEvents.append(eventSig)
-
- event = eventClass(self, uiEvent, *args, **kwargs)
+ eventData = None
+ if kwargs.has_key("eventData"):
+ eventData = kwargs["eventData"]
+ del kwargs["eventData"]
+ evtObject = self
+ if kwargs.has_key("eventObject"):
+ evtObject = kwargs["eventObject"]
+ del kwargs["eventObject"]
+
+ event = eventClass(evtObject, uiEvent=uiEvent,
+ eventData=eventData, *args, **kwargs)
+
# Now iterate the bindings, and execute the callbacks:
for binding in self._EventBindings:
bindingClass, bindingFunction = binding[0], binding[1]
Modified: trunk/dabo/ui/uiwx/dGrid.py
===================================================================
--- trunk/dabo/ui/uiwx/dGrid.py 2006-06-23 17:23:25 UTC (rev 2236)
+++ trunk/dabo/ui/uiwx/dGrid.py 2006-06-23 20:30:29 UTC (rev 2237)
@@ -2214,7 +2214,7 @@
# Some columns, especially those with mixed values,
# should not be sorted.
return
-
+
sortOrder="ASC"
if columnToSort == self.sortedColumn:
sortOrder = self.sortOrder
@@ -2226,8 +2226,11 @@
self.sortOrder = sortOrder
self.sortedColumn = columnToSort
+ eventData = {"column": colObj, "sortOrder": sortOrder}
+ self.raiseEvent(dEvents.GridBeforeSort, eventObject=self,
+ eventData=eventData)
+
biz = self.getBizobj()
-
if self.customSort:
# Grids tied to bizobj cursors may want to use their
own sorting.
self.sort()
@@ -2329,10 +2332,12 @@
self.CurrentRow = biz.RowNumber
if self._refreshAfterSort:
- self.refresh()
+ self.refresh(sort=False)
self._setUserSetting("sortedColumn", columnToSort)
self._setUserSetting("sortOrder", sortOrder)
+ self.raiseEvent(dEvents.GridAfterSort, eventObject=self,
+ eventData=eventData)
def runIncSearch(self):
@@ -4062,7 +4067,15 @@
DataSource="sampleGrid",
DataField="Editable")
self.Sizer.append(chk, halign="Center")
chk.refresh()
+
+ self.grid.bindEvent(dEvents.GridBeforeSort,
self.beforeSort)
+ self.grid.bindEvent(dEvents.GridAfterSort,
self.afterSort)
+
+ def beforeSort(self, evt):
+ print "Before Sort Event", evt.EventData
+ def afterSort(self, evt):
+ print "After Sort Event", evt.EventData
app = dabo.dApp()
app.MainFormClass = TestForm
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev