From 97b0b31fab566b5c9da30d5a5e03660f0776a453 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Sat, 4 Jun 2005 02:54:59 +0000 Subject: [PATCH] * src/AttrEdit.py: support get_type/set_type in dropdown menu * src/EditPerson.py: remove items properly based off EventRef svn: r4781 --- ChangeLog | 2 ++ src/AttrEdit.py | 34 +++++++++++-------- src/EditPerson.py | 4 +-- src/EventEdit.py | 2 -- src/ListBox.py | 84 +++++++++++++++++++++++++++++++++-------------- src/PedView.py | 4 +-- src/ReadXML.py | 2 -- src/RelLib.py | 2 +- 8 files changed, 88 insertions(+), 46 deletions(-) diff --git a/ChangeLog b/ChangeLog index c5f66f236..259712031 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,6 @@ 2005-06-03 Don Allingham + * 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/ListBox.py: get EventBox working for event types * src/PedView.py: handle event types diff --git a/src/AttrEdit.py b/src/AttrEdit.py index 1757855f8..268be9eb7 100644 --- a/src/AttrEdit.py +++ b/src/AttrEdit.py @@ -123,7 +123,14 @@ class AttributeEditor: l = self.top.get_widget("title") 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: 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 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()) 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() priv = self.priv.get_active() - if not attr in self.alist: - WarningDialog(_('New attribute type created'), - _('The "%s" attribute type has been added to this database.\n' - 'It will now appear in the attribute menus for this database') % attr) - self.alist.append(attr) + if (attr_data[0] == RelLib.Attribute.CUSTOM and + not attr_data[1] in self.alist): + WarningDialog( + _('New attribute type created'), + _('The "%s" attribute type has been added to this database.\n' + 'It will now appear in the attribute menus for this database') % attr_data[1]) + self.alist.append(attr_data[1]) self.alist.sort() if self.attrib == None: self.attrib = RelLib.Attribute() self.parent.alist.append(self.attrib) - 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.close(obj) @@ -236,10 +245,9 @@ class AttributeEditor: set(data) 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""" - ntype = const.save_pattr(attr) - self.check(self.attrib.get_type,self.attrib.set_type,ntype) + self.check(self.attrib.get_type,self.attrib.set_type,attr_data) 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_format,self.attrib.set_note_format,format) diff --git a/src/EditPerson.py b/src/EditPerson.py index c8d768c7e..238f79af0 100644 --- a/src/EditPerson.py +++ b/src/EditPerson.py @@ -856,10 +856,10 @@ class EditPerson: for (event_ref,event) in eref_list: if event.get_type()[0] == RelLib.Event.BIRTH: 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: 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] self.person.set_event_ref_list(eref_list) diff --git a/src/EventEdit.py b/src/EventEdit.py index 6c2b0ced7..bbd6184a8 100644 --- a/src/EventEdit.py +++ b/src/EventEdit.py @@ -164,8 +164,6 @@ class EventEditor: # self.witnesslist, self, self.top, self.window, self.wlist, # add_witness, edit_witness, del_witness) - #AutoComp.fill_combo(self.event_menu,self.elist) - if event: defval = event.get_type()[0] else: diff --git a/src/ListBox.py b/src/ListBox.py index 04ada147f..dc3d7f39c 100644 --- a/src/ListBox.py +++ b/src/ListBox.py @@ -27,6 +27,7 @@ #------------------------------------------------------------------------- import cPickle as pickle from sets import Set +import locale #------------------------------------------------------------------------- # @@ -56,10 +57,15 @@ import NameDisplay import Utils 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): self.person = person + self.name = NameDisplay.displayer.display(person) self.label = label - self.name = NameDisplay.displayer.display(self.person) self.db = parent.db self.parent = parent self.list_model = ListModel( @@ -74,6 +80,14 @@ class ListBox: self.tree.connect('key_press_event', self.keypress) 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): if event.keyval == 65379: print "insert" @@ -163,8 +177,7 @@ class ReorderListBox(ListBox): bits_per = 8; # we're going to pass a string pickled = pickle.dumps(node[0]); - data = str((self.dnd_type.drag_type, self.person.get_handle(), - pickled)); + data = str((self.dnd_type.drag_type, self.person.get_handle(), pickled)); sel_data.set(sel_data.target, bits_per, data) def unpickle(self, data): @@ -196,7 +209,10 @@ class AttrListBox(ReorderListBox): 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 = [ # Title Sort Col, Size, Type @@ -210,8 +226,15 @@ class AttrListBox(ReorderListBox): ListBox.__init__(self, parent, person, obj, label, button_list, titles) + self.build_maps(RelLib.Attribute.CUSTOM, Utils.personal_attributes) + 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): self.data[index].set_value(value) @@ -233,8 +256,14 @@ class AttrListBox(ReorderListBox): def display_data(self,attr): has_note = attr.get_note() 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): @@ -255,11 +284,14 @@ class EventListBox(ReorderListBox): self.data.append((event_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 = [ # 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), (_('Date'), NOSORT, 100, TEXT, None, self.set_date), (_('Place'), NOSORT, 100, TEXT, None, self.set_place), @@ -270,13 +302,9 @@ class EventListBox(ReorderListBox): ReorderListBox.__init__(self, parent, person, obj, label, button_list, evalues, DdTargets.EVENT) - self.name_map = {} - 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 + self.build_maps(RelLib.Event.CUSTOM,Utils.personal_events) - def set_name(self,index,value): + def set_type(self,index,value): val = self.name_map.get(value,self.custom) if val == self.custom: self.data[index][1].set_type((val,value)) @@ -327,8 +355,7 @@ class EventListBox(ReorderListBox): name = etype[1] else: name = Utils.personal_events[etype[0]] - return [name, - event.get_description(), event.get_date(), + return [name, event.get_description(), event.get_date(), pname, has_source, has_note] def unpickle(self, data): @@ -366,11 +393,14 @@ class NameListBox(ReorderListBox): def __init__(self,parent,person,obj,label,button_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 = [ # 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), (_('Given Name'), NOSORT, 200, TEXT, None, self.set_given), (_('Suffix'), NOSORT, 50, TEXT, None, self.set_suffix), @@ -383,6 +413,16 @@ class NameListBox(ReorderListBox): ReorderListBox.__init__(self, parent, person, obj, label, 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): self.data[index].set_surname(value) @@ -395,9 +435,6 @@ class NameListBox(ReorderListBox): def set_suffix(self,index,value): self.data[index].set_suffix(value) - def set_type(self,index,value): - self.data[index].set_type(value[1]) - def add(self,obj): NameEdit.NameEditor(self.parent, None, self.edit_callback, self.parent.window) @@ -492,9 +529,8 @@ class UrlListBox(ReorderListBox): (_('Path'), NOSORT, 250, TEXT, None, self.set_path), (_('Description'), NOSORT, 100, TEXT, None, self.set_description), ] - 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) def set_path(self,index,value): diff --git a/src/PedView.py b/src/PedView.py index 87d8bd21c..055a911f3 100644 --- a/src/PedView.py +++ b/src/PedView.py @@ -686,8 +686,8 @@ class PedigreeView: def format_relation( self, family, line_count): text = "" - for event_handle in family.get_event_list(): - event = self.db.get_event_from_handle(event_handle) + for event_ref in family.get_event_ref_list(): + event = self.db.get_event_from_handle(event_ref.ref) if event: if line_count < 3: return event.get_date() diff --git a/src/ReadXML.py b/src/ReadXML.py index 092273272..9bdfea860 100644 --- a/src/ReadXML.py +++ b/src/ReadXML.py @@ -1265,7 +1265,6 @@ class GrampsParser: self.name.set_type("Birth Name") self.person.set_primary_name (self.name) self.person.get_primary_name().build_sort_name() - print "*",self.person.primary_name.get_name() self.name = None def stop_ref(self,tag): @@ -1305,7 +1304,6 @@ class GrampsParser: def stop_person(self,*tag): self.db.commit_person(self.person,self.trans,self.change) - print self.person.handle,self.person.primary_name.get_name() self.person = None while gtk.events_pending(): gtk.main_iteration() diff --git a/src/RelLib.py b/src/RelLib.py index e130419d8..5f31fe961 100644 --- a/src/RelLib.py +++ b/src/RelLib.py @@ -3536,7 +3536,7 @@ class Attribute(PrivateSourceNote): def set_type(self,val): """sets the type (or key) of the Attribute instance""" - assert type(the_type) == tuple + assert type(val) == tuple self.type = val def get_type(self):