fix progress scaling and remove unneeded project paramter from dvd media toolbox
[enigma2.git] / lib / python / Plugins / Extensions / DVDBurn / TitleList.py
index f4467707b3ed209664cec3cddb5d848ec840f547..2c2d16c83503b9b7ee3a540baf0b27390051355c 100644 (file)
@@ -1,9 +1,11 @@
-import DVDProject, TitleList, TitleCutter, ProjectSettings
+import DVDProject, TitleList, TitleCutter, ProjectSettings, DVDToolbox, Process
 from Screens.Screen import Screen
 from Screens.ChoiceBox import ChoiceBox
 from Screens.InputBox import InputBox
 from Screens.MessageBox import MessageBox
 from Screens.HelpMenu import HelpableScreen
+from Screens.TaskView import JobView
+from Components.Task import job_manager
 from Components.ActionMap import HelpableActionMap, ActionMap
 from Components.Sources.List import List
 from Components.Sources.StaticText import StaticText
@@ -13,7 +15,7 @@ from Components.Label import Label
 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
 
-class TitleList(Screen):
+class TitleList(Screen, HelpableScreen):
        skin = """
                <screen position="90,83" size="560,445" title="DVD Tool" >
                    <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
@@ -35,6 +37,7 @@ class TitleList(Screen):
 
        def __init__(self, session, project = None):
                Screen.__init__(self, session)
+               HelpableScreen.__init__(self)
                
                self["titleactions"] = HelpableActionMap(self, "DVDTitleList",
                        {
@@ -72,17 +75,12 @@ class TitleList(Screen):
 
                self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)])
                self.updateTitleList()
-                               
-               #self["addTitle"] = ActionButton("titleactions", "addTitle")
-               #self["editTitle"] = ActionButton("titleactions", "editTitle")
-               #self["removeCurrentTitle"] = ActionButton("titleactions", "removeCurrentTitle")
-               #self["saveProject"] = ActionButton("titleactions", "saveProject")
-               #self["burnProject"] = ActionButton("titleactions", "burnProject")
                
        def showMenu(self):
                menu = []
                menu.append((_("Burn DVD"), "burn"));
                menu.append((_("Preview menu"), "previewMenu"));
+               menu.append((_("DVD media toolbox"), "toolbox"));
                menu.append((_("Collection settings"), "settings"));
                menu.append((_("Add a new title"), "addtitle"));
                menu.append((_("Remove title"), "removetitle"));
@@ -99,6 +97,8 @@ class TitleList(Screen):
                        self.addTitle()
                elif choice[1] == "edittitle":
                        self.editTitle()
+               elif choice[1] == "toolbox":
+                       self.toolbox()
                elif choice[1] == "settings":
                        self.settings()
                elif choice[1] == "previewMenu":
@@ -116,21 +116,44 @@ class TitleList(Screen):
 
        def addTitle(self):
                from Screens.MovieSelection import MovieSelection
+               from Components.Button import Button
+               from Components.ActionMap import HelpableActionMap
                class MovieSelectionNoMenu(MovieSelection):
                        def __init__(self, session):
                                MovieSelection.__init__(self, session)
                                self.skinName = "MovieSelection"
-
+                               self["key_red"] = Button(_("Edit title"))
+                               self["key_green"] = Button(_("Add"))
+                               self["ColorActions"] = HelpableActionMap(self, "ColorActions",
+                               {
+                                       "red": (self.movieSelected, _("Add a new title")),
+                                       "green": (self.insertWithoutEdit, ("insert without cutlist editor"))
+                               })
+                       def updateTags(self):
+                               pass
                        def doContext(self):
                                print "context menu forbidden inside DVDBurn to prevent calling multiple instances"
-                               
+                       def insertWithoutEdit(self):
+                               current = self.getCurrent()
+                               if current is not None:
+                                       current.edit = False
+                                       self.close(current)
+                       def movieSelected(self):
+                               current = self.getCurrent()
+                               if current is not None:
+                                       current.edit = True
+                                       self.close(current)
                self.session.openWithCallback(self.selectedSource, MovieSelectionNoMenu)
 
        def selectedSource(self, source):
                if source is None:
                        return None
                t = self.project.addService(source)
-               self.editTitle(t, readOnly=False)
+               try:
+                       editor = source.edit
+               except AttributeError:
+                       editor = True
+               self.editTitle(t, editor)
 
        def removeCurrentTitle(self):
                title = self.getCurrentTitle()
@@ -141,6 +164,9 @@ class TitleList(Screen):
                        self.project.titles.remove(title)
                        self.updateTitleList()
 
+       def toolbox(self):
+               self.session.open(DVDToolbox.DVDToolbox)
+
        def settings(self):
                self.session.openWithCallback(self.settingsCB, ProjectSettings.ProjectSettings, self.project)
 
@@ -157,29 +183,32 @@ class TitleList(Screen):
                else:
                        self["error_label"].text = self.project.error
                        self["error_label"].show()
-                       print self.project.error
                        return False
 
        def burnProject(self):
-               autochapter = self.project.settings.autochapter.getValue()
-               if autochapter > 0:
-                       for title in self.project.titles:
-                               title.produceAutoChapter(autochapter)
-               self.project.waitboxref = self.project.session.open(ProjectSettings.WaitBox,self.burnProjectCB)
-
-       def burnProjectCB(self):
-               import Process
-               job = Process.Burn(self.session, self.project)
-               from Screens.TaskView import JobView
-               self.session.open(JobView, job)
+               if self.project.settings.authormode.getValue() == "data_ts":
+                       job = Process.DVDdataJob(self.project)
+                       job_manager.AddJob(job)
+                       job_manager.in_background = False
+                       self.session.openWithCallback(self.JobViewCB, JobView, job)
+               else:
+                       autochapter = self.project.settings.autochapter.getValue()
+                       if autochapter > 0:
+                               for title in self.project.titles:
+                                       title.produceAutoChapter(autochapter)
+                       job = Process.DVDJob(self.project)
+                       job_manager.AddJob(job)
+                       job_manager.in_background = False
+                       self.session.openWithCallback(self.JobViewCB, JobView, job)
+
+       def JobViewCB(self, in_background):
+               job_manager.in_background = in_background
 
        def previewMenu(self):
-               self.project.waitboxref = self.project.session.open(ProjectSettings.WaitBox,self.previewMenuCB)
+               job = Process.DVDJob(self.project, menupreview=True)
+               job_manager.in_background = False
+               job_manager.AddJob(job)
                
-       def previewMenuCB(self):
-               import Process
-               job = Process.PreviewMenu(self.session, self.project)
-
        def updateTitleList(self):
                res = [ ]
                totalsize = 0
@@ -211,24 +240,31 @@ class TitleList(Screen):
                t = self["titles"].getCurrent()
                return t and t[0]
 
-       def editTitle(self, title = None, readOnly = False):
+       def editTitle(self, title = None, editor = True):
                t = title or self.getCurrentTitle()
                if t is not None:
                        self.current_edit_title = t
-                       if readOnly:
-                               self.session.openWithCallback(self.titleEditDone, TitleCutter.CutlistReader, t)
-                       else:
+                       if editor:
                                self.session.openWithCallback(self.titleEditDone, TitleCutter.TitleCutter, t)
+                       else:
+                               self.session.openWithCallback(self.titleEditDone, TitleCutter.CutlistReader, t)
 
        def titleEditDone(self, cutlist):
-               if cutlist != False:
-                       t = self.current_edit_title
-                       t.cuesheet = cutlist
-                       t.produceFinalCuesheet()
+               t = self.current_edit_title
+               t.cuesheet = cutlist
+               t.produceFinalCuesheet()
+               if t.sVideoType != 0:
+                       self.session.openWithCallback(self.DVDformatCB,MessageBox,text = _("The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to create a Dreambox format data DVD (which will not play in stand-alone DVD players) instead?"), type = MessageBox.TYPE_YESNO)
+               else:
+                       self.updateTitleList()
+
+       def DVDformatCB(self, answer):
+               t = self.current_edit_title
+               if answer == True:
+                       self.project.settings.authormode.setValue("data_ts")
                        self.updateTitleList()
                else:
-                       self.session.open(MessageBox,text = _("The DVD standard doesn't support H.264 (HDTV) video streams!"),type = MessageBox.TYPE_ERROR)
-                       self.removeTitle(self.current_edit_title)
+                       self.removeTitle(t)
 
        def leave(self):
                self.close()