* src/plugins/BookReport.py, src/plugins/FtmStyleDescendants.py,
src/plugins/FtmStyleAncestors.py: Further work on option handling. Start parse/save cycle. svn: r1681
This commit is contained in:
parent
c2da2623b1
commit
34fc21e621
@ -1,3 +1,8 @@
|
||||
2003-06-09 Alex Roitman <shura@alex.neuro.umn.edu>
|
||||
* src/plugins/BookReport.py, src/plugins/FtmStyleDescendants.py,
|
||||
src/plugins/FtmStyleAncestors.py: Further work on option handling.
|
||||
Start parse/save cycle.
|
||||
|
||||
2003-06-09 Alex Roitman <shura@alex.neuro.umn.edu>
|
||||
* src/ReadXML.py, src/plugins/Check.py, src/plugins/WriteCD.py,
|
||||
src/plugins/WritePkg.py: Proper use of dialog.run() in file
|
||||
|
@ -27,6 +27,16 @@
|
||||
import os
|
||||
import string
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# SAX interface
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
try:
|
||||
from xml.sax import make_parser,handler,SAXParseException
|
||||
except:
|
||||
from _xmlplus.sax import make_parser,handler,SAXParseException
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# internationalization
|
||||
@ -65,6 +75,7 @@ class BookReportSelector:
|
||||
def __init__(self,db,person):
|
||||
self.db = db
|
||||
self.person = person
|
||||
self.file = os.path.expanduser("~/.gramps/books.xml")
|
||||
|
||||
base = os.path.dirname(__file__)
|
||||
glade_file = os.path.join(base,"book.glade")
|
||||
@ -72,11 +83,6 @@ class BookReportSelector:
|
||||
self.xml = gtk.glade.XML(glade_file,"top")
|
||||
self.top = self.xml.get_widget("top")
|
||||
|
||||
if person:
|
||||
self.default_name = person.getPrimaryName().getSurname().upper()
|
||||
else:
|
||||
self.default_name = ""
|
||||
|
||||
self.xml.signal_autoconnect({
|
||||
"on_add_clicked" : self.on_add_clicked,
|
||||
"on_remove_clicked" : self.on_remove_clicked,
|
||||
@ -118,6 +124,8 @@ class BookReportSelector:
|
||||
self.av_model = ListModel.ListModel(self.avail_tree,av_titles)
|
||||
self.bk_model = ListModel.ListModel(self.book_tree,bk_titles)
|
||||
self.draw_avail_list()
|
||||
self.bookmap = {}
|
||||
self.parse()
|
||||
|
||||
def close(self,obj):
|
||||
self.top.destroy()
|
||||
@ -152,10 +160,6 @@ class BookReportSelector:
|
||||
self.bk_model.add(data)
|
||||
for book_item in Plugins._bkitems:
|
||||
if book_item[0] == data[0]:
|
||||
#get_options = book_item[4]
|
||||
#get_style = book_item[5]
|
||||
#store_item = list(book_item)
|
||||
#[ book_item[0], book_item[1], book_item[2], book_item[3], get_options(), get_style() ]
|
||||
self.item_storage[newkey] = list(book_item)
|
||||
|
||||
def on_remove_clicked(self,obj):
|
||||
@ -217,8 +221,14 @@ class BookReportSelector:
|
||||
self.on_add_clicked(obj)
|
||||
|
||||
def on_book_ok_clicked(self,obj):
|
||||
item_list = self.build_item_list()
|
||||
if item_list:
|
||||
BookReportDialog(self.db,self.person,item_list)
|
||||
self.top.destroy()
|
||||
|
||||
def build_item_list(self):
|
||||
item_list = []
|
||||
if self.bk_model.count:
|
||||
item_list = []
|
||||
for row in range(self.bk_model.count):
|
||||
self.bk_model.select_row(row)
|
||||
store,iter = self.bk_model.get_selected()
|
||||
@ -226,15 +236,120 @@ class BookReportSelector:
|
||||
key = data[self.bk_ncols-1]
|
||||
book_item = self.item_storage[key]
|
||||
item_list.append(book_item)
|
||||
BookReportDialog(self.db,self.person,item_list)
|
||||
self.top.destroy()
|
||||
return item_list
|
||||
|
||||
|
||||
def save(self):
|
||||
"""
|
||||
Saves the current BookReportSelector selections to the associated file.
|
||||
"""
|
||||
f = open(self.file,"w")
|
||||
f.write("<?xml version=\"1.0\"?>\n")
|
||||
f.write('<booklist>\n')
|
||||
|
||||
# Write old entries first
|
||||
for name in self.bookmap.keys():
|
||||
f.write('<book name="%s" database="%s">\n' %
|
||||
(name,self.db.getSavePath()))
|
||||
item_list = self.bookmap[name]
|
||||
for book_item in item_list:
|
||||
f.write(' <item name="%s">\n' % book_item[0])
|
||||
options = book_item[4]
|
||||
for opt_index in range(len(options)):
|
||||
f.write(' <option number="%d" value="%s"/>\n' % (
|
||||
opt_index,options[opt_index]) )
|
||||
f.write(' <style name="%s"/>\n' % book_item[5] )
|
||||
f.write(' </item>\n')
|
||||
f.write('</book>\n')
|
||||
|
||||
item_list = self.build_item_list()
|
||||
if not item_list:
|
||||
f.write('</booklist>\n')
|
||||
f.close()
|
||||
return
|
||||
|
||||
# Write current book now
|
||||
f.write('<book name="New Book" database="%s">\n' % self.db.getSavePath())
|
||||
for book_item in item_list:
|
||||
f.write(' <item name="%s">\n' % book_item[0])
|
||||
options = book_item[4]
|
||||
for opt_index in range(len(options)):
|
||||
f.write(' <option number="%d" value="%s"/>\n' % (
|
||||
opt_index,options[opt_index]) )
|
||||
f.write(' <style name="%s"/>\n' % book_item[5].get_name() )
|
||||
f.write(' </item>\n')
|
||||
f.write('</book>\n')
|
||||
|
||||
f.write('</booklist>\n')
|
||||
f.close()
|
||||
|
||||
def parse(self):
|
||||
"""
|
||||
Loads the BookReportSelector selections from the associated file,
|
||||
if it exists.
|
||||
"""
|
||||
try:
|
||||
p = make_parser()
|
||||
p.setContentHandler(BookParser(self.bookmap))
|
||||
p.parse('file://' + self.file)
|
||||
except (IOError,OSError,SAXParseException):
|
||||
pass
|
||||
|
||||
def on_save_clicked(self,obj):
|
||||
pass
|
||||
self.save()
|
||||
|
||||
def on_open_clicked(self,obj):
|
||||
pass
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# BookParser
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class BookParser(handler.ContentHandler):
|
||||
"""
|
||||
SAX parsing class for the Books XML file.
|
||||
"""
|
||||
|
||||
def __init__(self,bookmap):
|
||||
"""
|
||||
Creates a BookParser class that populates the passed bookmap.
|
||||
|
||||
bookmap - BookList to be loaded from the file.
|
||||
"""
|
||||
handler.ContentHandler.__init__(self)
|
||||
self.bookmap = bookmap
|
||||
self.b = None
|
||||
self.i = None
|
||||
self.o = None
|
||||
self.s = None
|
||||
self.bname = None
|
||||
self.iname = None
|
||||
|
||||
def startElement(self,tag,attrs):
|
||||
"""
|
||||
Overridden class that handles the start of a XML element
|
||||
"""
|
||||
if tag == "book":
|
||||
self.bname = attrs['name']
|
||||
self.b = []
|
||||
elif tag == "item":
|
||||
self.iname = attrs['name']
|
||||
self.o = []
|
||||
elif tag == "option":
|
||||
self.o.append(attrs['value'])
|
||||
elif tag == "style":
|
||||
self.s = attrs['name']
|
||||
|
||||
def endElement(self,tag):
|
||||
"Overridden class that handles the start of a XML element"
|
||||
if tag == "item":
|
||||
self.i = [ self.iname, None, None, None, self.o, self.s ]
|
||||
self.b.append(self.i)
|
||||
elif tag == "book":
|
||||
self.bookmap[self.bname] = self.b
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# The final dialog - paper, format, target, etc.
|
||||
|
@ -852,8 +852,9 @@ class FtmAncestorBareReportDialog(Report.BareReportDialog):
|
||||
def __init__(self,database,person,opt,stl):
|
||||
|
||||
self.options = opt
|
||||
self.db = database
|
||||
if self.options[0]:
|
||||
self.person = self.options[0]
|
||||
self.person = self.db.getPerson(self.options[0])
|
||||
else:
|
||||
self.person = person
|
||||
Report.BareReportDialog.__init__(self,database,self.person)
|
||||
@ -899,8 +900,9 @@ class FtmAncestorBareReportDialog(Report.BareReportDialog):
|
||||
self.parse_style_frame()
|
||||
self.parse_report_options_frame()
|
||||
|
||||
self.person = self.new_person
|
||||
self.options = [ self.person, self.max_gen, self.pg_brk ]
|
||||
if self.new_person:
|
||||
self.person = self.new_person
|
||||
self.options = [ self.person.getId(), self.max_gen, self.pg_brk ]
|
||||
self.style = self.selected_style
|
||||
|
||||
|
||||
@ -914,7 +916,7 @@ def write_book_item(database,person,doc,options,newpage=0):
|
||||
All user dialog has already been handled and the output file opened."""
|
||||
try:
|
||||
if options[0]:
|
||||
person = options[0]
|
||||
person = database.getPerson(options[0])
|
||||
max_gen = options[1]
|
||||
pg_brk = options[2]
|
||||
MyReport = FtmAncestorReport(database, person,
|
||||
|
@ -1260,8 +1260,9 @@ class FtmDescendantBareReportDialog(Report.BareReportDialog):
|
||||
def __init__(self,database,person,opt,stl):
|
||||
|
||||
self.options = opt
|
||||
self.db = database
|
||||
if self.options[0]:
|
||||
self.person = self.options[0]
|
||||
self.person = self.db.getPerson(self.options[0])
|
||||
else:
|
||||
self.person = person
|
||||
Report.BareReportDialog.__init__(self,database,self.person)
|
||||
@ -1307,8 +1308,9 @@ class FtmDescendantBareReportDialog(Report.BareReportDialog):
|
||||
self.parse_style_frame()
|
||||
self.parse_report_options_frame()
|
||||
|
||||
self.person = self.new_person
|
||||
self.options = [ self.person, self.max_gen, self.pg_brk ]
|
||||
if self.new_person:
|
||||
self.person = self.new_person
|
||||
self.options = [ self.person.getId(), self.max_gen, self.pg_brk ]
|
||||
self.style = self.selected_style
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -1321,9 +1323,9 @@ def write_book_item(database,person,doc,options,newpage=0):
|
||||
All user dialog has already been handled and the output file opened."""
|
||||
try:
|
||||
if options[0]:
|
||||
person = options[0]
|
||||
max_gen = options[1]
|
||||
pg_brk = options[2]
|
||||
person = database.getPerson(options[0])
|
||||
max_gen = int(options[1])
|
||||
pg_brk = int(options[2])
|
||||
MyReport = FtmDescendantReport(database, person,
|
||||
max_gen, pg_brk, doc, None, newpage )
|
||||
MyReport.write_report()
|
||||
|
Loading…
Reference in New Issue
Block a user