diff --git a/data/interface/wprogress.ui b/data/interface/wprogress.ui index 8b0ed7f..ec789cf 100644 --- a/data/interface/wprogress.ui +++ b/data/interface/wprogress.ui @@ -50,10 +50,33 @@ - + True False - True + 0 + none + + + True + False + 12 + + + True + False + True + + + + + + + True + False + 6 + Project progress + + False diff --git a/data/interface/wsave_project.ui b/data/interface/wsave_project.ui index fd3c2b7..3d09cef 100644 --- a/data/interface/wsave_project.ui +++ b/data/interface/wsave_project.ui @@ -9,6 +9,7 @@ devede.svg normal save + True False diff --git a/setup.py b/setup.py index 39272ca..b97fb09 100755 --- a/setup.py +++ b/setup.py @@ -29,7 +29,7 @@ def get_data_files(): for pofile in [f for f in os.listdir('po') if f.endswith('.po')]: pofile = os.path.join('po', pofile) # po/fr.po 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/ data_files.append((target, [mofile])) diff --git a/src/devede/avconv_converter.py b/src/devede/avconv_converter.py index 84c44fe..dd8e8b4 100644 --- a/src/devede/avconv_converter.py +++ b/src/devede/avconv_converter.py @@ -22,6 +22,7 @@ import os import devede.configuration_data import devede.executor import devede.mux_dvd_menu +import devede.avconv_converter class avconv_converter(devede.executor.executor): @@ -47,7 +48,7 @@ class avconv_converter(devede.executor.executor): divx = False h264 = False for line in stdout.decode("latin-1").split("\n"): - parts = line.split(" ") + parts = line.strip().split(" ") if len(parts) < 2: continue if len(parts[0]) != 6: diff --git a/src/devede/converter.py b/src/devede/converter.py index cb174a2..3b686f9 100644 --- a/src/devede/converter.py +++ b/src/devede/converter.py @@ -18,6 +18,7 @@ import devede.configuration_data import devede.mplayer_detector import devede.avconv_converter +import devede.ffmpeg_converter import devede.vlc import devede.brasero import devede.k3b @@ -37,7 +38,7 @@ class converter: self.config = devede.configuration_data.configuration.get_config() # 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] self.analizers = {} diff --git a/src/devede/dvd_menu.py b/src/devede/dvd_menu.py index 25e63df..4951c30 100644 --- a/src/devede/dvd_menu.py +++ b/src/devede/dvd_menu.py @@ -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("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_top", 12.5, 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_size = 0 - self.sound_length = 30 self.video_rate = 2500 self.audio_rate = 224 @@ -89,18 +90,21 @@ class dvd_menu(devede.interface_manager.interface_manager): else: self.sound_length = length + def update_preview(self,b=None): self.store_ui(self.builder) self.sf = None # force to repaint the menu self.wdrawing_area.queue_draw() + def on_default_background_clicked(self,b): self.background_picture = self.default_background self.update_ui(self.builder) self.update_preview() + def on_no_sound_clicked(self,b): self.background_music = self.default_sound @@ -167,6 +171,7 @@ class dvd_menu(devede.interface_manager.interface_manager): self.store_ui(self.builder) self.wmenu.destroy() + def on_cancel_clicked(self,b): self.restore_ui() @@ -205,6 +210,7 @@ class dvd_menu(devede.interface_manager.interface_manager): return fontname,fontstyle,fontslant,fontsize + def paint_arrow(self,xl,xr,y,arrow_type,left): if arrow_type == "menu_entry": @@ -302,7 +308,6 @@ class dvd_menu(devede.interface_manager.interface_manager): self.cr.set_antialias(cairo.ANTIALIAS_DEFAULT) - def refresh_static_data(self): """ This method sets data that can't be changed from the dvd settings window. 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) return coordinates + def paint_base(self,xl, xr, y, type_b): 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.update_preview() + def on_previous_page_clicked(self,b): self.current_shown_page -= 1 @@ -469,6 +476,7 @@ class dvd_menu(devede.interface_manager.interface_manager): self.current_shown_page = 0 self.update_preview() + def on_drawingarea_preview_draw(self,widget,cr): """ 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.paint() + def create_menu_stream(self,path,n_page,coordinates): """ Creates the menu XML file """ diff --git a/src/devede/interface_manager.py b/src/devede/interface_manager.py index eedd378..9f52542 100644 --- a/src/devede/interface_manager.py +++ b/src/devede/interface_manager.py @@ -185,26 +185,30 @@ class interface_manager(GObject.GObject): for element in self.interface_labels: value = eval('self.'+element) - if (value != None): - builder.get_object(element).set_text(str(value)) - else: - builder.get_object(element).set_text("") + obj = builder.get_object(element) + if obj != None: + if (value != None): + obj.set_text(str(value)) + else: + obj.set_text("") for element in self.interface_integer_adjustments: - value = eval('self.'+element[0]) obj = builder.get_object(element[0]) - obj.set_value(float(value)) - callback = element[1] - if (callback != None): - obj.connect("value_changed",callback) + if obj != None: + value = eval('self.'+element[0]) + obj.set_value(float(value)) + callback = element[1] + if (callback != None): + obj.connect("value_changed",callback) for element in self.interface_float_adjustments: - value = eval('self.'+element[0]) obj = builder.get_object(element[0]) - obj.set_value(value) - callback = element[1] - if (callback != None): - obj.connect("value_changed",callback) + if obj != None: + value = eval('self.'+element[0]) + obj.set_value(value) + callback = element[1] + if (callback != None): + obj.connect("value_changed",callback) for element in self.interface_lists: obj = eval('self.'+element[0]) @@ -290,6 +294,7 @@ class interface_manager(GObject.GObject): obj.connect('toggled',self.toggled_element2) self.toggled_element2(obj) + def toggled_element(self,element): """ 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: item.set_sensitive(False) + def store_ui(self,builder): """ 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: 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: 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: obj = builder.get_object(element[0])