don't translate "", add FIXME
[enigma2.git] / lib / python / Components / TunerInfo.py
1 from GUIComponent import GUIComponent
2
3 from enigma import eLabel, eSlider, iFrontendStatusInformation
4
5 from math import log
6
7 class TunerInfo(GUIComponent):
8         SNR_PERCENTAGE = 0
9         AGC_PERCENTAGE = 1
10         BER_VALUE = 2
11         SNR_BAR = 3
12         AGC_BAR = 4
13         BER_BAR = 5
14         LOCK_STATE = 6
15         SYNC_STATE = 7
16         def __init__(self, type, servicefkt):
17                 GUIComponent.__init__(self)
18                 self.instance = None
19                 self.message = None
20                 self.value = None
21                 
22                 self.servicefkt = servicefkt
23                 self.type = type
24                 self.update()
25         
26         def setText(self, text):
27                 self.message = text
28                 if self.instance:
29                         self.instance.setText(self.message)
30         
31         def setValue(self, value):
32                 self.value = value
33                 if self.instance:
34                         self.instance.setValue(self.value)              
35                         
36         def calc(self,val):
37                 if not val:
38                         return 0
39                 if val < 2500:
40                         return (long)(log(val)/log(2))
41                 return val*100/65535
42         
43         def update(self):
44                 service = self.servicefkt()
45                 value = 0
46                 if service is not None:
47                         feinfo = service.frontendStatusInfo()
48                         if feinfo is not None:
49                                 if self.type == self.SNR_PERCENTAGE or self.type == self.SNR_BAR:
50                                         value = feinfo.getFrontendInfo(iFrontendStatusInformation.signalPower) * 100 / 65536
51                                 elif self.type == self.AGC_PERCENTAGE or self.type == self.AGC_BAR:
52                                         value = feinfo.getFrontendInfo(iFrontendStatusInformation.signalQuality) * 100 / 65536
53                                 elif self.type == self.BER_VALUE or self.type == self.BER_BAR:
54                                         value = feinfo.getFrontendInfo(iFrontendStatusInformation.bitErrorRate)
55                                 elif self.type == self.LOCK_STATE:
56                                         value = feinfo.getFrontendInfo(iFrontendStatusInformation.LockState)
57                 
58                 if self.type == self.SNR_PERCENTAGE or self.type == self.AGC_PERCENTAGE:
59                         self.setText("%d%%" % (value))
60                 elif self.type == self.BER_VALUE:
61                         self.setText("%d" % (value))
62                 elif self.type == self.SNR_BAR or self.type == self.AGC_BAR:
63                         self.setValue(value)
64                 elif self.type == self.BER_BAR:
65                         self.setValue(self.calc(value))
66                 elif self.type == self.LOCK_STATE:
67                         if value == 1:
68                                 self.setText(_("locked"))
69                         else:
70                                 self.setText(_("not locked"))
71                                 
72         def createWidget(self, parent):
73                 if self.SNR_PERCENTAGE <= self.type <= self.BER_VALUE or self.type == self.LOCK_STATE:
74                         return eLabel(parent)
75                 elif self.SNR_BAR <= self.type <= self.BER_BAR:
76                         self.g = eSlider(parent)
77                         self.g.setRange(0, 100)
78                         return self.g
79                 
80         def GUIcreate(self, parent):
81                 self.instance = self.createWidget(parent)
82                 if self.message is not None:
83                         self.instance.setText(self.message)
84                 elif self.value is not None:
85                         self.instance.setValue(self.value)      
86
87         def GUIdelete(self):
88                 self.removeWidget(self.instance)
89                 self.instance = None
90         
91         def removeWidget(self, instance):
92                 pass