diff --git a/src/Date.py b/src/Date.py index 695755fc2..f5c89fcbd 100644 --- a/src/Date.py +++ b/src/Date.py @@ -257,7 +257,9 @@ class Date: else: d1 = func(self.start) d2 = func(self.stop) - return "%s %s %s %s" % ( _("from"),d1,_("to"),d2 ) + return _("from %(start_date)s to %(stop_date)s") % { + 'start_date' : d1, + 'stop_date' : d2 } def getDate(self): return self.get_fmt(SingleDate.getDate) @@ -283,7 +285,9 @@ class Date: else: d1 = _func(self.start) d2 = _func(self.stop) - return "%s %s %s %s" % ( _("from"),d1,_("to"), d2) + return _("from %(start_date)s to %(stop_date)s") % { + 'start_date' : d1, + 'stop_date' : d2 } def get_quote_date(self,month_map,cal_str): if self.range == 0: @@ -296,11 +300,14 @@ class Date: else: d1 = self.start.display_calendar(month_map) d2 = self.stop.display_calendar(month_map) - return "%s %s %s %s (%s)" % ( _("from"),d1,_("to"), d2,cal_str) + return _("from %(start_date)s to %(stop_date)s (%(calendar)s)") % { + 'start_date' : d1, + 'stop_data' :d2, + 'calendar' : cal_str} def isEmpty(self): s = self.start - return s.year==UNDEF and s.month==UNDEF and s.day==UNDEF + return s.year==UNDEF and s.month==UNDEF and s.day==UNDEF and not s.text def isValid(self): return self.range != -1 diff --git a/src/ListModel.py b/src/ListModel.py index 2f734dd26..536a4a788 100644 --- a/src/ListModel.py +++ b/src/ListModel.py @@ -33,7 +33,7 @@ class ListModel: self.new_model() self.selection = self.tree.get_selection() self.selection.set_mode(mode) - + self.mode = mode self.data_index = l self.cids = [] @@ -87,6 +87,21 @@ class ListModel: def get_selected(self): return self.selection.get_selected() + def get_selected_objects(self): + if self.mode == gtk.SELECTION_SINGLE: + store,iter = self.selection.get_selected() + if iter: + return [self.model.get_value(iter,self.data_index)] + else: + return [] + else: + mlist = [] + self.selection.selected_foreach(self.blist,mlist) + return mlist + + def blist(self,store,path,iter,list): + list.append(self.model.get_value(iter,self.data_index)) + def clear(self): self.model.clear() @@ -112,6 +127,7 @@ class ListModel: self.model.set_value(iter,col,info) if select: self.selection.select_iter(iter) + return iter def add_and_select(self,data,info=None): iter = self.model.append() diff --git a/src/gramps_main.py b/src/gramps_main.py index 48d6e6e1a..daa329281 100755 --- a/src/gramps_main.py +++ b/src/gramps_main.py @@ -81,9 +81,16 @@ try: except: zodb_ok = 0 -pl_titles = [ (_('Name'),5,250), (_('ID'),1,50), - (_('Gender'),2,70), (_('Birth Date'),6,150), - (_('Death Date'),7,150), ('',5,0), ('',6,0), ('',7,0) ] +#------------------------------------------------------------------------- +# +# Constants +# +#------------------------------------------------------------------------- +pl_titles = [ (_('Name'),5,250), (_('ID'),1,50),(_('Gender'),2,70), + (_('Birth Date'),6,150),(_('Death Date'),7,150), ('',5,0), + ('',6,0), ('',7,0) ] + +_sel_mode = gtk.SELECTION_MULTIPLE #------------------------------------------------------------------------- # @@ -174,13 +181,15 @@ class Gramps: 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, pl_titles, self.row_changed, - self.alpha_event, gtk.SELECTION_MULTIPLE), + self.alpha_event, _sel_mode), ] + self.person_tree = self.pl_page[0] self.person_list = self.pl_page[0].tree - self.person_selection = self.pl_page[0].selection self.person_model = self.pl_page[0].model self.default_list = self.pl_page[-1] @@ -188,7 +197,6 @@ class Gramps: self.alpha_page = {} self.model2page = {} self.tab_list = [] - self.filter_list = self.gtop.get_widget("filter_list") self.notebook = self.gtop.get_widget("notebook1") @@ -309,8 +317,8 @@ class Gramps: "use at your own risk.") def change_alpha_page(self,obj,junk,page): + self.person_tree = self.pl_page[page] self.person_list = self.pl_page[page].tree - self.person_selection = self.pl_page[page].selection self.person_model = self.pl_page[page].model def edit_button_clicked(self,obj): @@ -352,10 +360,9 @@ class Gramps: self.editbtn.set_sensitive(val) def row_changed(self,obj): - mlist = [] - self.person_selection.selected_foreach(self.blist,mlist) + mlist = self.person_tree.get_selected_objects() if mlist: - self.change_active_person(mlist[0]) + self.change_active_person(self.db.getPerson(mlist[0])) def on_show_plugin_status(self,obj): Plugins.PluginStatus() @@ -458,24 +465,21 @@ class Gramps: import gnome.url gnome.url.show("http://sourceforge.net/tracker/?group_id=25770&atid=385137") - def blist(self,store,path,iter,list): - id = self.db.getPerson(store.get_value(iter,1)) - list.append(id) - def on_merge_activate(self,obj): """Calls up the merge dialog for the selection""" page = self.notebook.get_current_page() if page == 0: - mlist = [] - self.person_selection.selected_foreach(self.blist,mlist) + mlist = self.person_tree.get_selected_objects() if len(mlist) != 2: msg = _("Exactly two people must be selected to perform a merge") ErrorDialog(msg) else: import MergeData - MergeData.MergePeople(self.db,mlist[0],mlist[1],self.merge_update, + p1 = self.db.getPerson(mlist[0]) + p2 = self.db.getPerson(mlist[2]) + MergeData.MergePeople(self.db,p1,p2,self.merge_update, self.update_after_edit) elif page == 4: self.place_view.merge() @@ -561,8 +565,15 @@ class Gramps: for i in range(0,len(self.tab_list)): self.ptabs.remove_page(0) + self.ptabs.set_show_tabs(0) self.tab_list = [] - + self.alpha_page = {} + self.model2page = {} + + self.person_tree = self.pl_page[-1] + self.person_list = self.pl_page[-1].tree + self.person_model = self.pl_page[-1].model + if zodb == 1: self.db = GrampsZODB() elif zodb == 2: @@ -794,8 +805,7 @@ class Gramps: except (IOError,OSError),msg: self.status_text("%s - %s" % (_("autosave failed"),msg)) except: - import traceback - traceback.print_exc() + DisplayTrace.DisplayTrace() return 0 def load_selected_people(self,obj): @@ -815,9 +825,11 @@ class Gramps: DisplayTrace.DisplayTrace() def delete_person_clicked(self,obj): - sel = self.person_selection.get_selected() - if sel: - name = GrampsCfg.nameof(self.active_person) + mlist = self.person_tree.get_selected_objects() + + for sel in mlist: + p = self.db.getPerson(sel) + name = GrampsCfg.nameof(p) msg = _("Do you really wish to delete %s?") % name QuestionDialog(_('Delete Person'), msg, self.delete_person_response) @@ -858,7 +870,7 @@ class Gramps: if self.id2col.has_key(del_id): (model,iter,page) = self.id2col[del_id] - model.model.remove(iter) + model.remove(iter) del self.id2col[del_id] if person == self.active_person: @@ -1176,13 +1188,12 @@ class Gramps: else: model = self.default_list - iter = model.model.append() + iter = model.add([val[0],val[1],val[2],val[3],val[4],val[5], + val[6],val[7]],key) + page = self.model2page[model] self.id2col[key] = (model,iter) - model.model.set(iter, 0, val[0], 1, val[1], 2, val[2], - 3, val[3], 4, val[4], 5, val[5], - 6, val[6], 7, val[7]) if change: self.change_active_person(person) self.goto_active_person() @@ -1239,7 +1250,7 @@ class Gramps: res = self.db.getResearcher() owner = GrampsCfg.get_researcher() - if res.getName() == "" and owner.getName() != "": + if res.getName() == "" and owner.getName(): self.db.setResearcher(owner) Utils.modified() @@ -1349,13 +1360,10 @@ class Gramps: else: model = self.default_list - iter = model.model.append() + iter = model.add([val[0],val[1],val[2],val[3],val[4],val[5], + val[6],val[7]],key) page = self.model2page[model] self.id2col[key] = (model,iter) - - model.model.set(iter, 0, val[0], 1, val[1], 2, val[2], - 3, val[3], 4, val[4], 5, val[5], - 6, val[6], 7, val[7]) else: if self.id2col.has_key(key): (model,iter) = self.id2col[key] @@ -1371,17 +1379,20 @@ class Gramps: display.add_with_viewport(tree) display.show() model = ListModel.ListModel(tree,pl_titles,self.row_changed, - self.alpha_event,gtk.SELECTION_MULTIPLE) - self.pl_page.append(model) + self.alpha_event,_sel_mode) self.alpha_page[pg] = model for index in range(0,len(self.tab_list)): 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 else: 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]] diff --git a/src/plugins/WriteGedcom.py b/src/plugins/WriteGedcom.py index d52b0417f..6f76e7179 100644 --- a/src/plugins/WriteGedcom.py +++ b/src/plugins/WriteGedcom.py @@ -67,6 +67,12 @@ _calmap = { Date.JULIAN : (_month, '@#JULIAN@'), } +_caldef = { + Date.SingleDate.about : "ABT", + Date.SingleDate.about : "BEF", + Date.SingleDate.about : "AFT", + } + #------------------------------------------------------------------------- # # @@ -170,7 +176,7 @@ def sortById(first,second): # # #------------------------------------------------------------------------- -def make_date(subdate,mmap): +def make_date(subdate): retval = "" day = subdate.getDay() mon = subdate.getMonth() @@ -180,35 +186,42 @@ def make_date(subdate,mmap): mon_valid = subdate.getMonthValid() year_valid = subdate.getYearValid() + if _calmap.has_key(subdate.calendar): + (mmap,prefix) = _calmap[subdate.calendar] + else: + mmap = _month + prefix = "" + if not day_valid: try: if not mon_valid: - retval = str(year) + retval = '(%d)' % year elif not year_valid: - retval = mmap[mon] + retval = '(%s)' % mmap[mon] else: - retval = "%s %d" % (mmap[mon],year) + retval = "(%s %d)" % (mmap[mon],year) except IndexError: print "Month index error - %d" % mon - retval = str(year) + retval = '(%d)' % year elif not mon_valid: - retval = str(year) + retval = '(%d)' % year else: try: month = mmap[mon] if not year_valid: - retval = "%d %s ????" % (day,month) + retval = "(%d %s)" % (day,month) else: retval = "%d %s %d" % (day,month,year) except IndexError: print "Month index error - %d" % mon retval = str(year) - if mode == Date.SingleDate.about: - retval = "ABT %s" % retval - elif mode == Date.SingleDate.before: - retval = "BEF %s" % retval - elif mode == Date.SingleDate.after: - retval = "AFT %s" % retval + + if prefix: + retval = "%s %s" % (prefix, retval) + + if _caldef.has_key(mode): + retval = "%s %s" % (_caldef[mode],retval) + return retval def fmtline(text,limit,level): @@ -861,34 +874,13 @@ class GedcomWriter: val = date.getText() if val != "": self.g.write("%s %s\n" % (prefix,self.cnvtxt(val))) - elif date.get_calendar() == Date.GREGORIAN: + else: if date.isRange(): - val = "FROM %s TO %s" % (make_date(start,_month), - make_date(date.get_stop_date(),_month)) + val = "FROM %s TO %s" % (make_date(start), + make_date(date.get_stop_date())) else: val = make_date(start,_month) self.g.write("%s %s\n" % (prefix,val)) - else: - if self.cal == CALENDAR_YES: - (mlist,cal) = _calmap[date.get_calendar()] - if date.isRange(): - stop = date.get_stop_date() - val = "FROM %s TO %s" % (make_date(start,mlist), - make_date(stop,mlist)) - else: - val = make_date(start,mlist) - self.g.write("%s %s %s\n" % (prefix,cal,val)) - else: - mydate = Date.Date(date) - mydate.set_calendar(Date.GREGORIAN) - start = mydate.get_start_date() - if mydate.isRange(): - stop = mydate.get_stop_date() - val = "FROM %s TO %s" % (make_date(start,_month), - make_date(stop,_month)) - else: - val = make_date(start,_month) - self.g.write("%s %s\n" % (prefix,val)) def write_person_name(self,name,nick): firstName = self.cnvtxt(name.getFirstName())