Changeset 159
- Timestamp:
- 05/17/02 17:33:10 (6 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/JabberSubject.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/CategorySubject.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/StateMachine.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/Subject.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/__init__.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/wxTools/wxEvtHandlerBidableCategorySubject.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/JabberSubject.py
r141 r159 50 50 51 51 class FromJIDSubjectMixin(JabberSubjectBase): 52 def AddObserver(self, category, observer):53 super(FromJIDSubjectMixin, self).AddObserver(JID.JID(category), observer)52 def AddObserver(self, category, *args, **kw): 53 apply(super(FromJIDSubjectMixin, self).AddObserver, (JID.JID(category),) + args, kw) 54 54 55 55 def RemoveObserver(self, category, observer): trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py
r150 r159 143 143 144 144 class AttributedSubject(AttributedSubjectMixin, Subject): 145 def AddObserver(self, observer, call=0 ):146 Subject.AddObserver(self, observer)145 def AddObserver(self, observer, call=0, **kw): 146 apply(Subject.AddObserver, (self, observer), kw) 147 147 if call: observer(self) 148 148 trunk/RBJabber/RBJabber/SubjectObserver/CategorySubject.py
r137 r159 37 37 from Subject import Subject 38 38 from Foundation import WeakBind 39 import bisect 39 40 40 41 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 51 52 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 52 53 53 def AddObserver(self, category, observer ):54 def AddObserver(self, category, observer, priority=0): 54 55 result = WeakBind.BindCallable(observer) 55 self._observers.setdefault(category,[]).append(result)56 bisect.insort(self._observers.setdefault(category,[]), (-priority, result)) 56 57 return self 57 58 … … 59 60 result = WeakBind.BindCallable(observer) 60 61 for observers in self._observers.itervalues(): 61 try: 62 while 1: observers.remove(result) 63 except ValueError: pass # result no longer in the list 62 observers[:] = [x for x in observers if x[-1] != result] 64 63 return self 65 64 … … 69 68 70 69 def _ObserverList(self, category): 71 lst= self._observers.setdefault(category, [])72 lst[:] = filter(None, lst)73 return lst70 observers = self._observers.setdefault(category, []) 71 observers[:] = [x for x in observers if x[-1]] 72 return [x[-1] for x in observers] 74 73 def _AllObserversList(self): 75 return [x for y in self._observers.values() for x in y]74 return [x[-1] for y in self._observers.values() for x in y] 76 75 Observers = property(_AllObserversList) 77 76 trunk/RBJabber/RBJabber/SubjectObserver/StateMachine.py
r132 r159 99 99 if self.value and not self._Influxs: 100 100 self.UpdateObservers(precondition=self.value) 101 self.StateSubject.UpdateObservers(state= value)101 self.StateSubject.UpdateObservers(state=self) 102 102 if self._handled > 0: 103 103 self._handled = 0 … … 118 118 def AddInflux(self, Influx): 119 119 self._Influxs.append(Influx) 120 Influx.StateSubject.AddObserver(self.CheckInfluxs )120 Influx.StateSubject.AddObserver(self.CheckInfluxs, priority=-1) 121 121 122 122 def AddOutflux(self, Outflux): trunk/RBJabber/RBJabber/SubjectObserver/Subject.py
r138 r159 36 36 37 37 from Foundation import WeakBind 38 import bisect 38 39 39 40 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 60 61 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 61 62 62 def AddObserver(self, observer ):63 def AddObserver(self, observer, priority=0): 63 64 """Adds observer to the internal collection monitoring this subject 64 65 Observer is assumed to be a callable object.""" 65 66 result = WeakBind.BindCallable(observer) 66 self._observers.append(result)67 bisect.insort(self._observers, (-priority, result)) 67 68 return self 68 69 … … 71 72 Observer should be the same object that was passed to AddObserver.""" 72 73 result = WeakBind.BindCallable(observer) 73 try: 74 while 1: self._observers.remove(result) 75 except ValueError: pass # result no longer in the list 74 self._observers = [x for x in self._observers if x[-1] != result] 76 75 return self 77 76 … … 82 81 def _ObserverList(self): 83 82 """Returns the internal observer collection pruned of invalid weakref objects as a list""" 83 self._observers = [x for x in self._observers if x[-1]] 84 84 self._observers = filter(None, self._observers) 85 return self._observers85 return [x[-1] for x in self._observers] 86 86 Observers = property(_ObserverList) 87 87 trunk/RBJabber/RBJabber/SubjectObserver/__init__.py
r138 r159 106 106 107 107 s1.AddObserver(printo1) 108 s1.AddObserver(printo2 )108 s1.AddObserver(printo2, priority=-1) 109 109 s2.AddObserver(printo2) 110 110 trunk/RBSkinning/RBSkinning/wxTools/wxEvtHandlerBidableCategorySubject.py
r137 r159 52 52 evt.Skip() 53 53 54 def AddObserver(self, category, observer):54 def AddObserver(self, category, *args, **kw): 55 55 self.EvtHandler.Connect(-1, -1, category, BindCallable(self._OnEvent)) 56 BidableCategorySubject.AddObserver(self, ('event', category), observer)56 apply(BidableCategorySubject.AddObserver, (self, ('event', category)) + args, kw) 57 57
