* src/AttrEdit.py: support get_type/set_type in dropdown menu

* src/EditPerson.py: remove items properly based off EventRef


svn: r4781
This commit is contained in:
Don Allingham 2005-06-04 02:54:59 +00:00
parent 271f9d6a8b
commit af5df18bcd
8 changed files with 88 additions and 46 deletions

View File

@ -1,4 +1,6 @@
2005-06-03 Don Allingham <don@gramps-project.org> 2005-06-03 Don Allingham <don@gramps-project.org>
* src/AttrEdit.py: support get_type/set_type in dropdown menu
* src/EditPerson.py: remove items properly based off EventRef
* src/DisplayModels.py: remove unused print * src/DisplayModels.py: remove unused print
* src/ListBox.py: get EventBox working for event types * src/ListBox.py: get EventBox working for event types
* src/PedView.py: handle event types * src/PedView.py: handle event types

View File

@ -123,7 +123,14 @@ class AttributeEditor:
l = self.top.get_widget("title") l = self.top.get_widget("title")
Utils.set_titles(self.window,l,title,_('Attribute Editor')) Utils.set_titles(self.window,l,title,_('Attribute Editor'))
AutoComp.fill_combo(self.attrib_menu,list) if attrib:
defval = attrib.get_type()[0]
else:
defval = None
self.attrmapper = AutoComp.StandardCustomSelector(
Utils.personal_attributes, self.attrib_menu,
RelLib.Attribute.CUSTOM, defval)
if attrib != None: if attrib != None:
self.type_field.set_text(const.display_attr(attrib.get_type())) self.type_field.set_text(const.display_attr(attrib.get_type()))
@ -205,27 +212,29 @@ class AttributeEditor:
Called when the OK button is pressed. Gets data from the Called when the OK button is pressed. Gets data from the
form and updates the Attribute data structure. form and updates the Attribute data structure.
""" """
attr = unicode(self.type_field.get_text()) attr_data = self.attrmapper.get_values()
value = unicode(self.value_field.get_text()) value = unicode(self.value_field.get_text())
buf = self.note_field.get_buffer() buf = self.note_field.get_buffer()
note = unicode(buf.get_text(buf.get_start_iter(),buf.get_end_iter(),False)) note = unicode(buf.get_text(buf.get_start_iter(),
buf.get_end_iter(),False))
format = self.preform.get_active() format = self.preform.get_active()
priv = self.priv.get_active() priv = self.priv.get_active()
if not attr in self.alist: if (attr_data[0] == RelLib.Attribute.CUSTOM and
WarningDialog(_('New attribute type created'), not attr_data[1] in self.alist):
WarningDialog(
_('New attribute type created'),
_('The "%s" attribute type has been added to this database.\n' _('The "%s" attribute type has been added to this database.\n'
'It will now appear in the attribute menus for this database') % attr) 'It will now appear in the attribute menus for this database') % attr_data[1])
self.alist.append(attr) self.alist.append(attr_data[1])
self.alist.sort() self.alist.sort()
if self.attrib == None: if self.attrib == None:
self.attrib = RelLib.Attribute() self.attrib = RelLib.Attribute()
self.parent.alist.append(self.attrib) self.parent.alist.append(self.attrib)
self.attrib.set_source_reference_list(self.srcreflist) self.attrib.set_source_reference_list(self.srcreflist)
self.update(attr,value,note,format,priv) self.update(attr_data,value,note,format,priv)
self.callback(self.attrib) self.callback(self.attrib)
self.close(obj) self.close(obj)
@ -236,10 +245,9 @@ class AttributeEditor:
set(data) set(data)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
def update(self,attr,value,note,format,priv): def update(self,attr_data,value,note,format,priv):
"""Compares the data items, and updates if necessary""" """Compares the data items, and updates if necessary"""
ntype = const.save_pattr(attr) self.check(self.attrib.get_type,self.attrib.set_type,attr_data)
self.check(self.attrib.get_type,self.attrib.set_type,ntype)
self.check(self.attrib.get_value,self.attrib.set_value,value) self.check(self.attrib.get_value,self.attrib.set_value,value)
self.check(self.attrib.get_note,self.attrib.set_note,note) self.check(self.attrib.get_note,self.attrib.set_note,note)
self.check(self.attrib.get_note_format,self.attrib.set_note_format,format) self.check(self.attrib.get_note_format,self.attrib.set_note_format,format)

