Now allows to add files, remove titles and files.

This commit is contained in:
Sergio Costas 2014-07-11 23:20:23 +02:00
parent aa9bc39692
commit 1299c83991
9 changed files with 306 additions and 63 deletions

45
src/devede/ask.py Normal file
View file

@ -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 <http://www.gnu.org/licenses/>
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

33
src/devede/file.py Normal file
View file

@ -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 <http://www.gnu.org/licenses/>
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"

View file

@ -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 <b>%(X)s</b> 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 <b>%(X)s</b> 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")

View file

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