Fixed the progress bar when using ffmpeg

Added the capability of storing non-visible values
This commit is contained in:
Sergio Costas 2014-08-06 00:27:26 +02:00
parent dc350be634
commit 5529560ce9
7 changed files with 66 additions and 23 deletions

View file

@ -50,10 +50,33 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkProgressBar" id="progress_total"> <object class="GtkFrame" id="frame1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="show_text">True</property> <property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkProgressBar" id="progress_total">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="show_text">True</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">6</property>
<property name="label" translatable="yes">Project progress</property>
</object>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>

View file

@ -9,6 +9,7 @@
<property name="icon">devede.svg</property> <property name="icon">devede.svg</property>
<property name="type_hint">normal</property> <property name="type_hint">normal</property>
<property name="action">save</property> <property name="action">save</property>
<property name="do_overwrite_confirmation">True</property>
<child internal-child="vbox"> <child internal-child="vbox">
<object class="GtkBox" id="filechooserdialog-vbox1"> <object class="GtkBox" id="filechooserdialog-vbox1">
<property name="can_focus">False</property> <property name="can_focus">False</property>

View file

@ -29,7 +29,7 @@ def get_data_files():
for pofile in [f for f in os.listdir('po') if f.endswith('.po')]: for pofile in [f for f in os.listdir('po') if f.endswith('.po')]:
pofile = os.path.join('po', pofile) # po/fr.po pofile = os.path.join('po', pofile) # po/fr.po
modir, mofile = get_mopath(pofile) modir, mofile = get_mopath(pofile)
# translations must be always in /usr/share because Gtk.builder only search there # translations must be always in /usr/share because Gtk.builder only search there. If someone knows how to fix this...
target = os.path.join('/usr','share', modir) # share/locale/fr/LC_MESSAGES/ target = os.path.join('/usr','share', modir) # share/locale/fr/LC_MESSAGES/
data_files.append((target, [mofile])) data_files.append((target, [mofile]))

View file

@ -22,6 +22,7 @@ import os
import devede.configuration_data import devede.configuration_data
import devede.executor import devede.executor
import devede.mux_dvd_menu import devede.mux_dvd_menu
import devede.avconv_converter
class avconv_converter(devede.executor.executor): class avconv_converter(devede.executor.executor):
@ -47,7 +48,7 @@ class avconv_converter(devede.executor.executor):
divx = False divx = False
h264 = False h264 = False
for line in stdout.decode("latin-1").split("\n"): for line in stdout.decode("latin-1").split("\n"):
parts = line.split(" ") parts = line.strip().split(" ")
if len(parts) < 2: if len(parts) < 2:
continue continue
if len(parts[0]) != 6: if len(parts[0]) != 6:

View file

@ -18,6 +18,7 @@
import devede.configuration_data import devede.configuration_data
import devede.mplayer_detector import devede.mplayer_detector
import devede.avconv_converter import devede.avconv_converter
import devede.ffmpeg_converter
import devede.vlc import devede.vlc
import devede.brasero import devede.brasero
import devede.k3b import devede.k3b
@ -37,7 +38,7 @@ class converter:
self.config = devede.configuration_data.configuration.get_config() self.config = devede.configuration_data.configuration.get_config()
# List of classes with conversion capabilities, in order of preference # List of classes with conversion capabilities, in order of preference
self.c = [devede.vlc.vlc_player, devede.mplayer_detector.mplayer_detector, devede.avconv_converter.avconv_converter, self.c = [devede.vlc.vlc_player, devede.mplayer_detector.mplayer_detector, devede.ffmpeg_converter.ffmpeg_converter, devede.avconv_converter.avconv_converter,
devede.brasero.brasero, devede.k3b.k3b] devede.brasero.brasero, devede.k3b.k3b]
self.analizers = {} self.analizers = {}

View file

