1 # Miscellaneous dialogs for the BiaMovE application
9 import ConfigParser
as CP
11 class DVDInfoDialog (tkSimpleDialog
.Dialog
):
12 """ Class to display the DVD information (works only on *NIX and only if the biadvdlister
13 executable program is installed """
14 def __init__ (self
, master
, dvddevice
):
15 self
.dvddevice
= dvddevice
16 tkSimpleDialog
.Dialog
.__init
__ (self
, master
, "DVD Information")
18 def fill_info (self
, master
):
19 if self
.dvddevice
.strip() == "":
20 self
.dvddevice
= "/dev/dvd"
22 fi
, fo
, fe
= os
.popen3 ("biadvdlister --dvd-device " + self
.dvddevice
)
23 infos
= fo
.readlines ()
25 errors
= fe
.readlines ()
28 Tkinter
.Label (master
, text
=error
.strip()).grid (column
=0, row
=i
, columnspan
=2)
36 Tkinter
.Label (master
, text
=field
).grid (column
=c
, row
=r
)
41 def body (self
, master
):
42 Tkinter
.Label (master
, text
="DVD information (you need the biadvdlister program installed for this feature)", fg
="darkblue", wraplength
=280).grid (column
=0, row
=0, columnspan
=2)
44 self
.fill_info (master
)
46 class DVDDialog (tkSimpleDialog
.Dialog
):
47 """ Class to choose DVD device and set DVD options """
49 self
.result
= "dvd://" + self
.dvdtrack
.get ()
52 if self
.allchapters
.get() == 0:
53 self
.result_args
+= " -chapter " + self
.startchapter
.get()
54 if self
.endchapter
.get().strip () != "":
55 self
.result_args
+= "-" + self
.endchapter
.get()
56 if self
.dvddevice
.get().strip() != "":
57 self
.result_args
+= " -dvd-device " + self
.dvddevice
.get()
59 self
.result
= self
.result
.strip ()
60 self
.result_args
= self
.result_args
.strip ()
62 def on_dvd_info (self
):
63 if sys
.platform
.startswith ('win'):
64 tkMessageBox
.showerror ("Cannot show info", "The DVD information feature does not work on Windows")
66 dvdinfodlg
= DVDInfoDialog (self
, self
.dvddevice
.get())
68 def body (self
, master
):
69 Tkinter
.Label (master
, text
="DVD input options (see Misc Options for choosing subtitles/audio language)", fg
="darkblue", wraplength
=280).grid (column
=0, row
=0, columnspan
=3)
71 Tkinter
.Label (master
, text
="Title/track #").grid (column
=0, row
=1)
73 self
.dvdtrack
= Tkinter
.StringVar ()
75 Tkinter
.Entry (master
, textvariable
=self
.dvdtrack
).grid (column
=1, row
=1)
77 Tkinter
.Button (master
, text
="View DVD info...", command
=self
.on_dvd_info
).grid (column
=2, row
=1)
79 self
.allchapters
= Tkinter
.IntVar ()
80 self
.allchapters
.set (1)
81 Tkinter
.Checkbutton (master
, variable
=self
.allchapters
, text
="Encode all chapters on track", onvalue
=1, offvalue
=0).grid (column
=0, row
=2, columnspan
=2)
83 Tkinter
.Label (master
, text
="Start chapter #").grid (column
=0, row
=3)
85 self
.startchapter
= Tkinter
.StringVar ()
86 Tkinter
.Entry (master
, textvariable
=self
.startchapter
).grid (column
=1, row
=3)
88 Tkinter
.Label (master
, text
="End chapter #").grid (column
=0, row
=4)
90 self
.endchapter
= Tkinter
.StringVar ()
91 Tkinter
.Entry (master
, textvariable
=self
.endchapter
).grid (column
=1, row
=4)
93 Tkinter
.Label (master
, text
="DVD device (default: /dev/dvd)").grid (column
=0, row
=5)
95 self
.dvddevice
= Tkinter
.StringVar ()
96 Tkinter
.Entry (master
, textvariable
=self
.dvddevice
).grid (column
=1, row
=5)
98 class MiscOptionsDialog (tkSimpleDialog
.Dialog
):
99 """ Class to configure miscellaneous mencoder specific options """
102 if self
.startpos
.get().strip() != "":
103 self
.result
+= "-ss " + self
.startpos
.get()
104 if self
.endpos
.get().strip() != "":
105 self
.result
+= " -endpos " + self
.endpos
.get()
106 if self
.resamplerate
.get().strip() != "":
107 self
.result
+= " -srate " + self
.resamplerate
.get()
108 if self
.audiolang
.get().strip() != "":
109 self
.result
+= " -alang " + self
.audiolang
.get()
110 if self
.subtitlelang
.get().strip() != "":
111 self
.result
+= " -slang " + self
.subtitlelang
.get()
112 if self
.fourcc
.get().strip() != "":
113 self
.result
+= " -ffourcc " + self
.fourcc
.get()
115 self
.result
= self
.result
.strip ()
117 def body (self
, master
):
118 Tkinter
.Label (master
, text
="Miscellaneous mencoder options (leave blank for defaults)", fg
="darkblue").grid (column
=0, row
=0, columnspan
=2)
120 Tkinter
.Label (master
, text
="Input stream options", fg
="darkblue").grid (column
=0, row
=1, columnspan
=3, pady
=10)
122 Tkinter
.Label (master
, text
="Start encoding from (sec or hh:mm:ss)").grid (column
=0, row
=2)
124 self
.startpos
= Tkinter
.StringVar ()
125 Tkinter
.Entry (master
, textvariable
=self
.startpos
).grid (column
=1, row
=2)
127 Tkinter
.Label (master
, text
="Stop encoding after (sec or hh:mm:ss or b/kb/mb)").grid (column
=0, row
=3)
128 self
.endpos
= Tkinter
.StringVar ()
129 Tkinter
.Entry (master
, textvariable
=self
.endpos
).grid (column
=1, row
=3)
131 Tkinter
.Label (master
, text
="Audio and subtitle (only if available) options", fg
="darkblue").grid (column
=0, row
=4, columnspan
=2, pady
=10)
133 Tkinter
.Label (master
, text
="Resample audio (Hz)").grid (column
=0, row
=5)
135 self
.resamplerate
= Tkinter
.StringVar ()
136 Tkinter
.Entry (master
, textvariable
=self
.resamplerate
).grid (column
=1, row
=5)
138 Tkinter
.Label (master
, text
="Audio language (code)").grid (column
=0, row
=6)
140 self
.audiolang
= Tkinter
.StringVar ()
141 Tkinter
.Entry (master
, textvariable
=self
.audiolang
).grid (column
=1, row
=6)
143 Tkinter
.Label (master
, text
="Subtitle language (code)").grid (column
=0, row
=7)
145 self
.subtitlelang
= Tkinter
.StringVar ()
146 Tkinter
.Entry (master
, textvariable
=self
.subtitlelang
).grid (column
=1, row
=7)
148 Tkinter
.Label (master
, text
="Advanced", fg
="darkblue").grid (column
=0, row
=8, columnspan
=2, pady
=10)
150 Tkinter
.Label (master
, text
="Override video four character code").grid (column
=0, row
=9)
152 self
.fourcc
= Tkinter
.StringVar ()
153 Tkinter
.Entry (master
, textvariable
=self
.fourcc
).grid (column
=1, row
=9)
155 class ProfileLoadDialog (tkSimpleDialog
.Dialog
):
156 """ Class to load a profile or simply delete existing profiles """
158 self
.result
= self
.conflist
.get (Tkinter
.ANCHOR
)
159 if self
.result
.strip () == "":
162 def load_profiles (self
):
163 cfgfile
= os
.path
.join (os
.path
.expanduser ("~"), ".biamoverc")
164 config
= CP
.SafeConfigParser ()
165 config
.read (cfgfile
)
168 for section
in config
.sections ():
169 self
.conflist
.insert (Tkinter
.END
, section
)
171 def on_delete_profile (self
):
172 cfgfile
= os
.path
.join (os
.path
.expanduser ("~"), ".biamoverc")
173 config
= CP
.SafeConfigParser ()
174 config
.read (cfgfile
)
176 delsection
= self
.conflist
.get (Tkinter
.ANCHOR
)
177 self
.conflist
.delete (Tkinter
.ANCHOR
)
179 if (config
.has_section (delsection
)):
180 config
.remove_section (delsection
)
181 config
.write (file (cfgfile
, "w"))
183 def body (self
, master
):
184 Tkinter
.Label (master
, text
= "Load profile", fg
="darkblue").grid (column
=0, row
=0, columnspan
=2)
186 frame
= Tkinter
.Frame(master
)
187 scrollbar
= Tkinter
.Scrollbar(frame
, orient
=Tkinter
.VERTICAL
)
188 self
.conflist
= Tkinter
.Listbox (frame
, width
=30, height
=5, yscrollcommand
=scrollbar
.set)
189 scrollbar
.config(command
=self
.conflist
.yview
)
190 scrollbar
.pack(side
=Tkinter
.RIGHT
, fill
=Tkinter
.Y
)
191 self
.conflist
.pack (side
=Tkinter
.LEFT
, fill
=Tkinter
.BOTH
)
192 frame
.grid (column
=0, row
=1)
194 Tkinter
.Button (master
, text
="delete", command
= self
.on_delete_profile
).grid (column
=1, row
=1)
196 self
.load_profiles ()