MediaPlayer: fix imports, introduce config and settings screen for repeat playlist...
[enigma2.git] / lib / python / Plugins / Extensions / MediaPlayer / settings.py
diff --git a/lib/python/Plugins/Extensions/MediaPlayer/settings.py b/lib/python/Plugins/Extensions/MediaPlayer/settings.py
new file mode 100644 (file)
index 0000000..594b453
--- /dev/null
@@ -0,0 +1,136 @@
+from Screens.Screen import Screen
+from Screens.HelpMenu import HelpableScreen
+from Components.Label import Label
+from Components.FileList import FileList
+from Components.MediaPlayer import PlayList
+from Components.config import config, getConfigListEntry, ConfigSubsection, configfile, ConfigText, ConfigYesNo
+from Components.ConfigList import ConfigListScreen
+from Components.ActionMap import ActionMap
+
+class ConfigDirectory(ConfigText):
+       def __init__(self, default="", visible_width=60):
+               ConfigText.__init__(self, default, fixed_size = True, visible_width = visible_width)
+       def handleKey(self, key):
+               pass
+       def getValue(self):
+               if self.text == "":
+                       return None
+               else:
+                       return ConfigText.getValue(self)
+       def setValue(self, val):
+               if val == None:
+                       val = ""
+               ConfigText.setValue(self, val)
+       def getMulti(self, selected):
+               if self.text == "":
+                       return ("mtext"[1-selected:], _("List of Storage Devices"), range(0))
+               else:
+                       return ConfigText.getMulti(self, selected)
+               
+config.mediaplayer = ConfigSubsection()
+config.mediaplayer.repeat = ConfigYesNo(default=False)
+config.mediaplayer.savePlaylistOnExit = ConfigYesNo(default=True)
+config.mediaplayer.saveDirOnExit = ConfigYesNo(default=False)
+config.mediaplayer.defaultDir = ConfigDirectory()
+
+class DirectoryBrowser(Screen, HelpableScreen):
+       skin = """
+               <screen name="DirectoryBrowser" position="80,150" size="400,376" title="Directory browser" >
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="250,0" size="140,40" alphatest="on" />               <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="250,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget name="filelist" position="0,44" size="400,332" scrollbarMode="showOnDemand" />
+               </screen>"""
+       def __init__(self, session, currDir):
+               from Components.Sources.StaticText import StaticText
+               Screen.__init__(self, session)
+               HelpableScreen.__init__(self)
+               
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Apply"))
+
+               self.filelist = FileList(currDir, matchingPattern="")
+               self["filelist"] = self.filelist
+
+               self["FilelistActions"] = ActionMap(["SetupActions", "ColorActions"],
+                       {
+                               "green": self.apply,
+                               "red": self.exit,
+                               "ok": self.ok,
+                               "cancel": self.exit
+                       })
+
+       def ok(self):
+               if self.filelist.canDescent():
+                       self.filelist.descent()
+
+       def apply(self):
+               if self.filelist.canDescent() and len(self["filelist"].getFilename()) > len(self["filelist"].getCurrentDirectory()):
+                       self.filelist.descent()
+               self.close(self["filelist"].getCurrentDirectory())
+
+       def exit(self):
+               self.close(False)
+
+class MediaPlayerSettings(Screen,ConfigListScreen):
+       skin = """
+               <screen name="MediaPlayerSettings" position="160,150" size="400,200" title="Edit settings">
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="250,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="10,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="250,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget name="config" position="10,44" size="380,146" />
+               </screen>"""
+
+       def __init__(self, session, parent):
+               from Components.Sources.StaticText import StaticText
+               Screen.__init__(self, session)
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("Save"))
+
+               ConfigListScreen.__init__(self, [])
+               self.parent = parent
+               self.initConfigList()
+               config.mediaplayer.saveDirOnExit.addNotifier(self.initConfigList)
+
+               self["setupActions"] = ActionMap(["SetupActions", "ColorActions"],
+               {
+                   "green": self.save,
+                   "red": self.cancel,
+                   "cancel": self.cancel,
+                   "ok": self.ok,
+               }, -2)
+
+       def initConfigList(self, element=None):
+               print "[initConfigList]", element
+               try:
+                       self.list = []
+                       self.list.append(getConfigListEntry(_("repeat playlist"), config.mediaplayer.repeat))
+                       self.list.append(getConfigListEntry(_("save playlist on exit"), config.mediaplayer.savePlaylistOnExit))
+                       self.list.append(getConfigListEntry(_("save last directory on exit"), config.mediaplayer.saveDirOnExit))
+                       if not config.mediaplayer.saveDirOnExit.getValue():
+                               self.list.append(getConfigListEntry(_("start directory"), config.mediaplayer.defaultDir))
+                       self["config"].setList(self.list)
+               except KeyError:
+                       print "keyError"
+
+       def changedConfigList(self):
+               self.initConfigList()
+
+       def ok(self):
+               if self["config"].getCurrent()[1] == config.mediaplayer.defaultDir:
+                       self.session.openWithCallback(self.DirectoryBrowserClosed, DirectoryBrowser, self.parent.filelist.getCurrentDirectory())
+
+       def DirectoryBrowserClosed(self, path):
+               print "PathBrowserClosed:" + str(path)
+               if path != False:
+                       config.mediaplayer.defaultDir.setValue(path)
+
+       def save(self):
+               for x in self["config"].list:
+                       x[1].save()
+               self.close()
+
+       def cancel(self):
+               self.close()
+