@ -48,6 +48,8 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.add_group("position_horizontal", ["left", "center", "right"], "center", self.update_preview) self.add_group("position_horizontal", ["left", "center", "right"], "center", self.update_preview)
self.add_group("at_startup", ["menu_show_at_startup", "play_first_title_at_startup"], "menu_show_at_startup") self.add_group("at_startup", ["menu_show_at_startup", "play_first_title_at_startup"], "menu_show_at_startup")
self.add_integer_adjustment("sound_length", 30)
self.add_float_adjustment("margin_left", 10.0, self.update_preview) self.add_float_adjustment("margin_left", 10.0, self.update_preview)
self.add_float_adjustment("margin_top", 12.5, self.update_preview) self.add_float_adjustment("margin_top", 12.5, self.update_preview)
self.add_float_adjustment("margin_right", 10.0, self.update_preview) self.add_float_adjustment("margin_right", 10.0, self.update_preview)
@ -63,7 +65,6 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.cached_menu_font = None self.cached_menu_font = None
self.cached_menu_size = 0 self.cached_menu_size = 0
self.sound_length = 30
self.video_rate = 2500 self.video_rate = 2500
self.audio_rate = 224 self.audio_rate = 224
@ -89,18 +90,21 @@ class dvd_menu(devede.interface_manager.interface_manager):
else: else:
self.sound_length = length self.sound_length = length
def update_preview(self,b=None): def update_preview(self,b=None):
self.store_ui(self.builder) self.store_ui(self.builder)
self.sf = None # force to repaint the menu self.sf = None # force to repaint the menu
self.wdrawing_area.queue_draw() self.wdrawing_area.queue_draw()
def on_default_background_clicked(self,b): def on_default_background_clicked(self,b):
self.background_picture = self.default_background self.background_picture = self.default_background
self.update_ui(self.builder) self.update_ui(self.builder)
self.update_preview() self.update_preview()
def on_no_sound_clicked(self,b): def on_no_sound_clicked(self,b):
self.background_music = self.default_sound self.background_music = self.default_sound
@ -167,6 +171,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.store_ui(self.builder) self.store_ui(self.builder)
self.wmenu.destroy() self.wmenu.destroy()
def on_cancel_clicked(self,b): def on_cancel_clicked(self,b):
self.restore_ui() self.restore_ui()
@ -205,6 +210,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
return fontname,fontstyle,fontslant,fontsize return fontname,fontstyle,fontslant,fontsize
def paint_arrow(self,xl,xr,y,arrow_type,left): def paint_arrow(self,xl,xr,y,arrow_type,left):
if arrow_type == "menu_entry": if arrow_type == "menu_entry":
@ -302,7 +308,6 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.cr.set_antialias(cairo.ANTIALIAS_DEFAULT) self.cr.set_antialias(cairo.ANTIALIAS_DEFAULT)
def refresh_static_data(self): def refresh_static_data(self):
""" This method sets data that can't be changed from the dvd settings window. """ This method sets data that can't be changed from the dvd settings window.
It must be called before painting a menu """ It must be called before painting a menu """
@ -433,6 +438,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.paint_arrow(xl, med, y, "menu_entry_activated", True) self.paint_arrow(xl, med, y, "menu_entry_activated", True)
return coordinates return coordinates
def paint_base(self,xl, xr, y, type_b): def paint_base(self,xl, xr, y, type_b):
height = self.cached_menu_size + self.entry_vertical_margin height = self.cached_menu_size + self.entry_vertical_margin
@ -462,6 +468,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.current_shown_page -= 1 self.current_shown_page -= 1
self.update_preview() self.update_preview()
def on_previous_page_clicked(self,b): def on_previous_page_clicked(self,b):
self.current_shown_page -= 1 self.current_shown_page -= 1
@ -469,6 +476,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
self.current_shown_page = 0 self.current_shown_page = 0
self.update_preview() self.update_preview()
def on_drawingarea_preview_draw(self,widget,cr): def on_drawingarea_preview_draw(self,widget,cr):
""" Callback to repaint the menu preview window when it """ Callback to repaint the menu preview window when it
@ -482,6 +490,7 @@ class dvd_menu(devede.interface_manager.interface_manager):
cr.set_source_surface(self.sf) cr.set_source_surface(self.sf)
cr.paint() cr.paint()
def create_menu_stream(self,path,n_page,coordinates): def create_menu_stream(self,path,n_page,coordinates):
""" Creates the menu XML file """ """ Creates the menu XML file """

View file

@ -185,26 +185,30 @@ class interface_manager(GObject.GObject):
for element in self.interface_labels: for element in self.interface_labels:
value = eval('self.'+element) value = eval('self.'+element)
if (value != None): obj = builder.get_object(element)
builder.get_object(element).set_text(str(value)) if obj != None:
else: if (value != None):
builder.get_object(element).set_text("") obj.set_text(str(value))
else:
obj.set_text("")
for element in self.interface_integer_adjustments: for element in self.interface_integer_adjustments:
value = eval('self.'+element[0])
obj = builder.get_object(element[0]) obj = builder.get_object(element[0])
obj.set_value(float(value)) if obj != None:
callback = element[1] value = eval('self.'+element[0])
if (callback != None): obj.set_value(float(value))
obj.connect("value_changed",callback) callback = element[1]
if (callback != None):
obj.connect("value_changed",callback)
for element in self.interface_float_adjustments: for element in self.interface_float_adjustments:
value = eval('self.'+element[0])
obj = builder.get_object(element[0]) obj = builder.get_object(element[0])
obj.set_value(value) if obj != None:
callback = element[1] value = eval('self.'+element[0])
if (callback != None): obj.set_value(value)
obj.connect("value_changed",callback) callback = element[1]
if (callback != None):
obj.connect("value_changed",callback)
for element in self.interface_lists: for element in self.interface_lists:
obj = eval('self.'+element[0]) obj = eval('self.'+element[0])
@ -290,6 +294,7 @@ class interface_manager(GObject.GObject):
obj.connect('toggled',self.toggled_element2) obj.connect('toggled',self.toggled_element2)
self.toggled_element2(obj) self.toggled_element2(obj)
def toggled_element(self,element): def toggled_element(self,element):
""" Wenever an element with 'hide' or 'show' needs is toggled, this callback is called """ """ Wenever an element with 'hide' or 'show' needs is toggled, this callback is called """
@ -357,6 +362,7 @@ class interface_manager(GObject.GObject):
for item in to_disable: for item in to_disable:
item.set_sensitive(False) item.set_sensitive(False)
def store_ui(self,builder): def store_ui(self,builder):
""" Takes the values of the widgets and stores them in the internal variables """ """ Takes the values of the widgets and stores them in the internal variables """
@ -380,11 +386,13 @@ class interface_manager(GObject.GObject):
for element in self.interface_integer_adjustments: for element in self.interface_integer_adjustments:
obj = builder.get_object(element[0]) obj = builder.get_object(element[0])
exec('self.'+element[0]+' = int(obj.get_value())') if obj != None:
exec('self.'+element[0]+' = int(obj.get_value())')
for element in self.interface_float_adjustments: for element in self.interface_float_adjustments:
obj = builder.get_object(element[0]) obj = builder.get_object(element[0])
exec('self.'+element[0]+' = obj.get_value()') if obj != None:
exec('self.'+element[0]+' = obj.get_value()')
for element in self.interface_colorbuttons: for element in self.interface_colorbuttons:
obj = builder.get_object(element[0]) obj = builder.get_object(element[0])