diff --git a/data/interface/wask.ui b/data/interface/wask.ui new file mode 100644 index 0000000..40cfc79 --- /dev/null +++ b/data/interface/wask.ui @@ -0,0 +1,83 @@ + + + + + + 320 + 240 + False + False + True + center + devede.svg + dialog + True + False + False + + + False + vertical + 2 + + + False + end + + + gtk-cancel + True + True + True + True + + + False + True + 0 + + + + + gtk-ok + True + True + True + True + + + False + True + 1 + + + + + False + True + end + 0 + + + + + True + False + True + center + True + + + True + True + 1 + + + + + + button1 + button2 + + + diff --git a/data/interface/wmain.ui b/data/interface/wmain.ui index 414a1a0..9a9ccb5 100644 --- a/data/interface/wmain.ui +++ b/data/interface/wmain.ui @@ -34,8 +34,6 @@ - - @@ -50,7 +48,9 @@ 750 440 False + Devede center + devede.svg True @@ -412,6 +412,7 @@ True liststore_files False + @@ -440,7 +441,7 @@ True False - + gtk-add True True @@ -448,6 +449,7 @@ True top True + False @@ -456,7 +458,7 @@ - + gtk-remove True True @@ -464,6 +466,7 @@ True top True + False @@ -472,7 +475,7 @@ - + gtk-go-down True True @@ -488,7 +491,7 @@ - + gtk-go-up True True @@ -504,7 +507,7 @@ - + gtk-properties True True @@ -520,7 +523,7 @@ - + True True True diff --git a/data/interface/wmain.ui~ b/data/interface/wmain.ui~ index 42bc613..97d2da9 100644 --- a/data/interface/wmain.ui~ +++ b/data/interface/wmain.ui~ @@ -34,8 +34,6 @@ - - @@ -44,15 +42,15 @@ - - 750 440 False + Devede center + devede.svg True @@ -414,6 +412,7 @@ True liststore_files False + @@ -442,7 +441,7 @@ True False - + gtk-add True True @@ -450,6 +449,7 @@ True top True + False @@ -458,7 +458,7 @@ - + gtk-remove True True @@ -474,7 +474,7 @@ - + gtk-go-down True True @@ -490,7 +490,7 @@ - + gtk-go-up True True @@ -506,7 +506,7 @@ - + gtk-properties True True @@ -522,7 +522,7 @@ - + True True True diff --git a/data/interface/wselect_disk.ui b/data/interface/wselect_disk.ui index dde2f06..e983b60 100644 --- a/data/interface/wselect_disk.ui +++ b/data/interface/wselect_disk.ui @@ -5,6 +5,7 @@ False center + devede.svg diff --git a/data/interface/wselect_disk.ui~ b/data/interface/wselect_disk.ui~ index e14011b..13fa7f6 100644 --- a/data/interface/wselect_disk.ui~ +++ b/data/interface/wselect_disk.ui~ @@ -4,6 +4,8 @@ False + center + devede.svg diff --git a/src/devede/ask.py b/src/devede/ask.py new file mode 100644 index 0000000..1eed496 --- /dev/null +++ b/src/devede/ask.py @@ -0,0 +1,45 @@ +# 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 ask_window: + + def __init__(self,paths): + + self.paths = paths + + def run(self,text,title): + + builder = Gtk.Builder() + builder.set_translation_domain("devede_ng") + + builder.add_from_file(os.path.join(self.paths.glade,"wask.ui")) + builder.connect_signals(self) + wask_window = builder.get_object("dialog_ask") + wask_window.set_title(title) + wask_text = builder.get_object("label_ask") + wask_text.set_markup(text) + + wask_window.show_all() + retval = wask_window.run() + wask_window.destroy() + if (retval == 1): + return True + else: + return False \ No newline at end of file diff --git a/src/devede/file.py b/src/devede/file.py new file mode 100644 index 0000000..1c7b11f --- /dev/null +++ b/src/devede/file.py @@ -0,0 +1,33 @@ +# 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 GObject + +class file(GObject.GObject): + + def __init__(self): + + GObject.GObject.__init__(self) + self.counter2 = 0 + + def delete_file(self): + + print("Deleted file "+self.file_name) + + def properties(self): + + self.file_name = "Hola" \ No newline at end of file diff --git a/src/devede/project.py b/src/devede/project.py index 385dc8d..22d066b 100644 --- a/src/devede/project.py +++ b/src/devede/project.py @@ -19,7 +19,8 @@ from gi.repository import Gtk import os import devede.title - +import devede.file +import devede.ask class devede_project: @@ -48,11 +49,11 @@ class devede_project: 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.wadd_file = None + self.wdelete_file = None + self.wup_file = None + self.wdown_file = None + self.wproperties_file = None self.wcreate_disc = None devede.title.counter = 0 @@ -128,10 +129,23 @@ class devede_project: self.get_current_title() - new_title = devede.title.title() + new_title = devede.title.title(self.wfiles,self.wliststore_files) self.wliststore_titles.append([new_title.title_name, new_title]) self.set_interface_status(None) + def on_add_file_clicked(self,b): + + (element, position, model, treeiter) = self.get_current_title() + if (element == None): + return + + new_file = devede.file.file() + new_file.properties() + + if (new_file.file_name != None): + element.add_file(new_file) + self.set_interface_status(None) + def on_delete_title_clicked(self,b): @@ -139,9 +153,23 @@ class devede_project: if (element == None): return - element.delete_title() - model.remove(treeiter) - self.set_interface_status(None) + ask_w = devede.ask.ask_window(self.paths) + if (ask_w.run(_("The title %(X)s will be removed.") % {"X":element.title_name},_("Delete title"))): + element.delete_title() + model.remove(treeiter) + self.set_interface_status(None) + + def on_delete_file_clicked(self,b): + + (element, position, model, treeiter) = self.get_current_file() + if (element == None): + return + + ask_w = devede.ask.ask_window(self.paths) + if (ask_w.run(_("The file %(X)s will be removed.") % {"X":element.file_name},_("Delete file"))): + element.delete_file() + model.remove(treeiter) + self.set_interface_status(None) def on_up_title_clicked(self,b): @@ -179,38 +207,69 @@ class devede_project: position += 1 return ( (element, position, model, treeiter) ) else: - return ( (None, -1, None, None) ) + # If there is no selection, try to select the first one if exists + try: + first = self.wliststore_titles[0] + selection.select_iter(first.iter) + return ( (first.model[first.iter][1], 0, first.model, first.iter) ) + except: + return ( (None, -1, None, None) ) + + def get_current_file(self): + + """ returns the currently selected file """ + + selection = self.wfiles.get_selection() + model, treeiter = selection.get_selected() + if treeiter != None: + element = model[treeiter][1] + position = 0 + for row in self.wfiles.get_model(): + 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.wadd_file.set_sensitive(True) + self.wdelete_file.set_sensitive(True) + self.wup_file.set_sensitive(True) + self.wdown_file.set_sensitive(True) + self.wproperties_file.set_sensitive(True) + self.wpreview_file.set_sensitive(True) self.wcreate_disc.set_sensitive(True) (element, position, model, treeiter) = self.get_current_title() + if (self.current_title != element): + self.current_title = element + element.refresh() + 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) + self.wadd_file.set_sensitive(False) + self.wdelete_file.set_sensitive(False) + self.wup_file.set_sensitive(False) + self.wdown_file.set_sensitive(False) + self.wproperties_file.set_sensitive(False) + self.wpreview_file.set_sensitive(False) else: ntitles = len(self.wliststore_titles) if (ntitles < 2): @@ -219,17 +278,22 @@ class devede_project: 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) - + + (element2, position2, model2, treeiter2) = self.get_current_file() + if (element2 == None): + self.wdelete_file.set_sensitive(False) + self.wup_file.set_sensitive(False) + self.wdown_file.set_sensitive(False) + self.wproperties_file.set_sensitive(False) + self.wpreview_file.set_sensitive(False) + else: + nfiles = len(self.wfiles.get_model()) + if (nfiles < 1): + self.wdelete_file.set_sensitive(False) + if (position2 == 0): + self.wup_file.set_sensitive(False) + if (position2 == (nfiles-1)): + self.wdown_file.set_sensitive(False) def show_main_window(self): @@ -238,6 +302,8 @@ class devede_project: self.wmain_window.present() return + self.current_title = None + builder = Gtk.Builder() builder.set_translation_domain("devede_ng") @@ -262,11 +328,12 @@ class devede_project: 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.wadd_file = builder.get_object("add_file") + self.wdelete_file = builder.get_object("delete_file") + self.wup_file = builder.get_object("up_file") + self.wdown_file = builder.get_object("down_file") + self.wproperties_file = builder.get_object("properties_file") + self.wpreview_file = builder.get_object("preview_file") self.wcreate_disc = builder.get_object("create_disc") diff --git a/src/devede/title.py b/src/devede/title.py index e40cd08..d54800c 100644 --- a/src/devede/title.py +++ b/src/devede/title.py @@ -21,17 +21,26 @@ class title(GObject.GObject): counter = 0 - def __init__(self): + def __init__(self,file_treeview,original_liststore): GObject.GObject.__init__(self) + self.file_treeview = file_treeview 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) + columns = [] + for iterator in range(0, original_liststore.get_n_columns()): + columns.append(original_liststore.get_column_type(iterator)) + self.files = Gtk.ListStore() + self.files.set_column_types(columns) def delete_title(self): - print("Deleted title "+self.title_name) \ No newline at end of file + print("Deleted title "+self.title_name) + + def refresh(self): + + self.file_treeview.set_model(self.files) + + def add_file(self,new_file): + + self.files.append([new_file.file_name, new_file])