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 @@
+
+
+
+
+
+
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])