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

@ -41,6 +41,7 @@ import devedeng.shutdown
import devedeng.about
import devedeng.opensave
import devedeng.help
import devedeng.separator
class devede_project:
@ -173,9 +174,7 @@ class devede_project:
return ((None, -1, None, None))
def get_all_files(self):
retval = []
for row in self.wfiles.get_model():
retval.append(row.model[row.iter][0])
return retval
@ -202,6 +201,8 @@ class devede_project:
self.wproperties_file.set_sensitive(False)
self.wpreview_file.set_sensitive(False)
else:
if element.element_type != "file_movie":
self.wpreview_file.set_sensitive(False)
nfiles = len(self.wfiles.get_model())
if (nfiles < 1):
self.wdelete_file.set_sensitive(False)
@ -211,26 +212,24 @@ class devede_project:
self.wdown_file.set_sensitive(False)
def on_cellrenderertext3_edited(self, widget, path, text):
self.wliststore_files[path][0].set_title(text)
element = self.wliststore_files[path][0]
element.set_name(text)
def on_cellrenderertext4_toggled(self, widget, path):
self.wliststore_files[path][0].set_show_in_menu(
False if widget.get_active() else True)
element = self.wliststore_files[path][0]
element.set_show_in_menu(False if widget.get_active() else True)
def on_use_pal_toggled(self, b):
self.config.PAL = self.wuse_pal.get_active()
self.set_interface_status(None)
def on_wmain_window_delete_event(self, b, e=None):
ask = devedeng.ask.ask_window()
if (ask.run(_("Abort the current DVD and exit?"), _("Exit DeVeDe"))):
Gtk.main_quit()
return True
def title_changed(self, obj, new_title):
for item in self.wliststore_files:
element = item.model[item.iter][0]
if element == obj:
@ -245,15 +244,12 @@ class devede_project:
self.refresh_disc_usage()
def on_help_clicked(self, b):
help_file = devedeng.help.help("main.html")
def on_help_index_activate(self, b):
help_file = devedeng.help.help("index.html")
def on_add_file_clicked(self, b):
ask_files = devedeng.add_files.add_files()
if (ask_files.run()):
self.add_several_files(ask_files.files)
@ -291,14 +287,17 @@ class devede_project:
self.refresh_disc_usage()
def on_delete_file_clicked(self, b):
(element, position, model, treeiter) = self.get_current_file()
if (element is None):
return
ask_w = devedeng.ask.ask_window()
if (ask_w.run(_("The file <b>%(X)s</b> <i>(%(Y)s)</i> will be removed.") % {"X": element.title_name, "Y": element.file_name}, _("Delete file"))):
element.delete_file()
if (element.element_type == "file_movie"):
ask_w = devedeng.ask.ask_window()
do_delete = ask_w.run(_("The file <b>%(X)s</b> <i>(%(Y)s)</i> will be removed.") % {"X": element.title_name, "Y": element.file_name}, _("Delete file"))
else:
do_delete = True
if do_delete:
element.delete_element()
model.remove(treeiter)
self.set_interface_status(None)
self.refresh_disc_usage()
@ -334,11 +333,12 @@ class devede_project:
self.refresh_disc_usage()
def on_adjust_disc_usage_clicked(self, b):
total_resolution = 0
fixed_size = 0
to_adjust = []
for f in self.get_all_files():
if f.element_type != "file_movie":
continue
estimated_size, videorate_fixed_size, audio_rate, sub_rate, width, height, time_length = f.get_size_data()
if videorate_fixed_size:
fixed_size += estimated_size
@ -408,10 +408,10 @@ class devede_project:
self.refresh_disc_usage()
def refresh_disc_usage(self):
used = 0.0
for f in self.get_all_files():
if f.element_type != "file_movie":
continue
estimated_size = f.get_estimated_size()
used += float(estimated_size)
@ -434,7 +434,6 @@ class devede_project:
self.wdisc_fill_level.set_show_text(True)
def on_menu_options_clicked(self, b):
self.menu.show_configuration(self.get_all_files())
def get_dvd_size(self):
@ -480,18 +479,19 @@ class devede_project:
return size, minvrate, maxvrate
def on_disc_size_changed(self, c):
self.refresh_disc_usage()
def on_create_disc_clicked(self, b):
if self.disc_type == "dvd":
max_files = 62
else:
max_files = -1
file_movies = self.get_all_files()
t = len(file_movies)
t = 0
for element in file_movies:
if element.element_type == "file_movie":
t += 1
if (max_files != -1) and (t > max_files):
devedeng.message.message_window(_("The limit for this format is %(l)d files, but your project has %(h)d.") % {"l": max_files, "h": t}, _("Too many files in the project"))
return
@ -553,6 +553,8 @@ class devede_project:
else:
extension = "mpg"
for movie in file_movies:
if movie.element_type != "file_movie":
continue
p = movie.do_conversion(os.path.join(
movie_folder, "movie_{:d}.{:s}".format(counter, extension)))
run_window.add_process(p)
@ -593,7 +595,6 @@ class devede_project:
run_window.run()
def disc_done(self, object, value):
if self.shutdown:
Gtk.main_quit()
devedeng.shutdown.shutdown()
@ -617,26 +618,21 @@ class devede_project:
self.wmain_window.show()
def disc_done2(self, object, value):
self.wmain_window.show()
def on_preview_file_clicked(self, b):
(element, position, model, treeiter) = self.get_current_file()
if (element is None):
return
element.do_preview()
def on_settings_activate(self, b):
w = devedeng.settings.settings_window(self.wmain_window)
def on_about_activate(self, b):
w = devedeng.about.about_window()
def on_new_activate(self, b):
w = devedeng.ask.ask_window()
if w.run(_("Close current project and start a fresh one?"), _("New project")):
self.wliststore_files.clear()
@ -664,7 +660,6 @@ class devede_project:
self.on_save_as_activate(None)
def on_save_as_activate(self, b):
while True:
w = devedeng.opensave.opensave_window(True)
retval = w.run(self.project_file)
@ -687,7 +682,6 @@ class devede_project:
self.load_project(retval)
def save_current_project(self):
project = {}
project["PAL"] = self.wuse_pal.get_active()
@ -695,9 +689,8 @@ class devede_project:
project["disc_type"] = self.config.disc_type
project["disc_size"] = self.wdisc_size.get_active()
project["files"] = []
f = self.get_all_files()
for i in f:
project["files"].append(i.store_file())
for i in self.get_all_files():
project["files"].append(i.store_element())
if self.disc_type == "dvd":
project["menu"] = self.menu.store_menu()
@ -708,7 +701,6 @@ class devede_project:
recent_mgr.add_item(uri)
def load_project(self, project_file):
self.wliststore_files.clear()
self.project_file = project_file
with open(project_file, 'rb') as f:
@ -725,15 +717,23 @@ class devede_project:
self.menu.restore_menu(project["menu"])
if "files" in project:
error_list = []
for efile in project["files"]:
new_file = devedeng.file_movie.file_movie(efile["file_name"])
if (new_file.error):
error_list.append(os.path.basename(efile["file_name"]))
else:
new_file.restore_file(efile)
for element in project["files"]:
if element["element_type"] == "file_movie":
new_file = devedeng.file_movie.file_movie(element["file_name"])
if (new_file.error):
error_list.append(os.path.basename(element["file_name"]))
continue
new_file.restore_element(element)
new_file.connect('title_changed', self.title_changed)
new_file.connect('in_menu_changed', self.in_menu_changed)
self.wliststore_files.append([new_file, new_file.title_name, True, self.duration_to_string(
new_file.get_duration()), new_file.show_in_menu])
new_file.get_duration()), new_file.show_in_menu])
else:
new_separator = devedeng.separator.separator()
new_separator.restore_element(element)
new_separator.connect('name_changed', self.title_changed)
new_separator.connect('in_menu_changed', self.in_menu_changed)
self.wliststore_files.append([new_separator, new_separator.separator_name, True, "", True])
if (len(error_list) != 0):
devedeng.message.message_window(_("The following files in the project could not be added again:"), _("Error while adding files"), error_list)
self.set_interface_status(None)
@ -743,6 +743,18 @@ class devede_project:
recent_mgr.add_item(uri)
def on_multiproperties_activate(self, b):
e = devedeng.file_movie.file_movie(None, self.get_all_files())
file_list = []
for f in self.get_all_files():
if f.element_type != "file_movie":
continue
file_list.append(f)
e = devedeng.file_movie.file_movie(None, file_list)
e.properties()
def on_add_separator_clicked(self, b):
new_separator = devedeng.separator.separator()
new_separator.connect('name_changed', self.title_changed)
new_separator.connect('in_menu_changed', self.in_menu_changed)
self.wliststore_files.append([new_separator, new_separator.separator_name, True, "", True])
self.set_interface_status(None)
self.refresh_disc_usage()