prepare for skin updating and scaling
[enigma2.git] / lib / python / Components / ServiceEventTracker.py
1 class InfoBarBase:
2         def __init__(self):
3                 ServiceEventTracker.setActiveInfoBar(self)
4                 self.onClose.append(self.__close)
5
6         def __close(self):
7                 ServiceEventTracker.popActiveInfoBar()
8
9 class ServiceEventTracker:
10         """Tracks service events into a screen"""
11         InfoBarStack = [ ]
12         InfoBarStackSize = 0
13
14         def __init__(self, screen, eventmap):
15                 self.__eventmap = eventmap
16                 self.screen = screen
17                 screen.session.nav.event.append(self.__event)
18                 screen.onClose.append(self.__del_event)
19
20         def __del_event(self):
21                 self.screen.session.nav.event.remove(self.__event)
22
23         def __event(self, ev):
24                 set = ServiceEventTracker
25                 ssize = set.InfoBarStackSize
26                 stack = set.InfoBarStack
27                 if ev in self.__eventmap:
28                         if not isinstance(self.screen, InfoBarBase) or (ssize and stack[ssize-1] == self.screen):
29                                 self.__eventmap[ev]()
30 #                       else:
31 #                               print "ignore event", ev, "for inactive infobar '" + str(self.screen) + "'"
32
33         @staticmethod
34         def setActiveInfoBar(infobar):
35                 set = ServiceEventTracker
36                 assert infobar not in set.InfoBarStack, "FATAL: Infobar '" + str(infobar) + "' is already active!"
37                 set.InfoBarStack.append(infobar)
38                 set.InfoBarStackSize += 1
39 #               print "ServiceEventTracker set active '" + str(infobar) + "'"
40
41         @staticmethod
42         def popActiveInfoBar():
43                 set = ServiceEventTracker
44                 stack = set.InfoBarStack
45                 if set.InfoBarStackSize:
46                         set.InfoBarStackSize -= 1
47                         del stack[set.InfoBarStackSize]
48 #                       if set.InfoBarStackSize:
49 #                               print "ServiceEventTracker reset active '" + str(stack[set.InfoBarStackSize-1]) + "'"