source: ipk/source.sh4/swapplayers_mediacenter_1.0/var/swap/extensions/MediaCenter/GlobalFunctions.py@ 9331

Last change on this file since 9331 was 5365, checked in by Captain, 15 years ago

[Plugin] fix GS VideoSelection DVDPlayer (GREEN)

File size: 18.3 KB
Line 
1from enigma import eTimer, ePicLoad, iServiceInformation
2from Screens.Screen import Screen
3from Components.Label import Label
4from Components.Button import Button
5from Screens.ServiceInfo import ServiceInfoList, ServiceInfoListEntry
6from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
7from Components.Pixmap import Pixmap
8from Components.ScrollLabel import ScrollLabel
9from Tools.LoadPixmap import LoadPixmap
10from Components.SelectionList import SelectionList, SelectionEntryComponent
11from Components.ChoiceList import ChoiceEntryComponent, ChoiceList
12from Components.Sources.List import List
13from Components.Sources.StaticText import StaticText
14from Tools.Directories import fileExists, pathExists, createDir
15from Components.Console import Console
16from Components.AVSwitch import AVSwitch
17from Components.MenuList import MenuList
18from _ctypes import *
19from __init__ import _
20
21class InfoBarAspectSelection:
22 STATE_HIDDEN = 0
23 STATE_ASPECT = 1
24 STATE_RESOLUTION = 2
25 def __init__(self):
26 self["AspectSelectionAction"] = HelpableActionMap(self, "InfobarAspectSelectionActions",
27 {
28 "aspectSelection": (self.ExGreen_toggleGreen, _("Aspect list...")),
29 })
30 self.__ExGreen_state = self.STATE_HIDDEN
31 def ExGreen_doAspect(self):
32 self.__ExGreen_state = self.STATE_ASPECT
33 self.aspectSelection()
34 def ExGreen_doResolution(self):
35 self.__ExGreen_state = self.STATE_RESOLUTION
36 self.resolutionSelection()
37 def ExGreen_doHide(self):
38 self.__ExGreen_state = self.STATE_HIDDEN
39 def ExGreen_toggleGreen(self, arg=""):
40 print self.__ExGreen_state
41 if self.__ExGreen_state == self.STATE_HIDDEN:
42 print "self.STATE_HIDDEN"
43 self.ExGreen_doAspect()
44 elif self.__ExGreen_state == self.STATE_ASPECT:
45 print "self.STATE_ASPECT"
46 self.ExGreen_doResolution()
47 elif self.__ExGreen_state == self.STATE_RESOLUTION:
48 print "self.STATE_RESOLUTION"
49 self.ExGreen_doHide()
50 def aspectSelection(self):
51 selection = 0
52 tlist = []
53 tlist.append((_("Resolution"), "resolution"))
54 tlist.append(("", ""))
55 tlist.append(("Letterbox", "letterbox"))
56 tlist.append(("PanScan", "panscan"))
57 tlist.append(("Non Linear", "non"))
58 tlist.append(("Bestfit", "bestfit"))
59 mode = open("/proc/stb/video/policy").read()[:-1]
60 print mode
61 for x in range(len(tlist)):
62 if tlist[x][1] == mode:
63 selection = x
64 keys = ["green", "", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
65 self.session.openWithCallback(self.aspectSelected, MC_ChoiceBox, title=_("Please select an aspect ratio..."), list = tlist, selection = selection, keys = keys)
66 def aspectSelected(self, aspect):
67 if not aspect is None:
68 if isinstance(aspect[1], str):
69 if aspect[1] == "resolution":
70 self.ExGreen_toggleGreen()
71 else:
72 open("/proc/stb/video/policy", "w").write(aspect[1])
73 self.ExGreen_doHide()
74 return
75
76class MC_AudioInfoView(Screen):
77 skin = """<screen position="center,center" size="560,320" title="View Audio Info" >
78 <widget source="show_title" render="Label" position="-100,-100" zPosition="0" size="1,1" font="Regular;1" valign="center" halign="center" transparent="1" />
79 <widget name="infolist" position="5,5" size="550,310" selectionDisabled="1" />
80 </screen>"""
81
82 def __init__(self, session, fullname, name, ref):
83 self.skin = MC_AudioInfoView.skin
84 Screen.__init__(self, session)
85 self["actions"] = ActionMap(["OkCancelActions"],
86 {
87 "cancel": self.close,
88 "ok": self.close
89 }, -1)
90 tlist = [ ]
91 self["show_title"] = StaticText(_("MediaCenter Audiofile Info"))
92 self["infolist"] = ServiceInfoList(tlist)
93 currPlay = self.session.nav.getCurrentService()
94 if currPlay is not None:
95 sTagTitle = currPlay.info().getInfoString(iServiceInformation.sTagTitle)
96 if sTagTitle == "":
97 sTagTitle = currPlay.info().getName().split('/')[-1]
98 tlist.append(ServiceInfoListEntry("Title: ", sTagTitle))
99 tlist.append(ServiceInfoListEntry("Artist: ", currPlay.info().getInfoString(iServiceInformation.sTagArtist)))
100 tlist.append(ServiceInfoListEntry("Album: ", currPlay.info().getInfoString(iServiceInformation.sTagAlbum)))
101 tlist.append(ServiceInfoListEntry("Genre: ", currPlay.info().getInfoString(iServiceInformation.sTagGenre)))
102 tlist.append(ServiceInfoListEntry("Year: ", currPlay.info().getInfoString(iServiceInformation.sTimeCreate)))
103 tlist.append(ServiceInfoListEntry("Comment: ", currPlay.info().getInfoString(iServiceInformation.sTagComment)))
104
105class Showiframe():
106 def __init__(self):
107 self.showiframe = dlopen("/usr/lib/enigma2/python/Plugins/Extensions/MediaCenter/libshowiframe.so.0.0.0")
108 try:
109 self.showSinglePic = dlsym(self.showiframe, "showSinglePic")
110 self.finishShowSinglePic = dlsym(self.showiframe, "finishShowSinglePic")
111 except OSError, e:
112 self.showSinglePic = dlsym(self.showiframe, "_Z13showSinglePicPKc")
113 self.finishShowSinglePic = dlsym(self.showiframe, "_Z19finishShowSinglePicv")
114
115 def showStillpicture(self, pic):
116 call_function(self.showSinglePic, (pic, ))
117
118 def finishStillPicture(self):
119 call_function(self.finishShowSinglePic, ())
120 #dlclose(self.showiframe)
121
122class MC_VideoImdbView(Screen):
123 skin = """<screen position="0,0" size="1024,576" title="Imdbfile Info" >
124 <!--widget name="thumbbig" position="0,0" size="1280,720" zPosition="0" transparent="1" alphatest="on" />
125 <widget name="thumb" position="700,50" size="190,174" zPosition="2" transparent="1" alphatest="on" /-->
126 <widget name="thumbCoverBig" position="518,20" size="471,536" zPosition="2" transparent="1" alphatest="on" />
127 <widget name="thumbPosterMid" position="518,20" size="471,536" zPosition="3" transparent="1" alphatest="on" />
128 <widget name="imdbinfo" font="Regular;18" position="35,30" size="480,500" zPosition="4" transparent="1" />
129 <eLabel backgroundColor="green" position="326,555" size="140,3" zPosition="5"/>
130 <eLabel backgroundColor="red" position="93,555" size="140,3" zPosition="5"/>
131 <widget name="key_red" position="93,526" zPosition="5" size="140,40" font="Regular;18" valign="center" halign="center" transparent="1" />
132 <widget name="key_green" position="326,526" zPosition="5" size="140,40" font="Regular;18" valign="center" halign="center" transparent="1" />
133 </screen>"""
134
135 def __init__(self, session, showtext, dirCover, dirCoverBig, dirPosterOrginal, dirPosterMid, dirPosterThumb, dirPosterCover, dirPosterPreview, dirBanner, dirBackdrop, dirMvi, savedir, moviename, showinfo):
136 self.skin = MC_VideoImdbView.skin
137 Screen.__init__(self, session)
138 self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions"],
139 {
140 "cancel": self.exit,
141 "ok": self.save,
142 "upUp": self.pageUp,
143 "downUp": self.pageDown,
144 "red": self.exit,
145 "green": self.save,
146 }, -1)
147
148 self.showinfo = showinfo
149 self.showtext = showtext
150
151 self.savetext = showtext
152 self.dirCover = dirCover
153 self.dirCoverBig = dirCoverBig
154 self.dirPosterOrginal = dirPosterOrginal
155 self.dirPosterMid = dirPosterMid
156 self.dirPosterThumb = dirPosterThumb
157 self.dirPosterCover = dirPosterCover
158 self.dirPosterPreview = dirPosterPreview
159 self.dirBanner = dirBanner
160 self.dirBackdrop = dirBackdrop
161 self.dirMvi = dirMvi
162 self.savedir = savedir
163 self.moviename = moviename
164
165#--- INFO: you can set these parameters in the skin.xml of your own skin. Default is...
166 self.picX = 200 # picturesize x
167 self.picY = 350 # picturesize y
168#----------
169
170 self.FramebufferScale = AVSwitch().getFramebufferScale()
171 self.picload = ePicLoad()
172 self.picload.PictureData.get().append(self.showScaledPixmap)
173 self.picload2 = ePicLoad()
174 self.picload2.PictureData.get().append(self.showScaledPixmap2)
175
176 self["imdbinfo"] = ScrollLabel()
177 self["thumbCoverBig"] = Pixmap()
178 self["thumbPosterMid"] = Pixmap()
179 if self.show == False:
180 self["key_red"] = Button(_("Cancel"))
181 self["key_green"] = Button(_("Save"))
182 else:
183 self["key_red"] = Button(_("Back"))
184 self["key_green"] = Button(_("OK"))
185#--- INFO: the screen gets started from an applet in the skin.xml ....
186 #self.onLayoutFinish.append(self.showPic)
187#----------
188
189 def showPic(self):
190 self["imdbinfo"].setText("Imdb Details:\n-----------------\n\n" + str(self.showtext))
191 self.picload.setPara((self.picX, self.picY, self.FramebufferScale[0], self.FramebufferScale[1], True, 1, "#00000000"))
192 self.picload2.setPara((self.picX, self.picY, self.FramebufferScale[0], self.FramebufferScale[1], True, 1, "#00000000"))
193 self.start_decode()
194 self.start_decode2()
195
196 def start_decode(self):
197 if fileExists(self.dirCoverBig):
198 self.picload.startDecode(self.dirCoverBig)
199 else:
200 self.picload.startDecode(self.dirPosterMid)
201
202 def start_decode2(self):
203 if fileExists(self.dirPosterMid):
204 self.picload2.startDecode(self.dirPosterMid)
205 else:
206 self.picload2.startDecode(self.dirCoverBig)
207
208 def showScaledPixmap(self, picInfo=None):
209 ptr = self.picload.getData()
210 if ptr != None:
211 self["thumbCoverBig"].instance.setPixmap(ptr.__deref__())
212
213 def showScaledPixmap2(self, picInfo=None):
214 ptr = self.picload2.getData()
215 if ptr != None:
216 self["thumbPosterMid"].instance.setPixmap(ptr.__deref__())
217 self["thumbPosterMid"].hide()
218
219 def pageUp(self):
220 self["imdbinfo"].pageUp()
221 self["thumbCoverBig"].show()
222 self["thumbPosterMid"].hide()
223
224 def pageDown(self):
225 self["imdbinfo"].pageDown()
226 self["thumbPosterMid"].show()
227 self["thumbCoverBig"].hide()
228
229 def exit(self):
230 Console().ePopen(('rm /tmp/*.jpg;rm /tmp/*.cache'))
231 self.close()
232
233 def save(self):
234 if self.showinfo == False:
235 print "startsaving closed"
236 from MC_Imdb import saveImdb
237 saveImdb(self.moviename,str(self.savetext))
238 self.close()
239
240class MC_VideoPlaylistInfoView(Screen):
241 skin = """<screen position="center,center" size="720,430" title="Playlist Info" >
242 <widget name="playlist" font="Regular;18" position="10,10" size="700,380" zPosition="2" transparent="1" />
243 <widget source="show_title" render="Label" position="-100,-100" zPosition="0" size="1,1" font="Regular;1" valign="center" halign="center" transparent="1" />
244 <eLabel backgroundColor="red" position="93,420" size="140,3" zPosition="5"/>
245 <eLabel backgroundColor="green" position="526,420" size="140,3" zPosition="5"/>
246 <widget name="key_red" position="93,390" zPosition="4" size="140,40" font="Regular;18" valign="center" halign="center" transparent="1" />
247 <widget name="key_green" position="526,390" zPosition="4" size="140,40" font="Regular;18" valign="center" halign="center" transparent="1" />
248 </screen>"""
249
250 def __init__(self, session, showtext, playlist):
251 self.skin = MC_VideoPlaylistInfoView.skin
252 self.playlist = playlist
253 Screen.__init__(self, session)
254 self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ColorActions"],
255 {
256 "cancel": self.close,
257 "ok": self.close,
258 "upUp": self.pageUp,
259 "downUp": self.pageDown,
260 "red": self.close,
261 "green": self.sort,
262 }, -1)
263
264 self["playlist"] = ScrollLabel()
265 self["playlist"].setText(showtext)
266 self["show_title"] = StaticText(_("MediaCenter Videoplayer Playlist:"))
267 self["key_red"] = Button(_("Cancel"))
268 self["key_green"] = Button(_("Random"))
269
270 def sort(self):
271 if len(self.playlist.getServiceRefList()):
272 self.playlist.PlayListShuffle()
273 self.playlist.updateList()
274 currref = self.playlist.getServiceRefList()[self.playlist.getCurrentIndex()]
275 liste = self.playlist.getServiceRefList()
276 count = 0
277 text0 = "\n"
278 text1 = "--------------"
279 text5 = "PlayList:\n"
280 bunner5 = "----------\n"
281 headertext = text5 + text1 + text0
282 text = ""
283 for a in liste:
284 count += 1
285 files = a.getPath()
286 name = files.split('/')[-1]
287 text_playlist = "(" + str(count) + ")" + name + text0
288 text += text_playlist
289 showtext_playlist = headertext + text + text0
290 showtext = showtext_playlist
291 self["playlist"].setText(showtext)
292
293 def pageUp(self):
294 self["playlist"].pageUp()
295
296 def pageDown(self):
297 self["playlist"].pageDown()
298
299 def getIdentifier(self, ref):
300 text = ref.getPath()
301 return text.split('/')[-1]
302
303class MC_ChoiceBox(Screen):
304 def __init__(self, session, title = "", list = [], keys = None, selection = 0, skin_name = []):
305 Screen.__init__(self, session)
306 if isinstance(skin_name, str):
307 skin_name = [skin_name]
308 self.skinName = skin_name + ["MC_ChoiceBox"]
309 self["text"] = Label(title)
310 self.list = []
311 self.summarylist = []
312 if keys is None:
313 self.__keys = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "red", "green", "yellow", "blue" ] + (len(list) - 10) * [""]
314 else:
315 self.__keys = keys + (len(list) - len(keys)) * [""]
316 self.keymap = {}
317 pos = 0
318 for x in list:
319 strpos = str(self.__keys[pos])
320 self.list.append(ChoiceEntryComponent(key = strpos, text = x))
321 if self.__keys[pos] != "":
322 self.keymap[self.__keys[pos]] = list[pos]
323 self.summarylist.append((self.__keys[pos],x[0]))
324 pos += 1
325 self["list"] = ChoiceList(list = self.list, selection = selection)
326 self["summary_list"] = StaticText()
327 self.updateSummary()
328 self["actions"] = NumberActionMap(["WizardActions", "InputActions", "ColorActions", "DirectionActions"],
329 {
330 "ok": self.go,
331 "back": self.cancel,
332 "1": self.keyNumberGlobal,
333 "2": self.keyNumberGlobal,
334 "3": self.keyNumberGlobal,
335 "4": self.keyNumberGlobal,
336 "5": self.keyNumberGlobal,
337 "6": self.keyNumberGlobal,
338 "7": self.keyNumberGlobal,
339 "8": self.keyNumberGlobal,
340 "9": self.keyNumberGlobal,
341 "0": self.keyNumberGlobal,
342 "red": self.keyRed,
343 "green": self.keyGreen,
344 "yellow": self.keyYellow,
345 "blue": self.keyBlue,
346 "up": self.up,
347 "down": self.down
348 }, -1)
349 def keyLeft(self):
350 pass
351 def keyRight(self):
352 pass
353 def up(self):
354 if len(self["list"].list) > 0:
355 while 1:
356 self["list"].instance.moveSelection(self["list"].instance.moveUp)
357 self.updateSummary(self["list"].l.getCurrentSelectionIndex())
358 if self["list"].l.getCurrentSelection()[0][0] != "--" or self["list"].l.getCurrentSelectionIndex() == 0:
359 break
360 def down(self):
361 if len(self["list"].list) > 0:
362 while 1:
363 self["list"].instance.moveSelection(self["list"].instance.moveDown)
364 self.updateSummary(self["list"].l.getCurrentSelectionIndex())
365 if self["list"].l.getCurrentSelection()[0][0] != "--" or self["list"].l.getCurrentSelectionIndex() == len(self["list"].list) - 1:
366 break
367 # runs a number shortcut
368 def keyNumberGlobal(self, number):
369 self.goKey(str(number))
370 # runs the current selected entry
371 def go(self):
372 cursel = self["list"].l.getCurrentSelection()
373 if cursel:
374 self.goEntry(cursel[0])
375 else:
376 self.cancel()
377 # runs a specific entry
378 def goEntry(self, entry):
379 if len(entry) > 2 and isinstance(entry[1], str) and entry[1] == "CALLFUNC":
380 # CALLFUNC wants to have the current selection as argument
381 arg = self["list"].l.getCurrentSelection()[0]
382 entry[2](arg)
383 else:
384 self.close(entry)
385 # lookups a key in the keymap, then runs it
386 def goKey(self, key):
387 if self.keymap.has_key(key):
388 entry = self.keymap[key]
389 self.goEntry(entry)
390 # runs a color shortcut
391 def keyRed(self):
392 self.goKey("red")
393 def keyGreen(self):
394 self.goKey("green")
395 def keyYellow(self):
396 self.goKey("yellow")
397 def keyBlue(self):
398 self.goKey("blue")
399 def updateSummary(self, curpos=0):
400 pos = 0
401 summarytext = ""
402 for entry in self.summarylist:
403 if pos > curpos-2 and pos < curpos+5:
404 if pos == curpos:
405 summarytext += ">"
406 else:
407 summarytext += entry[0]
408 summarytext += ' ' + entry[1] + '\n'
409 pos += 1
410 self["summary_list"].setText(summarytext)
411 def cancel(self):
412 self.close(None)
413
414class MC_MessageBox(Screen):
415 TYPE_YESNO = 0
416 TYPE_INFO = 1
417 TYPE_WARNING = 2
418 TYPE_ERROR = 3
419 def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True, msgBoxID = None):
420 self.type = type
421 Screen.__init__(self, session)
422
423 self.msgBoxID = msgBoxID
424 self["text"] = Label(text)
425 self["Text"] = StaticText(text)
426 self["selectedChoice"] = StaticText()
427 self.text = text
428 self.close_on_any_key = close_on_any_key
429 self["ErrorPixmap"] = Pixmap()
430 self["QuestionPixmap"] = Pixmap()
431 self["InfoPixmap"] = Pixmap()
432 self.timerRunning = False
433 self.initTimeout(timeout)
434 self.list = []
435 if type != self.TYPE_ERROR:
436 self["ErrorPixmap"].hide()
437 if type != self.TYPE_YESNO:
438 self["QuestionPixmap"].hide()
439 if type != self.TYPE_INFO:
440 self["InfoPixmap"].hide()
441 if type == self.TYPE_YESNO:
442 if default == True:
443 self.list = [ (_("yes"), 0), (_("no"), 1) ]
444 else:
445 self.list = [ (_("no"), 1), (_("yes"), 0) ]
446 if self.list:
447 self["selectedChoice"].setText(self.list[0][0])
448 self["list"] = MenuList(self.list)
449 if enable_input:
450 self["actions"] = ActionMap(["MsgBoxActions", "DirectionActions"],
451 {
452 "cancel": self.cancel,
453 "ok": self.ok,
454 "alwaysOK": self.alwaysOK,
455 "up": self.up,
456 "down": self.down,
457 "left": self.left,
458 "right": self.right,
459 "upRepeated": self.up,
460 "downRepeated": self.down,
461 "leftRepeated": self.left,
462 "rightRepeated": self.right
463 }, -1)
464 def initTimeout(self, timeout):
465 self.timeout = timeout
466 if timeout > 0:
467 self.timer = eTimer()
468 self.timer.callback.append(self.timerTick)
469 self.onExecBegin.append(self.startTimer)
470 self.origTitle = None
471 if self.execing:
472 self.timerTick()
473 else:
474 self.onShown.append(self.__onShown)
475 self.timerRunning = True
476 else:
477 self.timerRunning = False
478 def __onShown(self):
479 self.onShown.remove(self.__onShown)
480 self.timerTick()
481 def startTimer(self):
482 self.timer.start(1000)
483 def stopTimer(self):
484 if self.timerRunning:
485 del self.timer
486 self.onExecBegin.remove(self.startTimer)
487 self.setTitle(self.origTitle)
488 self.timerRunning = False
489 def timerTick(self):
490 if self.execing:
491 self.timeout -= 1
492 if self.origTitle is None:
493 self.origTitle = self.instance.getTitle()
494 self.setTitle(self.origTitle + " (" + str(self.timeout) + ")")
495 if self.timeout == 0:
496 self.timer.stop()
497 self.timerRunning = False
498 self.timeoutCallback()
499 def timeoutCallback(self):
500 print "Timeout!"
501 self.ok()
502 def cancel(self):
503 self.close(False)
504 def ok(self):
505 if self.type == self.TYPE_YESNO:
506 self.close(self["list"].getCurrent()[1] == 0)
507 else:
508 self.close(True)
509 def alwaysOK(self):
510 self.close(True)
511 def up(self):
512 self.move(self["list"].instance.moveUp)
513 def down(self):
514 self.move(self["list"].instance.moveDown)
515 def left(self):
516 self.move(self["list"].instance.pageUp)
517 def right(self):
518 self.move(self["list"].instance.pageDown)
519 def move(self, direction):
520 if self.close_on_any_key:
521 self.close(True)
522 self["list"].instance.moveSelection(direction)
523 if self.list:
524 self["selectedChoice"].setText(self["list"].getCurrent()[0])
525 self.stopTimer()
526 def __repr__(self):
527 return str(type(self)) + "(" + self.text + ")"
Note: See TracBrowser for help on using the repository browser.