X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FComponents%2Fconfig.py;h=7516eeece5883d99324062b616254661b1586b25;hp=1afd398ea1b6d5ed42202097f15a9806c87dbc8e;hb=d7c3b52708ed64d27664b5d4f2b223a61fbad041;hpb=aba0cdf8718a41a4ac3397131b45d272d119d60b diff --git a/lib/python/Components/config.py b/lib/python/Components/config.py index 1afd398..7516eee 100755 --- a/lib/python/Components/config.py +++ b/lib/python/Components/config.py @@ -29,6 +29,7 @@ from time import localtime, strftime class ConfigElement(object): def __init__(self): self.saved_value = None + self.save_forced = False self.last_value = None self.save_disabled = False self.__notifiers = None @@ -83,7 +84,7 @@ class ConfigElement(object): # you need to override this if str(self.value) doesn't work def save(self): - if self.save_disabled or self.value == self.default: + if self.save_disabled or (self.value == self.default and not self.save_forced): self.saved_value = None else: self.saved_value = self.tostring(self.value) @@ -178,7 +179,7 @@ class choicesList(object): # XXX: we might want a better name for this def __list__(self): if self.type == choicesList.LIST_TYPE_LIST: - ret = [not isinstance(x, tuple) and x or len(x) > 0 and x[0] or len(x) == 0 and x for x in self.choices] + ret = [not isinstance(x, tuple) and x or x[0] for x in self.choices] else: ret = self.choices.keys() return ret or [""] @@ -806,6 +807,90 @@ class ConfigFloat(ConfigSequence): float = property(getFloat) +#### vuplus +#Normal, LShift(42), RAlt(100), LShift+RAlt(100+42)/LArt(56) +vukeymap_us_de = { + 2:[u"1", u"!", None, None] + , 3:[u"2", u"@", None, None] + , 4:[u"3", u"#", None, '\xc2\xa3'] + , 5:[u"4", u"$", '\xc3\xa7', None] + , 6:[u"5", u"%", '\xc3\xbc', '\xe2\x82\xac'] + , 7:[u"6", u"^", '\xc3\xb6', None] + , 8:[u"7", u"&", '\xc3\xa4', None] + , 9:[u"8", u"*", '\xc3\xa0', None] + ,10:[u"9", u"(", '\xc3\xa8', None] + ,11:[u"0", u")", '\xc3\xa9', None] + ,12:[u"-", u"_", None, None] + ,13:[u"=", u"+", "~", None] + ,16:[u"q", u"Q", None, None] + ,17:[u"w", u"W", None, None] + ,18:[u"e", u"E", '\xe2\x82\xac', None] + ,19:[u"r", u"R", None, None] + ,20:[u"t", u"T", None, None] + ,21:[u"y", u"Y", None, None] + ,22:[u"u", u"U", None, None] + ,23:[u"i", u"I", None, None] + ,24:[u"o", u"O", None, None] + ,25:[u"p", u"P", None, None] + ,26:[u"[", u"{", None, None] + ,27:[u"]", u"}", None, None] + ,30:[u"a", u"A", None, None] + ,31:[u"s", u"S", '\xc3\x9f', None] + ,32:[u"d", u"D", None, None] + ,33:[u"f", u"F", None, None] + ,34:[u"g", u"G", None, None] + ,35:[u"h", u"H", None, None] + ,36:[u"j", u"J", None, None] + ,37:[u"k", u"K", None, None] + ,38:[u"l", u"L", None, None] + ,39:[u";", u":", None, None] + ,40:[u"\'", u"\"", None, None] + ,41:['\xc2\xa7', '\xc2\xb0', '\xc2\xac', None] + ,43:[u"\\", u"|", None, None] + ,44:[u"z", u"Z", None, u"<"] + ,45:[u"x", u"X", None, u">"] + ,46:[u"c", u"C", '\xc2\xa2', None] + ,47:[u"v", u"V", None, None] + ,48:[u"b", u"B", None, None] + ,49:[u"n", u"N", None, None] + ,50:[u"m", u"M", '\xc2\xb5', None] + ,51:[u",", "<", None, None] + ,52:[u".", ">", None, None] + ,53:[u"/", u"?", None, None] + ,57:[u" ", None, None, None] +} +vumapidx = 0 +vukeymap = vukeymap_us_de +rckeyboard_enable = False +if file("/proc/stb/info/vumodel").read().strip() in ["ultimo", "solo2"]: + rckeyboard_enable = True + +def getCharValue(code): + global vumapidx + global vukeymap + global rckeyboard_enable + print "got ascii code : %d [%d]"%(code, vumapidx) + if rckeyboard_enable: + if code == 0: + vumapidx = 0 + return None + elif code == 42: + vumapidx += 1 + return None + elif code == 56: + vumapidx += 3 + return None + elif code == 100: + vumapidx += 2 + return None + try: + return vukeymap[code][vumapidx] + except: + return None + else: + return unichr(getPrevAsciiCode()) +#### vuplus + # an editable text... class ConfigText(ConfigElement, NumericalTextInput): def __init__(self, default = "", fixed_size = True, visible_width = False): @@ -914,8 +999,12 @@ class ConfigText(ConfigElement, NumericalTextInput): self.overwrite = not self.overwrite elif key == KEY_ASCII: self.timeout() - newChar = unichr(getPrevAsciiCode()) - if not self.useableChars or newChar in self.useableChars: + #### vuplus + #newChar = unichr(getPrevAsciiCode()) + #if not self.useableChars or newChar in self.useableChars: + newChar = getCharValue(getPrevAsciiCode()) + if (newChar is not None) and (not self.useableChars or newChar in self.useableChars): + #### vuplus if self.allmarked: self.deleteAllChars() self.allmarked = False @@ -1623,16 +1712,17 @@ class Config(ConfigSubsection): self.pickle_this("config", self.saved_value, result) return ''.join(result) - def unpickle(self, lines): + def unpickle(self, lines, base_file=True): tree = { } for l in lines: if not l or l[0] == '#': continue n = l.find('=') + name = l[:n] val = l[n+1:].strip() - names = l[:n].split('.') + names = name.split('.') # if val.find(' ') != -1: # val = val[:val.find(' ')] @@ -1643,6 +1733,15 @@ class Config(ConfigSubsection): base[names[-1]] = val + if not base_file: # not the initial config file.. + #update config.x.y.value when exist + try: + configEntry = eval(name) + if configEntry is not None: + configEntry.value = val + except (SyntaxError, KeyError): + pass + # we inherit from ConfigSubsection, so ... #object.__setattr__(self, "saved_value", tree["config"]) if "config" in tree: @@ -1650,13 +1749,16 @@ class Config(ConfigSubsection): def saveToFile(self, filename): text = self.pickle() - f = open(filename, "w") - f.write(text) - f.close() + try: + f = open(filename, "w") + f.write(text) + f.close() + except IOError: + print "Config: Couldn't write %s" % filename - def loadFromFile(self, filename): + def loadFromFile(self, filename, base_file=False): f = open(filename, "r") - self.unpickle(f.readlines()) + self.unpickle(f.readlines(), base_file) f.close() config = Config() @@ -1667,7 +1769,7 @@ class ConfigFile: def load(self): try: - config.loadFromFile(self.CONFIG_FILE) + config.loadFromFile(self.CONFIG_FILE, True) except IOError, e: print "unable to load config (%s), assuming defaults..." % str(e)