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

Last change on this file since 11967 was 11967, checked in by bonkel, 14 years ago

make mc mips ready

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