+from skin import queryColor
from Components.config import config, ConfigClock, ConfigInteger
-from Components.Button import Button
from Components.Pixmap import Pixmap
+from Components.Button import Button
from Components.ActionMap import ActionMap
from Components.HTMLComponent import HTMLComponent
from Components.GUIComponent import GUIComponent
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
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
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:
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):
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,
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)
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)
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)
else:
self["key_red"].setText("")
- def moveTimeLines(self):
+ def moveTimeLines(self, force=False):
l = self["list"]
event_rect = l.getEventRect()
time_epoch = l.getTimeEpoch()
x += 1
pos += incWidth
- if changecount:
+ if changecount or force:
self["timeline_text"].setEntries(timeline_entries)
now=time()