|
From: Kevin A. <ka...@us...> - 2004-05-03 16:13:49
|
Update of /cvsroot/pythoncard/PythonCard/components In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29430/components Modified Files: tree.py Log Message: switched to new style event binding and dispatch added itemCollapsed and itemCollapsing events added mixedCase aliases for some methods Index: tree.py =================================================================== RCS file: /cvsroot/pythoncard/PythonCard/components/tree.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** tree.py 1 May 2004 18:47:48 -0000 1.13 --- tree.py 3 May 2004 16:13:41 -0000 1.14 *************** *** 8,21 **** from PythonCard import event, widget class TreeSpec(widget.WidgetSpec): def __init__(self) : ! events = [event.SelectEvent, ! event.ItemActivatedEvent, ! event.ItemExpandedEvent, ! event.ItemExpandingEvent, ! event.SelectionChangedEvent, ! event.SelectionChangingEvent, ! event.KeyDownEvent ! ] attributes = { #'items' : { 'presence' : 'optional', 'default' : [] }, --- 8,106 ---- from PythonCard import event, widget + + class TreeEvent(event.Event): + def decorate(self, aWxEvent, source): + aWxEvent = event.Event.decorate(self, aWxEvent, source) + aWxEvent.item = aWxEvent.GetItem() + return aWxEvent + + class TreeItemActivatedEvent(TreeEvent): + name = 'itemActivated' + binding = wx.EVT_TREE_ITEM_ACTIVATED + id = wx.wxEVT_COMMAND_TREE_ITEM_ACTIVATED + + class TreeItemCollapsedEvent(TreeEvent): + name = 'itemCollapsed' + binding = wx.EVT_TREE_ITEM_COLLAPSED + id = wx.wxEVT_COMMAND_TREE_ITEM_COLLAPSED + + class TreeItemCollapsingEvent(TreeEvent): + name = 'itemCollapsing' + binding = wx.EVT_TREE_ITEM_COLLAPSING + id = wx.wxEVT_COMMAND_TREE_ITEM_COLLAPSING + + class TreeItemExpandedEvent(TreeEvent): + name = 'itemExpanded' + binding = wx.EVT_TREE_ITEM_EXPANDED + id = wx.wxEVT_COMMAND_TREE_ITEM_EXPANDED + + class TreeItemExpandingEvent(TreeEvent): + name = 'itemExpanding' + binding = wx.EVT_TREE_ITEM_EXPANDING + id = wx.wxEVT_COMMAND_TREE_ITEM_EXPANDING + + class TreeSelectionChangedEvent(TreeEvent): + name = 'selectionChanged' + binding = wx.EVT_TREE_SEL_CHANGED + id = wx.wxEVT_COMMAND_TREE_SEL_CHANGED + + def decorate(self, aWxEvent, source): + aWxEvent = TreeEvent.decorate(self, aWxEvent, source) + aWxEvent.oldItem = aWxEvent.GetOldItem() + return aWxEvent + + class TreeSelectionChangingEvent(TreeEvent): + name = 'selectionChanging' + binding = wx.EVT_TREE_SEL_CHANGING + id = wx.wxEVT_COMMAND_TREE_SEL_CHANGING + + def decorate(self, aWxEvent, source): + aWxEvent = TreeEvent.decorate(self, aWxEvent, source) + aWxEvent.oldItem = aWxEvent.GetOldItem() + return aWxEvent + + class TreeKeyDownEvent(TreeEvent): + name = 'keyDown' + binding = wx.EVT_TREE_KEY_DOWN + id = wx.wxEVT_COMMAND_TREE_KEY_DOWN + + def decorate(self, aWxEvent, source): + aWxEvent = TreeEvent.decorate(self, aWxEvent, source) + + aWxEvent.keyCode = aWxEvent.GetKeyCode() + keyEvent = aWxEvent.GetKeyEvent() + aWxEvent.position = tuple(keyEvent.GetPosition()) + aWxEvent.x = keyEvent.GetX() + aWxEvent.y = keyEvent.GetY() + aWxEvent.altDown = keyEvent.AltDown() + aWxEvent.controlDown = keyEvent.ControlDown() + aWxEvent.shiftDown = keyEvent.ShiftDown() + keyEvent = None + return aWxEvent + + + TreeEvents = (#TreeSelectEvent, + TreeItemActivatedEvent, + TreeItemCollapsedEvent, + TreeItemCollapsingEvent, + TreeItemExpandedEvent, + TreeItemExpandingEvent, + TreeSelectionChangedEvent, + TreeSelectionChangingEvent, + TreeKeyDownEvent + ) + + class TreeSpec(widget.WidgetSpec): def __init__(self) : ! ## events = [event.SelectEvent, ! ## event.ItemActivatedEvent, ! ## event.ItemExpandedEvent, ! ## event.ItemExpandingEvent, ! ## event.SelectionChangedEvent, ! ## event.SelectionChangingEvent, ! ## event.KeyDownEvent ! ## ] ! events = list(TreeEvents) attributes = { #'items' : { 'presence' : 'optional', 'default' : [] }, *************** *** 24,27 **** --- 109,113 ---- widget.WidgetSpec.__init__( self, 'Tree', 'Widget', events, attributes ) + class Tree(widget.Widget, wx.TreeCtrl): """ *************** *** 45,106 **** widget.Widget.__init__(self, aParent, aResource) ! adapter = TreeEventBinding(self) ! adapter.bindEvents() ! ! ! class TreeEventBinding(event.DefaultEventBinding) : ! """ ! Bind the Events supported by Tree 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.ItemActivatedEvent: ! wx.EVT_TREE_ITEM_ACTIVATED(parent, id, self._dispatch) ! elif aEventClass is event.ItemExpandedEvent: ! wx.EVT_TREE_ITEM_EXPANDED(parent, id, self._dispatch) ! elif aEventClass is event.ItemExpandingEvent: ! wx.EVT_TREE_ITEM_EXPANDING(parent, id, self._dispatch) ! elif aEventClass is event.SelectionChangedEvent: ! wx.EVT_TREE_SEL_CHANGED(parent, id, self._dispatch) ! elif aEventClass is event.SelectionChangingEvent: ! wx.EVT_TREE_SEL_CHANGING(parent, id, self._dispatch) ! elif aEventClass is event.KeyDownEvent: ! wx.EVT_TREE_KEY_DOWN(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_TREE_ITEM_ACTIVATED: ! evt = self._createEvent(event.ItemActivatedEvent, aWxEvent) ! elif aWxEvent.GetEventType() == wx.wxEVT_COMMAND_TREE_ITEM_EXPANDED: ! evt = self._createEvent(event.ItemExpandedEvent, aWxEvent) ! elif aWxEvent.GetEventType() == wx.wxEVT_COMMAND_TREE_ITEM_EXPANDING: ! evt = self._createEvent(event.ItemExpandingEvent, aWxEvent) ! elif aWxEvent.GetEventType() == wx.wxEVT_COMMAND_TREE_SEL_CHANGED: ! evt = self._createEvent(event.SelectionChangedEvent, aWxEvent) ! elif aWxEvent.GetEventType() == wx.wxEVT_COMMAND_TREE_SEL_CHANGING: ! evt = self._createEvent(event.SelectionChangingEvent, aWxEvent) ! elif aWxEvent.GetEventType() == wx.wxEVT_COMMAND_TREE_KEY_DOWN: ! evt = self._createEvent(event.KeyDownEvent, aWxEvent) ! if evt is not None : ! self._component.notifyEventListeners(evt) --- 131,151 ---- widget.Widget.__init__(self, aParent, aResource) ! self._bindEvents(event.WIDGET_EVENTS + TreeEvents) ! # mixedCase aliases ! # probably need to do all the wxTreeCtrl methods ! # this just covers the ones in the minimalTree sample ! addRoot = wx.TreeCtrl.AddRoot ! appendItem = wx.TreeCtrl.AppendItem ! getChildrenCount = wx.TreeCtrl.GetChildrenCount ! getItemText = wx.TreeCtrl.GetItemText ! isExpanded = wx.TreeCtrl.IsExpanded ! selectItem = wx.TreeCtrl.SelectItem ! setItemHasChildren = wx.TreeCtrl.SetItemHasChildren ! ! # if it looks like there is a memory leak with Tree components ! # then Tree should have its own _dispatch method ! # and set aWxEvent.oldItem = None, and aWxEvent.item = None ! # after calling widget.Widget._dispatch |