X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fpython%2FComponents%2FPerServiceDisplay.py;h=25a296f94377bdab3f5c344ff28e876adafd8acd;hb=62398546079455cab5f63f5988a1f2a6bc7e3e07;hp=cb86bd84a35603c0f0e50e54d3fe6cfa87f1d6f4;hpb=bcbd5801c2be23b2ee1a22e7b088fc2fb654f1c9;p=vuplus_dvbapp diff --git a/lib/python/Components/PerServiceDisplay.py b/lib/python/Components/PerServiceDisplay.py index cb86bd8..25a296f 100644 --- a/lib/python/Components/PerServiceDisplay.py +++ b/lib/python/Components/PerServiceDisplay.py @@ -5,31 +5,48 @@ from VariableValue import VariableValue from enigma import iPlayableService from enigma import eLabel, eSlider, eTimer + class PerServiceBase(object): + EventMap = { } + + @staticmethod + def event(ev): + func_list = PerServiceBase.EventMap.setdefault(ev, []) + for func in func_list: + if func[0]: # with_event + func[1](ev) + else: + func[1]() + def __init__(self, navcore, eventmap, with_event=False): - self.eventmap = eventmap self.navcore = navcore - self.navcore.event.append(self.event_callback) + self.eventmap = eventmap self.poll_timer = eTimer() - self.poll_timer.callback.append(self.poll) self.with_event = with_event - + + self.poll_timer.callback.append(self.poll) + + EventMap = PerServiceBase.EventMap + if not len(EventMap): + self.navcore.event.append(PerServiceBase.event) + + EventMap = EventMap.setdefault + for x in eventmap.iteritems(): + EventMap(x[0], []).append((with_event, x[1])) + # start with stopped state, so simulate that - self.event_callback(iPlayableService.evEnd) + evEndEntry = eventmap.get(iPlayableService.evEnd) + if evEndEntry: + if with_event: + evEndEntry(iPlayableService.evEnd) + else: + evEndEntry() def destroy(self): - self.navcore.event.remove(self.event_callback) - - def event_callback(self, ev): - # loop up if we need to handle this event - func = self.eventmap.get(ev) - if func: - # call handler - if self.with_event: - func(ev) - else: - func() - + EventMap = PerServiceBase.EventMap.setdefault + for x in self.eventmap.iteritems(): + EventMap(x[0], []).remove((self.with_event, x[1])) + def enablePolling(self, interval=60000): if interval: self.poll_timer.start(interval)