Changeset 564

Show
Ignore:
Timestamp:
06/14/03 14:36:52 (5 years ago)
Author:
sholloway
Message:

Added events to docking interfaces

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBFoundation/RBFoundation/SubObs/Event.py

    r548 r564  
    2626import Interface 
    2727from AccessRules import IgnoreAccess 
    28 from Interface.EventSubject import EventSubjectTemplate 
     28from Interface.EventSubject import EventSubjectTemplate, ObjectEventSubjectTemplate  
    2929from LogicRules import BaseCollection, SimpleNotification 
    3030 
     
    3434 
    3535class EventSubjectBase(EventSubjectTemplate, SimpleNotification.SimpleNotification, IgnoreAccess.IgnoreAccess): 
     36    def _GetCollection(self): return self.iterCallables() 
     37    _collection_impl = property(_GetCollection) 
     38 
     39class ObjectEventSubjectBase(ObjectEventSubjectTemplate, SimpleNotification.SimpleNotification, IgnoreAccess.IgnoreAccess): 
    3640    def _GetCollection(self): return self.iterCallables() 
    3741    _collection_impl = property(_GetCollection) 
     
    4852class EventSubjectProperty(Interface.AbstractProperty): 
    4953    EventFactory = EventSubject 
     54EventProperty = EventSubjectProperty 
     55 
     56#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     57 
     58class ObjectEventSubjectWeakList(ObjectEventSubjectBase, ListCollection.ListCollection, BaseCollection.WeakWrapCallableMixin): pass 
     59class ObjectEventSubjectStrongList(ObjectEventSubjectBase, ListCollection.ListCollection, BaseCollection.StrongWrapCallableMixin): pass 
     60ObjectEventSubjectList = ObjectEventSubjectWeakList 
     61ObjectEventSubject = ObjectEventSubjectWeakList # Set the default 
     62 
     63class ObjectEventSubjectProperty(Interface.AbstractObjectProperty): 
     64    EventFactory = ObjectEventSubject 
     65ObjectEventProperty = ObjectEventSubjectProperty 
    5066 
    5167#~ Sets if they exist ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBFoundation/RBFoundation/SubObs/Interface/EventSubject.py

    r537 r564  
    3333    __call__ = AbstractTemplate._TemplateNotify 
    3434 
     35class ObjectEventSubjectTemplate(AbstractTemplate): 
     36    def __init__(self, obj): 
     37        self.obj = obj 
     38    def __call__(self, *args, **kw): 
     39        return self._TemplateNotify(self.obj, *args, **kw) 
     40 
  • trunk/RBFoundation/RBFoundation/SubObs/Interface/__init__.py

    r548 r564  
    1919##~ 
    2020##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     21 
     22#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     23#~ Imports  
     24#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     25 
     26from RBFoundation.Objects.Properties import LazyProperty as _LazyProperty, LazyObjectProperty as _LazyObjectProperty 
    2127 
    2228#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    5258#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5359 
    54 try: 
    55     from RBFoundation.Objects import Properties 
    56     CachedPropertyBase = Properties.CachedPropertyBase 
    57 except ImportError, AttributeError: 
    58     pass 
    59 else: 
    60     class AbstractProperty(CachedPropertyBase): 
    61         _factory_curry = (), {} 
    62         def __init__(self, *args, **kw): 
    63             if args or kw: 
    64                 self._factory_curry = args, kw 
    65         def GetValue(self, obj): 
    66             args, kw = self._factory_curry 
    67             return self.EventFactory(*args, **kw) 
     60class AbstractProperty(_LazyProperty): 
     61    namePrefix = '__event_' 
    6862 
    69         def _CacheName(self, *args): 
    70             return '__event_' + self._GetName(*args
     63    def __init__(self, *args, **kw): 
     64        _LazyProperty.__init__(self, self.EventFactory, *args, **kw
    7165 
     66#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     67 
     68class AbstractObjectProperty(_LazyObjectProperty): 
     69    namePrefix = '__event_' 
     70 
     71    def __init__(self, *args, **kw): 
     72        _LazyObjectProperty.__init__(self, self.EventFactory, *args, **kw) 
     73 
  • trunk/RBSkinning/RBSkinning/wxTools/wxDockingTools.py

    r516 r564  
    2626import weakref 
    2727from wxPython import wx 
     28from RBFoundation.SubObs.Event import ObjectEventProperty 
    2829from __init__ import SetLayoutContainerSizeHints 
    2930 
     
    4041 
    4142class wxDockContainer(object): 
     43    OnDockHostUpdate = ObjectEventProperty() #(dockcontainer, dockhost, updatetype, *updateargs, **updatekeys) 
     44    OnDocked = ObjectEventProperty() #(dockcontainer, dockhost) 
     45    OnUndocked = ObjectEventProperty() #(dockcontainer, dockhost) 
     46 
    4247    def __init__(self, dockhost=None): 
    4348        self.docked = False 
     
    5863        except ValueError: return False 
    5964 
     65    def UpdateDockHost(self, updatetype, *updateargs, **updatekeys): 
     66        if self.docked: 
     67            self.dockhost.OnDockContainerUpdate(self, updatetype, *updateargs, **updatekeys) 
     68 
    6069    def DockTo(self, dockhost): 
    6170        if dockhost is not self.dockhost: 
     
    7685            return self.Undock() 
    7786        else: return self.Dock() 
    78  
    79     def OnDocked(self, dockitem, dockhost): 
    80         pass # print "OnDocked", dockitem.__class__.__name__, dockhost.__class__.__name__ 
    8187 
    8288    def Dock(self, adjust=True): 
     
    8692                self.dockhost.DockItem(self, item, *args, **kw) 
    8793            self.docked = True 
    88             self.OnDocked(self, self.dockhost) 
     94            self.OnDocked(self.dockhost) 
    8995        return self.docked 
    90  
    91     def OnUndocked(self, dockitem, dockhost): 
    92         pass # print "OnUndocked", dockitem.__class__.__name__, dockhost.__class__.__name__ 
    9396 
    9497    def Undock(self, adjust=True): 
     
    97100                if adjust: self._AdjustItem(item, False) 
    98101                self.dockhost.UndockItem(self, item) 
    99             self.OnUndocked(self, self.dockhost) 
     102            self.OnUndocked(self.dockhost) 
    100103        elif adjust:  
    101104            for item, args, kw in self.items: 
     
    112115 
    113116class wxDockHostBase(object): 
    114     def OnDockItem(self, dockhost, container, dockitem, *args, **kw): 
    115         pass # print "OnDockItem", dockhost.__class__.__name__, container.__class__.__name__ 
     117    OnDockContainerUpdate = ObjectEventProperty() #(dockhost, dockcontainer, updatetype, *updateargs, **updatekeys) 
     118    OnDockItem = ObjectEventProperty() #(dockhost, dockcontainer, dockitem, *args, **kw) 
     119    OnUndockItem = ObjectEventProperty() #(dockhost, dockcontainer, dockitem, *args, **kw) 
     120 
     121    def UpdateDockContainers(self, updatetype, *updateargs, **updatekeys): 
     122        for dockcontainer in self.DockContainers(): 
     123            dockcontainer.OnDockHostUpdate(self, updatetype, *updateargs, **updatekeys) 
    116124 
    117125    def DockItem(self, container, dockitem=None, *args, **kw): 
    118126        raise NotImplementedError 
    119127 
    120     def OnUndockItem(self, dockhost, container, dockitem, *args, **kw): 
    121         pass # print "OnUndockItem", dockhost.__class__.__name__, container.__class__.__name__ 
    122  
    123128    def UndockItem(self, container, dockitem=None, *args, **kw): 
    124129        raise NotImplementedError 
     130 
     131    def UndockAll(self): 
     132        for dockitem in self.DockContainers(): 
     133            self.UndockItem(dockitem) 
     134 
     135    def DockContainers(self): 
     136        try:  
     137            return self.dockcontainerlist 
     138        except AttributeError: 
     139            self.dockcontainerlist = [] 
     140        return self.dockcontainerlist 
    125141 
    126142#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    146162        self.prepend = prepend 
    147163        self.hideempty = hideempty 
    148         self.dockitemlist = [] 
    149164 
    150165    def DockItem(self, container, dockitem=None, *args, **kw): 
     
    163178            self.layout.Prepend(dockitem, *args, **kw) 
    164179        else: self.layout.Add(dockitem, *args, **kw) 
    165         self.dockitemlist.append(container) 
    166         self.OnDockItem(self, container, dockitem) 
     180        self.DockContainers().append(container) 
     181        self.OnDockItem(container, dockitem) 
    167182        self.Layout() 
    168183 
     
    186201        self.parent.SetSizeHints(0, 0) 
    187202        self.layout.Remove(dockitem) 
    188         self.dockitemlist.remove(container) 
    189         self.OnUndockItem(self, container, dockitem) 
     203        self.DockContainers().remove(container) 
     204        self.OnUndockItem(container, dockitem) 
    190205        self.Layout() 
    191  
    192     def UndockAll(self): 
    193         for dockitem in self.dockitemlist: 
    194             self.UndockItem(dockitem) 
    195206 
    196207    def Layout(self): 
     
    299310            self.notebook.AddPage(page, text, self.selectpage) 
    300311        page.Show(True) 
    301         self.OnDockItem(self, container, dockitem) 
     312        self.DockContainers().append(container) 
     313        self.OnDockItem(container, dockitem) 
    302314        self.Layout() 
    303315 
     
    327339 
    328340        self.ReleaseNotebookDockPage(page) 
    329         self.OnUndockItem(self, container, dockitem) 
     341        self.DockContainers().remove(container) 
     342        self.OnUndockItem(container, dockitem) 
    330343        self.Layout() 
    331344 
  • trunk/RBSkinning/demo/wxPythonSkin/docking/docking_multiple_events.py

    r563 r564  
    9898        result = self.skinner.GraftXML([self.graftpoint], graftxml) 
    9999        result.object.UnravelNode = BindCallable(result.UnravelNode) 
    100         result.object.OnUndocked = BindCallable(self.OnUndocked) 
     100        result.object.OnUndocked.Add(self.OnUndocked) 
    101101        return result.object 
    102102 
  • trunk/RBSkinning/demo/wxPythonSkin/docking/docking_single_and_multiple.py

    r528 r564  
    9999        result = self.skinner.GraftXML([self.graftpoint], graftxml) 
    100100        result.object.UnravelNode = BindCallable(result.UnravelNode) 
    101         result.object.OnUndocked = BindCallable(self.OnUndocked) 
     101        result.object.OnUndocked.Add(self.OnUndocked) 
    102102        return result.object 
    103103