2007-12-21 Douglas S. Blank <dblank@cs.brynmawr.edu>
* src/DataViews/_PersonView.py: pass create_quickreport uistate * src/Editors/_EditPrimary.py: pass create_quickreport uistate * src/plugins/all_events.py: use SimpleTable * src/plugins/siblings.py: use SimpleTable * src/QuickReports.py: pass create_quickreport uistate * src/Simple/_SimpleTable.py: Handles raw objects, click/doubleclick * src/PageView.py: pass create_quickreport uistate * src/docgen/TextBufDoc.py: need to make a managed window, transient svn: r9552
This commit is contained in:
@ -23,6 +23,8 @@ Provides a simplified table creation interface
|
||||
"""
|
||||
|
||||
import copy
|
||||
import gen.lib
|
||||
import Errors
|
||||
|
||||
class SimpleTable:
|
||||
"""
|
||||
@ -31,21 +33,100 @@ class SimpleTable:
|
||||
|
||||
def __init__(self, access, doc, title=None):
|
||||
"""
|
||||
Initializes the class with the real document
|
||||
Initializes the class with a simpledb, and simpledoc
|
||||
"""
|
||||
self.access = access
|
||||
self.doc = doc # simpledoc; doc.doc = actual document
|
||||
self.simpledoc = doc # simpledoc; simpledoc.doc = docgen object
|
||||
self.title = title
|
||||
self.__columns = []
|
||||
self.__rows = []
|
||||
self.__link = []
|
||||
self.__sort_col = None
|
||||
self.__sort_reverse = False
|
||||
|
||||
def columns(self, *columns):
|
||||
"""
|
||||
Set the columns
|
||||
"""
|
||||
self.__columns = list(copy.copy(columns))
|
||||
|
||||
def on_table_doubleclick(self, obj, path, view_column):
|
||||
"""
|
||||
Handle events on tables. obj is a treeview
|
||||
"""
|
||||
from Editors import EditPerson, EditEvent
|
||||
selection = obj.get_selection()
|
||||
store, node = selection.get_selected()
|
||||
if not node:
|
||||
return
|
||||
index = store.get_value(node, 0) # index
|
||||
if self.__link[index]:
|
||||
htype, handle = self.__link[index]
|
||||
if htype == 'Person':
|
||||
person = self.access.dbase.get_person_from_handle(handle)
|
||||
try:
|
||||
EditPerson(self.simpledoc.doc.dbstate,
|
||||
self.simpledoc.doc.uistate, [], person)
|
||||
return True # handled event
|
||||
except Errors.WindowActiveError:
|
||||
pass
|
||||
elif htype == 'Event':
|
||||
event = self.access.dbase.get_event_from_handle(handle)
|
||||
try:
|
||||
EditEvent(self.simpledoc.doc.dbstate,
|
||||
self.simpledoc.doc.uistate, [], event)
|
||||
return True # handled event
|
||||
except Errors.WindowActiveError:
|
||||
pass
|
||||
return False # didn't handle event
|
||||
|
||||
def on_table_click(self, obj):
|
||||
"""
|
||||
Handle events on tables. obj is a treeview
|
||||
"""
|
||||
selection = obj.get_selection()
|
||||
store, node = selection.get_selected()
|
||||
if not node:
|
||||
return
|
||||
index = store.get_value(node, 0) # index
|
||||
if self.__link[index]:
|
||||
htype, handle = self.__link[index]
|
||||
if htype == 'Person':
|
||||
person = self.access.dbase.get_person_from_handle(handle)
|
||||
self.simpledoc.doc.dbstate.change_active_person(person)
|
||||
return True
|
||||
elif htype == 'Event':
|
||||
pass
|
||||
return False # didn't handle event
|
||||
|
||||
def row(self, *data):
|
||||
self.__rows.append(copy.copy(data))
|
||||
"""
|
||||
Add a row of data.
|
||||
"""
|
||||
retval = []
|
||||
link = None
|
||||
for item in data:
|
||||
if type(item) in [str, unicode]:
|
||||
retval.append(item)
|
||||
elif isinstance(item, gen.lib.Person):
|
||||
name = self.access.name(item)
|
||||
retval.append(name)
|
||||
link = ('Person', item.handle)
|
||||
elif isinstance(item, gen.lib.Family): pass
|
||||
elif isinstance(item, gen.lib.Source): pass
|
||||
elif isinstance(item, gen.lib.Event):
|
||||
name = self.access.event_type(item)
|
||||
retval.append(name)
|
||||
link = ('Event', item.handle)
|
||||
elif isinstance(item, gen.lib.MediaObject): pass
|
||||
elif isinstance(item, gen.lib.Place): pass
|
||||
elif isinstance(item, gen.lib.Repository): pass
|
||||
elif isinstance(item, gen.lib.Note): pass
|
||||
else:
|
||||
raise AttributeError, ("unknown object type: '%s': %s" %
|
||||
(item, type(item)))
|
||||
self.__link.append(link)
|
||||
self.__rows.append(retval)
|
||||
|
||||
def sort(self, column_name, reverse=False):
|
||||
self.__sort_col = column_name
|
||||
@ -59,48 +140,51 @@ class SimpleTable:
|
||||
self.__rows.sort(lambda a, b: cmp(a[idx],b[idx]))
|
||||
|
||||
def write(self):
|
||||
if self.doc.doc.type == "standard":
|
||||
self.doc.start_table('simple','Table')
|
||||
if self.simpledoc.doc.type == "standard":
|
||||
doc = self.simpledoc.doc
|
||||
doc.start_table('simple','Table')
|
||||
columns = len(self.__columns)
|
||||
if self.title:
|
||||
self.doc.start_row()
|
||||
self.doc.start_cell('TableHead',columns)
|
||||
self.doc.start_paragraph('TableTitle')
|
||||
self.doc.write_text(_(self.title))
|
||||
self.doc.end_paragraph()
|
||||
self.doc.end_cell()
|
||||
self.doc.end_row()
|
||||
doc.start_row()
|
||||
doc.start_cell('TableHead',columns)
|
||||
doc.start_paragraph('TableTitle')
|
||||
doc.write_text(_(self.title))
|
||||
doc.end_paragraph()
|
||||
doc.end_cell()
|
||||
doc.end_row()
|
||||
if self.__sort_col:
|
||||
self.__sort()
|
||||
self.doc.start_row()
|
||||
doc.start_row()
|
||||
for col in self.__columns:
|
||||
self.doc.start_cell('TableNormalCell',1)
|
||||
self.doc.write_text(col,'TableTitle')
|
||||
self.doc.end_cell()
|
||||
self.doc.end_row()
|
||||
doc.start_cell('TableNormalCell',1)
|
||||
doc.write_text(col,'TableTitle')
|
||||
doc.end_cell()
|
||||
doc.end_row()
|
||||
for row in self.__rows:
|
||||
self.doc.start_row()
|
||||
doc.start_row()
|
||||
for col in row:
|
||||
self.doc.start_cell('TableNormalCell',1)
|
||||
self.doc.write_text(col,'Normal')
|
||||
self.doc.end_cell()
|
||||
self.doc.end_row()
|
||||
self.doc.end_table()
|
||||
self.doc.start_paragraph("Normal")
|
||||
self.doc.end_paragraph()
|
||||
elif self.doc.doc.type == "gtk":
|
||||
doc.start_cell('TableNormalCell',1)
|
||||
doc.write_text(col,'Normal')
|
||||
doc.end_cell()
|
||||
doc.end_row()
|
||||
doc.end_table()
|
||||
doc.start_paragraph("Normal")
|
||||
doc.end_paragraph()
|
||||
elif self.simpledoc.doc.type == "gtk":
|
||||
import gtk
|
||||
buffer = self.doc.doc.buffer
|
||||
text_view = self.doc.doc.text_view
|
||||
model_index = 0
|
||||
buffer = self.simpledoc.doc.buffer
|
||||
text_view = self.simpledoc.doc.text_view
|
||||
model_index = 1 # start after index
|
||||
if self.__sort_col:
|
||||
sort_index = self.__columns.index(self.__sort_col)
|
||||
else:
|
||||
sort_index = 0
|
||||
treeview = gtk.TreeView()
|
||||
treeview.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH)
|
||||
treeview.connect('row-activated', self.on_table_doubleclick)
|
||||
treeview.connect('cursor-changed', self.on_table_click)
|
||||
renderer = gtk.CellRendererText()
|
||||
types = []
|
||||
types = [int] # index
|
||||
for col in self.__columns:
|
||||
types.append(type(col))
|
||||
column = gtk.TreeViewColumn(col,renderer,text=model_index)
|
||||
@ -109,6 +193,7 @@ class SimpleTable:
|
||||
#if model_index == sort_index:
|
||||
# FIXME: what to set here?
|
||||
model_index += 1
|
||||
# Make a GUI to put the tree view in
|
||||
frame = gtk.Frame()
|
||||
frame.add(treeview)
|
||||
model = gtk.ListStore(*types)
|
||||
@ -116,7 +201,9 @@ class SimpleTable:
|
||||
iter = buffer.get_end_iter()
|
||||
anchor = buffer.create_child_anchor(iter)
|
||||
text_view.add_child_at_anchor(frame, anchor)
|
||||
count = 0
|
||||
for data in self.__rows:
|
||||
model.append(row=list(data))
|
||||
model.append(row=([count] + list(data)))
|
||||
count += 1
|
||||
frame.show_all()
|
||||
self.doc.paragraph("")
|
||||
self.simpledoc.paragraph("")
|
||||
|
Reference in New Issue
Block a user