Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
from __future__ import print_function
from __future__ import division
#
#       Vali's EPG Plugin
#       modded by SvenH aka Dreamy
#
valisepg_version="1.7-r7"
#
from Plugins.Plugin import PluginDescriptor
from Screens.Screen import Screen
from Screens.ChannelSelection import ChannelSelection
from Screens.ChoiceBox import ChoiceBox
from Screens.MessageBox import MessageBox
from Screens.TimerEntry import TimerEntry
from Screens.TimerEdit import TimerSanityConflict
from Screens.EpgSelection import EPGSelection as impotedEPGSelection
from Screens.InfoBar import InfoBar
from Components.EpgList import EPG_TYPE_SINGLE, EPGList, EPG_TYPE_MULTI
from Components.Button import Button
from Components.Label import Label
from Components.Sources.Event import Event
from Components.ActionMap import NumberActionMap, HelpableActionMap
from Components.Pixmap import MultiPixmap
from Components.config import config, ConfigSubsection, getConfigListEntry, ConfigInteger, ConfigSelection
from Components.ConfigList import ConfigListScreen
from Components.PluginComponent import plugins
from os import environ, listdir, remove, rename, system, path
from Tools.Directories import fileExists
from Tools.LoadPixmap import LoadPixmap
from Tools.BoundFunction import boundFunction
from ServiceReference import ServiceReference
from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
from enigma import eEPGCache, eServiceReference, eServiceCenter, eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT, RT_VALIGN_CENTER, RT_WRAP, getDesktop, eTimer, ePoint
from time import localtime, mktime, time
from datetime import datetime
from skin import TemplatedListFonts, componentSizes
import Screens.InfoBarGenerics

YELLOWC =  '\033[33m'
ENDC = '\033[m' 
def cprint(text):
	print(YELLOWC+"[ValisEPG] "+text+ENDC)   

valisepg_setup=_("Vali's EPG")+" "+_("Setup")

sz_w = getDesktop(0).size().width()

config.valisepg = ConfigSubsection()
valisopt=[]
valisopt.append(( "default",_("default") ))
valisopt.append(( "valis",_("Vali's EPG") ))
config.valisepg.channellist = ConfigSelection(default = "default", choices = valisopt)
bouquetopt=[]
bouquetopt.append(( "default",_("default") ))
bouquetopt.append(( "providers",_("Providers") ))
bouquetopt.append(( "favourites",_("Favourites") ))
bouquetopt.append(( "satellites",_("Satellites") ))
bouquetopt.append(( "next",_("next channel") ))
bouquetopt.append(( "previous",_("previous channel") ))
bouquetopt.append(( "valis",_("Vali's EPG") ))
config.valisepg.bouquetup = ConfigSelection(default = "default", choices = bouquetopt)
config.valisepg.bouquetdown = ConfigSelection(default = "default", choices = bouquetopt)
config.valisepg.ptH = ConfigInteger(default=20, limits=(0, 23))
config.valisepg.ptM = ConfigInteger(default=15, limits=(0, 56))
config.valisepg.autozap = ConfigInteger(default=10, limits=(3, 20))
lineopt=[]
lineopt.append(( "-----------------------",_("--------") ))
lineopt.append(( "=======================",_("========") ))
lineopt.append(( "#######################",_("########") ))
lineopt.append(( "***********************",_("********") ))
lineopt.append(( "IIIIIIIIIIIIIIIIIIIIIII",_("IIIIIIII") ))
lineopt.append(( "XXXXXXXXXXXXXXXXXXXXXXX",_("XXXXXXXX") ))
lineopt.append(( "",_("        ") ))
config.valisepg.line= ConfigSelection(default = "-----------------------", choices = lineopt)

def Valis_InfoBarChannelSelection__init__(self):
	cprint("InfoBarChannelSelection.__init__")
	#instantiate forever
	Screens.InfoBarGenerics.InfoBarChannelSelection.valisinstance=self   
	if config.valisepg.channellist.value == "valis":
		self.servicelist = self.session.instantiateDialog(ValisEPG, zPosition=0)
	else:
		self.servicelist = self.session.instantiateDialog(ChannelSelection, zPosition=0)

	self.onServiceListRootChanged = []
	self.servicelist.onRootChanged.append(self._InfoBarChannelSelection__onServiceListRootChanged)

	if config.misc.initialchannelselection.value:
		self.onShown.append(self.firstRun)

	self["ChannelSelectActions"] = HelpableActionMap(self, "InfobarChannelSelection",
		{
			"switchChannelUp": (self.switchChannelUp, _("open servicelist(up)")),
			"switchChannelDown": (self.switchChannelDown, _("open servicelist(down)")),
			"zapUp": (self.zapUp, _("previous channel")),
			"zapDown": (self.zapDown, _("next channel")),
			"historyBack": (self.historyBack, _("previous channel in history")),
			"historyNext": (self.historyNext, _("next channel in history")),
#			"openServiceList": (self.openServiceList, _("open servicelist")),
		})
	self["ChannelSelectActions_"] = HelpableActionMap(self, "ChannelSelectBaseActions",
		{
#			"switchChannelUp": (self.switchChannelUp, _("open servicelist(up)")),
#			"switchChannelDown": (self.switchChannelDown, _("open servicelist(down)")),
#			"selectServiceUp": (self.switchChannelUp, _("open servicelist(up)")),
#			"selectServiceDown": (self.switchChannelDown, _("open servicelist(down)")),
#			"selectServicePageUp": (self.zapUp, _("previous channel")),
#			"selectServicePageDown": (self.zapDown, _("next channel")),
#			"prevMarker": (self.historyBack, _("previous channel in history")),
#			"nextMarker": (self.historyNext, _("next channel in history")),
			"nextBouquet": (self.ValisBouquetUp, "Vali's"+" "+_("Bouquet")+" "+_("up")),
			"prevBouquet": (self.ValisBouquetDown, "Vali's"+" "+_("Bouquet")+" "+_("down")),
		})

	if not self._InfoBarChannelSelection__delChannelSelectionScreen in self.onClose:
		self.onClose.append(self._InfoBarChannelSelection__delChannelSelectionScreen)

def Valis_InfoBarChannelSelection_ValisBouquetUp(self):
	cprint("Bouquet up %s" % config.valisepg.bouquetup.value)
	if config.valisepg.bouquetup.value == "default":
		self.openServiceList()
	elif config.valisepg.bouquetup.value == "favourites":
		self.servicelist.showFavourites()
		self.openServiceList()
	elif config.valisepg.bouquetup.value == "providers":
		self.servicelist.showProviders()
		self.openServiceList()
	elif config.valisepg.bouquetup.value == "satellites":
		self.servicelist.showSatellites()
		self.openServiceList()
	elif config.valisepg.bouquetup.value == "next":
		self.zapDown()
	elif config.valisepg.bouquetup.value == "previous":
		self.zapUp()
	elif config.valisepg.bouquetup.value == "valis":
		from Plugins.Extensions.ValisEPG.plugin import ValisEPG
		self.session.open(ValisEPG, zPosition=0)
	else:
		self.openServiceList()

