diff --git a/data/interface/wmain.ui b/data/interface/wmain.ui index 17a66bd..414a1a0 100644 --- a/data/interface/wmain.ui +++ b/data/interface/wmain.ui @@ -2,9 +2,9 @@ - + - + @@ -28,8 +28,25 @@ - - + + + + + + + + + + + + + + + + + + + 750 440 False @@ -201,7 +218,7 @@ True False - + True False 0 @@ -222,15 +239,29 @@ True in - + True True - liststore2 - True + liststore_titles + False + False + False horizontal + + + + Titles + + + + 0 + + + + @@ -245,7 +276,7 @@ True False - + gtk-add True True @@ -253,6 +284,7 @@ True top True + False @@ -261,7 +293,7 @@ - + gtk-remove True True @@ -269,6 +301,7 @@ True top True + False @@ -277,7 +310,7 @@ - + gtk-go-down True True @@ -285,6 +318,7 @@ True top True + False @@ -293,7 +327,7 @@ - + gtk-go-up True True @@ -301,6 +335,7 @@ True top True + False @@ -309,7 +344,7 @@ - + gtk-properties True True @@ -372,12 +407,25 @@ True in - + True True + liststore_files + False + + + column + + + + 0 + + + + @@ -392,7 +440,7 @@ True False - + gtk-add True True @@ -408,7 +456,7 @@ - + gtk-remove True True @@ -424,7 +472,7 @@ - + gtk-go-down True True @@ -440,7 +488,7 @@ - + gtk-go-up True True @@ -456,7 +504,7 @@ - + gtk-properties True True @@ -472,13 +520,43 @@ - - Preview + True True True 0.4699999988079071 top + + + True + False + vertical + + + True + False + video-display + + + False + True + 0 + + + + + True + False + Preview + + + False + True + 1 + + + + False @@ -554,12 +632,18 @@ True False - + True False - liststore1 + disc_size_list 1 0 + + + + 0 + + False @@ -568,7 +652,7 @@ - + True False @@ -579,11 +663,12 @@ - + Adjust disc usage True True True + False @@ -638,7 +723,7 @@ True False - + PAL True True @@ -646,7 +731,7 @@ 0 True True - radiobutton2 + use_ntsc False @@ -656,13 +741,12 @@ - + NTSC True True False 0 - True True @@ -707,7 +791,7 @@ True False - + Create a menu with the titles True True @@ -823,7 +907,7 @@ - + gtk-go-forward True True diff --git a/data/interface/wmain.ui~ b/data/interface/wmain.ui~ index 17a66bd..42bc613 100644 --- a/data/interface/wmain.ui~ +++ b/data/interface/wmain.ui~ @@ -2,9 +2,9 @@ - + - + @@ -28,8 +28,27 @@ - - + + + + + + + + + + + + + + + + + + + + + 750 440 False @@ -201,7 +220,7 @@ True False - + True False 0 @@ -222,15 +241,29 @@ True in - + True True - liststore2 - True + liststore_titles + False + False + False horizontal + + + + Titles + + + + 0 + + + + @@ -245,7 +278,7 @@ True False - + gtk-add True True @@ -253,6 +286,7 @@ True top True + False @@ -261,7 +295,7 @@ - + gtk-remove True True @@ -269,6 +303,7 @@ True top True + False @@ -277,7 +312,7 @@ - + gtk-go-down True True @@ -285,6 +320,7 @@ True top True + False @@ -293,7 +329,7 @@ - + gtk-go-up True True @@ -301,6 +337,7 @@ True top True + False @@ -309,7 +346,7 @@ - + gtk-properties True True @@ -372,12 +409,25 @@ True in - + True True + liststore_files + False + + + column + + + + 0 + + + + @@ -392,7 +442,7 @@ True False - + gtk-add True True @@ -408,7 +458,7 @@ - + gtk-remove True True @@ -424,7 +474,7 @@ - + gtk-go-down True True @@ -440,7 +490,7 @@ - + gtk-go-up True True @@ -456,7 +506,7 @@ - + gtk-properties True True @@ -472,13 +522,43 @@ - - Preview + True True True 0.4699999988079071 top + + + True + False + vertical + + + True + False + video-display + + + False + True + 0 + + + + + True + False + Preview + + + False + True + 1 + + + + False @@ -554,12 +634,18 @@ True False - + True False - liststore1 + disc_size_list 1 0 + + + + 0 + + False @@ -568,7 +654,7 @@ - + True False @@ -579,11 +665,12 @@ - + Adjust disc usage True True True + False @@ -638,7 +725,7 @@ True False - + PAL True True @@ -646,7 +733,7 @@ 0 True True - radiobutton2 + use_ntsc False @@ -656,13 +743,12 @@ - + NTSC True True False 0 - True True @@ -707,7 +793,7 @@ True False - + Create a menu with the titles True True @@ -823,7 +909,7 @@ - + gtk-go-forward True True diff --git a/src/devede/main_window.py b/src/devede/main_window.py deleted file mode 100644 index 5a601d1..0000000 --- a/src/devede/main_window.py +++ /dev/null @@ -1,83 +0,0 @@ -# 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 - -from gi.repository import Gtk -import os - -class choose_disk: - - def __init__(self,paths): - - self.paths = paths - - self.builder = Gtk.Builder() - self.builder.set_translation_domain("devede_ng") - - self.builder.add_from_file(os.path.join(paths.glade,"wselect_disk.ui")) - self.builder.connect_signals(self) - self.window = self.builder.get_object("wselect_disk") - - self.window.show_all() - - def main_window(self,disk_type): - - self.window.hide() - self.window.destroy() - self.main_window = main_window(self.paths,disk_type) - - - def on_button_dvd_clicked(self,b): - - self.main_window("dvd") - - def on_button_vcd_clicked(self,b): - - self.main_window("vcd") - - def on_button_svcd_clicked(self,b): - - self.main_window("svcd") - - def on_button_cvd_clicked(self,b): - - self.main_window("cvd") - - def on_button_divx_clicked(self,b): - - self.main_window("divx") - - def on_wselect_disk_delete_event(self,w,e): - Gtk.main_quit() - return False - - - -class main_window: - - def __init__(self,paths,disk_type): - - self.paths = paths - self.disk_type = disk_type - - self.builder = Gtk.Builder() - self.builder.set_translation_domain("devede_ng") - - self.builder.add_from_file(os.path.join(paths.glade,"wmain.ui")) - self.builder.connect_signals(self) - self.window = self.builder.get_object("wmain") - - self.window.show_all() \ No newline at end of file diff --git a/src/devede/project.py b/src/devede/project.py new file mode 100644 index 0000000..385dc8d --- /dev/null +++ b/src/devede/project.py @@ -0,0 +1,285 @@ +# 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 + +from gi.repository import Gtk +import os + +import devede.title + + +class devede_project: + + def __init__(self,paths): + + self.paths = paths + self.destroy_all() + + + def destroy_all(self): + + self.wask_window = None + self.wmain_window = None + self.wframe_titles = None + self.wdisc_size = None + self.wliststore_files = None + self.wliststore_titles = None + self.wfiles = None + self.wtitles = None + self.wdisc_fill_level = None + self.wuse_pal = None + self.wuse_ntsc = None + self.wcreate_menu = None + self.project_type = None + self.wdelete_title = None + self.wup_title = None + self.wdown_title = None + self.wproperties_title = None + self.wadd_chapter = None + self.wdelete_chapter = None + self.wup_chapter = None + self.wdown_chapter = None + self.wproperties_chapter = None + self.wcreate_disc = None + + devede.title.counter = 0 + + + def ask_type(self): + """ This method resets the project and asks the user what kind of project want to do """ + + if (self.wask_window != None): + self.wask_window.present() + return + + builder = Gtk.Builder() + builder.set_translation_domain("devede_ng") + + builder.add_from_file(os.path.join(self.paths.glade,"wselect_disk.ui")) + builder.connect_signals(self) + self.wask_window = builder.get_object("wselect_disk") + self.wask_window.show_all() + + def on_wselect_disk_delete_event(self,w,e): + Gtk.main_quit() + return False + + def on_button_dvd_clicked(self,b): + + self.set_type("dvd") + + def on_button_vcd_clicked(self,b): + + self.set_type("vcd") + + def on_button_svcd_clicked(self,b): + + self.set_type("svcd") + + def on_button_cvd_clicked(self,b): + + self.set_type("cvd") + + def on_button_divx_clicked(self,b): + + self.set_type("divx") + + + def set_type(self,disc_type): + """ this method sets the disk type to the specified one and adapts the interface + in the main window to it. Also leaves everything ready to start creating a + new disc """ + + if (self.wask_window != None): + self.wask_window.destroy() + self.destroy_all() + + self.project_type = disc_type + self.show_main_window() + + # Set the default disc size + if (self.project_type == "dvd"): + self.wdisc_size.set_active(1) # 4.7 GB DVD + self.wframe_titles.show() + else: + self.wdisc_size.set_active(3) # 700 MB CD + self.wframe_titles.hide() + + + # create a new title + self.on_add_title_clicked(None) + + + def on_add_title_clicked(self,b): + """ Creates a new title and adds it to the current project """ + + self.get_current_title() + + new_title = devede.title.title() + self.wliststore_titles.append([new_title.title_name, new_title]) + self.set_interface_status(None) + + + def on_delete_title_clicked(self,b): + + (element, position, model, treeiter) = self.get_current_title() + if (element == None): + return + + element.delete_title() + model.remove(treeiter) + self.set_interface_status(None) + + def on_up_title_clicked(self,b): + + (element, position, model, treeiter) = self.get_current_title() + if (element == None) or (position == 0): + return + + last_element = self.wliststore_titles[position-1] + self.wliststore_titles.swap(last_element.iter,treeiter) + self.set_interface_status(None) + + def on_down_title_clicked(self,b): + + (element, position, model, treeiter) = self.get_current_title() + if (element == None) or (position == (len(self.wliststore_titles)-1)): + return + + last_element = self.wliststore_titles[position+1] + self.wliststore_titles.swap(last_element.iter,treeiter) + self.set_interface_status(None) + + def get_current_title(self): + """ returns the currently selected title """ + + selection = self.wtitles.get_selection() + model, treeiter = selection.get_selected() + + if treeiter != None: + element = model[treeiter][1] + position = 0 + for row in self.wliststore_titles: + item = row.model[row.iter][1] + if element == item: + break + position += 1 + return ( (element, position, model, treeiter) ) + else: + return ( (None, -1, None, None) ) + + + + def set_interface_status(self,b): + + self.wadd_title.set_sensitive(True) + self.wdelete_title.set_sensitive(True) + self.wup_title.set_sensitive(True) + self.wdown_title.set_sensitive(True) + self.wproperties_title.set_sensitive(True) + + self.wadd_chapter.set_sensitive(True) + self.wdelete_chapter.set_sensitive(True) + self.wup_chapter.set_sensitive(True) + self.wdown_chapter.set_sensitive(True) + self.wproperties_chapter.set_sensitive(True) + + self.wcreate_disc.set_sensitive(True) + + (element, position, model, treeiter) = self.get_current_title() + + if (element == None): + self.wdelete_title.set_sensitive(False) + self.wup_title.set_sensitive(False) + self.wdown_title.set_sensitive(False) + self.wproperties_title.set_sensitive(False) + self.wadd_chapter.set_sensitive(False) + self.wdelete_chapter.set_sensitive(False) + self.wup_chapter.set_sensitive(False) + self.wdown_chapter.set_sensitive(False) + self.wproperties_chapter.set_sensitive(False) + else: + ntitles = len(self.wliststore_titles) + if (ntitles < 2): + self.wdelete_title.set_sensitive(False) + if (position == 0): + self.wup_title.set_sensitive(False) + if (position == (ntitles-1)): + self.wdown_title.set_sensitive(False) + + empty_disc = True + for row in self.wliststore_titles: + item = row.model[row.iter][1] + if item.get_number_of_chapters() > 0: + empty_disc = False + break + + if (empty_disc): + self.wcreate_disc.set_sensitive(False) + + + + def show_main_window(self): + + if (self.wmain_window != None): + self.wmain_window.present() + return + + builder = Gtk.Builder() + builder.set_translation_domain("devede_ng") + + builder.add_from_file(os.path.join(self.paths.glade,"wmain.ui")) + builder.connect_signals(self) + + # Interface widgets + self.wmain_window = builder.get_object("wmain_window") + self.wdisc_size = builder.get_object("disc_size") + self.wliststore_files = builder.get_object("liststore_files") + self.wliststore_titles = builder.get_object("liststore_titles") + self.wfiles = builder.get_object("files") + self.wtitles = builder.get_object("titles") + self.wdisc_fill_level = builder.get_object("disc_fill_level") + self.wuse_pal = builder.get_object("use_pal") + self.wuse_ntsc = builder.get_object("use_ntsc") + self.wcreate_menu = builder.get_object("create_menu") + self.wframe_titles = builder.get_object("frame_titles") + + self.wadd_title = builder.get_object("delete_title") + self.wdelete_title = builder.get_object("delete_title") + self.wup_title = builder.get_object("up_title") + self.wdown_title = builder.get_object("down_title") + self.wproperties_title = builder.get_object("properties_title") + self.wadd_chapter = builder.get_object("add_chapter") + self.wdelete_chapter = builder.get_object("delete_chapter") + self.wup_chapter = builder.get_object("up_chapter") + self.wdown_chapter = builder.get_object("down_chapter") + self.wproperties_chapter = builder.get_object("properties_chapter") + + self.wcreate_disc = builder.get_object("create_disc") + + selection = self.wfiles.get_selection() + selection.mode = Gtk.SelectionMode.SINGLE + selection = self.wtitles.get_selection() + selection.mode = Gtk.SelectionMode.SINGLE + + self.wmain_window.show_all() + + + def on_adjust_disc_usage_clicked(self,b): + + pass + + diff --git a/src/devede/devede.py b/src/devede/title.py similarity index 60% rename from src/devede/devede.py rename to src/devede/title.py index 88801aa..e40cd08 100644 --- a/src/devede/devede.py +++ b/src/devede/title.py @@ -15,17 +15,23 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see -import devede.convert -import devede.main_window -from gi.repository import Gtk +from gi.repository import Gtk,GObject -# This is the first call made, where we initializate everything - -def main(argv,paths): +class title(GObject.GObject): - global _ - - Gtk.init(argv) - - ventana = devede.main_window.choose_disk(paths) - Gtk.main() + counter = 0 + + def __init__(self): + + GObject.GObject.__init__(self) + title.counter += 1 + self.title_name = _("Title %(X)d") % {"X":title.counter} + self.chapters = Gtk.ListStore() + + def get_number_of_chapters(self): + + return len(self.chapters) + + def delete_title(self): + + print("Deleted title "+self.title_name) \ No newline at end of file diff --git a/src/devede_ng.py b/src/devede_ng.py index 399542d..9f76af1 100755 --- a/src/devede_ng.py +++ b/src/devede_ng.py @@ -21,7 +21,9 @@ import sys import os import gettext import locale -import devede.devede +from gi.repository import Gtk + +import devede.project class config_paths: @@ -74,4 +76,8 @@ gettext.install("devede_ng",localedir=paths.share_locale) _ = gettext.gettext -devede.devede.main(sys.argv,paths) \ No newline at end of file +Gtk.init(sys.argv) + +mwindow = devede.project.devede_project(paths) +mwindow.ask_type() +Gtk.main()