View File

@ -856,10 +856,10 @@ class EditPerson:
for (event_ref,event) in eref_list: for (event_ref,event) in eref_list:
if event.get_type()[0] == RelLib.Event.BIRTH: if event.get_type()[0] == RelLib.Event.BIRTH:
self.person.set_birth_ref(event_ref) self.person.set_birth_ref(event_ref)
self.event_box.data.remove(event_ref) self.event_box.data.remove((event_ref,event))
if event.get_type()[0] == RelLib.Event.DEATH: if event.get_type()[0] == RelLib.Event.DEATH:
self.person.set_death_ref(event_ref) self.person.set_death_ref(event_ref)
self.event_box.data.remove(event_ref) self.event_box.data.remove((event_ref,event))
eref_list = [event_ref for (event_ref,event) in self.event_box.data] eref_list = [event_ref for (event_ref,event) in self.event_box.data]
self.person.set_event_ref_list(eref_list) self.person.set_event_ref_list(eref_list)

View File

@ -164,8 +164,6 @@ class EventEditor:
# self.witnesslist, self, self.top, self.window, self.wlist, # self.witnesslist, self, self.top, self.window, self.wlist,
# add_witness, edit_witness, del_witness) # add_witness, edit_witness, del_witness)
#AutoComp.fill_combo(self.event_menu,self.elist)
if event: if event:
defval = event.get_type()[0] defval = event.get_type()[0]
else: else:

View File