def Valis_InfoBarChannelSelection_ValisBouquetDown(self):
	cprint("Bouquet down %s" % config.valisepg.bouquetdown.value)
	if config.valisepg.bouquetdown.value == "default":
		self.openServiceList()
	elif config.valisepg.bouquetdown.value == "favourites":
		self.servicelist.showFavourites()
		self.openServiceList()
	elif config.valisepg.bouquetdown.value == "providers":
		self.servicelist.showProviders()
		self.openServiceList()
	elif config.valisepg.bouquetdown.value == "satellites":
		self.servicelist.showSatellites()
		self.openServiceList()
	elif config.valisepg.bouquetdown.value == "next":
		self.zapDown()
	elif config.valisepg.bouquetdown.value == "previous":
		self.zapUp()
	elif config.valisepg.bouquetdown.value == "valis":
		from Plugins.Extensions.ValisEPG.plugin import ValisEPG
		self.session.open(ValisEPG, zPosition=0)
	else:
		self.openServiceList()

# rename on startup
Screens.InfoBarGenerics.InfoBarChannelSelection.__init__=Valis_InfoBarChannelSelection__init__
Screens.InfoBarGenerics.InfoBarChannelSelection.ValisBouquetUp=Valis_InfoBarChannelSelection_ValisBouquetUp
Screens.InfoBarGenerics.InfoBarChannelSelection.ValisBouquetDown=Valis_InfoBarChannelSelection_ValisBouquetDown

# import methods from ChannelSelectionPlus ==========
useChannelSelectionPlus=False
showPrimeTime=False
if path.exists("/usr/lib/enigma2/python/Plugins/Extensions/ChannelSelectionPlus"):
	try:
		useChannelSelectionPlus=True
		from Plugins.Extensions.ChannelSelectionPlus.plugin import ServiceListOwn
		CSP_ServiceListOwn_getEventFromService_orig = ServiceListOwn.getEventFromService
		CSP_ServiceListOwn_getEventNameFromEvent_ori = ServiceListOwn.getEventNameFromEvent
	except:
		useChannelSelectionPlus=False

def CSP_ServiceListOwn_getEventFromService(self, service):
	self.showPrimeTime = showPrimeTime
	if not showPrimeTime:
		return CSP_ServiceListOwn_getEventFromService_orig(self, service)
	
	#load PrimeTime-Event
	epgcache = eEPGCache.getInstance()
	now_time = localtime()
	jahr, monat, tag = now_time[0:3]
	primetime_h = int(config.valisepg.ptH.value)
	primetime_m = int(config.valisepg.ptM.value)
	primetime_val = jahr, monat, tag, primetime_h, primetime_m, 0, 0, 0, -1
	epgtime = int(mktime(primetime_val))
	event = epgcache.lookupEventTime(service, epgtime)
	self.PrimeTime = epgtime
	
	return event

def CSP_ServiceListOwn_getEventNameFromEvent(self, event):
	if not showPrimeTime:
		return CSP_ServiceListOwn_getEventNameFromEvent_ori(self, event)
	
	# return EventName with eventTimes for PrimeTime
	beginTime = localtime(event.getBeginTime())
	endTime = localtime(event.getBeginTime()+event.getDuration())
	eventTimeName = "%02d:%02d - %02d:%02d  %s" % (beginTime[3],beginTime[4],endTime[3],endTime[4], event.getEventName())
	return eventTimeName

if useChannelSelectionPlus:
	ServiceListOwn.getEventFromService = CSP_ServiceListOwn_getEventFromService
	ServiceListOwn.getEventNameFromEvent = CSP_ServiceListOwn_getEventNameFromEvent

# ende import ChannelSelectionPlus ==================

class newEPGlist(EPGList):
	SKIN_COMPONENT_KEY = "newEPGlist"
	SKIN_COMPONENT_ICON_HEIGHT = "iconHeight"
	SKIN_COMPONENT_ICON_WIDTH = "iconWidth"
	SKIN_COMPONENT_TIME_WIDTH = "timeWidth"
	SKIN_COMPONENT_TEXT_HEIGHT = "textHeight"
	SKIN_COMPONENT_EVENT_WIDTH = "eventWidth"
	SKIN_COMPONENT_EVENT_HEIGHT = "eventHeight"
	SKIN_COMPONENT_ITEM_MARGIN = "itemMargin"


	def __init__(self, type=EPG_TYPE_SINGLE, selChangedCB=None, timer = None):
		EPGList.__init__(self, type, selChangedCB, timer)
		tlf = TemplatedListFonts()
		self.l.setFont(0, gFont(tlf.face(tlf.MEDIUM), tlf.size(tlf.MEDIUM)))
		self.l.setItemHeight(componentSizes.itemHeight(self.SKIN_COMPONENT_KEY, 60))
		self.l.setBuildFunc(self.buildSingleEntry)
		self.breite = 200
		self.primetime_pixmap = LoadPixmap(cached=True, path='/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/primetime.svg')
		self.search_pixmap = LoadPixmap(cached=True, path='/usr/lib/enigma2/python/Plugins/Extensions/ValisEPG/search.svg')
		try:
			self.searchtext = config.plugins.epgsearch.history.value[0].lower()
		except:
			self.searchtext = None

		sizes = componentSizes[newEPGlist.SKIN_COMPONENT_KEY]
		self._iconWidth = sizes.get(newEPGlist.SKIN_COMPONENT_ICON_WIDTH, 20)
		self._iconHeight = sizes.get(newEPGlist.SKIN_COMPONENT_ICON_HEIGHT, 20)
		self._timeWidth = sizes.get(newEPGlist.SKIN_COMPONENT_TIME_WIDTH, 165) + 20
		self._textHeight = sizes.get(newEPGlist.SKIN_COMPONENT_TEXT_HEIGHT, 24)
		self._eventWidth = sizes.get(newEPGlist.SKIN_COMPONENT_EVENT_WIDTH, 300)
		self._eventHeight = sizes.get(newEPGlist.SKIN_COMPONENT_EVENT_HEIGHT, 26)
		self._itemMargin = sizes.get(newEPGlist.SKIN_COMPONENT_ITEM_MARGIN, 5)

	def fillSingleEPG(self, service):
		if showPrimeTime:
			now_time = localtime()
			jahr, monat, tag = now_time[0:3]
			primetime_h = int(config.valisepg.ptH.value)
			primetime_m = int(config.valisepg.ptM.value)
			primetime_val = jahr, monat, tag, primetime_h, primetime_m, 0, 0, 0, -1
			t = int(mktime(primetime_val))
		else:
			t = time()
		test = [ 'RIBDT', (service.ref.toString(), 0, t, -1) ]
		#test = [ 'RIBDT', (service.ref.toString(), 0, -1, -1) ]
		self.list = self.queryEPG(test)
		self.l.setList(self.list)
		self.selectionChanged()
	
	def buildSingleEntry(self, service, eventId, beginTime, duration, EventName):
		(clock_pic, rec) = self.getPixmapForEntry(service, eventId, beginTime, duration)
		t = localtime(beginTime)
		evCHT = float(str(t[3])+"."+str("%0.2d" % t[4]))
		
		myPT = float(str(config.valisepg.ptH.value)+"."+str("%0.2d" % config.valisepg.ptM.value))
		Primetime1 = myPT - 0.05
		Primetime2 = myPT + 0.05
		res = [None,(eListboxPythonMultiContent.TYPE_TEXT,self._itemMargin,2,self._timeWidth, self._textHeight,0,RT_HALIGN_LEFT|RT_VALIGN_CENTER,self.days[t[6]] + '   ' + '%02d.%02d, %02d:%02d' % (t[2],t[1],t[3],t[4]))]
		if rec:
			res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, self._itemMargin+self._timeWidth, 2, self._iconWidth, self._iconHeight, clock_pic))
		if (evCHT >= Primetime1) and (evCHT <= Primetime2):
			res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, self._itemMargin+self._timeWidth+self._iconWidth+self._itemMargin, 2, self._iconWidth, self._iconHeight, self.primetime_pixmap))
		elif  self.searchtext and (self.searchtext in EventName.lower()):
			res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, self._itemMargin+self._timeWidth+self._iconWidth+self._itemMargin, 2, self._iconWidth, self._iconHeight, self.search_pixmap))
		res.append((eListboxPythonMultiContent.TYPE_TEXT, self._itemMargin+self._timeWidth+self._iconWidth*2.5+self._itemMargin, 0, self._eventWidth, self._textHeight, 0, RT_VALIGN_CENTER, config.valisepg.line.value))
		res.append((eListboxPythonMultiContent.TYPE_TEXT, self._itemMargin, self._textHeight, self._eventWidth, self._eventHeight, 0 ,RT_HALIGN_LEFT, EventName))
		return res

