From c222c4ab146d611bba2e9739aa8e1bdef161e929 Mon Sep 17 00:00:00 2001 From: Sergio Costas Date: Thu, 3 Jan 2019 23:18:59 +0100 Subject: [PATCH] Allow to add separator Until now, all the menu entries were shown in a continuous list, one after another. This patch allows to add separators between entries. --- data/interface/wmain.ui | 219 ++++++++++++++++-- data/interface/wmenu.ui | 342 ++++++++++++++++++++-------- src/devedeng/dvd_menu.py | 85 ++++--- src/devedeng/dvdauthor_converter.py | 15 +- src/devedeng/file_movie.py | 21 +- src/devedeng/project.py | 98 ++++---- src/devedeng/separator.py | 48 ++++ src/devedeng/vcdimager_converter.py | 2 + 8 files changed, 616 insertions(+), 214 deletions(-) create mode 100644 src/devedeng/separator.py diff --git a/data/interface/wmain.ui b/data/interface/wmain.ui index dc17c92..a0e634c 100644 --- a/data/interface/wmain.ui +++ b/data/interface/wmain.ui @@ -1,5 +1,5 @@ - + @@ -52,6 +52,9 @@ + + + True @@ -294,14 +297,43 @@ False - gtk-add True True True - True top True + + + True + False + vertical + + + True + False + gtk-add + + + False + True + 0 + + + + + True + False + Add file + + + False + True + 1 + + + + False @@ -311,14 +343,43 @@ - gtk-remove True True True - True top True + + + True + False + vertical + + + True + False + gtk-remove + + + False + True + 0 + + + + + True + False + Remove + + + False + True + 1 + + + + False @@ -328,14 +389,43 @@ - gtk-go-down True True True - True top True + + + True + False + vertical + + + True + False + gtk-go-down + + + False + True + 0 + + + + + True + False + Move down + + + False + True + 1 + + + + False @@ -345,14 +435,43 @@ - gtk-go-up True True True - True top True + + + True + False + vertical + + + True + False + gtk-go-up + + + False + True + 0 + + + + + True + False + Move up + + + False + True + 1 + + + + False @@ -362,14 +481,43 @@ - gtk-properties True True True - True top True + + + True + False + vertical + + + True + False + gtk-properties + + + False + True + 0 + + + + + True + False + Properties + + + False + True + 1 + + + + False @@ -382,7 +530,6 @@ True True True - 0.4699999988079071 top @@ -423,6 +570,51 @@ 5 + + + True + True + True + top + + + + True + False + vertical + + + True + False + insert-text + + + False + True + 0 + + + + + True + False + Add separator + + + False + True + 1 + + + + + + + False + True + 6 + + False @@ -771,8 +963,5 @@ - - - diff --git a/data/interface/wmenu.ui b/data/interface/wmenu.ui index 65fd87a..4b53e0f 100644 --- a/data/interface/wmenu.ui +++ b/data/interface/wmenu.ui @@ -22,6 +22,17 @@ 1 10 + + -100 + 100 + 1 + 10 + + + 100 + 1 + 10 + False True @@ -709,98 +720,125 @@ - + True False + 0 + none - + True False - Unselected titles: + 12 + + + True + False + + + True + False + end + Unselected: + + + 0 + 0 + + + + + True + False + end + Shadows: + + + 0 + 1 + + + + + True + False + end + Selected: + + + 2 + 0 + + + + + True + False + end + Background: + + + 2 + 1 + + + + + True + True + True + + + 1 + 0 + + + + + True + True + True + True + + + 1 + 1 + + + + + True + True + True + + + 3 + 0 + + + + + True + True + True + True + + + 3 + 1 + + + + - - 0 - 0 - - - + + True False - Shadows: + <b>Titles</b> + True - - 0 - 1 - - - - - True - False - Selected title: - - - 2 - 0 - - - - - True - False - Background color: - - - 2 - 1 - - - - - True - True - True - - - 1 - 0 - - - - - True - True - True - True - - - 1 - 1 - - - - - True - True - True - - - 3 - 0 - - - - - True - True - True - True - - - 3 - 1 - @@ -809,6 +847,131 @@ 1 + + + True + False + 0 + none + + + True + False + 12 + + + True + False + + + True + False + end + Color: + + + 0 + 0 + + + + + True + False + end + Shadows: + + + 0 + 1 + + + + + True + True + True + + + 1 + 0 + + + + + True + True + True + True + + + 1 + 1 + + + + + True + True + True + True + + + 3 + 1 + + + + + True + False + end + Background: + + + 2 + 1 + + + + + True + False + + + 2 + 0 + + + + + True + False + + + 3 + 0 + + + + + + + + + True + False + <b>Separators</b> + True + + + + + False + True + 2 + + @@ -1168,15 +1331,10 @@ - - -100 - 100 - 1 - 10 - - - 100 - 1 - 10 + + + + + diff --git a/src/devedeng/dvd_menu.py b/src/devedeng/dvd_menu.py index 320040f..a646d91 100644 --- a/src/devedeng/dvd_menu.py +++ b/src/devedeng/dvd_menu.py @@ -39,13 +39,13 @@ class dvd_menu(devedeng.interface_manager.interface_manager): self.add_colorbutton("title_color", (0, 0, 0, 1), self.update_preview) self.add_colorbutton("title_shadow", (0, 0, 0, 0), self.update_preview) - self.add_colorbutton("unselected_color", - (1, 1, 1, 1), self.update_preview) + self.add_colorbutton("unselected_color", (1, 1, 1, 1), self.update_preview) self.add_colorbutton("shadow_color", (0, 0, 0, 0), self.update_preview) - self.add_colorbutton( - "selected_color", (0, 1, 1, 1), self.update_preview) - self.add_colorbutton("background_color", - (0, 0, 0, 0.75), self.update_preview) + self.add_colorbutton("selected_color", (0, 1, 1, 1), self.update_preview) + self.add_colorbutton("background_color", (0, 0, 0, 0.75), self.update_preview) + self.add_colorbutton("separator_color", (0, 0, 0, 1), self.update_preview) + self.add_colorbutton("separator_shadow", (0, 0, 0, 0), self.update_preview) + self.add_colorbutton("separator_background", (1, 1, 1, 0.75), self.update_preview) self.add_text("title_text", None, self.update_preview) @@ -79,17 +79,13 @@ class dvd_menu(devedeng.interface_manager.interface_manager): self.audio_rate = 224 def on_help_clicked(self, b): - help_file = devedeng.help.help("menu.html") def get_estimated_size(self): - - estimated_size = ((self.video_rate + self.audio_rate) - * self.sound_length) / 8 + estimated_size = ((self.video_rate + self.audio_rate) * self.sound_length) / 8 return estimated_size def update_music(self, b=None): - self.store_ui(self.builder) cv = devedeng.converter.converter.get_converter() film_analizer = (cv.get_film_analizer())() @@ -104,25 +100,21 @@ class dvd_menu(devedeng.interface_manager.interface_manager): self.sound_length = film_analizer.original_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 self.sound_length = 30 self.update_ui(self.builder) def show_configuration(self, file_list): - self.builder = Gtk.Builder() self.builder.set_translation_domain(self.config.gettext_domain) self.file_list = file_list @@ -177,17 +169,14 @@ class dvd_menu(devedeng.interface_manager.interface_manager): self.save_ui() def on_accept_clicked(self, b): - self.store_ui(self.builder) self.wmenu.destroy() def on_cancel_clicked(self, b): - self.restore_ui() self.wmenu.destroy() def get_font_params(self, font_name): - font_elements = font_name.split(" ") if (len(font_elements)) < 2: @@ -257,12 +246,16 @@ class dvd_menu(devedeng.interface_manager.interface_manager): if text is None: return - if text_type == "title": fgcolor = self.title_color bgcolor = self.title_shadow hard_borders = False font = self.title_font + elif text_type == "menu_separator": + fgcolor = self.separator_color + bgcolor = self.separator_shadow + hard_borders = False + font = self.entry_font elif text_type == "menu_entry": fgcolor = self.unselected_color bgcolor = self.shadow_color @@ -274,8 +267,7 @@ class dvd_menu(devedeng.interface_manager.interface_manager): hard_borders = True font = self.entry_font elif text_type == "menu_entry_activated": - fgcolor = (1.0 - self.selected_color[0], 1.0 - self.selected_color[ - 1], 1.0 - self.selected_color[2], self.selected_color[3]) + fgcolor = (1.0 - self.selected_color[0], 1.0 - self.selected_color[1], 1.0 - self.selected_color[2], self.selected_color[3]) bgcolor = None hard_borders = True font = self.entry_font @@ -330,15 +322,17 @@ class dvd_menu(devedeng.interface_manager.interface_manager): counter = 0 for element in self.file_list: if element.show_in_menu: - self.title_list.append((element, counter)) - counter += 1 + if element.element_type == "file_movie": + self.title_list.append((element, counter)) + counter += 1 + else: + self.title_list.append((element, None)) self.sf = None self.current_shown_page = 0 self.wcurrent_page = None def paint_menu(self, paint_background, paint_selected, paint_activated, page_number): - coordinates = [] if self.sf is None: @@ -408,13 +402,13 @@ class dvd_menu(devedeng.interface_manager.interface_manager): height = (self.cached_menu_size + self.entry_vertical_margin) / 2.0 if (self.play_all_c): - coordinates.append([xl, y - height, xr, y + height, "play_all"]) + coordinates.append([xl, y - height, xr, y + height, _("Play_all")]) if self.playall_text == "": - playalltext = "Play all" + playalltext = _("Play all") else: playalltext = self.playall_text if paint_background: - self.paint_base(xl, xr, y, 0) + self.paint_base(xl, xr, y, 0, self.background_color) self.write_text(playalltext, "menu_entry", xl, xr, y, self.position_horizontal) if paint_selected: @@ -426,25 +420,27 @@ class dvd_menu(devedeng.interface_manager.interface_manager): y += entry_height for entry in self.title_list[page_number * entries_per_page:(page_number + 1) * entries_per_page]: - coordinates.append([xl, y - height, xr, y + height, "entry"]) - text = entry[0].title_name + if entry[0].element_type == "file_movie": + text = entry[0].title_name + is_movie = True + coordinates.append([xl, y - height, xr, y + height, "entry"]) + else: + text = entry[0].separator_name + is_movie = False if paint_background: - self.paint_base(xl, xr, y, 0) - self.write_text(text, "menu_entry", xl, xr, - y, self.position_horizontal) - if paint_selected: - self.write_text(text, "menu_entry_selected", xl, - xr, y, self.position_horizontal) - if paint_activated: - self.write_text(text, "menu_entry_activated", - xl, xr, y, self.position_horizontal) + self.paint_base(xl, xr, y, 0, self.background_color if is_movie else self.separator_background) + self.write_text(text, "menu_entry" if is_movie else "menu_separator", xl, xr, y, self.position_horizontal) + if paint_selected and is_movie: + self.write_text(text, "menu_entry_selected", xl, xr, y, self.position_horizontal) + if paint_activated and is_movie: + self.write_text(text, "menu_entry_activated", xl, xr, y, self.position_horizontal) y += entry_height if paint_arrows: if page_number == 0: coordinates.append([xl, y - height, xr, y + height, "right"]) if paint_background: - self.paint_base(xl, xr, y, 0) + self.paint_base(xl, xr, y, 0, self.background_color) self.paint_arrow(xl, xr, y, "menu_entry", False) if paint_selected: self.paint_arrow(xl, xr, y, "menu_entry_selected", False) @@ -453,7 +449,7 @@ class dvd_menu(devedeng.interface_manager.interface_manager): elif page_number == (self.pages - 1): coordinates.append([xl, y - height, xr, y + height, "left"]) if paint_background: - self.paint_base(xl, xr, y, 0) + self.paint_base(xl, xr, y, 0, self.background_color) self.paint_arrow(xl, xr, y, "menu_entry", True) if paint_selected: self.paint_arrow(xl, xr, y, "menu_entry_selected", True) @@ -464,8 +460,8 @@ class dvd_menu(devedeng.interface_manager.interface_manager): coordinates.append([xl, y - height, med, y + height, "left"]) coordinates.append([med, y - height, xr, y + height, "right"]) if paint_background: - self.paint_base(xl, xr, y, 1) - self.paint_base(xl, xr, y, 2) + self.paint_base(xl, xr, y, 1, self.background_color) + self.paint_base(xl, xr, y, 2, self.background_color) self.paint_arrow(med, xr, y, "menu_entry", False) self.paint_arrow(xl, med, y, "menu_entry", True) if paint_selected: @@ -476,7 +472,7 @@ class dvd_menu(devedeng.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): + def paint_base(self, xl, xr, y, type_b, color): height = self.cached_menu_size + self.entry_vertical_margin radius = (height) / 2.0 @@ -489,8 +485,7 @@ class dvd_menu(devedeng.interface_manager.interface_manager): xl = (xl + xr) / 2.0 xl += radius - self.cr.set_source_rgba(self.background_color[0], self.background_color[ - 1], self.background_color[2], self.background_color[3]) + self.cr.set_source_rgba(color[0], color[1], color[2], color[3]) self.cr.move_to(xl, y) self.cr.line_to(xr, y) self.cr.curve_to(xr + radius, y, xr + radius, diff --git a/src/devedeng/dvdauthor_converter.py b/src/devedeng/dvdauthor_converter.py index a30bf7b..697dd78 100644 --- a/src/devedeng/dvdauthor_converter.py +++ b/src/devedeng/dvdauthor_converter.py @@ -56,8 +56,15 @@ class dvdauthor_converter(devedeng.executor.executor): self.progress_bar[1].set_text(data[0]) return - def create_dvdauthor_xml(self, movie_folder, file_movies, menu_entries, start_with_menu, play_all_opt, menuWide): + def create_dvdauthor_xml(self, movie_folder, file_movies_in, menu_entries, start_with_menu, play_all_opt, menuWide): + file_movies = [] + for element in file_movies_in: + if element.element_type != "file_movie": + continue + file_movies.append(element) + + print(file_movies) xmlpath = os.path.join(movie_folder, "xml_data") xml_file_path = os.path.join(xmlpath, "dvdauthor.xml") datapath = os.path.join(movie_folder, "dvd_tree") @@ -243,16 +250,14 @@ class dvdauthor_converter(devedeng.executor.executor): xml_file.write('\t\t\t\t\tg0=1;\n') xml_file.write('\t\t\t\t\tjump vmgm menu;\n') else: - xml_file.write( - '\t\t\t\t\tg0=' + str(title_list[title_counter]) + ';\n') + xml_file.write('\t\t\t\t\tg0={:};\n'.format(str(title_list[title_counter]))) xml_file.write('\t\t\t\t\tjump vmgm menu;\n') title_counter += 1 button_counter += 1 xml_file.write('\t\t\t\t\n') if (menu_page["left"] is not None): - xml_file.write('\t\t\t\t