From: Kevin A. <ka...@us...> - 2004-05-04 05:15:25
|
Update of /cvsroot/pythoncard/PythonCard/components In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28623/components Modified Files: list.py Log Message: switched to new style event binding and dispatch Index: list.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/components/list.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** list.py 1 May 2004 18:47:48 -0000 1.23 --- list.py 4 May 2004 05:15:17 -0000 1.24 *************** *** 29,35 **** class ListSpec(widget.WidgetSpec): def __init__(self): ! events = [event.SelectEvent] attributes = { 'items' : { 'presence' : 'optional', 'default' : [] }, --- 29,59 ---- + class ListEvent(event.Event, event.CommandTypeEvent): + def decorate(self, aWxEvent, source): + aWxEvent = event.Event.decorate(self, aWxEvent, source) + aWxEvent.selection = aWxEvent.GetSelection() + aWxEvent.stringSelection = aWxEvent.GetString() + return aWxEvent + + class ListSelectEvent(ListEvent): + name = 'select' + binding = wx.EVT_LISTBOX + id = wx.wxEVT_COMMAND_LISTBOX_SELECTED + + class ListMouseDoubleClickEvent(ListEvent): + name = 'mouseDoubleClick' + binding = wx.EVT_LISTBOX_DCLICK + id = wx.wxEVT_COMMAND_LISTBOX_DOUBLECLICKED + + ListEvents = (ListSelectEvent, ListMouseDoubleClickEvent) + + class ListSpec(widget.WidgetSpec): def __init__(self): ! ## events = [event.SelectEvent] ! # KEA 2004-05-03 ! # how do we cleanly remove the MouseDoubleClickEvent ! # which the subclass is automatically going to add? ! events = list(ListEvents) attributes = { 'items' : { 'presence' : 'optional', 'default' : [] }, *************** *** 62,68 **** if aResource.stringSelection: self._setStringSelection(aResource.stringSelection) ! ! adapter = ListEventBinding(self) ! adapter.bindEvents() def _getItems(self): --- 86,95 ---- if aResource.stringSelection: self._setStringSelection(aResource.stringSelection) ! ! # need to remove MouseDoubleClickEvent ! # since ListMouseDoubleClickEvent is used instead ! temp = list(event.WIDGET_EVENTS + ListEvents) ! temp.remove(event.MouseDoubleClickEvent) ! self._bindEvents(tuple(temp)) def _getItems(self): *************** *** 123,166 **** - class ListEventBinding( event.DefaultEventBinding ) : - """ - Bind the Events supported by event.List to wxPython. - """ - def __init__( self, aComponent ) : - event.DefaultEventBinding.__init__( self, aComponent ) - - """ - Bind an Event class that is supported by this objects peer Widget. - """ - def bindEvent( self, aEventClass ) : - parent = self._component._parent - id = self._component.GetId() - if aEventClass is event.SelectEvent : - wx.EVT_LISTBOX( parent, id, self._dispatch ) - - if aEventClass is event.MouseDoubleClickEvent : - wx.EVT_LISTBOX_DCLICK( parent, id, self._dispatch ) - """ - Intercept all wxPyton events, convert them to PythonCard events, and - post them to the EventQueue. - """ - def _dispatch( self, aWxEvent ) : - # Call our superclass to dispatch the standard mouse - # events that every widget should get. - if event.DefaultEventBinding._dispatch( self, aWxEvent ) : - return - - evt = None - - if aWxEvent.GetEventType() == wx.wxEVT_COMMAND_LISTBOX_SELECTED : - evt = self._createEvent( event.SelectEvent, aWxEvent ) - - elif aWxEvent.GetEventType() == wx.wxEVT_COMMAND_LISTBOX_DOUBLECLICKED : - evt = self._createEvent( event.MouseDoubleClickEvent, aWxEvent ) - - if evt is not None : - self._component.notifyEventListeners( evt ) - - import sys from PythonCard import registry --- 150,153 ---- |