class ChannelSelection_summary(Screen):
	pass

class ValisEPG(ChannelSelection):
	if sz_w == 1920:
		skin = """
		<screen name="ValisEPG" position="center,110" size="1800,930" title="Channels">
		<eLabel backgroundColor="grey" position="10,80" size="1780,1" />
		<eLabel backgroundColor="grey" position="1285,80" size="1,660" />
		<ePixmap pixmap="Default-FHD/skin_default/buttons/red.svg" position="10,5" size="300,70" />
		<ePixmap pixmap="Default-FHD/skin_default/buttons/green.svg" position="310,5" size="300,70" />
		<ePixmap pixmap="Default-FHD/skin_default/buttons/yellow.svg" position="610,5" size="300,70" />
		<ePixmap pixmap="Default-FHD/skin_default/buttons/blue.svg" position="910,5" size="300,70" />
		<widget backgroundColor="#9f1313" font="Regular;30" halign="center" name="key_red" position="10,5" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="300,70" transparent="1" valign="center" zPosition="1" />
		<widget backgroundColor="#1f771f" font="Regular;30" halign="center" name="key_green" position="310,5" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="300,70" transparent="1" valign="center" zPosition="1" />
		<widget backgroundColor="#a08500" font="Regular;30" halign="center" name="key_yellow" position="610,5" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="300,70" transparent="1" valign="center" zPosition="1" />
		<widget backgroundColor="#18188b" font="Regular;30" halign="center" name="key_blue" position="910,5" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="300,70" transparent="1" valign="center" zPosition="1" />
		<widget font="Regular;34" halign="right" position="1650,25" render="Label" size="120,40" source="global.CurrentTime">
			<convert type="ClockToText">Default</convert>
		</widget>
		<widget font="Regular;34" halign="right" position="1240,25" render="Label" size="400,40" source="global.CurrentTime" >
			<convert type="ClockToText">Date</convert>
		</widget>
		<widget serviceItemHeight="49" additionalInfoFont="Regular;30" colorEventProgressbarBorder="grey" colorEventProgressbarBorderSelected="white" colorServiceDescription="grey" colorServiceDescriptionSelected="#d3d3d9" enableWrapAround="1" foregroundColorServiceNotAvail="#525252" name="list" picServiceEventProgressbar="skin_default/progcl.svg" position="10,90" scrollbarMode="showOnDemand" serviceInfoFont="Regular;30" serviceNameFont="Regular;31" serviceNumberFont="Regular;32" size="1260,640" />
		<widget name="epglist" position="1300,90" size="490,640" scrollbarMode="showOnDemand" enableWrapAround="1"/>
		<eLabel backgroundColor="grey" position="10,740" size="1780,1" />
		<widget font="Regular;32" foregroundColor="yellow" halign="center" position="10,750" size="200,40" render="Label" source="Event">
			<convert type="EventTime">Remaining</convert>
			<convert type="RemainingToText">InMinutes</convert>
		</widget>
		<widget source="ServiceEvent" render="Picon" position="10,800" size="200,120">
			<convert type="ServiceName">Reference</convert>
		</widget>
		<widget font="Regular;30" position="240,750" render="Label" size="100,35" source="Event">
			<convert type="EventTime">StartTime</convert>
			<convert type="ClockToText" />
		</widget>
		<widget borderColor="grey" borderWidth="1" position="340,768" render="Progress" size="1350,2" source="Event">
			<convert type="EventTime">Progress</convert>
		</widget>
		<widget pixmap="Default-FHD/skin_default/progress.svg" position="340,763" render="Progress" size="1350,10" source="Event" transparent="1" zPosition="1">
			<convert type="EventTime">Progress</convert>
		</widget>
		<widget font="Regular;30" halign="right" position="1690,750" render="Label" size="100,35" source="Event">
			<convert type="EventTime">EndTime</convert>
			<convert type="ClockToText">Format:%H:%M</convert>
		</widget>
		<widget font="Regular;29" position="240,790" size="1550,135" name="NewDescription"/>
		<widget name="slider1" pixmaps="/usr/share/enigma2/Default-FHD/skin_default/buttons/button_off.svg,/usr/share/enigma2/Default-FHD/skin_default/buttons/button_green.svg" position="1240,40" size="30,30"/>   
		<widget name="slider2" pixmaps="/usr/share/enigma2/Default-FHD/skin_default/buttons/button_off.svg,/usr/share/enigma2/Default-FHD/skin_default/buttons/button_green.svg" position="1300,40" size="30,30"/>
		</screen>"""
	elif sz_w == 2560:
		skin = """
		<screen name="ValisEPG" position="center,160" size="2400,1220" title="Channels">
		<ePixmap pixmap="skin_default/buttons/red.png" position="20,10" size="400,80"  />
		<ePixmap pixmap="skin_default/buttons/green.png" position="420,10" size="400,80"  />
		<ePixmap pixmap="skin_default/buttons/yellow.png" position="820,10" size="400,80"  />
		<ePixmap pixmap="skin_default/buttons/blue.png" position="1220,10" size="400,80"  />
		<widget name="key_red" position="20,10" size="400,80" zPosition="1" font="Regular;40" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" />
		<widget name="key_green" position="420,10" size="400,80" zPosition="1" font="Regular;40" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" />
		<widget name="key_yellow" position="820,10" size="400,80" zPosition="1" font="Regular;40" halign="center" valign="center" backgroundColor="#a08500" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" />
		<widget name="key_blue" position="1220,10" size="400,80" zPosition="1" font="Regular;40" halign="center" valign="center" backgroundColor="#18188b" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" />
		<widget source="global.CurrentTime" render="Label" position="2220,24" size="160,50" font="Regular;44" halign="right">
			<convert type="ClockToText">Default</convert>
		</widget>
		<widget source="global.CurrentTime" render="Label" position="1800,24" size="400,50" font="Regular;44" halign="right">
			<convert type="ClockToText">Format:%a %d. %B</convert>
		</widget>
		<widget name="list" position="20,120" size="1680,816" enableWrapAround="1" scrollbarMode="showOnDemand" backgroundColor="background" serviceInfoFont="Regular;40" colorServiceDescription="grey" colorServiceDescriptionSelected="#d3d3d9" foregroundColorServiceNotAvail="#525252" picServiceEventProgressbar="Default-FHD/skin_default/progress.svg" colorEventProgressbarBorder="grey" colorEventProgressbarBorderSelected="white" transparent="1" />
		<eLabel position="20,100" size="2360,2" backgroundColor="grey" />
		<eLabel position="1720,100" size="2,860" backgroundColor="grey" />
		<widget name="epglist" position="1740,110" size="640,840" scrollbarMode="showOnDemand" enableWrapAround="1" />
		<eLabel position="20,960" size="2360,2" backgroundColor="grey" />
		<widget font="Regular;68" halign="right" position="2480,50" render="Label" size="800,80" source="global.CurrentTime">
			<convert type="ClockToText">Date</convert>
		</widget>
		<widget font="Regular;44" foregroundColor="yellow" halign="center" position="20,970" size="266,60" render="Label" source="Event">
			<convert type="EventTime">Remaining</convert>
			<convert type="RemainingToText">InMinutes</convert>
		</widget>
		<widget source="ServiceEvent" render="Picon" position="20,1040" size="266,160">
			<convert type="ServiceName">Reference</convert>
		</widget>
		<widget font="Regular;40" position="320,970" render="Label" size="180,50" source="Event">
			<convert type="EventTime">StartTime</convert>
			<convert type="ClockToText" />
		</widget>
		<widget borderColor="grey" borderWidth="2" position="520,992" render="Progress" size="1660,4" source="Event">
			<convert type="EventTime">Progress</convert>
		</widget>
		<widget pixmap="Default-FHD/skin_default/progress.svg" position="520,984" render="Progress" size="1660,16" source="Event" transparent="1" zPosition="1">
			<convert type="EventTime">Progress</convert>
		</widget>
		<widget font="Regular;40" halign="right" position="2200,970" render="Label" size="180,50" source="Event">
			<convert type="EventTime">EndTime</convert>
			<convert type="ClockToText">Format:%H:%M</convert>
		</widget>
		<widget font="Regular;38" position="320,1030" size="2060,180" name="NewDescription" />  
		<widget name="slider1" pixmaps="/usr/share/enigma2/skin_default/buttons/button_off.png,/usr/share/enigma2/skin_default/buttons/button_green.png" position="1660,50" size="40,40" />   
		<widget name="slider2" pixmaps="/usr/share/enigma2/skin_default/buttons/button_off.png,/usr/share/enigma2/skin_default/buttons/button_green.png" position="1740,50" size="40,40" />
		</screen>"""
	else:
		skin = """
		<screen name="ValisEPG" position="center,80" size="1200,610" title="Channels">
		<ePixmap pixmap="skin_default/buttons/red.png" position="10,5" size="200,40"  />
		<ePixmap pixmap="skin_default/buttons/green.png" position="210,5" size="200,40"  />
		<ePixmap pixmap="skin_default/buttons/yellow.png" position="410,5" size="200,40"  />
		<ePixmap pixmap="skin_default/buttons/blue.png" position="610,5" size="200,40"  />
		<widget name="key_red" position="10,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" />
		<widget name="key_green" position="210,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" />
		<widget name="key_yellow" position="410,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" />
		<widget name="key_blue" position="610,5" size="200,40" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" />
		<widget source="global.CurrentTime" render="Label" position="1110,12" size="80,25" font="Regular;22" halign="right">
			<convert type="ClockToText">Default</convert>
		</widget>
		<widget source="global.CurrentTime" render="Label" position="900,12" size="200,25" font="Regular;22" halign="right">
			<convert type="ClockToText">Format:%a %d. %B</convert>
		</widget>
		<widget name="list" position="10,60" size="840,408" enableWrapAround="1" scrollbarMode="showOnDemand" backgroundColor="background" serviceInfoFont="Regular;20" colorServiceDescription="grey" colorServiceDescriptionSelected="#d3d3d9" foregroundColorServiceNotAvail="#525252" picServiceEventProgressbar="skin_default/progcl.png" colorEventProgressbarBorder="grey" colorEventProgressbarBorderSelected="white" />
		<eLabel position="10,50" size="1180,1" backgroundColor="grey" />
		<eLabel position="860,50" size="1,430" backgroundColor="grey" />
		<widget name="epglist" position="870,55" size="320,420" scrollbarMode="showOnDemand" enableWrapAround="1"/>
		<eLabel position="10,480" size="1180,1" backgroundColor="grey" />
		<widget font="Regular;34" halign="right" position="1240,25" render="Label" size="400,40" source="global.CurrentTime" >
			<convert type="ClockToText">Date</convert>
		</widget>
		<widget font="Regular;22" foregroundColor="yellow" halign="center" position="10,485" size="133,30" render="Label" source="Event">
			<convert type="EventTime">Remaining</convert>
			<convert type="RemainingToText">InMinutes</convert>
		</widget>
		<widget source="ServiceEvent" render="Picon" position="10,520" size="133,80">
			<convert type="ServiceName">Reference</convert>
		</widget>
		<widget font="Regular;20" position="160,485" render="Label" size="90,25" source="Event">
			<convert type="EventTime">StartTime</convert>
			<convert type="ClockToText" />
		</widget>
		<widget borderColor="grey" borderWidth="1" position="260,496" render="Progress" size="830,2" source="Event">
			<convert type="EventTime">Progress</convert>
		</widget>
		<widget pixmap="skin_default/progress.png" position="260,492" render="Progress" size="830,8" source="Event" transparent="1" zPosition="1">
			<convert type="EventTime">Progress</convert>
		</widget>
		<widget font="Regular;20" halign="right" position="1100,485" render="Label" size="90,25" source="Event">
			<convert type="EventTime">EndTime</convert>
			<convert type="ClockToText">Format:%H:%M</convert>
		</widget>
		<widget font="Regular;19" position="160,515" size="1030,90" name="NewDescription"/>  
		<widget name="slider1" pixmaps="/usr/share/enigma2/skin_default/buttons/button_off.png,/usr/share/enigma2/skin_default/buttons/button_green.png" position="830,25" size="20,20"/>   
		<widget name="slider2" pixmaps="/usr/share/enigma2/skin_default/buttons/button_off.png,/usr/share/enigma2/skin_default/buttons/button_green.png" position="870,25" size="20,20"/>
		</screen>"""

	def __init__(self, session):
		ChannelSelection.__init__(self, session)
		# prevent PipZap crashes
		self.dopipzap = False
		self.enable_pipzap = False
		#
		self["epglist"] = newEPGlist(type = EPG_TYPE_SINGLE, selChangedCB = self.onEPGLSelectionChanged, timer = session.nav.RecordTimer)
		self.aktCurrentService = ServiceReference(self.getCurrentSelection())
		self.aktListBox = 1
		self.RedBtnMode = "FAVO"
		self["key_red"] = Button(_("Similar"))
		self["key_green"] = Button(_("Add timer"))
		self["key_yellow"] = Button(_("Today")+" "+str(config.valisepg.ptH.value)+":"+str("%0.2d" % config.valisepg.ptM.value))
		self["key_blue"] = Button(_("Favourites"))
		self["Event"] = Event()
		self["NewDescription"] = Label(" ")
		self["slider1"] = MultiPixmap()
		self["slider2"] = MultiPixmap()
		self.AutoZap = eTimer()
		self.AutoZap_conn = self.AutoZap.timeout.connect(self.zapForRefresh)

		self.AZpos = 1
		self.updateEPGlist = True
		self.movemode = False
		#self.onShown.append(self.onVEPGshow)
		self.onHide.append(self.onVEPGhide)
		self.lastservice = config.tv.lastservice
		
		self["actions"] = NumberActionMap(["ChannelSelectBaseActions", "OkCancelActions", "DirectionActions", "InfobarActions", "InfobarTeletextActions", "InfobarInstantRecord"],
			{
				"showFavourites": self.keyRedAction,
				"showAllServices": self.runEPGsearch,
				"showProviders": self.goPT,
				"showSatellites": self.AddConfirmedTimer,
				"instantRecord": self.instantRecord,
				"nextBouquet": self.nextBouquet,
				"prevBouquet": self.prevBouquet,
				"nextMarker":  self.rightList,
				"prevMarker":  self.leftList,
				"cancel": self.cancel,
				"ok": self.pressOK,
				"right": self.pageDown0,
				"rightRepeated": self.pageDown0,
				"left": self.pageUp0,
				"leftRepeated": self.pageUp0,
				"up": self.moveUp0,
				"upRepeated": self.moveUp0,
				"down": self.moveDown0,
				"downRepeated": self.moveDown0,
				"showMovies": self.OptionsMenu,
				"gotAsciiCode": self.keyAsciiCode,
				"1": self.keyNumberGlobal,
				"2": self.keyNumberGlobal,
				"3": self.keyNumberGlobal,
				"4": self.keyNumberGlobal,
				"5": self.keyNumberGlobal,
				"6": self.keyNumberGlobal,
				"7": self.keyNumberGlobal,
				"8": self.keyNumberGlobal,
				"9": self.keyNumberGlobal,
				"0": self.keyNumber0,
				"startTeletext": self.showSinEPG,
				"showTv": self.setModeTv
			}, -1)
		
		#self.onLayoutFinish.append(self.AfterCreate)
		self.onFirstExecBegin.append(self.AfterCreate)
		
		#set redkey to multiple action from WHERE_CHANNEL_SELECTION_RED
		if hasattr(PluginDescriptor, "WHERE_CHANNEL_SELECTION_RED"):
			actions = self["actions"].actions
			del actions['showAllServices'] #delete redKeyFunction
			self._pluginList = []
			self._checkPlugins()

	def _checkPlugins(self):
		self._pluginList = [(p.name, p, False) for p in plugins.getPlugins(where = PluginDescriptor.WHERE_CHANNEL_SELECTION_RED)]
		#check if is already exist an entry for EPGSearch
		if len([x for x in self._pluginList if x[1].path.endswith("/EPGSearch")]) == 0:
			self._pluginList.append((_("Similar"), self.runEPGsearch, True))
		if self._pluginList:
			if len(self._pluginList) > 1:
				self["key_red"].setText(_("More ..."))
			else:
				self["key_red"].setText(self._pluginList[0][0])
		else:
			self["key_red"].setText("")

	def _openPlugins(self):
		if self._pluginList:
			if len(self._pluginList) > 1:
				self.session.openWithCallback(self._onPluginSelected, ChoiceBox, list=self._pluginList, windowTitle=_("More ..."))
			else:
				self._onPluginSelected(self._pluginList[0])

	def _onPluginSelected(self, p=None):
		noargs = p and p[2]
		fnc = p and p[1]
		if not fnc:
			return
		if noargs: #noarg for multiepgcallback backwards compat
			fnc()
			return
		
		event = self["epglist"].getCurrent()[0]
		if not event:
			self.session.toastManager.showToast(_("This feature requires valid EPG!"))
			return
		fnc(self.session, event, self["epglist"].getCurrent()[1])

	def createSummary(self):
		return ChannelSelection_summary

	def cancel(self):
		if self.movemode: #movemode active?
			self.toggleMoveMode()
		lastservice=eServiceReference(self.lastservice.value)
		if lastservice.valid() and self.getCurrentSelection() != lastservice:
			self.setCurrentSelection(lastservice)
		self.setModeTv()
		if showPrimeTime:
			self.togglePrimTime()
		self.close(None)

	def leftList(self):
		self.aktListBox = 1
		self["slider1"].setPixmapNum(1)
		self["slider2"].setPixmapNum(0)
		self["epglist"].l.setSelectionEnable(False)
		self["list"].l.setSelectionEnable(True)

	def rightList(self):
		self.aktListBox = 2
		self["slider1"].setPixmapNum(0)
		self["slider2"].setPixmapNum(1)
		self["epglist"].l.setSelectionEnable(True)
		self["list"].l.setSelectionEnable(False)

	def moveUp0(self):
		if self.aktListBox==1:
			self["list"].moveUp()
		else:
			self["epglist"].moveUp()

	def moveDown0(self):
		if self.aktListBox==1:
			self["list"].moveDown()
		else:
			self["epglist"].moveDown()

	def pageUp0(self):
		if self.aktListBox==1:
			self["list"].instance.moveSelection(self["list"].instance.pageUp)
		else:
			self["epglist"].instance.moveSelection(self["list"].instance.pageUp)

	def pageDown0(self):
		if self.aktListBox==1:
			self["list"].instance.moveSelection(self["list"].instance.pageDown)
		else:
			self["epglist"].instance.moveSelection(self["list"].instance.pageDown)

	def nextBouquet(self):
		self.leftList()
		self.changeBouquet(+1)

	def prevBouquet(self):
		self.leftList()
		self.changeBouquet(-1)
		
	def AfterCreate(self):
		self["slider1"].setPixmapNum(1)
		self["slider2"].setPixmapNum(0)
		self.setModeTv()
		self.UpdateInfos()
		self["epglist"].l.setSelectionEnable(False)

	def onVEPGshow(self):
		pass

	def onVEPGhide(self):
		if self.updateEPGlist:
			self.leftList()
		else:
			self.updateEPGlist = True
		#if self.movemode:
		#	self.toggleMoveMode()

	def UpdateInfos(self):
		l = self["epglist"]
		l.recalcEntrySize()
		aktRef=self.getCurrentSelection()
		self.aktCurrentService=ServiceReference(aktRef)
		l.fillSingleEPG(self.aktCurrentService)
		self["epglist"].instance.moveSelectionTo(0)

	def onEPGLSelectionChanged(self):
		self["NewDescription"].setText(" ")
		cur = self["epglist"].getCurrent()
		event = cur[0]
		self["Event"].newEvent(event)
		if cur is None:
			self["key_green"].setText(" ")
			return
		else:
			event = cur[0]
			if event is None:
				self["key_green"].setText(" ")
				return
			else:
				if cur[1] is None or cur[1].getServiceName() == "":
					self["key_green"].setText(" ")
					return
		serviceref = cur[1]
		eventid = event.getEventId()
		refstr = serviceref.ref.toString()
		isRecordEvent = False
		for timer in self.session.nav.RecordTimer.timer_list:
			if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
				isRecordEvent = True
				break
		if isRecordEvent:
			self["key_green"].setText(_("Remove timer"))
		elif not isRecordEvent:
			self["key_green"].setText(_("Add timer"))
		if event is None:
			return
		text = ""
		short = event.getShortDescription()
		ext = event.getExtendedDescription()
		if short and short != text:
			text += short
		if ext:
			if text:
				text += '  ->  '
			text += ext
		self["NewDescription"].setText(text)

	def updateEventInfo(self):
		if self.aktListBox==1:
			cur = self.getCurrentSelection()
			self["ServiceEvent"].newService(cur)
			self.UpdateInfos()

	def pressOK(self):
		if self.aktListBox==1:
			self.channelSelected()
			if showPrimeTime:
				self.togglePrimTime()
		else:
			self.showEPGList()

	def showEPGList(self):
		self.updateEPGlist = False
		cprint(">>>> ValisEPG showEPGList")
		cur = self["epglist"].getCurrent()
		event = cur[0]
		service = cur[1]
		if event is not None:
			from Screens.EventView import EventViewEPGSelect
			self.session.open(EventViewEPGSelect, event, service, self.eventViewCallback, self.openSingleServiceEPG, InfoBar.instance.openMultiServiceEPG, InfoBar.instance.openSimilarList)

	def openSingleServiceEPG(self):
		self.savedService = self.getCurrentSelection()
		self.session.openWithCallback(self.SingleServiceEPGClosed, impotedEPGSelection, self.getCurrentSelection(), serviceChangeCB=self.changeServiceCB)

	def SingleServiceEPGClosed(self, ret=False):
		self.setCurrentSelection(self.savedService)

	def OpenSimiList(self, eventid, refstr):
		self.session.open(impotedEPGSelection, refstr, None, eventid)

	def eventViewCallback(self, setEvent, setService, val):
		l = self["epglist"]
		old = l.getCurrent()
		if val == -1:
			self["epglist"].moveUp()
		elif val == +1:
			self["epglist"].moveDown()
		cur = l.getCurrent()
		setService(cur[1])
		setEvent(cur[0])

	def OptionsMenu(self):
		cur_service = ServiceReference(self.getCurrentSelection())
		name = cur_service.getServiceName()
		askList = []
		#askList.append((_("Channel Selection")+" - "+_("Favourites"), "FAVO"))
		askList.append((_("Channel Selection")+" - "+_("Providers"), "PROV"))
		askList.append((_("Channel Selection")+" - "+_("Satellites"), "SAT"))
		askList.append((_("Channel Selection")+" - "+_("All") +" "+_("Services"), "ALL"))
		askList.append((_("Single EPG")+": "+name, "SINGLE"))
		askList.append((_("Timer selection"), "TIMER"))
		askList.append((_("Load")+" "+_("EPG")+" "+_("Automatic"), "REFRESH"))
		self.session.openWithCallback(self.OptionsCallback, ChoiceBox, title=("Vali's EPG "+_("Advanced Options")), list = askList)

	def OptionsCallback(self, choice):
		choice = choice and choice[1]
		if choice:
			if choice=="PROV":
				#self["key_blue"].setText(_("Providers"))
				#self.RedBtnMode = choice
				self.showProviders()
				self.RedBtnMode = "FAVO"
			elif choice=="SAT":
				#self["key_blue"].setText(_("Satellites"))
				#self.RedBtnMode = choice
				self.showSatellites()
				self.RedBtnMode = "FAVO"
			elif choice=="ALL":
				#self["key_blue"].setText(_("All"))
				#self.RedBtnMode = choice
				self.showAllServices()
				self.RedBtnMode = "FAVO"
			#elif choice=="FAVO":
			#	self["key_blue"].setText(_("Favourites"))
			#	#self.RedBtnMode = choice
			#	self.showFavourites()
			#	self.RedBtnMode = "FAVO"
			elif choice=="TIMER":
				from Screens.TimerEdit import TimerEditList
				self.session.open(TimerEditList)
			elif choice=="SINGLE":
				ref=self.getCurrentSelection()
				if ref:
					self.savedService = ref
					self.session.openWithCallback(self.SingleServiceEPGClosed, impotedEPGSelection, ref, serviceChangeCB = self.changeServiceCB)
			elif choice=="REFRESH":
				az = self.session.openWithCallback(self.clbAutoZap, ChoiceBox, title=(_("Load")+" "+_("EPG")+" "+_("Automatic")), list = [(_("Cancel"), "DUMMY")])
				az.setTitle("Vali's EPG"+" "+_("Load"))
				if az.instance.size().width()<1000:
					az.instance.move(ePoint(50,70))
				self.AZpos = self["list"].getCurrentIndex()
				self.AutoZap.start(config.valisepg.autozap.value*1000)

	def clbAutoZap(self, dummy):
		self["list"].moveToIndex(self.AZpos)
		self.zap()
		self.AutoZap.stop()

	def zapForRefresh(self):
		self["list"].moveDown()
		NewService = self.getCurrentSelection()
		if (NewService.flags & 7) == 7:
			self.enterPath(NewService)
		elif not (NewService.flags & eServiceReference.isMarker):
			self.zap()

	def keyRedAction(self):
		if self.RedBtnMode=="PROV":
			self.showProviders()
		elif self.RedBtnMode=="SAT":
			self.showSatellites()
		elif self.RedBtnMode=="ALL":
			self.showAllServices()
		elif self.RedBtnMode=="FAVO":
			if not self.pathChangeDisabled:
				self.preEnterPath(self.bouquet_rootstr) #pseudo-code to showFavourites every time
			self.showFavourites()

	def runEPGsearch(self):
		if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/EPGSearch/plugin.pyo"):
			self.updateEPGlist = False
			from Plugins.Extensions.EPGSearch.EPGSearch import EPGSearch
			service = self.getCurrentSelection()
			epg_cur = self["epglist"].getCurrent()
			epg_event = epg_cur[0]
			if epg_event:
				epg_name = epg_event and epg_event.getEventName() or ''
				self.session.open(EPGSearch, epg_name, False)
		else:
			self.session.open(MessageBox, _("A required tool (%s) was not found.") % ("EPGSearch"), MessageBox.TYPE_INFO)

	def instantRecord(self):
		pass

	def AddConfirmedTimer(self):
		self.updateEPGlist = False
		ref=self.getCurrentSelection()
		cur = self["epglist"].getCurrent()
		event = cur[0]
		if event is None:
			return
		serviceref = cur[1]
		eventid = event.getEventId()
		refstr = serviceref.ref.toString()
		for timer in self.session.nav.RecordTimer.timer_list:
			if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
				cb_func = lambda ret : not ret or self.removeTimer(timer)
				self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
				break
		else:
			newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
			self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)

	def removeTimer(self, timer):
		timer.afterEvent = AFTEREVENT.NONE
		self.session.nav.RecordTimer.removeEntry(timer)
		self["key_green"].setText(_("Add timer"))

	def finishedAdd(self, answer):
		if answer[0]:
			entry = answer[1]
			simulTimerList = self.session.nav.RecordTimer.record(entry)
			if simulTimerList is not None:
				for x in simulTimerList:
					if x.setAutoincreaseEnd(entry):
						self.session.nav.RecordTimer.timeChanged(x)
				simulTimerList = self.session.nav.RecordTimer.record(entry)
				if simulTimerList is not None:
					self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
			self["key_green"].setText(_("Remove timer"))

	def finishSanityCorrection(self, answer):
		self.finishedAdd(answer)

	def getBqtServices(self, bouquet):
		services = [ ]
		servicelist = eServiceCenter.getInstance().list(bouquet)
		if not servicelist is None:
			while True:
				service = servicelist.getNext()
				if not service.valid():
					break
				if service.flags & (eServiceReference.isDirectory | eServiceReference.isMarker): #ignore non playable services
					continue
				services.append(ServiceReference(service))
		return services

	def showSinEPG(self):
		ref=self.getCurrentSelection()
		if ref:
			self.savedService = ref
			self.session.openWithCallback(self.SingleServiceEPGClosed, impotedEPGSelection, ref, serviceChangeCB = self.changeServiceCB)

	def togglePrimTime(self):
		global showPrimeTime
		if showPrimeTime:
			showPrimeTime = False
			self["key_yellow"].setText(_("Today")+" "+str(config.valisepg.ptH.value)+":"+str("%0.2d" % config.valisepg.ptM.value))
		else:
			showPrimeTime = True
			self["key_yellow"].setText(_("Now"))

	def goPT(self):
		if useChannelSelectionPlus:
			self.togglePrimTime()
			self["list"].l.refresh()
			self["epglist"].fillSingleEPG(self.aktCurrentService)
			self["epglist"].instance.moveSelectionTo(0)
			return
		
		self.updateEPGlist = False
		bouquets = self.servicelist.getRoot()
		newservices = self.getBqtServices(bouquets)
		class EPGSelection(impotedEPGSelection):
			def __init__(self, session, service=None, zapFunc=None, eventid=None, bouquetChangeCB=None, serviceChangeCB=None):
				impotedEPGSelection.__init__(self, session, newservices, zapFunc, eventid, bouquetChangeCB, serviceChangeCB)
			def onCreate(self):
				if self.type == EPG_TYPE_MULTI:
					heute = localtime(time())
					ptheute = datetime(heute[0],heute[1],heute[2],heute[3],heute[4])
					heute_time = int(mktime(ptheute.timetuple()))
					pt = datetime(heute[0],heute[1],heute[2],config.valisepg.ptH.value,config.valisepg.ptM.value)
					pt_ask_time = int(mktime(pt.timetuple()))
					if pt_ask_time<heute_time:
						pt_ask_time = pt_ask_time + 86400
					self["key_red"].hide()
					self["key_yellow"].hide()
					self["key_blue"].hide()
					self["now_text"].hide()
					self["next_text"].hide()
					self["more_text"].hide()
					l = self["list"]
					l.recalcEntrySize()
					l.fillMultiEPG(self.services, pt_ask_time)
					l.moveToService(self.session.nav.getCurrentlyPlayingServiceReference())
			def zapTo(self):
				pass
			def yellowButtonPressed(self):
				pass
			def blueButtonPressed(self):
				pass
			def enterDateTime(self):
				pass
			#def prevBouquet(self):
				#pass
			#def nextService(self):
				#pass
		self.session.open(EPGSelection, newservices)



