X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d2ab048e67a14cc4721b6c89d28b4ee8873b04ae..d42c6cf196f659537b9da28049c90eccd9d7506e:/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py diff --git a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py index 683d1c2c..0edc468a 100644 --- a/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py +++ b/lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py @@ -1,3 +1,4 @@ +from skin import queryColor from Components.config import config, ConfigClock, ConfigInteger from Components.Pixmap import Pixmap from Components.Button import Button @@ -11,6 +12,7 @@ from Screens.Screen import Screen from Screens.EventView import EventViewSimple from Screens.TimeDateInput import TimeDateInput from Screens.TimerEntry import TimerEntry +from Screens.EpgSelection import EPGSelection from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE from RecordTimer import RecordTimerEntry, parseEvent from ServiceReference import ServiceReference @@ -39,7 +41,28 @@ class EPGList(HTMLComponent, GUIComponent): self.time_base = None self.time_epoch = time_epoch self.list = None - self.entry_rect = None + self.event_rect = None + + #query skin colors + col = queryColor("GraphEpg.Foreground") + self.foreColor = col and col.argb() + + col = queryColor("GraphEpg.Border") + self.borderColor = col and col.argb() + + col = queryColor("GraphEpg.Background") + if col is None: + self.backColor = 0x586d88 + else: + self.backColor = col.argb() + + col = queryColor("GraphEpg.BackgroundSelected") + if col is None: + self.backColorSelected = 0x808080 + else: + self.backColorSelected = col.argb() + + print "foreColor", self.foreColor, "borderColor", self.borderColor, "backColor", self.backColor, "backColorSel", self.backColorSelected def isSelectable(self, service, sname, event_list): return (event_list and len(event_list) and True) or False @@ -160,52 +183,61 @@ class EPGList(HTMLComponent, GUIComponent): r2=self.event_rect res = [ None ] # no private data needed res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT|RT_VALIGN_CENTER, service_name)) - start = self.time_base+self.offs*self.time_epoch*60 - end = start + self.time_epoch * 60 - left = r2.left() - top = r2.top() - width = r2.width() - height = r2.height() + if events: + start = self.time_base+self.offs*self.time_epoch*60 + end = start + self.time_epoch * 60 + left = r2.left() + top = r2.top() + width = r2.width() + height = r2.height() + foreColor = self.foreColor + backColor = self.backColor + backColorSelected = self.backColorSelected + borderColor = self.borderColor + for ev in events: #(event_id, event_title, begin_time, duration) rec=self.timer.isInTimer(ev[0], ev[2], ev[3], service) > ((ev[3]/10)*8) xpos, ewidth = self.calcEntryPosAndWidthHelper(ev[2], ev[3], start, end, width) - res.append((eListboxPythonMultiContent.TYPE_TEXT, left+xpos, top, ewidth, height, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, ev[1], None, 0x586d88, 0x808080, 1)) + if self.borderColor is None: + res.append((eListboxPythonMultiContent.TYPE_TEXT, left+xpos, top, ewidth, height, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, ev[1], foreColor, backColor, backColorSelected, 1)) + else: + res.append((eListboxPythonMultiContent.TYPE_TEXT, left+xpos, top, ewidth, height, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER|RT_WRAP, ev[1], foreColor, backColor, backColorSelected, 1, borderColor)) if rec and ewidth > 23: - res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, left+xpos+ewidth-22, top+height-22, 21, 21, self.clock_pixmap, 0x586d88, 0x808080)) + res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, left+xpos+ewidth-22, top+height-22, 21, 21, self.clock_pixmap, backColor, backColorSelected)) return res - def selEntry(self, dir): + def selEntry(self, dir, visible=True): cur_service = self.cur_service #(service, service_name, events) - if not self.entry_rect: + if not self.event_rect: self.recalcEntrySize() if cur_service and self.cur_event is not None: update = True entries = cur_service[2] if dir == 0: #current update = False - pass elif dir == +1: #next if self.cur_event+1 < len(entries): self.cur_event+=1 else: self.offs += 1 self.fillMultiEPG(None) # refill - return + return True elif dir == -1: #prev if self.cur_event-1 >= 0: self.cur_event-=1 elif self.offs > 0: self.offs -= 1 self.fillMultiEPG(None) # refill - return + return True entry = entries[self.cur_event] #(event_id, event_title, begin_time, duration) time_base = self.time_base+self.offs*self.time_epoch*60 xpos, width = self.calcEntryPosAndWidth(self.event_rect, time_base, self.time_epoch, entry[2], entry[3]) - self.l.setSelectionClip(eRect(xpos, 0, width, self.event_rect.height()), update) + self.l.setSelectionClip(eRect(xpos, 0, width, self.event_rect.height()), visible and update) else: self.l.setSelectionClip(eRect(self.event_rect.left(), self.event_rect.top(), self.event_rect.width(), self.event_rect.height()), False) self.selectionChanged() + return False def queryEPG(self, list, buildFunc=None): if self.epgcache is not None: @@ -252,7 +284,10 @@ class EPGList(HTMLComponent, GUIComponent): return self.time_epoch def getTimeBase(self): - return self.time_base + return self.time_base + (self.offs * self.time_epoch * 60) + + def resetOffset(self): + self.offs = 0 class TimelineText(HTMLComponent, GUIComponent): def __init__(self): @@ -318,8 +353,8 @@ class GraphMultiEPG(Screen): self["input_actions"] = ActionMap(["InputActions"], { - "left": self.prevEvent, - "right": self.nextEvent, + "left": self.leftPressed, + "right": self.rightPressed, "1": self.key1, "2": self.key2, "3": self.key3, @@ -332,11 +367,21 @@ class GraphMultiEPG(Screen): self.updateTimelineTimer.start(60*1000) self.onLayoutFinish.append(self.onCreate) - def nextEvent(self): - self["list"].selEntry(+1) + def leftPressed(self): + self.prevEvent() + + def rightPressed(self): + self.nextEvent() + + def nextEvent(self, visible=True): + ret = self["list"].selEntry(+1, visible) + if ret: + self.moveTimeLines(True) - def prevEvent(self): - self["list"].selEntry(-1) + def prevEvent(self, visible=True): + ret = self["list"].selEntry(-1, visible) + if ret: + self.moveTimeLines(True) def key1(self): self["list"].setEpoch(60) @@ -378,8 +423,10 @@ class GraphMultiEPG(Screen): if len(ret) > 1: if ret[0]: self.ask_time=ret[1] - self["list"].fillMultiEPG(self.services, ret[1]) - self.moveTimeLines() + l = self["list"] + l.resetOffset() + l.fillMultiEPG(self.services, ret[1]) + self.moveTimeLines(True) def closeScreen(self): self.close(self.closeRecursive) @@ -407,9 +454,9 @@ class GraphMultiEPG(Screen): l = self["list"] old = l.getCurrent() if val == -1: - l.selEntry(-1) + self.prevEvent(False) elif val == +1: - self.selEntry(+1) + self.nextEvent(False) cur = l.getCurrent() if cur[0] is None and cur[1].ref != old[1].ref: self.eventViewCallback(setEvent, setService, val) @@ -454,7 +501,7 @@ class GraphMultiEPG(Screen): else: self["key_red"].setText("") - def moveTimeLines(self): + def moveTimeLines(self, force=False): l = self["list"] event_rect = l.getEventRect() time_epoch = l.getTimeEpoch() @@ -483,7 +530,7 @@ class GraphMultiEPG(Screen): x += 1 pos += incWidth - if changecount: + if changecount or force: self["timeline_text"].setEntries(timeline_entries) now=time()