@ -27,6 +27,7 @@
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import cPickle as pickle import cPickle as pickle
from sets import Set from sets import Set
import locale
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -56,10 +57,15 @@ import NameDisplay
import Utils import Utils
class ListBox: class ListBox:
"""
The ListBox manages the lists contained by the EditPerson dialog.
It manages the add, update, and delete buttons, along with the
handling of inline editing.
"""
def __init__(self, parent, person, obj, label, button_list, titles): def __init__(self, parent, person, obj, label, button_list, titles):
self.person = person self.person = person
self.name = NameDisplay.displayer.display(person)
self.label = label self.label = label
self.name = NameDisplay.displayer.display(self.person)
self.db = parent.db self.db = parent.db
self.parent = parent self.parent = parent
self.list_model = ListModel( self.list_model = ListModel(
@ -74,6 +80,14 @@ class ListBox:
self.tree.connect('key_press_event', self.keypress) self.tree.connect('key_press_event', self.keypress)
self.change_list = Set() self.change_list = Set()
def build_maps(self,custom,string_map):
self.name_map = {}
self.val_map = string_map
self.custom = custom
for key in self.val_map.keys():
val = self.val_map[key]
self.name_map[val] = key
def keypress(self,obj,event): def keypress(self,obj,event):
if event.keyval == 65379: if event.keyval == 65379:
print "insert" print "insert"
@ -163,8 +177,7 @@ class ReorderListBox(ListBox):
bits_per = 8; # we're going to pass a string bits_per = 8; # we're going to pass a string
pickled = pickle.dumps(node[0]); pickled = pickle.dumps(node[0]);
data = str((self.dnd_type.drag_type, self.person.get_handle(), data = str((self.dnd_type.drag_type, self.person.get_handle(), pickled));
pickled));
sel_data.set(sel_data.target, bits_per, data) sel_data.set(sel_data.target, bits_per, data)
def unpickle(self, data): def unpickle(self, data):
@ -196,7 +209,10 @@ class AttrListBox(ReorderListBox):
def __init__(self, parent, person, obj, label, button_list): def __init__(self, parent, person, obj, label, button_list):
attrlist = Utils.personal_attributes custom_str = Utils.personal_attributes[RelLib.Attribute.CUSTOM]
attrlist = filter(lambda x: x != custom_str,
Utils.personal_attributes.values())
attrlist.sort(locale.strcoll)
titles = [ titles = [
# Title Sort Col, Size, Type # Title Sort Col, Size, Type
@ -210,8 +226,15 @@ class AttrListBox(ReorderListBox):
ListBox.__init__(self, parent, person, obj, label, ListBox.__init__(self, parent, person, obj, label,
button_list, titles) button_list, titles)
self.build_maps(RelLib.Attribute.CUSTOM, Utils.personal_attributes)
def set_type(self,index,value): def set_type(self,index,value):
self.data[index].set_type(value) val = self.name_map.get(value,self.custom)
if val == self.custom:
self.data[index].set_type((val,value))
else:
self.data[index].set_type((val,self.val_map[val]))
self.change_list.add(self.data[index])
def set_value(self,index,value): def set_value(self,index,value):
self.data[index].set_value(value) self.data[index].set_value(value)
@ -233,8 +256,14 @@ class AttrListBox(ReorderListBox):
def display_data(self,attr): def display_data(self,attr):
has_note = attr.get_note() has_note = attr.get_note()
has_source = len(attr.get_source_references())> 0 has_source = len(attr.get_source_references())> 0
return [const.display_pattr(attr.get_type()), attr.get_value(),
has_source, has_note] etype = attr.get_type()
if etype[0] == RelLib.Attribute.CUSTOM:
name = etype[1]
else:
name = Utils.personal_attributes[etype[0]]
return [name, attr.get_value(), has_source, has_note]
class EventListBox(ReorderListBox): class EventListBox(ReorderListBox):
@ -255,11 +284,14 @@ class EventListBox(ReorderListBox):
self.data.append((event_ref, self.data.append((event_ref,
parent.db.get_event_from_handle(event_ref.ref))) parent.db.get_event_from_handle(event_ref.ref)))
eventnames = Utils.personal_events.values() custom_str = Utils.personal_events[RelLib.Attribute.CUSTOM]
eventnames = filter(lambda x: x != custom_str,
Utils.personal_events.values())
eventnames.sort(locale.strcoll)
evalues = [ evalues = [
# Title Sort Col Size, Type Argument # Title Sort Col Size, Type Argument
(_('Event'), NOSORT, 100, COMBO, eventnames, self.set_name), (_('Event'), NOSORT, 100, COMBO, eventnames, self.set_type),
(_('Description'), NOSORT, 140, TEXT, None, self.set_description), (_('Description'), NOSORT, 140, TEXT, None, self.set_description),
(_('Date'), NOSORT, 100, TEXT, None, self.set_date), (_('Date'), NOSORT, 100, TEXT, None, self.set_date),
(_('Place'), NOSORT, 100, TEXT, None, self.set_place), (_('Place'), NOSORT, 100, TEXT, None, self.set_place),
@ -270,13 +302,9 @@ class EventListBox(ReorderListBox):
ReorderListBox.__init__(self, parent, person, obj, label, ReorderListBox.__init__(self, parent, person, obj, label,
button_list, evalues, DdTargets.EVENT) button_list, evalues, DdTargets.EVENT)
self.name_map = {} self.build_maps(RelLib.Event.CUSTOM,Utils.personal_events)
self.val_map = Utils.personal_events
self.custom = RelLib.Event.CUSTOM
for key in self.val_map.keys():
self.name_map[self.val_map[key]] = key
def set_name(self,index,value): def set_type(self,index,value):
val = self.name_map.get(value,self.custom) val = self.name_map.get(value,self.custom)
if val == self.custom: if val == self.custom:
self.data[index][1].set_type((val,value)) self.data[index][1].set_type((val,value))
@ -327,8 +355,7 @@ class EventListBox(ReorderListBox):
name = etype[1] name = etype[1]
else: else:
name = Utils.personal_events[etype[0]] name = Utils.personal_events[etype[0]]
return [name, return [name, event.get_description(), event.get_date(),
event.get_description(), event.get_date(),
pname, has_source, has_note] pname, has_source, has_note]
def unpickle(self, data): def unpickle(self, data):
@ -366,11 +393,14 @@ class NameListBox(ReorderListBox):
def __init__(self,parent,person,obj,label,button_list): def __init__(self,parent,person,obj,label,button_list):
surnames = parent.db.get_surname_list() surnames = parent.db.get_surname_list()
types = Utils.name_types.values()
custom_str = Utils.name_types[RelLib.Name.CUSTOM]
types = filter(lambda x: x != custom_str, Utils.name_types.values())
types.sort(locale.strcoll)
titles = [ titles = [
# Title Sort Col Size, Type # Title Sort Col Size, Type
(_('Family Name'), NOSORT, 150, COMBO, surnames, self.set_name), (_('Family Name'), NOSORT, 180, COMBO, surnames, self.set_name),
(_('Prefix'), NOSORT, 50, TEXT, None, self.set_prefix), (_('Prefix'), NOSORT, 50, TEXT, None, self.set_prefix),
(_('Given Name'), NOSORT, 200, TEXT, None, self.set_given), (_('Given Name'), NOSORT, 200, TEXT, None, self.set_given),
(_('Suffix'), NOSORT, 50, TEXT, None, self.set_suffix), (_('Suffix'), NOSORT, 50, TEXT, None, self.set_suffix),
@ -383,6 +413,16 @@ class NameListBox(ReorderListBox):
ReorderListBox.__init__(self, parent, person, obj, label, ReorderListBox.__init__(self, parent, person, obj, label,
button_list, titles, DdTargets.NAME) button_list, titles, DdTargets.NAME)
self.build_maps(RelLib.Name.CUSTOM,Utils.name_types)
def set_type(self,index,value):
val = self.name_map.get(value,self.custom)
if val == self.custom:
self.data[index].set_type((val,value))
else:
self.data[index].set_type((val,self.val_map[val]))
self.change_list.add(self.data[index])
def set_name(self,index,value): def set_name(self,index,value):
self.data[index].set_surname(value) self.data[index].set_surname(value)
@ -395,9 +435,6 @@ class NameListBox(ReorderListBox):
def set_suffix(self,index,value): def set_suffix(self,index,value):
self.data[index].set_suffix(value) self.data[index].set_suffix(value)
def set_type(self,index,value):
self.data[index].set_type(value[1])
def add(self,obj): def add(self,obj):
NameEdit.NameEditor(self.parent, None, self.edit_callback, NameEdit.NameEditor(self.parent, None, self.edit_callback,
self.parent.window) self.parent.window)
@ -492,9 +529,8 @@ class UrlListBox(ReorderListBox):
(_('Path'), NOSORT, 250, TEXT, None, self.set_path), (_('Path'), NOSORT, 250, TEXT, None, self.set_path),
(_('Description'), NOSORT, 100, TEXT, None, self.set_description), (_('Description'), NOSORT, 100, TEXT, None, self.set_description),
] ]
self.data = person.get_url_list()[:] self.data = person.get_url_list()[:]
ReorderListBox.__init__(self, parent, person, obj, label, ReorderListBox.__init__(self, person, person, obj, label,
button_list, titles, DdTargets.URL) button_list, titles, DdTargets.URL)
def set_path(self,index,value): def set_path(self,index,value):

View File

@ -686,8 +686,8 @@ class PedigreeView:
def format_relation( self, family, line_count): def format_relation( self, family, line_count):
text = "" text = ""
for event_handle in family.get_event_list(): for event_ref in family.get_event_ref_list():
event = self.db.get_event_from_handle(event_handle) event = self.db.get_event_from_handle(event_ref.ref)
if event: if event:
if line_count < 3: if line_count < 3:
return event.get_date() return event.get_date()

View File

@ -1265,7 +1265,6 @@ class GrampsParser:
self.name.set_type("Birth Name") self.name.set_type("Birth Name")
self.person.set_primary_name (self.name) self.person.set_primary_name (self.name)
self.person.get_primary_name().build_sort_name() self.person.get_primary_name().build_sort_name()
print "*",self.person.primary_name.get_name()
self.name = None self.name = None
def stop_ref(self,tag): def stop_ref(self,tag):
@ -1305,7 +1304,6 @@ class GrampsParser:
def stop_person(self,*tag): def stop_person(self,*tag):
self.db.commit_person(self.person,self.trans,self.change) self.db.commit_person(self.person,self.trans,self.change)
print self.person.handle,self.person.primary_name.get_name()
self.person = None self.person = None
while gtk.events_pending(): while gtk.events_pending():
gtk.main_iteration() gtk.main_iteration()

View File

@ -3536,7 +3536,7 @@ class Attribute(PrivateSourceNote):
def set_type(self,val): def set_type(self,val):
"""sets the type (or key) of the Attribute instance""" """sets the type (or key) of the Attribute instance"""
assert type(the_type) == tuple assert type(val) == tuple
self.type = val self.type = val
def get_type(self): def get_type(self):