class ValisEPGconfig(ConfigListScreen, Screen):
	if sz_w == 1920:
		skin = """
		<screen name="ValisEPGconfig" position="center,center" size="1030,450" title="Vali's EPG Setup">
		<ePixmap pixmap="Default-FHD/skin_default/buttons/red.svg" position="20,10" size="320,70" />
		<ePixmap pixmap="Default-FHD/skin_default/buttons/green.svg" position="355,10" size="320,70" />
		<ePixmap pixmap="Default-FHD/skin_default/buttons/blue.svg" position="690,10" size="320,70" />
		<eLabel backgroundColor="#9f1313" font="Regular;30" halign="center" position="20,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="320,70" text="Cancel" transparent="1" valign="center" zPosition="1" />
		<eLabel backgroundColor="#1f771f" font="Regular;30" halign="center" position="355,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="320,70" text="Save" transparent="1" valign="center" zPosition="1" />
		<eLabel backgroundColor="#1f771f" font="Regular;30" halign="center" position="690,10" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" size="320,70" text="About" transparent="1" valign="center" zPosition="1" />
		<eLabel backgroundColor="grey" position="10,90" size="1010,1" />
		<widget enableWrapAround="1" name="config" position="20,100" scrollbarMode="showOnDemand" size="990,340" />
		</screen>"""
	elif sz_w == 2560:
		skin = """
		<screen name="ValisEPGconfig" position="center,center" size="1640,580" title="Vali's EPG Setup">
		<ePixmap pixmap="skin_default/buttons/red.png" position="20,10" size="520,100" />
		<ePixmap pixmap="skin_default/buttons/green.png" position="560,10" size="520,100" />
		<ePixmap pixmap="skin_default/buttons/blue.png" position="1100,10" size="520,100" />
		<eLabel text="Cancel" position="20,10" size="520,100" zPosition="1" font="Regular;40" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" />
		<eLabel text="Save" position="560,10" size="520,100" zPosition="1" font="Regular;40" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" />
		<eLabel text="About" position="1100,10" size="520,100" zPosition="1" font="Regular;40" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-4,-4" />
		<eLabel backgroundColor="grey" position="20,120" size="1600,2" />		
		<widget name="config" position="20,140" size="1600,420" enableWrapAround="1" scrollbarMode="showOnDemand" />
		</screen>"""
	else:
		skin = """
		<screen name="ValisEPGconfig" position="center,center" size="820,290" title="Vali's EPG Setup">
		<ePixmap pixmap="skin_default/buttons/red.png" position="10,5" size="260,50"/>
		<ePixmap pixmap="skin_default/buttons/green.png" position="280,5" size="260,50"/>
		<ePixmap pixmap="skin_default/buttons/blue.png" position="550,5" size="260,50"/>
		<eLabel text="Cancel" position="10,5" size="260,50" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" />
		<eLabel text="Save" position="280,5" size="260,50" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" />
		<eLabel text="About" position="550,5" size="260,50" zPosition="1" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-2,-2" />
		<eLabel backgroundColor="grey" position="10,60" size="800,1" />		
		<widget name="config" position="10,70" size="800,210" enableWrapAround="1" scrollbarMode="showOnDemand"/>
		</screen>"""
	def __init__(self, session):
		self.session = session
		Screen.__init__(self, session)
		self.onShown.append(self.setWindowTitle)
		self.isVEPGactive = False
		self.ConfigDreamboxPluginDetection()		
		list = []
		list.append(getConfigListEntry(_("Channel Selection"), config.valisepg.channellist))
		list.append(getConfigListEntry("Primetime"+" ["+_("hour")+"]", config.valisepg.ptH))
		list.append(getConfigListEntry("Primetime"+" ["+_("minutes")+"]", config.valisepg.ptM))
		list.append(getConfigListEntry(_("Load")+" "+_("EPG")+" "+_("Automatic")+" ["+_("seconds")+"]", config.valisepg.autozap))
		if self.has_geminiqbutton:		
			list.append(getConfigListEntry(_("Bouquet")+" "+_("up"), config.valisepg.bouquetup))
		if self.has_geminiqbutton:		
			list.append(getConfigListEntry(_("Bouquet")+" "+_("down"), config.valisepg.bouquetdown))
		list.append(getConfigListEntry(_("Show")+" "+_("filling line"), config.valisepg.line))
		ConfigListScreen.__init__(self, list)
		self["actions"] = NumberActionMap(["OkCancelActions", "ColorActions"], 
									{
									"red": self.exit,
									"green": self.save,
									"yellow": self.save,
									"blue": self.about,
									"cancel": self.exit
									}, -1)
	
	def setWindowTitle(self):
		self.setTitle(valisepg_setup+" V"+valisepg_version) 

	def save(self):
		servicelistchanged = config.valisepg.channellist.isChanged() == True
		for x in self["config"].list:
			x[1].save()
		if servicelistchanged:
			if config.valisepg.channellist.value == "valis":
				InfoBar.instance.servicelist = InfoBar.instance.session.instantiateDialog(ValisEPG, zPosition=0)
			else:
				InfoBar.instance.servicelist = InfoBar.instance.session.instantiateDialog(ChannelSelection, zPosition=0)
		self.close(servicelistchanged)

	def exit(self):
		for x in self["config"].list:
			x[1].cancel()
		self.close()

	def about(self):
		self.session.open(MessageBox, _("Vali's EPG")+" "+_("Plugin")+" "+_("Version")+" "+valisepg_version+"\n\n"+_("modded by SvenH aka Dreamy"),  MessageBox.TYPE_INFO)
		
	def ConfigDreamboxPluginDetection(self):
		
		if path.exists("/usr/lib/enigma2/python/Plugins/GP4/geminiqbutton"):
			self.has_geminiqbutton=False
		else:
			self.has_geminiqbutton=True	
			
