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:
parent
8719778d22
commit
c222c4ab14
8 changed files with 616 additions and 214 deletions
|
|
@ -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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue