The way the address of a vlc-server is specified has changed. Now it is possible...
[vuplus_dvbapp-plugin] / vlcplayer / src / VlcServerList.py
1 # -*- coding: ISO-8859-1 -*-
2 #===============================================================================
3 # VLC Player Plugin by A. Lätsch 2007
4 #                   modified by Volker Christian 2008
5 #
6 # This is free software; you can redistribute it and/or modify it under
7 # the terms of the GNU General Public License as published by the Free
8 # Software Foundation; either version 2, or (at your option) any later
9 # version.
10 #===============================================================================
11
12
13 from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, gFont
14 from Components.config import config
15 from Components.MenuList import MenuList
16 from Components.ActionMap import ActionMap
17 from Components.Label import Label
18 from Components.Button import Button
19 from Screens.MessageBox import MessageBox
20 from Screens.Screen import Screen
21 from Tools.LoadPixmap import LoadPixmap
22
23 from VlcServerConfig import VlcServerConfig
24 from VlcServerConfig import VlcServerConfigScreen
25 from VlcMediaList import VlcMediaListScreen
26 from VlcServerConfig import vlcPluginInfo,_
27
28 def VlcServerListEntry(vlcServer):
29         res = [ vlcServer ]
30         res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 470, 20, 0, RT_HALIGN_LEFT, vlcServer.getName()))
31
32         png = LoadPixmap(vlcPluginInfo.pluginPath + "/vlc.png")
33         if png is not None:
34                 res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png))
35
36         return res
37
38
39 class VlcServerList(MenuList):
40         def __init__(self):
41                 MenuList.__init__(self, list, False, eListboxPythonMultiContent)
42                 self.l.setFont(0, gFont("Regular", 18))
43                 self.l.setItemHeight(23)
44
45         def update(self, serverList):
46                 self.list = []
47                 for server in serverList:
48                         self.list.append(VlcServerListEntry(server))
49                 self.l.setList(self.list)
50                 self.moveToIndex(0)
51
52         def getSelection(self):
53                 if self.l.getCurrentSelection() is None:
54                         return None
55                 return self.l.getCurrentSelection()[0]
56
57
58 class VlcServerListScreen(Screen):
59         skin = """
60                 <screen position="80,100" size="560,400" title="VLC Video Player V2.5" >
61                         <widget name="serverlabel" position="10,10" size="550,20" font="Regular;18"/>
62                         <widget name="serverlist" position="10,35" size="550,310"  scrollbarMode="showOnDemand"/>
63                         <ePixmap name="red"    position="0,355"   zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
64                         <ePixmap name="green"  position="140,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
65                         <ePixmap name="yellow" position="280,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
66                         <ePixmap name="blue"   position="420,355" zPosition="4" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
67                         <widget name="key_red" position="0,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
68                         <widget name="key_green" position="140,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
69                         <widget name="key_yellow" position="280,355" zPosition="5" size="140,40" valign="center" halign="center"  font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
70                         <widget name="key_blue" position="420,355" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
71                 </screen>"""
72
73         def __init__(self, session):
74                 Screen.__init__(self, session)
75                 self.session = session
76                 self.serverlist = VlcServerList()
77                 self.vlcServerConfig = VlcServerConfig()
78
79                 self["serverlabel"] = Label("List of known VLC-Server")
80                 self["serverlist"] = self.serverlist
81                 self["key_red"] = Button(_("delete server"))
82                 self["key_green"] = Button(_("add server"))
83                 self["key_yellow"] = Button(_("edit server"))
84                 self["key_blue"] = Button("")
85
86                 self["actions"] = ActionMap(["WizardActions", "MenuActions", "ShortcutActions", "MoviePlayerActions"],
87                         {
88                          "back":        self.close,
89                          "red":         self.keyDelete,
90                          "green":       self.keyAddServer,
91                          "yellow":      self.keyEditServer,
92                          "up":          self.up,
93                          "down":        self.down,
94                          "left":        self.left,
95                          "right":       self.right,
96                          "ok":          self.ok,
97                          }, -1)
98
99                 self.onLayoutFinish.append(self.updateServerlist)
100
101         def updateServerlist(self):
102                 self.serverlist.update(self.vlcServerConfig.getServerlist())
103
104         def keyAddServer(self):
105                 newServer = self.vlcServerConfig.new()
106                 self.session.openWithCallback(self.addCallback, VlcServerConfigScreen, newServer)
107
108         def addCallback(self, result, server):
109                 if result:
110                         self.vlcServerConfig.save(server)
111                         self.updateServerlist()
112                 else:
113                         self.vlcServerConfig.delete(server)
114
115         def keyDelete(self):
116                 self.session.openWithCallback(self.deleteCallback, MessageBox, _("Really delete this Server?"))
117
118         def deleteCallback(self, result):
119                 if result:
120                         self.vlcServerConfig.delete(self.serverlist.getSelection())
121                         self.updateServerlist()
122
123         def keyEditServer(self):
124                 server = self.serverlist.getSelection()
125                 if server is not None:
126                         self.session.openWithCallback(self.editCallback, VlcServerConfigScreen, server)
127
128         def editCallback(self, result, server):
129                 if result:
130                         self.vlcServerConfig.save(server)
131                         self.updateServerlist()
132
133         def up(self):
134                 self.serverlist.up()
135
136         def down(self):
137                 self.serverlist.down()
138
139         def left(self):
140                 self.serverlist.pageUp()
141
142         def right(self):
143                 self.serverlist.pageDown()
144
145         def ok(self):
146                 if self.serverlist.getSelection() is not None:
147                         self.session.open(VlcMediaListScreen, self.serverlist.getSelection()).update()