Now can load and save a project
This commit is contained in:
parent
2cd17b8f45
commit
dc350be634
8 changed files with 383 additions and 4 deletions
|
|
@ -599,4 +599,14 @@ class dvd_menu(devede.interface_manager.interface_manager):
|
|||
processes.append(converter)
|
||||
n_page += 1
|
||||
|
||||
return processes,menu_entries
|
||||
return processes,menu_entries
|
||||
|
||||
|
||||
def store_menu(self):
|
||||
|
||||
return self.serialize()
|
||||
|
||||
|
||||
def restore_menu(self,data):
|
||||
|
||||
self.unserialize(data)
|
||||
|
|
@ -634,4 +634,14 @@ class file_movie(devede.interface_manager.interface_manager):
|
|||
if (retval == 0):
|
||||
cv = devede.converter.converter.get_converter()
|
||||
disc_player = (cv.get_film_player())()
|
||||
disc_player.play_film(os.path.join(self.config.tmp_folder,"movie_preview.mpg"))
|
||||
disc_player.play_film(os.path.join(self.config.tmp_folder,"movie_preview.mpg"))
|
||||
|
||||
|
||||
def store_file(self):
|
||||
|
||||
return self.serialize()
|
||||
|
||||
|
||||
def restore_file(self,data):
|
||||
|
||||
self.unserialize(data)
|
||||
|
|
|
|||
|
|
@ -462,3 +462,69 @@ class interface_manager(GObject.GObject):
|
|||
exec('self.'+element[0]+' = self.'+element[0]+'_backup')
|
||||
for element in self.interface_comboboxes:
|
||||
exec('self.'+element[0]+' = self.'+element[0]+'_backup')
|
||||
|
||||
|
||||
def serialize(self):
|
||||
""" Returns a dictionary with both the variables of the interface and its values,
|
||||
which can be restored with unserialize
|
||||
"""
|
||||
|
||||
output = {}
|
||||
for element in self.interface_groups:
|
||||
output[element] = eval('self.'+element)
|
||||
for element in self.interface_toggles:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_text:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_integer_adjustments:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_float_adjustments:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_colorbuttons:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_fontbuttons:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_filebuttons:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_lists:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
for element in self.interface_comboboxes:
|
||||
output[element[0]] = eval('self.'+element[0])
|
||||
return output
|
||||
|
||||
|
||||
def unserialize(self,data_list):
|
||||
""" Takes a dictionary with the variables of the interface and its values,
|
||||
and restores them into their variables
|
||||
"""
|
||||
|
||||
for element in self.interface_groups:
|
||||
if element in data_list:
|
||||
exec('self.'+element+' = data_list["'+element+'"]')
|
||||
for element in self.interface_toggles:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_text:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_integer_adjustments:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_float_adjustments:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_colorbuttons:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_fontbuttons:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_filebuttons:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_lists:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
for element in self.interface_comboboxes:
|
||||
if element[0] in data_list:
|
||||
exec('self.'+element[0]+' = data_list["'+element[0]+'"]')
|
||||
|
|
|
|||
62
src/devede/opensave.py
Normal file
62
src/devede/opensave.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
# Copyright 2014 (C) Raster Software Vigo (Sergio Costas)
|
||||
#
|
||||
# This file is part of DeVeDe-NG
|
||||
#
|
||||
# DeVeDe-NG is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# DeVeDe-NG is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
from gi.repository import Gtk
|
||||
import os
|
||||
import devede.configuration_data
|
||||
|
||||
class opensave_window:
|
||||
|
||||
def __init__(self, save):
|
||||
|
||||
self.config = devede.configuration_data.configuration.get_config()
|
||||
self.save = save
|
||||
|
||||
|
||||
def run(self,current_file = None):
|
||||
|
||||
builder = Gtk.Builder()
|
||||
builder.set_translation_domain(self.config.gettext_domain)
|
||||
|
||||
if self.save:
|
||||
builder.add_from_file(os.path.join(self.config.glade,"wsave_project.ui"))
|
||||
else:
|
||||
builder.add_from_file(os.path.join(self.config.glade,"wopen_project.ui"))
|
||||
builder.connect_signals(self)
|
||||
w_window = builder.get_object("data_project")
|
||||
if current_file != None:
|
||||
w_window.set_filename(current_file)
|
||||
|
||||
file_filter_projects=Gtk.FileFilter()
|
||||
file_filter_projects.set_name(_("DevedeNG projects"))
|
||||
file_filter_projects.add_pattern("*.devedeng")
|
||||
|
||||
file_filter_all=Gtk.FileFilter()
|
||||
file_filter_all.set_name(_("All files"))
|
||||
file_filter_all.add_pattern("*")
|
||||
|
||||
w_window.add_filter(file_filter_projects)
|
||||
w_window.add_filter(file_filter_all)
|
||||
|
||||
w_window.show_all()
|
||||
retval = w_window.run()
|
||||
self.final_filename = w_window.get_filename()
|
||||
w_window.destroy()
|
||||
if (retval == 1):
|
||||
return self.final_filename
|
||||
else:
|
||||
return None
|
||||
|
|
@ -20,6 +20,7 @@ import os
|
|||
import time
|
||||
import shutil
|
||||
import urllib.parse
|
||||
import pickle
|
||||
|
||||
import devede.file_movie
|
||||
import devede.ask
|
||||
|
|
@ -35,6 +36,7 @@ import devede.end_job
|
|||
import devede.vcdimager_converter
|
||||
import devede.shutdown
|
||||
import devede.about
|
||||
import devede.opensave
|
||||
|
||||
class devede_project:
|
||||
|
||||
|
|
@ -46,6 +48,7 @@ class devede_project:
|
|||
self.menu = devede.dvd_menu.dvd_menu()
|
||||
|
||||
self.current_title = None
|
||||
self.project_file = None
|
||||
|
||||
builder = Gtk.Builder()
|
||||
builder.set_translation_domain(self.config.gettext_domain)
|
||||
|
|
@ -240,6 +243,8 @@ class devede_project:
|
|||
element.delete_file()
|
||||
model.remove(treeiter)
|
||||
self.set_interface_status(None)
|
||||
self.refresh_disc_usage()
|
||||
|
||||
|
||||
def on_up_file_clicked(self,b):
|
||||
|
||||
|
|
@ -251,6 +256,7 @@ class devede_project:
|
|||
self.wfiles.get_model().swap(last_element.iter,treeiter)
|
||||
self.set_interface_status(None)
|
||||
|
||||
|
||||
def on_down_file_clicked(self,b):
|
||||
|
||||
(element, position, model, treeiter) = self.get_current_file()
|
||||
|
|
@ -482,10 +488,12 @@ 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()
|
||||
|
|
@ -493,31 +501,115 @@ class devede_project:
|
|||
return
|
||||
element.do_preview()
|
||||
|
||||
|
||||
def on_settings_activate(self,b):
|
||||
|
||||
w = devede.settings.settings_window()
|
||||
|
||||
|
||||
def on_about_activate(self,b):
|
||||
|
||||
w = devede.about.about_window()
|
||||
|
||||
|
||||
def on_new_activate(self,b):
|
||||
|
||||
w = devede.ask.ask_window()
|
||||
if w.run(_("Delete current project and start a fresh one?"), _("New project")):
|
||||
if w.run(_("Close current project and start a fresh one?"), _("New project")):
|
||||
self.wliststore_files.clear()
|
||||
self.project_file = None
|
||||
self.wmain_window.hide()
|
||||
devede.choose_disc_type.choose_disc_type()
|
||||
|
||||
|
||||
def on_wmain_window_drag_motion(self,wid, context, x, y, time):
|
||||
Gdk.drag_status(context, Gdk.DragAction.COPY, time)
|
||||
return True
|
||||
|
||||
|
||||
def on_wmain_window_drag_drop(self, wid, context, x, y, time):
|
||||
# Used with windows drag and drop
|
||||
return True
|
||||
|
||||
|
||||
def on_wmain_window_drag_data_received(self, widget, drag_context, x,y, data, info, time):
|
||||
uris = data.get_uris()
|
||||
self.add_several_files(uris)
|
||||
Gtk.drag_finish (drag_context, True, Gdk.DragAction.COPY, time);
|
||||
Gtk.drag_finish (drag_context, True, Gdk.DragAction.COPY, time);
|
||||
|
||||
|
||||
def on_save_activate(self,b):
|
||||
if self.project_file != None:
|
||||
self.save_current_project()
|
||||
else:
|
||||
self.on_save_as_activate(None)
|
||||
|
||||
|
||||
def on_save_as_activate(self,b):
|
||||
|
||||
w = devede.opensave.opensave_window(True)
|
||||
retval = w.run(self.project_file)
|
||||
if retval != None:
|
||||
self.project_file = retval
|
||||
self.save_current_project()
|
||||
|
||||
|
||||
def on_load_activate(self,b):
|
||||
w = devede.opensave.opensave_window(False)
|
||||
retval = w.run()
|
||||
if retval != None:
|
||||
self.load_project(retval)
|
||||
|
||||
|
||||
def save_current_project(self):
|
||||
|
||||
project = {}
|
||||
|
||||
if not self.project_file.endswith(".devedeng"):
|
||||
self.project_file += ".devedeng"
|
||||
|
||||
project["PAL"] = self.wuse_pal.get_active()
|
||||
project["create_menu"] = self.wcreate_menu.get_active()
|
||||
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())
|
||||
if self.disc_type == "dvd":
|
||||
project["menu"] = self.menu.store_menu()
|
||||
|
||||
with open(self.project_file, 'wb') as f:
|
||||
pickle.dump(project, f, 3)
|
||||
|
||||
|
||||
def load_project(self,project_file):
|
||||
|
||||
self.wliststore_files.clear()
|
||||
self.project_file = project_file
|
||||
with open(project_file, 'rb') as f:
|
||||
project = pickle.load(f)
|
||||
if "disc_type" in project:
|
||||
self.config.set_disc_type(project["disc_type"])
|
||||
if "PAL" in project:
|
||||
self.wuse_pal.set_active(project["PAL"])
|
||||
if "create_menu" in project:
|
||||
self.wcreate_menu.set_active(project["create_menu"])
|
||||
if "disc_size" in project:
|
||||
self.wdisc_size.set_active(project["disc_size"])
|
||||
if "menu" in project:
|
||||
self.menu.restore_menu(project["menu"])
|
||||
if "files" in project:
|
||||
error_list = []
|
||||
for efile in project["files"]:
|
||||
new_file = devede.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)
|
||||
new_file.connect('title_changed',self.title_changed)
|
||||
self.wliststore_files.append([new_file, new_file.title_name])
|
||||
if (len(error_list)!=0):
|
||||
devede.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)
|
||||
self.refresh_disc_usage()
|
||||
Loading…
Add table
Add a link
Reference in a new issue