def extensionlonginfo(session,service=None, **kwargs):
	cprint(">>>> Long Info Menu")
	session.open(ValisEPG, zPosition=0)

def openValisEPG_ChannelContextMenu(session, service=None, **kwargs):
	session.openWithCallback(boundFunction(ValisEPGconfig_Callback,session.current_dialog), ValisEPGconfig)

def ValisEPGconfig_Callback(ChannelContextMenu, retValue=None):
	if retValue:
		ChannelContextMenu.hide()
		InfoBar.instance.openServiceList()
	ChannelContextMenu.close(retValue)

def Plugins(**kwargs):
	
	setup_name = _("ValisEPGsetup")
	return [PluginDescriptor(name=setup_name, description = valisepg_setup, where=[ PluginDescriptor.WHERE_CHANNEL_CONTEXT_MENU ], fnc = openValisEPG_ChannelContextMenu),
			PluginDescriptor(name=setup_name, description=valisepg_setup, where=PluginDescriptor.WHERE_MENU, fnc=main),
			PluginDescriptor(name=_("Vali's EPG"), description=_("Vali's EPG"), where = PluginDescriptor.WHERE_EVENTINFO, fnc=extensionlonginfo)]

def main(menuid):
	if menuid != "osd_video_audio":
		return [ ]
	return [(valisepg_setup, VEPGhandle, "valisepg", None)]

def VEPGhandle(session, **kwargs):
	session.open(ValisEPGconfig)