* src/PeopleView.py: broken out of gramps_main.py
* src/PeopleStore.py: TreeStore wrapper for PeopleView * src/gramps_main.py: people view removed * src/RelLib.py: add surname to display info for each person, allows grouping by name * src/Report.py: Change button from Apply to "Generate report" svn: r2190
This commit is contained in:
parent
081d437873
commit
c0ce4086ee
294
gramps2/src/PeopleStore.py
Normal file
294
gramps2/src/PeopleStore.py
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
#
|
||||||
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000 Donald N. Allingham
|
||||||
|
#
|
||||||
|
# This program 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 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
|
||||||
|
from gobject import TYPE_STRING, TYPE_PYOBJECT, TYPE_INT
|
||||||
|
import gtk
|
||||||
|
import pango
|
||||||
|
|
||||||
|
_BCOL = 8
|
||||||
|
_IDCOL = 1
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# PeopleStore
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class PeopleStore:
|
||||||
|
def __init__(self,tree,parent,select_func=None,event_func=None,mode=gtk.SELECTION_SINGLE):
|
||||||
|
|
||||||
|
self.titles = [
|
||||||
|
(_('Name'),5,250), (_('ID'),1,50),(_('Gender'),2,70),
|
||||||
|
(_('Birth date'),6,150),(_('Death date'),7,150)
|
||||||
|
]
|
||||||
|
|
||||||
|
ncols = len(self.titles) + 3
|
||||||
|
self.tree = tree
|
||||||
|
self.parent = parent
|
||||||
|
self.tree.connect('row-expanded',self.on_row_expanded)
|
||||||
|
self.mylist = [TYPE_STRING]*ncols + [TYPE_INT]
|
||||||
|
|
||||||
|
self.tree.set_rules_hint(gtk.TRUE)
|
||||||
|
self.model = None
|
||||||
|
self.tree_roots = {}
|
||||||
|
self.tree_open = {}
|
||||||
|
self.tree_list = {}
|
||||||
|
self.selection = None
|
||||||
|
self.mode = mode
|
||||||
|
self.new_model()
|
||||||
|
self.count = 0
|
||||||
|
self.cid = None
|
||||||
|
self.cids = []
|
||||||
|
|
||||||
|
cnum = 0
|
||||||
|
for name in self.titles:
|
||||||
|
renderer = gtk.CellRendererText()
|
||||||
|
renderer.set_fixed_height_from_font(1)
|
||||||
|
if name[0] != '':
|
||||||
|
if cnum == 0:
|
||||||
|
column = gtk.TreeViewColumn(name[0],renderer,text=cnum)
|
||||||
|
else:
|
||||||
|
column = gtk.TreeViewColumn(name[0],renderer,text=cnum)
|
||||||
|
column.set_min_width(name[2])
|
||||||
|
column.set_resizable(gtk.TRUE)
|
||||||
|
column.set_clickable(gtk.TRUE)
|
||||||
|
column.set_sort_column_id(name[1])
|
||||||
|
|
||||||
|
cnum += 1
|
||||||
|
self.cids.append(name[1])
|
||||||
|
self.tree.append_column(column)
|
||||||
|
|
||||||
|
if self.cids[0] != -1:
|
||||||
|
self.model.set_sort_column_id(self.cids[0],gtk.SORT_ASCENDING)
|
||||||
|
self.connect_model()
|
||||||
|
|
||||||
|
if select_func:
|
||||||
|
self.selection.connect('changed',select_func)
|
||||||
|
if event_func:
|
||||||
|
self.double_click = event_func
|
||||||
|
self.tree.connect('event',self.button_press)
|
||||||
|
|
||||||
|
def unselect(self):
|
||||||
|
self.selection.unselect_all()
|
||||||
|
|
||||||
|
def set_reorderable(self,order):
|
||||||
|
self.tree.set_reorderable(order)
|
||||||
|
|
||||||
|
def new_model(self):
|
||||||
|
if self.model:
|
||||||
|
self.cid = self.model.get_sort_column_id()
|
||||||
|
del self.model
|
||||||
|
del self.selection
|
||||||
|
self.count = 0
|
||||||
|
|
||||||
|
self.model = gtk.TreeStore(*self.mylist)
|
||||||
|
self.selection = self.tree.get_selection()
|
||||||
|
self.selection.set_mode(self.mode)
|
||||||
|
self.sel_iter = None
|
||||||
|
|
||||||
|
def connect_model(self):
|
||||||
|
self.tree.set_model(self.model)
|
||||||
|
if self.sel_iter:
|
||||||
|
self.selection.select_iter(self.sel_iter)
|
||||||
|
if self.cid:
|
||||||
|
self.model.set_sort_column_id(self.cid[0],self.cid[1])
|
||||||
|
self.sort()
|
||||||
|
|
||||||
|
def sort(self):
|
||||||
|
val = self.model.get_sort_column_id()
|
||||||
|
col = val[0]
|
||||||
|
if col < 0:
|
||||||
|
return
|
||||||
|
if col > 0:
|
||||||
|
self.model.set_sort_column_id(col,val[1])
|
||||||
|
else:
|
||||||
|
self.model.set_sort_column_id(self.cids[0],val[1])
|
||||||
|
self.model.sort_column_changed()
|
||||||
|
|
||||||
|
def get_selected(self):
|
||||||
|
return self.selection.get_selected()
|
||||||
|
|
||||||
|
def get_row_at(self,x,y):
|
||||||
|
path = self.tree.get_path_at_pos(x,y)
|
||||||
|
if path == None:
|
||||||
|
return self.count -1
|
||||||
|
else:
|
||||||
|
return path[0][0]-1
|
||||||
|
|
||||||
|
def get_selected_row(self):
|
||||||
|
store, iter = self.selection.get_selected()
|
||||||
|
if iter:
|
||||||
|
rows = store.get_path(iter)
|
||||||
|
return rows[0]
|
||||||
|
else:
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def get_selected_objects(self):
|
||||||
|
if self.count == 0:
|
||||||
|
return []
|
||||||
|
elif self.mode == gtk.SELECTION_SINGLE:
|
||||||
|
store,iter = self.selection.get_selected()
|
||||||
|
if iter:
|
||||||
|
return [self.model.get_value(iter,_IDCOL)]
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
else:
|
||||||
|
mlist = []
|
||||||
|
self.selection.selected_foreach(self.blist,mlist)
|
||||||
|
return mlist
|
||||||
|
|
||||||
|
def get_icon(self):
|
||||||
|
if self.mode == gtk.SELECTION_SINGLE:
|
||||||
|
store,iter = self.selection.get_selected()
|
||||||
|
path = self.model.get_path(iter)
|
||||||
|
else:
|
||||||
|
mlist = []
|
||||||
|
self.selection.selected_foreach(self.blist,mlist)
|
||||||
|
path = self.model.get_path(mlist[0])
|
||||||
|
return self.tree.create_row_drag_icon(path)
|
||||||
|
|
||||||
|
def blist(self,store,path,iter,id_list):
|
||||||
|
id_list.append(self.model.get_value(iter,_IDCOL))
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.count = 0
|
||||||
|
self.tree_roots = {}
|
||||||
|
self.tree_open = {}
|
||||||
|
self.model.clear()
|
||||||
|
|
||||||
|
def remove(self,iter):
|
||||||
|
self.model.remove(iter)
|
||||||
|
self.count = self.count - 1
|
||||||
|
|
||||||
|
def get_row(self,iter):
|
||||||
|
row = self.model.get_path(iter)
|
||||||
|
return row[0]
|
||||||
|
|
||||||
|
def select_row(self,row):
|
||||||
|
self.selection.select_path((row))
|
||||||
|
|
||||||
|
def select_iter(self,iter):
|
||||||
|
self.selection.select_iter(iter)
|
||||||
|
|
||||||
|
def get_object(self,iter):
|
||||||
|
return self.model.get_value(iter,_IDCOL)
|
||||||
|
|
||||||
|
def insert(self,position,data,info=None,select=0):
|
||||||
|
self.count = self.count + 1
|
||||||
|
iter = self.model.insert(position)
|
||||||
|
col = 0
|
||||||
|
for object in data:
|
||||||
|
self.model.set_value(iter,col,object)
|
||||||
|
col = col + 1
|
||||||
|
self.model.set_value(iter,_IDCOL,info)
|
||||||
|
self.model.set_value(iter,_BCOL,pango.WEIGHT_NORMAL)
|
||||||
|
if select:
|
||||||
|
self.selection.select_iter(iter)
|
||||||
|
return iter
|
||||||
|
|
||||||
|
def get_data(self,iter,cols):
|
||||||
|
return [ self.model.get_value(iter,c) for c in cols ]
|
||||||
|
|
||||||
|
def on_row_expanded(self, view, iter, path):
|
||||||
|
name = self.model.get_value(iter,0)
|
||||||
|
self.fill_row(name,iter)
|
||||||
|
|
||||||
|
def expand_row(self,name,iter=None):
|
||||||
|
path = self.model.get_path(self.tree_roots[name])
|
||||||
|
self.tree.expand_row(path,1)
|
||||||
|
self.tree.expand_row(path,1)
|
||||||
|
|
||||||
|
def fill_row(self,name,iter=None):
|
||||||
|
if not iter:
|
||||||
|
iter = self.tree_roots[name]
|
||||||
|
child = self.model.iter_children(iter)
|
||||||
|
node_list = self.tree_list[name]
|
||||||
|
if self.model.get_value(child,0) is None:
|
||||||
|
self.model.remove(child)
|
||||||
|
for d in self.tree_list[name]:
|
||||||
|
new_iter = self.model.append(iter)
|
||||||
|
col = 0
|
||||||
|
for o in d[:-1]:
|
||||||
|
self.model.set_value(new_iter,col,o)
|
||||||
|
col += 1
|
||||||
|
self.model.set_value(new_iter,_BCOL,pango.WEIGHT_NORMAL)
|
||||||
|
self.parent.id2col[d[1]] = (self.model,new_iter)
|
||||||
|
|
||||||
|
def add(self,data,select=0):
|
||||||
|
self.count = self.count + 1
|
||||||
|
|
||||||
|
name = data[-1]
|
||||||
|
if self.tree_roots.has_key(name):
|
||||||
|
top = self.tree_roots[name]
|
||||||
|
else:
|
||||||
|
top = self.model.append(None)
|
||||||
|
self.model.append(top)
|
||||||
|
self.tree_open[name] = 0
|
||||||
|
self.tree_list[name] = []
|
||||||
|
self.model.set_value(top,0,name)
|
||||||
|
self.model.set_value(top,_BCOL,pango.WEIGHT_BOLD)
|
||||||
|
self.tree_roots[name] = top
|
||||||
|
|
||||||
|
if self.tree_open[name]:
|
||||||
|
iter = self.model.append(top)
|
||||||
|
col = 0
|
||||||
|
for object in data[:-1]:
|
||||||
|
self.model.set_value(iter,col,object)
|
||||||
|
col = col + 1
|
||||||
|
self.model.set_value(iter,_BCOL,pango.WEIGHT_NORMAL)
|
||||||
|
if select:
|
||||||
|
self.sel_iter = iter
|
||||||
|
self.selection.select_iter(self.sel_iter)
|
||||||
|
return iter
|
||||||
|
else:
|
||||||
|
self.tree_list[name].append(data)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def set(self,iter,data,select=0):
|
||||||
|
col = 0
|
||||||
|
for object in data:
|
||||||
|
self.model.set_value(iter,col,object)
|
||||||
|
col = col + 1
|
||||||
|
self.model.set_value(iter,_BCOL,pango.WEIGHT_NORMAL)
|
||||||
|
if select:
|
||||||
|
self.sel_iter = iter
|
||||||
|
return iter
|
||||||
|
|
||||||
|
def add_and_select(self,data):
|
||||||
|
self.count = self.count + 1
|
||||||
|
iter = self.model.append()
|
||||||
|
col = 0
|
||||||
|
for object in data:
|
||||||
|
self.model.set_value(iter,col,object)
|
||||||
|
col = col + 1
|
||||||
|
self.model.set_value(iter,_BCOL,pango.WEIGHT_NORMAL)
|
||||||
|
self.selection.select_iter(iter)
|
||||||
|
|
||||||
|
def center_selected(self):
|
||||||
|
model,iter = self.selection.get_selected()
|
||||||
|
if iter:
|
||||||
|
path = model.get_path(iter)
|
||||||
|
self.tree.scroll_to_cell(path,None,gtk.TRUE,0.5,0.5)
|
||||||
|
|
||||||
|
def button_press(self,obj,event):
|
||||||
|
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||||
|
self.double_click(obj)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
375
gramps2/src/PeopleView.py
Normal file
375
gramps2/src/PeopleView.py
Normal file
@ -0,0 +1,375 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000-2003 Donald N. Allingham
|
||||||
|
#
|
||||||
|
# This program 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 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# internationalization
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# gtk
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
import gobject
|
||||||
|
import gtk
|
||||||
|
import gtk.glade
|
||||||
|
|
||||||
|
from gtk.gdk import ACTION_COPY, BUTTON1_MASK
|
||||||
|
|
||||||
|
_sel_mode = gtk.SELECTION_MULTIPLE
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# gtk
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
import PeopleStore
|
||||||
|
import Filter
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# PeopleView
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
class PeopleView:
|
||||||
|
|
||||||
|
def __init__(self,parent):
|
||||||
|
self.parent = parent
|
||||||
|
|
||||||
|
self.DataFilter = Filter.Filter("")
|
||||||
|
self.ptabs = self.parent.gtop.get_widget("ptabs")
|
||||||
|
self.pl_other = self.parent.gtop.get_widget("pl_other")
|
||||||
|
|
||||||
|
self.ptabs.set_show_tabs(0)
|
||||||
|
|
||||||
|
self.pl_page = [
|
||||||
|
PeopleStore.PeopleStore(self.pl_other, self, self.row_changed,
|
||||||
|
self.alpha_event, _sel_mode),
|
||||||
|
]
|
||||||
|
|
||||||
|
self.person_tree = self.pl_page[0]
|
||||||
|
self.person_list = self.pl_page[0].tree
|
||||||
|
self.person_model = self.pl_page[0].model
|
||||||
|
self.person_list.connect('button-press-event',self.on_plist_button_press)
|
||||||
|
|
||||||
|
self.default_list = self.pl_page[-1]
|
||||||
|
|
||||||
|
self.alpha_page = {}
|
||||||
|
self.model2page = {}
|
||||||
|
self.model_used = {}
|
||||||
|
self.tab_list = []
|
||||||
|
self.clearing_tabs = 0
|
||||||
|
|
||||||
|
def row_changed(self,obj):
|
||||||
|
mlist = self.person_tree.get_selected_objects()
|
||||||
|
if mlist:
|
||||||
|
self.parent.change_active_person(self.parent.db.getPerson(mlist[0]))
|
||||||
|
try:
|
||||||
|
self.parent.change_active_person(self.parent.db.getPerson(mlist[0]))
|
||||||
|
except:
|
||||||
|
self.parent.change_active_person(None)
|
||||||
|
self.person_tree.unselect()
|
||||||
|
|
||||||
|
def change_alpha_page(self,obj,junk,page):
|
||||||
|
"""Change the page. Be careful not to take action while the pages
|
||||||
|
are begin removed. If clearing_tabs is set, then we don't do anything"""
|
||||||
|
|
||||||
|
if self.clearing_tabs:
|
||||||
|
return
|
||||||
|
self.person_tree = self.pl_page[page]
|
||||||
|
self.person_list = self.pl_page[page].tree
|
||||||
|
self.person_model = self.pl_page[page].model
|
||||||
|
if not self.model_used.has_key(self.person_tree) or self.model_used[self.person_tree] == 0:
|
||||||
|
self.model_used[self.person_tree] = 1
|
||||||
|
self.apply_filter(self.person_tree)
|
||||||
|
self.person_list.connect('button-press-event',self.on_plist_button_press)
|
||||||
|
mlist = self.person_tree.get_selected_objects()
|
||||||
|
if mlist:
|
||||||
|
self.parent.set_buttons(1)
|
||||||
|
else:
|
||||||
|
self.parent.set_buttons(0)
|
||||||
|
|
||||||
|
def clear_person_tabs(self):
|
||||||
|
self.clearing_tabs = 1
|
||||||
|
self.ptabs.hide()
|
||||||
|
for i in range(0,len(self.tab_list)):
|
||||||
|
self.ptabs.remove_page(0)
|
||||||
|
self.ptabs.set_show_tabs(0)
|
||||||
|
self.ptabs.show()
|
||||||
|
self.clearing_tabs = 0
|
||||||
|
|
||||||
|
self.id2col = {}
|
||||||
|
self.tab_list = []
|
||||||
|
self.alpha_page = {}
|
||||||
|
self.model2page = {}
|
||||||
|
self.model_used = {}
|
||||||
|
|
||||||
|
self.default_list.clear()
|
||||||
|
|
||||||
|
for page in self.pl_page[0:-1]:
|
||||||
|
del page
|
||||||
|
|
||||||
|
self.pl_page = [
|
||||||
|
self.default_list
|
||||||
|
]
|
||||||
|
|
||||||
|
self.person_tree = self.pl_page[-1]
|
||||||
|
self.person_list = self.pl_page[-1].tree
|
||||||
|
self.person_model = self.pl_page[-1].model
|
||||||
|
|
||||||
|
def change_db(self,db):
|
||||||
|
self.id2col = {}
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
for model in self.pl_page:
|
||||||
|
model.clear()
|
||||||
|
|
||||||
|
def remove_from_person_list(self,person,old_id=None):
|
||||||
|
pid = person.getId()
|
||||||
|
if old_id:
|
||||||
|
del_id = old_id
|
||||||
|
else:
|
||||||
|
del_id = pid
|
||||||
|
|
||||||
|
if self.id2col.has_key(del_id):
|
||||||
|
model.remove(self.id2iter[del_id])
|
||||||
|
del self.id2col[del_id]
|
||||||
|
|
||||||
|
if person == self.parent.active_person:
|
||||||
|
self.parent.active_person = None
|
||||||
|
|
||||||
|
def apply_filter_clicked(self):
|
||||||
|
invert_filter = self.parent.filter_inv.get_active()
|
||||||
|
qualifer = self.parent.filter_text.get_text()
|
||||||
|
mi = self.parent.filter_list.get_menu().get_active()
|
||||||
|
class_init = mi.get_data("function")
|
||||||
|
self.DataFilter = class_init(qualifer)
|
||||||
|
self.DataFilter.set_invert(invert_filter)
|
||||||
|
self.model_used = {}
|
||||||
|
self.apply_filter(self.person_tree)
|
||||||
|
|
||||||
|
def add_to_person_list(self,person,change):
|
||||||
|
key = person.getId()
|
||||||
|
val = self.parent.db.getPersonDisplay(person.getId())
|
||||||
|
pg = unicode(val[5])
|
||||||
|
pg = pg[0]
|
||||||
|
if self.DataFilter.compare(person):
|
||||||
|
|
||||||
|
if pg and pg != '@':
|
||||||
|
if not self.alpha_page.has_key(pg):
|
||||||
|
self.create_new_panel(pg)
|
||||||
|
model = self.alpha_page[pg]
|
||||||
|
else:
|
||||||
|
model = self.default_list
|
||||||
|
|
||||||
|
iter = model.add([val[0],val[1],val[2],val[3],val[4],val[5],
|
||||||
|
val[6],val[7],val[8]])
|
||||||
|
|
||||||
|
self.id2col[key] = (model,iter)
|
||||||
|
|
||||||
|
if change:
|
||||||
|
self.change_active_person(person)
|
||||||
|
self.goto_active_person()
|
||||||
|
model.sort()
|
||||||
|
|
||||||
|
def goto_active_person(self,first=0):
|
||||||
|
if not self.parent.active_person:
|
||||||
|
if first:
|
||||||
|
page = 0
|
||||||
|
else:
|
||||||
|
page = self.ptabs.get_current_page()
|
||||||
|
|
||||||
|
self.person_tree = self.pl_page[page]
|
||||||
|
self.person_list = self.pl_page[page].tree
|
||||||
|
self.person_model = self.pl_page[page].model
|
||||||
|
self.ptabs.set_current_page(page)
|
||||||
|
return
|
||||||
|
|
||||||
|
id = self.parent.active_person.getId()
|
||||||
|
val = self.parent.db.getPersonDisplay(id)
|
||||||
|
if self.id2col.has_key(id):
|
||||||
|
(model,iter) = self.id2col[id]
|
||||||
|
else:
|
||||||
|
pg = val[5]
|
||||||
|
if pg and pg != '@':
|
||||||
|
pg = pg[0]
|
||||||
|
else:
|
||||||
|
pg = ''
|
||||||
|
if not self.alpha_page.has_key(pg):
|
||||||
|
self.create_new_panel(pg)
|
||||||
|
model = self.alpha_page[pg]
|
||||||
|
iter = None
|
||||||
|
|
||||||
|
self.ptabs.set_current_page(self.model2page[model])
|
||||||
|
|
||||||
|
if not self.model_used.has_key(model) or self.model_used[model] == 0 or not iter:
|
||||||
|
self.model_used[model] = 1
|
||||||
|
self.apply_filter(model)
|
||||||
|
try:
|
||||||
|
(model,iter) = self.id2col[id]
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not iter:
|
||||||
|
self.parent.status_text(_('Updating display...'))
|
||||||
|
model.expand_row(val[-1])
|
||||||
|
(m,iter) = self.id2col[id]
|
||||||
|
self.parent.modify_statusbar()
|
||||||
|
|
||||||
|
model.selection.unselect_all()
|
||||||
|
model.selection.select_iter(iter)
|
||||||
|
itpath = model.model.get_path(iter)
|
||||||
|
col = model.tree.get_column(0)
|
||||||
|
model.tree.scroll_to_cell(itpath,col,1,0.5,0)
|
||||||
|
|
||||||
|
def alpha_event(self,obj):
|
||||||
|
self.parent.load_person(self.parent.active_person)
|
||||||
|
|
||||||
|
def apply_filter(self,current_model=None):
|
||||||
|
self.parent.status_text(_('Updating display...'))
|
||||||
|
|
||||||
|
datacomp = self.DataFilter.compare
|
||||||
|
if current_model == None:
|
||||||
|
self.id2col = {}
|
||||||
|
|
||||||
|
for key in self.parent.db.getPersonKeys():
|
||||||
|
person = self.parent.db.getPerson(key)
|
||||||
|
val = self.parent.db.getPersonDisplay(key)
|
||||||
|
pg = val[5]
|
||||||
|
if pg and pg != '@':
|
||||||
|
pg = pg[0]
|
||||||
|
else:
|
||||||
|
pg = ''
|
||||||
|
|
||||||
|
if datacomp(person):
|
||||||
|
if self.id2col.has_key(key):
|
||||||
|
continue
|
||||||
|
if pg and pg != '@':
|
||||||
|
if not self.alpha_page.has_key(pg):
|
||||||
|
self.create_new_panel(pg)
|
||||||
|
model = self.alpha_page[pg]
|
||||||
|
else:
|
||||||
|
model = self.default_list
|
||||||
|
|
||||||
|
if current_model == model:
|
||||||
|
iter = model.add([val[0],val[1],val[2],val[3],val[4],val[5],
|
||||||
|
val[6],val[7],val[8]])
|
||||||
|
self.id2col[key] = (model,iter)
|
||||||
|
else:
|
||||||
|
if self.id2col.has_key(key):
|
||||||
|
(model,iter) = self.id2col[key]
|
||||||
|
model.remove(iter)
|
||||||
|
del self.id2col[key]
|
||||||
|
|
||||||
|
for i in self.pl_page:
|
||||||
|
i.sort()
|
||||||
|
|
||||||
|
self.parent.modify_statusbar()
|
||||||
|
|
||||||
|
def create_new_panel(self,pg):
|
||||||
|
|
||||||
|
display = gtk.ScrolledWindow()
|
||||||
|
display.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
||||||
|
tree = gtk.TreeView()
|
||||||
|
tree.show()
|
||||||
|
display.add(tree)
|
||||||
|
display.show()
|
||||||
|
model = PeopleStore.PeopleStore(tree, self, self.row_changed,
|
||||||
|
self.alpha_event,_sel_mode)
|
||||||
|
self.alpha_page[pg] = model
|
||||||
|
for index in range(0,len(self.tab_list)):
|
||||||
|
try:
|
||||||
|
if pg < self.tab_list[index]:
|
||||||
|
self.ptabs.insert_page(display,gtk.Label(pg),index)
|
||||||
|
self.ptabs.set_show_tabs(1)
|
||||||
|
self.tab_list.insert(index,pg)
|
||||||
|
self.pl_page.insert(index,model)
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
print index
|
||||||
|
else:
|
||||||
|
#added by EARNEY on 5/5/2003
|
||||||
|
#modified the block below because sometimes certain
|
||||||
|
#letters under people panel
|
||||||
|
#will not load properly after a quick add
|
||||||
|
#(ie, adding a parent under the family panel)
|
||||||
|
index=len(self.tab_list)
|
||||||
|
self.ptabs.insert_page(display,gtk.Label(pg),index)
|
||||||
|
self.ptabs.set_show_tabs(1)
|
||||||
|
self.tab_list.insert(index,pg)
|
||||||
|
self.pl_page.insert(index,model)
|
||||||
|
|
||||||
|
#instead of the following..
|
||||||
|
#self.ptabs.insert_page(display,gtk.Label(pg),len(self.tab_list))
|
||||||
|
#self.ptabs.set_show_tabs(1)
|
||||||
|
#self.tab_list.append(pg)
|
||||||
|
#self.pl_page = self.pl_page[0:-1] + [model,self.default_list]
|
||||||
|
|
||||||
|
|
||||||
|
for index in range(0,len(self.tab_list)):
|
||||||
|
model = self.alpha_page[self.tab_list[index]]
|
||||||
|
self.model2page[model] = index
|
||||||
|
self.model_used[model] = 0
|
||||||
|
self.model2page[self.default_list] = len(self.tab_list)
|
||||||
|
self.model_used[self.default_list] = 0
|
||||||
|
|
||||||
|
|
||||||
|
def on_plist_button_press(self,obj,event):
|
||||||
|
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
|
||||||
|
self.build_people_context_menu()
|
||||||
|
|
||||||
|
def build_people_context_menu(self):
|
||||||
|
"""Builds the menu with navigation and
|
||||||
|
editing operations on the people's list"""
|
||||||
|
|
||||||
|
back_sensitivity = self.hindex > 0
|
||||||
|
fwd_sensitivity = self.hindex + 1 < len(self.history)
|
||||||
|
mlist = self.person_tree.get_selected_objects()
|
||||||
|
if mlist:
|
||||||
|
sel_sensitivity = 1
|
||||||
|
else:
|
||||||
|
sel_sensitivity = 0
|
||||||
|
entries = [
|
||||||
|
(gtk.STOCK_GO_BACK,self.back_clicked,back_sensitivity),
|
||||||
|
(gtk.STOCK_GO_FORWARD,self.fwd_clicked,fwd_sensitivity),
|
||||||
|
(gtk.STOCK_HOME,self.on_home_clicked,1),
|
||||||
|
(_("Add Bookmark"),self.on_add_bookmark_activate,sel_sensitivity),
|
||||||
|
(None,None,0),
|
||||||
|
(gtk.STOCK_ADD, self.add_button_clicked,1),
|
||||||
|
(gtk.STOCK_REMOVE, self.remove_button_clicked,sel_sensitivity),
|
||||||
|
(_("Edit"), self.edit_button_clicked,sel_sensitivity),
|
||||||
|
]
|
||||||
|
|
||||||
|
menu = gtk.Menu()
|
||||||
|
menu.set_title(_('People Menu'))
|
||||||
|
for stock_id,callback,sensitivity in entries:
|
||||||
|
item = gtk.ImageMenuItem(stock_id)
|
||||||
|
if callback:
|
||||||
|
item.connect("activate",callback)
|
||||||
|
item.set_sensitive(sensitivity)
|
||||||
|
item.show()
|
||||||
|
menu.append(item)
|
||||||
|
menu.popup(None,None,None,0,0)
|
||||||
|
|
||||||
|
|
@ -1044,10 +1044,11 @@ class Person(Persistent):
|
|||||||
gender = const.unknown
|
gender = const.unknown
|
||||||
bday = self.getBirth().getDateObj()
|
bday = self.getBirth().getDateObj()
|
||||||
dday = self.getDeath().getDateObj()
|
dday = self.getDeath().getDateObj()
|
||||||
return [self.getPrimaryName().getName(),self.id,gender,
|
return [ self.getPrimaryName().getName(),self.id,gender,
|
||||||
bday.getQuoteDate(), dday.getQuoteDate(),
|
bday.getQuoteDate(), dday.getQuoteDate(),
|
||||||
sort.build_sort_name(self.getPrimaryName()),
|
sort.build_sort_name(self.getPrimaryName()),
|
||||||
sort.build_sort_date(bday),sort.build_sort_date(dday)]
|
sort.build_sort_date(bday),sort.build_sort_date(dday),
|
||||||
|
self.getPrimaryName().getSurname()]
|
||||||
|
|
||||||
def setPrimaryName(self,name):
|
def setPrimaryName(self,name):
|
||||||
"""sets the primary name of the Person to the specified
|
"""sets the primary name of the Person to the specified
|
||||||
|
@ -214,7 +214,7 @@ class BareReportDialog:
|
|||||||
self.window = gtk.Dialog('GRAMPS')
|
self.window = gtk.Dialog('GRAMPS')
|
||||||
self.window.set_has_separator(gtk.FALSE)
|
self.window.set_has_separator(gtk.FALSE)
|
||||||
self.cancel = self.window.add_button(gtk.STOCK_CANCEL,1)
|
self.cancel = self.window.add_button(gtk.STOCK_CANCEL,1)
|
||||||
self.ok = self.window.add_button(gtk.STOCK_OK,0)
|
self.ok = self.window.add_button(_('_Generate report'),0)
|
||||||
|
|
||||||
self.ok.connect('clicked',self.on_ok_clicked)
|
self.ok.connect('clicked',self.on_ok_clicked)
|
||||||
self.cancel.connect('clicked',self.on_cancel)
|
self.cancel.connect('clicked',self.on_cancel)
|
||||||
|
@ -55,6 +55,7 @@ import MediaView
|
|||||||
import PlaceView
|
import PlaceView
|
||||||
import FamilyView
|
import FamilyView
|
||||||
import SourceView
|
import SourceView
|
||||||
|
import PeopleView
|
||||||
|
|
||||||
from QuestionDialog import QuestionDialog, ErrorDialog, WarningDialog, SaveDialog, OptionDialog, MissingMediaDialog
|
from QuestionDialog import QuestionDialog, ErrorDialog, WarningDialog, SaveDialog, OptionDialog, MissingMediaDialog
|
||||||
|
|
||||||
@ -70,6 +71,7 @@ import Find
|
|||||||
import VersionControl
|
import VersionControl
|
||||||
import ReadXML
|
import ReadXML
|
||||||
import ListModel
|
import ListModel
|
||||||
|
import TreeModel
|
||||||
import GrampsXML
|
import GrampsXML
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -87,8 +89,6 @@ _HOMEPAGE = "http://gramps.sourceforge.net"
|
|||||||
_MAILLIST = "http://sourceforge.net/mail/?group_id=25770"
|
_MAILLIST = "http://sourceforge.net/mail/?group_id=25770"
|
||||||
_BUGREPORT = "http://sourceforge.net/tracker/?group_id=25770&atid=385137"
|
_BUGREPORT = "http://sourceforge.net/tracker/?group_id=25770&atid=385137"
|
||||||
|
|
||||||
_sel_mode = gtk.SELECTION_MULTIPLE
|
|
||||||
|
|
||||||
PERSON_VIEW = 0
|
PERSON_VIEW = 0
|
||||||
FAMILY_VIEW1 = 1
|
FAMILY_VIEW1 = 1
|
||||||
FAMILY_VIEW2 = 2
|
FAMILY_VIEW2 = 2
|
||||||
@ -116,7 +116,6 @@ class Gramps:
|
|||||||
self.program.set_property('app-sysconfdir','%s/etc' % const.prefixdir)
|
self.program.set_property('app-sysconfdir','%s/etc' % const.prefixdir)
|
||||||
self.program.set_property('app-prefix', const.prefixdir)
|
self.program.set_property('app-prefix', const.prefixdir)
|
||||||
|
|
||||||
self.DataFilter = Filter.Filter("")
|
|
||||||
self.parents_index = 0
|
self.parents_index = 0
|
||||||
self.active_person = None
|
self.active_person = None
|
||||||
self.place_loaded = 0
|
self.place_loaded = 0
|
||||||
@ -147,7 +146,6 @@ class Gramps:
|
|||||||
self.db.set_fprefix(GrampsCfg.fprefix)
|
self.db.set_fprefix(GrampsCfg.fprefix)
|
||||||
self.db.set_sprefix(GrampsCfg.sprefix)
|
self.db.set_sprefix(GrampsCfg.sprefix)
|
||||||
self.db.set_pprefix(GrampsCfg.pprefix)
|
self.db.set_pprefix(GrampsCfg.pprefix)
|
||||||
self.clearing_tabs = 0
|
|
||||||
|
|
||||||
GrampsCfg.loadConfig(self.pref_callback)
|
GrampsCfg.loadConfig(self.pref_callback)
|
||||||
self.relationship = Plugins.relationship_function()
|
self.relationship = Plugins.relationship_function()
|
||||||
@ -203,28 +201,6 @@ class Gramps:
|
|||||||
self.filter_btn = self.gtop.get_widget("filter1")
|
self.filter_btn = self.gtop.get_widget("filter1")
|
||||||
self.statusbar = self.gtop.get_widget("statusbar")
|
self.statusbar = self.gtop.get_widget("statusbar")
|
||||||
|
|
||||||
self.ptabs = self.gtop.get_widget("ptabs")
|
|
||||||
self.pl_other = self.gtop.get_widget("pl_other")
|
|
||||||
|
|
||||||
self.ptabs.set_show_tabs(0)
|
|
||||||
|
|
||||||
self.pl_page = [
|
|
||||||
ListModel.ListModel(self.pl_other, self.pl_titles, self.row_changed,
|
|
||||||
self.alpha_event, _sel_mode),
|
|
||||||
]
|
|
||||||
|
|
||||||
self.person_tree = self.pl_page[0]
|
|
||||||
self.person_list = self.pl_page[0].tree
|
|
||||||
self.person_model = self.pl_page[0].model
|
|
||||||
self.person_list.connect('button-press-event',self.on_plist_button_press)
|
|
||||||
|
|
||||||
self.default_list = self.pl_page[-1]
|
|
||||||
|
|
||||||
self.alpha_page = {}
|
|
||||||
self.model2page = {}
|
|
||||||
self.model_used = {}
|
|
||||||
self.tab_list = []
|
|
||||||
|
|
||||||
self.filter_list = self.gtop.get_widget("filter_list")
|
self.filter_list = self.gtop.get_widget("filter_list")
|
||||||
self.views = self.gtop.get_widget("views")
|
self.views = self.gtop.get_widget("views")
|
||||||
self.merge_button= self.gtop.get_widget("merge")
|
self.merge_button= self.gtop.get_widget("merge")
|
||||||
@ -262,7 +238,8 @@ class Gramps:
|
|||||||
self.views.set_show_tabs(0)
|
self.views.set_show_tabs(0)
|
||||||
|
|
||||||
self.family_view = FamilyView.FamilyView(self)
|
self.family_view = FamilyView.FamilyView(self)
|
||||||
|
self.people_view = PeopleView.PeopleView(self)
|
||||||
|
|
||||||
self.pedigree_view = PedView.PedigreeView(self,
|
self.pedigree_view = PedView.PedigreeView(self,
|
||||||
self.canvas, self.modify_statusbar, self.statusbar,
|
self.canvas, self.modify_statusbar, self.statusbar,
|
||||||
self.change_active_person, self.load_person
|
self.change_active_person, self.load_person
|
||||||
@ -288,7 +265,7 @@ class Gramps:
|
|||||||
"on_editbtn_clicked" : self.edit_button_clicked,
|
"on_editbtn_clicked" : self.edit_button_clicked,
|
||||||
"on_addbtn_clicked" : self.add_button_clicked,
|
"on_addbtn_clicked" : self.add_button_clicked,
|
||||||
"on_removebtn_clicked" : self.remove_button_clicked,
|
"on_removebtn_clicked" : self.remove_button_clicked,
|
||||||
"on_alpha_switch_page" : self.change_alpha_page,
|
"on_alpha_switch_page" : self.people_view.change_alpha_page,
|
||||||
"delete_event" : self.delete_event,
|
"delete_event" : self.delete_event,
|
||||||
"destroy_passed_object" : Utils.destroy_passed_object,
|
"destroy_passed_object" : Utils.destroy_passed_object,
|
||||||
"on_about_activate" : self.on_about_activate,
|
"on_about_activate" : self.on_about_activate,
|
||||||
@ -363,15 +340,6 @@ class Gramps:
|
|||||||
|
|
||||||
self.topWindow.show()
|
self.topWindow.show()
|
||||||
|
|
||||||
def set_buttons(self,val):
|
|
||||||
self.report_menu.set_sensitive(val)
|
|
||||||
self.tools_menu.set_sensitive(val)
|
|
||||||
self.report_button.set_sensitive(val)
|
|
||||||
self.tool_button.set_sensitive(val)
|
|
||||||
if self.views.get_current_page() == PERSON_VIEW:
|
|
||||||
self.remove_button.set_sensitive(val)
|
|
||||||
self.edit_button.set_sensitive(val)
|
|
||||||
|
|
||||||
def redraw_histmenu(self):
|
def redraw_histmenu(self):
|
||||||
"""Create the history submenu of the Go menu"""
|
"""Create the history submenu of the Go menu"""
|
||||||
self.hist_gomenuitem.remove_submenu()
|
self.hist_gomenuitem.remove_submenu()
|
||||||
@ -455,6 +423,15 @@ class Gramps:
|
|||||||
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
|
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
|
||||||
self.build_fwdhistmenu()
|
self.build_fwdhistmenu()
|
||||||
|
|
||||||
|
def set_buttons(self,val):
|
||||||
|
self.report_menu.set_sensitive(val)
|
||||||
|
self.tools_menu.set_sensitive(val)
|
||||||
|
self.report_button.set_sensitive(val)
|
||||||
|
self.tool_button.set_sensitive(val)
|
||||||
|
if self.views.get_current_page() == PERSON_VIEW:
|
||||||
|
self.remove_button.set_sensitive(val)
|
||||||
|
self.edit_button.set_sensitive(val)
|
||||||
|
|
||||||
def back_clicked(self,obj,step=1):
|
def back_clicked(self,obj,step=1):
|
||||||
if self.hindex > 0:
|
if self.hindex > 0:
|
||||||
try:
|
try:
|
||||||
@ -509,62 +486,6 @@ class Gramps:
|
|||||||
self.backbtn.set_sensitive(1)
|
self.backbtn.set_sensitive(1)
|
||||||
self.back.set_sensitive(1)
|
self.back.set_sensitive(1)
|
||||||
|
|
||||||
def on_plist_button_press(self,obj,event):
|
|
||||||
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
|
|
||||||
self.build_people_context_menu()
|
|
||||||
|
|
||||||
def build_people_context_menu(self):
|
|
||||||
"""Builds the menu with navigation and
|
|
||||||
editing operations on the people's list"""
|
|
||||||
|
|
||||||
back_sensitivity = self.hindex > 0
|
|
||||||
fwd_sensitivity = self.hindex + 1 < len(self.history)
|
|
||||||
mlist = self.person_tree.get_selected_objects()
|
|
||||||
if mlist:
|
|
||||||
sel_sensitivity = 1
|
|
||||||
else:
|
|
||||||
sel_sensitivity = 0
|
|
||||||
entries = [
|
|
||||||
(gtk.STOCK_GO_BACK,self.back_clicked,back_sensitivity),
|
|
||||||
(gtk.STOCK_GO_FORWARD,self.fwd_clicked,fwd_sensitivity),
|
|
||||||
(gtk.STOCK_HOME,self.on_home_clicked,1),
|
|
||||||
(_("Add Bookmark"),self.on_add_bookmark_activate,sel_sensitivity),
|
|
||||||
(None,None,0),
|
|
||||||
(gtk.STOCK_ADD, self.add_button_clicked,1),
|
|
||||||
(gtk.STOCK_REMOVE, self.remove_button_clicked,sel_sensitivity),
|
|
||||||
(_("Edit"), self.edit_button_clicked,sel_sensitivity),
|
|
||||||
]
|
|
||||||
|
|
||||||
menu = gtk.Menu()
|
|
||||||
menu.set_title(_('People Menu'))
|
|
||||||
for stock_id,callback,sensitivity in entries:
|
|
||||||
item = gtk.ImageMenuItem(stock_id)
|
|
||||||
if callback:
|
|
||||||
item.connect("activate",callback)
|
|
||||||
item.set_sensitive(sensitivity)
|
|
||||||
item.show()
|
|
||||||
menu.append(item)
|
|
||||||
menu.popup(None,None,None,0,0)
|
|
||||||
|
|
||||||
def change_alpha_page(self,obj,junk,page):
|
|
||||||
"""Change the page. Be careful not to take action while the pages
|
|
||||||
are begin removed. If clearing_tabs is set, then we don't do anything"""
|
|
||||||
|
|
||||||
if self.clearing_tabs:
|
|
||||||
return
|
|
||||||
self.person_tree = self.pl_page[page]
|
|
||||||
self.person_list = self.pl_page[page].tree
|
|
||||||
self.person_model = self.pl_page[page].model
|
|
||||||
if not self.model_used.has_key(self.person_tree) or self.model_used[self.person_tree] == 0:
|
|
||||||
self.model_used[self.person_tree] = 1
|
|
||||||
self.apply_filter(self.person_tree)
|
|
||||||
self.person_list.connect('button-press-event',self.on_plist_button_press)
|
|
||||||
mlist = self.person_tree.get_selected_objects()
|
|
||||||
if mlist:
|
|
||||||
self.set_buttons(1)
|
|
||||||
else:
|
|
||||||
self.set_buttons(0)
|
|
||||||
|
|
||||||
def edit_button_clicked(self,obj):
|
def edit_button_clicked(self,obj):
|
||||||
cpage = self.views.get_current_page()
|
cpage = self.views.get_current_page()
|
||||||
if cpage == PERSON_VIEW:
|
if cpage == PERSON_VIEW:
|
||||||
@ -603,15 +524,6 @@ class Gramps:
|
|||||||
self.remove_button.set_sensitive(val)
|
self.remove_button.set_sensitive(val)
|
||||||
self.edit_button.set_sensitive(val)
|
self.edit_button.set_sensitive(val)
|
||||||
|
|
||||||
def row_changed(self,obj):
|
|
||||||
mlist = self.person_tree.get_selected_objects()
|
|
||||||
if mlist:
|
|
||||||
try:
|
|
||||||
self.change_active_person(self.db.getPerson(mlist[0]))
|
|
||||||
except:
|
|
||||||
self.change_active_person(None)
|
|
||||||
self.person_tree.unselect()
|
|
||||||
|
|
||||||
def on_show_plugin_status(self,obj):
|
def on_show_plugin_status(self,obj):
|
||||||
Plugins.PluginStatus()
|
Plugins.PluginStatus()
|
||||||
|
|
||||||
@ -856,35 +768,6 @@ class Gramps:
|
|||||||
import DbPrompter
|
import DbPrompter
|
||||||
DbPrompter.DbPrompter(self,1,self.topWindow)
|
DbPrompter.DbPrompter(self,1,self.topWindow)
|
||||||
|
|
||||||
def clear_person_tabs(self):
|
|
||||||
|
|
||||||
self.clearing_tabs = 1
|
|
||||||
self.ptabs.hide()
|
|
||||||
for i in range(0,len(self.tab_list)):
|
|
||||||
self.ptabs.remove_page(0)
|
|
||||||
self.ptabs.set_show_tabs(0)
|
|
||||||
self.ptabs.show()
|
|
||||||
self.clearing_tabs = 0
|
|
||||||
self.id2col = {}
|
|
||||||
self.tab_list = []
|
|
||||||
self.alpha_page = {}
|
|
||||||
self.model2page = {}
|
|
||||||
self.model_used = {}
|
|
||||||
|
|
||||||
self.default_list.clear()
|
|
||||||
|
|
||||||
for page in self.pl_page[0:-1]:
|
|
||||||
page.cleanup()
|
|
||||||
del page
|
|
||||||
|
|
||||||
self.pl_page = [
|
|
||||||
self.default_list
|
|
||||||
]
|
|
||||||
|
|
||||||
self.person_tree = self.pl_page[-1]
|
|
||||||
self.person_list = self.pl_page[-1].tree
|
|
||||||
self.person_model = self.pl_page[-1].model
|
|
||||||
|
|
||||||
def clear_database(self,zodb=1):
|
def clear_database(self,zodb=1):
|
||||||
"""Clear out the database if permission was granted"""
|
"""Clear out the database if permission was granted"""
|
||||||
const.personalEvents = const.init_personal_event_list()
|
const.personalEvents = const.init_personal_event_list()
|
||||||
@ -897,7 +780,7 @@ class Gramps:
|
|||||||
self.mhistory = []
|
self.mhistory = []
|
||||||
self.hindex = -1
|
self.hindex = -1
|
||||||
|
|
||||||
self.clear_person_tabs()
|
self.people_view.clear_person_tabs()
|
||||||
|
|
||||||
if zodb == 1:
|
if zodb == 1:
|
||||||
self.db = GrampsZODB.GrampsZODB()
|
self.db = GrampsZODB.GrampsZODB()
|
||||||
@ -912,19 +795,18 @@ class Gramps:
|
|||||||
self.db.set_pprefix(GrampsCfg.pprefix)
|
self.db.set_pprefix(GrampsCfg.pprefix)
|
||||||
|
|
||||||
self.place_view.change_db(self.db)
|
self.place_view.change_db(self.db)
|
||||||
|
self.people_view.change_db(self.db)
|
||||||
self.source_view.change_db(self.db)
|
self.source_view.change_db(self.db)
|
||||||
self.media_view.change_db(self.db)
|
self.media_view.change_db(self.db)
|
||||||
|
|
||||||
if not self.cl:
|
if not self.cl:
|
||||||
self.topWindow.set_title("GRAMPS")
|
self.topWindow.set_title("GRAMPS")
|
||||||
self.active_person = None
|
self.active_person = None
|
||||||
self.id2col = {}
|
|
||||||
|
|
||||||
Utils.clearModified()
|
Utils.clearModified()
|
||||||
Utils.clear_timer()
|
Utils.clear_timer()
|
||||||
self.change_active_person(None)
|
self.change_active_person(None)
|
||||||
for model in self.pl_page:
|
self.people_view.clear()
|
||||||
model.clear()
|
|
||||||
self.family_view.clear()
|
self.family_view.clear()
|
||||||
self.family_view.load_family()
|
self.family_view.load_family()
|
||||||
self.pedigree_view.clear()
|
self.pedigree_view.clear()
|
||||||
@ -955,7 +837,7 @@ class Gramps:
|
|||||||
page = self.views.get_current_page()
|
page = self.views.get_current_page()
|
||||||
if page == PERSON_VIEW:
|
if page == PERSON_VIEW:
|
||||||
if changed:
|
if changed:
|
||||||
self.apply_filter()
|
self.people_view.apply_filter()
|
||||||
else:
|
else:
|
||||||
self.goto_active_person()
|
self.goto_active_person()
|
||||||
elif page == FAMILY_VIEW1 or page == FAMILY_VIEW2:
|
elif page == FAMILY_VIEW1 or page == FAMILY_VIEW2:
|
||||||
@ -1078,7 +960,7 @@ class Gramps:
|
|||||||
else:
|
else:
|
||||||
GrampsCfg.save_last_file("")
|
GrampsCfg.save_last_file("")
|
||||||
self.topWindow.set_resizable(gtk.TRUE)
|
self.topWindow.set_resizable(gtk.TRUE)
|
||||||
self.apply_filter()
|
self.people_view.apply_filter()
|
||||||
self.goto_active_person(1)
|
self.goto_active_person(1)
|
||||||
|
|
||||||
def handle_args(self,args):
|
def handle_args(self,args):
|
||||||
@ -1610,72 +1492,14 @@ class Gramps:
|
|||||||
self.update_display(0)
|
self.update_display(0)
|
||||||
Utils.modified()
|
Utils.modified()
|
||||||
|
|
||||||
def remove_from_person_list(self,person,old_id=None):
|
|
||||||
pid = person.getId()
|
|
||||||
if old_id:
|
|
||||||
del_id = old_id
|
|
||||||
else:
|
|
||||||
del_id = pid
|
|
||||||
|
|
||||||
if self.id2col.has_key(del_id):
|
|
||||||
(model,iter) = self.id2col[del_id]
|
|
||||||
model.remove(iter)
|
|
||||||
del self.id2col[del_id]
|
|
||||||
|
|
||||||
if person == self.active_person:
|
|
||||||
self.active_person = None
|
|
||||||
|
|
||||||
def merge_update(self,p1,p2,old_id):
|
def merge_update(self,p1,p2,old_id):
|
||||||
self.remove_from_person_list(p1,old_id)
|
self.remove_from_person_list(p1,old_id)
|
||||||
self.remove_from_person_list(p2)
|
self.remove_from_person_list(p2)
|
||||||
self.redisplay_person_list(p1)
|
self.redisplay_person_list(p1)
|
||||||
self.update_display(0)
|
self.update_display(0)
|
||||||
|
|
||||||
def alpha_event(self,obj):
|
|
||||||
self.load_person(self.active_person)
|
|
||||||
|
|
||||||
def goto_active_person(self,first=0):
|
def goto_active_person(self,first=0):
|
||||||
if not self.active_person:
|
self.people_view.goto_active_person(first)
|
||||||
if first:
|
|
||||||
page = 0
|
|
||||||
else:
|
|
||||||
page = self.ptabs.get_current_page()
|
|
||||||
self.person_tree = self.pl_page[page]
|
|
||||||
self.person_list = self.pl_page[page].tree
|
|
||||||
self.person_model = self.pl_page[page].model
|
|
||||||
self.ptabs.set_current_page(page)
|
|
||||||
return
|
|
||||||
|
|
||||||
id = self.active_person.getId()
|
|
||||||
if self.id2col.has_key(id):
|
|
||||||
(model,iter) = self.id2col[id]
|
|
||||||
else:
|
|
||||||
val = self.db.getPersonDisplay(id)
|
|
||||||
pg = val[5]
|
|
||||||
if pg and pg != '@':
|
|
||||||
pg = pg[0]
|
|
||||||
else:
|
|
||||||
pg = ''
|
|
||||||
if not self.alpha_page.has_key(pg):
|
|
||||||
self.create_new_panel(pg)
|
|
||||||
model = self.alpha_page[pg]
|
|
||||||
iter = None
|
|
||||||
|
|
||||||
self.ptabs.set_current_page(self.model2page[model])
|
|
||||||
|
|
||||||
if not self.model_used.has_key(model) or self.model_used[model] == 0 or not iter:
|
|
||||||
self.model_used[model] = 1
|
|
||||||
self.apply_filter(model)
|
|
||||||
try:
|
|
||||||
(model,iter) = self.id2col[id]
|
|
||||||
except:
|
|
||||||
return
|
|
||||||
|
|
||||||
model.selection.unselect_all()
|
|
||||||
model.selection.select_iter(iter);
|
|
||||||
itpath = model.model.get_path(iter)
|
|
||||||
col = model.tree.get_column(0)
|
|
||||||
model.tree.scroll_to_cell(itpath,col,1,0.5,0)
|
|
||||||
|
|
||||||
def change_active_person(self,person):
|
def change_active_person(self,person):
|
||||||
if person != self.active_person:
|
if person != self.active_person:
|
||||||
@ -1886,7 +1710,7 @@ class Gramps:
|
|||||||
"""Load the appropriate page after a notebook switch"""
|
"""Load the appropriate page after a notebook switch"""
|
||||||
if page == PERSON_VIEW:
|
if page == PERSON_VIEW:
|
||||||
self.enable_buttons(1)
|
self.enable_buttons(1)
|
||||||
self.goto_active_person()
|
self.people_view.goto_active_person()
|
||||||
self.merge_button.set_sensitive(1)
|
self.merge_button.set_sensitive(1)
|
||||||
elif page == FAMILY_VIEW1 or page == FAMILY_VIEW2:
|
elif page == FAMILY_VIEW1 or page == FAMILY_VIEW2:
|
||||||
self.enable_buttons(0)
|
self.enable_buttons(0)
|
||||||
@ -1910,14 +1734,7 @@ class Gramps:
|
|||||||
self.media_view.load_media()
|
self.media_view.load_media()
|
||||||
|
|
||||||
def on_apply_filter_clicked(self,obj):
|
def on_apply_filter_clicked(self,obj):
|
||||||
invert_filter = self.filter_inv.get_active()
|
self.people_view.apply_filter_clicked()
|
||||||
qualifer = self.filter_text.get_text()
|
|
||||||
mi = self.filter_list.get_menu().get_active()
|
|
||||||
class_init = mi.get_data("function")
|
|
||||||
self.DataFilter = class_init(qualifer)
|
|
||||||
self.DataFilter.set_invert(invert_filter)
|
|
||||||
self.model_used = {}
|
|
||||||
self.apply_filter(self.person_tree)
|
|
||||||
|
|
||||||
def on_filter_name_changed(self,obj):
|
def on_filter_name_changed(self,obj):
|
||||||
filter = obj.get_data("filter")
|
filter = obj.get_data("filter")
|
||||||
@ -1940,7 +1757,7 @@ class Gramps:
|
|||||||
self.db.addPersonNoMap(epo.person,epo.person.getId())
|
self.db.addPersonNoMap(epo.person,epo.person.getId())
|
||||||
self.db.buildPersonDisplay(epo.person.getId())
|
self.db.buildPersonDisplay(epo.person.getId())
|
||||||
self.change_active_person(epo.person)
|
self.change_active_person(epo.person)
|
||||||
self.redisplay_person_list(epo.person)
|
self.people_view.redisplay_person_list(epo.person)
|
||||||
if self.views.get_current_page() in [FAMILY_VIEW1,FAMILY_VIEW2]:
|
if self.views.get_current_page() in [FAMILY_VIEW1,FAMILY_VIEW2]:
|
||||||
self.family_view.load_family()
|
self.family_view.load_family()
|
||||||
for p in plist:
|
for p in plist:
|
||||||
@ -1948,51 +1765,28 @@ class Gramps:
|
|||||||
|
|
||||||
def update_after_newchild(self,family,person,plist):
|
def update_after_newchild(self,family,person,plist):
|
||||||
self.family_view.load_family(family)
|
self.family_view.load_family(family)
|
||||||
self.redisplay_person_list(person)
|
self.people_view.redisplay_person_list(person)
|
||||||
for p in plist:
|
for p in plist:
|
||||||
self.place_view.new_place_after_edit(p)
|
self.place_view.new_place_after_edit(p)
|
||||||
|
|
||||||
def update_after_edit(self,epo,plist):
|
def update_after_edit(self,epo,plist):
|
||||||
if epo:
|
if epo:
|
||||||
self.db.buildPersonDisplay(epo.person.getId(),epo.original_id)
|
self.db.buildPersonDisplay(epo.person.getId(),epo.original_id)
|
||||||
self.remove_from_person_list(epo.person,epo.original_id)
|
self.people_view.remove_from_person_list(epo.person,epo.original_id)
|
||||||
self.redisplay_person_list(epo.person)
|
self.people_view.redisplay_person_list(epo.person)
|
||||||
for p in plist:
|
for p in plist:
|
||||||
self.place_view.new_place_after_edit(p)
|
self.place_view.new_place_after_edit(p)
|
||||||
self.update_display(0)
|
self.update_display(0)
|
||||||
|
|
||||||
def update_after_merge(self,person,old_id):
|
def update_after_merge(self,person,old_id):
|
||||||
if person:
|
if person:
|
||||||
self.remove_from_person_list(person,old_id)
|
self.people_view.remove_from_person_list(person,old_id)
|
||||||
self.redisplay_person_list(person)
|
self.people_view.redisplay_person_list(person)
|
||||||
self.update_display(0)
|
self.update_display(0)
|
||||||
|
|
||||||
def add_to_person_list(self,person,change):
|
|
||||||
key = person.getId()
|
|
||||||
val = self.db.getPersonDisplay(person.getId())
|
|
||||||
pg = unicode(val[5])
|
|
||||||
pg = pg[0]
|
|
||||||
if self.DataFilter.compare(person):
|
|
||||||
|
|
||||||
if pg and pg != '@':
|
|
||||||
if not self.alpha_page.has_key(pg):
|
|
||||||
self.create_new_panel(pg)
|
|
||||||
model = self.alpha_page[pg]
|
|
||||||
else:
|
|
||||||
model = self.default_list
|
|
||||||
|
|
||||||
iter = model.add([val[0],val[1],val[2],val[3],val[4],val[5],
|
|
||||||
val[6],val[7]],key)
|
|
||||||
|
|
||||||
self.id2col[key] = (model,iter)
|
|
||||||
|
|
||||||
if change:
|
|
||||||
self.change_active_person(person)
|
|
||||||
self.goto_active_person()
|
|
||||||
model.sort()
|
|
||||||
|
|
||||||
def redisplay_person_list(self,person):
|
def redisplay_person_list(self,person):
|
||||||
self.add_to_person_list(person,1)
|
self.people_view.add_to_person_list(person,1)
|
||||||
|
|
||||||
def load_person(self,person):
|
def load_person(self,person):
|
||||||
if person:
|
if person:
|
||||||
@ -2131,98 +1925,10 @@ class Gramps:
|
|||||||
self.status_text("")
|
self.status_text("")
|
||||||
|
|
||||||
def complete_rebuild(self):
|
def complete_rebuild(self):
|
||||||
self.apply_filter()
|
self.people_view.apply_filter()
|
||||||
self.goto_active_person()
|
self.goto_active_person()
|
||||||
self.modify_statusbar()
|
self.modify_statusbar()
|
||||||
|
|
||||||
def apply_filter(self,current_model=None):
|
|
||||||
self.status_text(_('Updating display...'))
|
|
||||||
|
|
||||||
datacomp = self.DataFilter.compare
|
|
||||||
if current_model == None:
|
|
||||||
self.id2col = {}
|
|
||||||
|
|
||||||
for key in self.db.getPersonKeys():
|
|
||||||
person = self.db.getPerson(key)
|
|
||||||
val = self.db.getPersonDisplay(key)
|
|
||||||
pg = val[5]
|
|
||||||
if pg and pg != '@':
|
|
||||||
pg = pg[0]
|
|
||||||
else:
|
|
||||||
pg = ''
|
|
||||||
|
|
||||||
if datacomp(person):
|
|
||||||
if self.id2col.has_key(key):
|
|
||||||
continue
|
|
||||||
if pg and pg != '@':
|
|
||||||
if not self.alpha_page.has_key(pg):
|
|
||||||
self.create_new_panel(pg)
|
|
||||||
model = self.alpha_page[pg]
|
|
||||||
else:
|
|
||||||
model = self.default_list
|
|
||||||
|
|
||||||
if current_model == model:
|
|
||||||
iter = model.add([val[0],val[1],val[2],val[3],val[4],val[5],
|
|
||||||
val[6],val[7]],key)
|
|
||||||
self.id2col[key] = (model,iter)
|
|
||||||
else:
|
|
||||||
if self.id2col.has_key(key):
|
|
||||||
(model,iter) = self.id2col[key]
|
|
||||||
model.remove(iter)
|
|
||||||
del self.id2col[key]
|
|
||||||
|
|
||||||
for i in self.pl_page:
|
|
||||||
i.sort()
|
|
||||||
|
|
||||||
self.modify_statusbar()
|
|
||||||
|
|
||||||
def create_new_panel(self,pg):
|
|
||||||
|
|
||||||
display = gtk.ScrolledWindow()
|
|
||||||
display.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
|
|
||||||
tree = gtk.TreeView()
|
|
||||||
tree.show()
|
|
||||||
display.add(tree)
|
|
||||||
display.show()
|
|
||||||
model = ListModel.ListModel(tree,self.pl_titles,self.row_changed,
|
|
||||||
self.alpha_event,_sel_mode)
|
|
||||||
self.alpha_page[pg] = model
|
|
||||||
for index in range(0,len(self.tab_list)):
|
|
||||||
try:
|
|
||||||
if pg < self.tab_list[index]:
|
|
||||||
self.ptabs.insert_page(display,gtk.Label(pg),index)
|
|
||||||
self.ptabs.set_show_tabs(1)
|
|
||||||
self.tab_list.insert(index,pg)
|
|
||||||
self.pl_page.insert(index,model)
|
|
||||||
break
|
|
||||||
except:
|
|
||||||
print index
|
|
||||||
else:
|
|
||||||
#added by EARNEY on 5/5/2003
|
|
||||||
#modified the block below because sometimes certain
|
|
||||||
#letters under people panel
|
|
||||||
#will not load properly after a quick add
|
|
||||||
#(ie, adding a parent under the family panel)
|
|
||||||
index=len(self.tab_list)
|
|
||||||
self.ptabs.insert_page(display,gtk.Label(pg),index)
|
|
||||||
self.ptabs.set_show_tabs(1)
|
|
||||||
self.tab_list.insert(index,pg)
|
|
||||||
self.pl_page.insert(index,model)
|
|
||||||
|
|
||||||
#instead of the following..
|
|
||||||
#self.ptabs.insert_page(display,gtk.Label(pg),len(self.tab_list))
|
|
||||||
#self.ptabs.set_show_tabs(1)
|
|
||||||
#self.tab_list.append(pg)
|
|
||||||
#self.pl_page = self.pl_page[0:-1] + [model,self.default_list]
|
|
||||||
|
|
||||||
|
|
||||||
for index in range(0,len(self.tab_list)):
|
|
||||||
model = self.alpha_page[self.tab_list[index]]
|
|
||||||
self.model2page[model] = index
|
|
||||||
self.model_used[model] = 0
|
|
||||||
self.model2page[self.default_list] = len(self.tab_list)
|
|
||||||
self.model_used[self.default_list] = 0
|
|
||||||
|
|
||||||
def on_home_clicked(self,obj):
|
def on_home_clicked(self,obj):
|
||||||
temp = self.db.getDefaultPerson()
|
temp = self.db.getDefaultPerson()
|
||||||
if temp:
|
if temp:
|
||||||
|
Loading…
Reference in New Issue
Block a user