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.
This commit is contained in:
Sergio Costas 2019-01-03 23:18:59 +01:00
parent 8719778d22
commit c222c4ab14
8 changed files with 616 additions and 214 deletions

View file

@ -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,