Shift-click to edit spouse, re-implemented family name guessing
svn: r1537
This commit is contained in:
parent
e08c7fad59
commit
76f10e127d
@ -1,5 +1,8 @@
|
||||
Version 0.9.2
|
||||
* Fixed pedigree view problem that prevented display from updating
|
||||
* Fixed duplicate place problem.
|
||||
* Re-implemented family name guessing
|
||||
* Better error handling with reports
|
||||
* Language-specific relationship calculation framework.
|
||||
Volunteers needed to create language-specific plugins.
|
||||
* New Family Tree Maker style reports (Ancestor and Descendant).
|
||||
|
@ -159,7 +159,11 @@ class FamilyView:
|
||||
self.display_marriage(self.person.getFamilyList()[row[0]])
|
||||
|
||||
def edit_relationship(self,obj,event):
|
||||
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||
if event.state & gtk.gdk.SHIFT_MASK and \
|
||||
event.type == gtk.gdk.BUTTON_PRESS and \
|
||||
event.button == 1 and self.selected_spouse:
|
||||
self.parent.load_person(self.selected_spouse)
|
||||
elif event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||
if self.person:
|
||||
try:
|
||||
if self.selected_spouse:
|
||||
@ -342,11 +346,11 @@ class FamilyView:
|
||||
first_spouse = sp
|
||||
first_family = f
|
||||
|
||||
if len(splist) > 1:
|
||||
self.spouse_selection.set_mode(gtk.SELECTION_SINGLE)
|
||||
self.spouse_selection.select_iter(iter)
|
||||
else:
|
||||
self.spouse_selection.set_mode(gtk.SELECTION_NONE)
|
||||
if len(splist) > 1:
|
||||
self.spouse_selection.set_mode(gtk.SELECTION_SINGLE)
|
||||
self.spouse_selection.select_iter(iter)
|
||||
else:
|
||||
self.spouse_selection.set_mode(gtk.SELECTION_NONE)
|
||||
|
||||
if sp:
|
||||
if f.getMarriage():
|
||||
|
@ -87,11 +87,12 @@ class DispBox:
|
||||
self.group.set_data('p',person)
|
||||
|
||||
def cleanup(self):
|
||||
self.shadow.destroy()
|
||||
self.bkgnd.destroy()
|
||||
self.textbox.destroy()
|
||||
self.group.destroy()
|
||||
|
||||
self.shadow.destroy()
|
||||
self.bkgnd.destroy()
|
||||
self.textbox.destroy()
|
||||
self.group.destroy()
|
||||
return
|
||||
|
||||
def group_event(self,obj,event):
|
||||
"""Handle events over a drawn box. Doubleclick would edit,
|
||||
shift doubleclick would change the active person, entering
|
||||
@ -99,7 +100,7 @@ class DispBox:
|
||||
box returns it to the original size and information"""
|
||||
|
||||
if event.type == gtk.gdk._2BUTTON_PRESS:
|
||||
return 1
|
||||
return 1
|
||||
elif event.type == gtk.gdk.ENTER_NOTIFY:
|
||||
self.expand()
|
||||
return 0
|
||||
@ -110,14 +111,12 @@ class DispBox:
|
||||
|
||||
def expand(self):
|
||||
"""Expand a box to include additional information"""
|
||||
self.group.raise_to_top()
|
||||
self.textbox.set(text=self.exp)
|
||||
self.bkgnd.set(y1=-self.h,y2=self.h*2)
|
||||
self.shadow.set(y1=-self.h+_PAD,y2=self.h*2+_PAD)
|
||||
|
||||
|
||||
def shrink(self):
|
||||
"""Expand a box to include additional information"""
|
||||
self.group.raise_to_top()
|
||||
self.textbox.set(text=self.name)
|
||||
self.bkgnd.set(y1=0,y2=self.h)
|
||||
self.shadow.set(y1=_PAD,y2=self.h+_PAD)
|
||||
|
@ -18,17 +18,31 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GTK/Gnome modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import gtk.glade
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import Utils
|
||||
import AutoComp
|
||||
import const
|
||||
import RelLib
|
||||
from intl import gettext as _
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# QuickAdd
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class QuickAdd:
|
||||
def __init__(self,db,sex,callback):
|
||||
def __init__(self,db,sex,callback,default_name = ""):
|
||||
self.db = db
|
||||
self.callback = callback
|
||||
|
||||
@ -41,15 +55,19 @@ class QuickAdd:
|
||||
|
||||
self.window = self.xml.get_widget("addperson")
|
||||
title = self.xml.get_widget('title')
|
||||
combo = self.xml.get_widget("surnameCombo")
|
||||
self.surname = self.xml.get_widget("surname")
|
||||
self.given = self.xml.get_widget("given")
|
||||
|
||||
Utils.set_titles(self.window,title, _('Add Person'))
|
||||
|
||||
self.c = AutoComp.AutoCombo(self.xml.get_widget("surnameCombo"),
|
||||
self.db.getSurnames())
|
||||
|
||||
self.c = AutoComp.AutoCombo(combo,self.db.getSurnames())
|
||||
if default_name:
|
||||
self.surname.set_text(default_name)
|
||||
|
||||
def close(self,obj):
|
||||
surname = self.xml.get_widget("surname").get_text()
|
||||
given = self.xml.get_widget("given").get_text()
|
||||
surname = self.surname.get_text()
|
||||
given = self.given.get_text()
|
||||
person = RelLib.Person()
|
||||
name = person.getPrimaryName()
|
||||
name.setSurname(surname)
|
||||
|
@ -41,6 +41,8 @@ import RelLib
|
||||
import const
|
||||
import Utils
|
||||
import ListModel
|
||||
import GrampsCfg
|
||||
from RelLib import Person
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -57,6 +59,11 @@ class SelectChild:
|
||||
self.add_person = add_person
|
||||
self.xml = gtk.glade.XML(const.gladeFile,"select_child")
|
||||
|
||||
if person:
|
||||
self.default_name = person.getPrimaryName().getSurname().upper()
|
||||
else:
|
||||
self.default_name = ""
|
||||
|
||||
self.xml.signal_autoconnect({
|
||||
"on_save_child_clicked" : self.on_save_child_clicked,
|
||||
"on_show_toggled" : self.on_show_toggled,
|
||||
@ -164,10 +171,22 @@ class SelectChild:
|
||||
|
||||
person_list.append(person.getId())
|
||||
|
||||
iter = None
|
||||
for idval in person_list:
|
||||
dinfo = self.db.getPersonDisplay(idval)
|
||||
rdata = [dinfo[0],dinfo[1],dinfo[3],dinfo[5],dinfo[6]]
|
||||
self.refmodel.add(rdata)
|
||||
new_iter = self.refmodel.add(rdata)
|
||||
names = dinfo[0].split(',')
|
||||
if len(names):
|
||||
ln = names[0].upper()
|
||||
if self.default_name and ln == self.default_name and not iter:
|
||||
iter = new_iter
|
||||
|
||||
if iter:
|
||||
self.refmodel.selection.select_iter(iter)
|
||||
path = self.refmodel.model.get_path(iter)
|
||||
col = self.add_child.get_column(0)
|
||||
self.add_child.scroll_to_cell(path,col,1,0.5,0.0)
|
||||
|
||||
def on_save_child_clicked(self,obj):
|
||||
store,iter = self.refmodel.selection.get_selected()
|
||||
@ -213,7 +232,18 @@ class SelectChild:
|
||||
class to create a new person."""
|
||||
|
||||
import QuickAdd
|
||||
QuickAdd.QuickAdd(self.db,"male",self.add_new_parent)
|
||||
|
||||
autoname = GrampsCfg.lastnamegen
|
||||
|
||||
if autoname == 0:
|
||||
name = self.north_american(0)
|
||||
elif autoname == 2:
|
||||
name = self.latin_american(0)
|
||||
elif autoname == 3:
|
||||
name = self.icelandic(0)
|
||||
else:
|
||||
name = ""
|
||||
QuickAdd.QuickAdd(self.db,"male",self.add_new_parent, name)
|
||||
|
||||
def add_new_parent(self,person):
|
||||
"""Adds a new person to either the father list or the mother list,
|
||||
@ -223,3 +253,49 @@ class SelectChild:
|
||||
rdata = [dinfo[0],dinfo[1],dinfo[3],dinfo[5],dinfo[6]]
|
||||
self.refmodel.add_and_select(rdata)
|
||||
self.add_person(person)
|
||||
|
||||
def north_american(self,val):
|
||||
if self.person.getGender() == Person.male:
|
||||
return self.person.getPrimaryName().getSurname()
|
||||
elif self.family:
|
||||
f = self.family.getFather()
|
||||
if f:
|
||||
return f.getPrimaryName().getSurname()
|
||||
return ""
|
||||
|
||||
def no_name(self,val):
|
||||
return ""
|
||||
|
||||
def latin_american(self,val):
|
||||
if self.family:
|
||||
father = self.family.getFather()
|
||||
mother = self.family.getMother()
|
||||
if not father or not mother:
|
||||
return ""
|
||||
fsn = father.getPrimaryName().getSurname()
|
||||
msn = mother.getPrimaryName().getSurname()
|
||||
if not father or not mother:
|
||||
return ""
|
||||
try:
|
||||
return "%s %s" % (fsn.split()[0],msn.split()[0])
|
||||
except:
|
||||
return ""
|
||||
else:
|
||||
return ""
|
||||
|
||||
def icelandic(self,val):
|
||||
fname = ""
|
||||
if self.person.getGender() == Person.male:
|
||||
fname = self.person.getPrimaryName().getFirstName()
|
||||
elif self.family:
|
||||
f = self.family.getFather()
|
||||
if f:
|
||||
fname = f.getPrimaryName().getFirstName()
|
||||
if fname:
|
||||
fname = string.split(fname)[0]
|
||||
if val == 0:
|
||||
return "%ssson" % fname
|
||||
elif val == 1:
|
||||
return "%sdóttir" % fname
|
||||
else:
|
||||
return ""
|
||||
|
@ -1802,7 +1802,7 @@
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label361">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>Spouse</b></property>
|
||||
<property name="label" translatable="yes"><b>Relationship</b></property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
@ -1949,7 +1949,7 @@
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="sp_list">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Double-click to edit the relationship information</property>
|
||||
<property name="tooltip" translatable="yes">Double-click to edit the relationship information, Shift-click to edit the person</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="rules_hint">True</property>
|
||||
@ -4033,7 +4033,7 @@
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="childlist">
|
||||
<property name="width_request">320</property>
|
||||
<property name="width_request">400</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">True</property>
|
||||
|
@ -1183,7 +1183,7 @@ class Gramps:
|
||||
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.0)
|
||||
model.tree.scroll_to_cell(itpath,col,1,0.5,0)
|
||||
|
||||
def change_active_person(self,person):
|
||||
if person != self.active_person:
|
||||
@ -1410,6 +1410,8 @@ class Gramps:
|
||||
self.db.buildPersonDisplay(epo.person.getId())
|
||||
self.change_active_person(epo.person)
|
||||
self.redisplay_person_list(epo.person)
|
||||
if self.views.get_current_page() == 1:
|
||||
self.family_view.load_family()
|
||||
for p in plist:
|
||||
self.place_view.new_place_after_edit(p)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user