diff --git a/src/plugins/DefaultGramplets.py b/src/plugins/DefaultGramplets.py index 7dc11af2f..16e5416f7 100644 --- a/src/plugins/DefaultGramplets.py +++ b/src/plugins/DefaultGramplets.py @@ -1200,6 +1200,169 @@ class QuickViewGramplet(Gramplet): #(title, category, name, status) list_option.add_item(item[2], item[0]) +class DataEntryGramplet(Gramplet): + def init(self): + import gtk + rows = gtk.VBox() + self.dirty = False + self.dirty_person = None + self.de_widgets = {} + for items in [(0, _("Active person"), "", True, self.edit_person), + (1, _("Surname, Given"), "", False, None), + (2, _("Birth"), "", False, None), + (3, _("Death"), "", False, None) + ]: + pos, text, default, readonly, callback = items + row = self.make_row(pos, text, default, readonly, callback) + rows.pack_start(row, False) + + for items in [(4, _("Data Entry"), "", True), + (5, _("Surname, Given"), "", False), + (6, _("Birth"), "", False), + (7, _("Death"), "", False) + ]: + pos, text, default, readonly = items + row = self.make_row(pos, text, default, readonly) + rows.pack_start(row, False) + + # Mother, Father, Spouse (if sex known), Child of ... (if spouse) + + row = gtk.HBox() + button = gtk.Button(_("Save edits")) + button.connect("clicked", self.save_data_entry) + row.pack_start(button, True) + button = gtk.Button(_("Abanadon edits")) + button.connect("clicked", self.abandon_data_entry) + row.pack_start(button, True) + rows.pack_start(row, False) + + self.gui.get_container_widget().remove(self.gui.textview) + self.gui.get_container_widget().add_with_viewport(rows) + rows.show_all() + + def main(self): # return false finishes + if self.dirty: + return + # Clear out abandoned entry data: + self.de_widgets[4].set_text("") + self.de_widgets[5].set_text("") + self.de_widgets[6].set_text("") + active_person = self.dbstate.get_active_person() + self.dirty_person = active_person + if not active_person: + # Clear out current person edits: + name = _("None") + self.de_widgets[0].set_text("%s" % name) + self.de_widgets[0].set_use_markup(True) + self.de_widgets[1].set_text("") + self.de_widgets[2].set_text("") + self.de_widgets[3].set_text("") + else: + # Fill in current pseron edits: + name = name_displayer.display(active_person) + self.de_widgets[0].set_text("%s" % name) + self.de_widgets[0].set_use_markup(True) + # Name: + name_obj = active_person.get_primary_name() + if name_obj: + self.de_widgets[1].set_text("%s, %s" % + (name_obj.get_surname(), name_obj.get_first_name())) + # Birth: + birth = ReportUtils.get_birth_or_fallback(self.dbstate.db, + active_person) + birth_text = "" + if birth: + sdate = DateHandler.get_date(birth) + birth_text += sdate + " " + place_handle = birth.get_place_handle() + if place_handle: + place = self.dbstate.db.get_place_from_handle(place_handle) + place_text = place.get_title() + if place_text: + birth_text += _("in") + " " + place_text + + self.de_widgets[2].set_text(birth_text) + # Death: + death = ReportUtils.get_death_or_fallback(self.dbstate.db, + active_person) + death_text = "" + if death: + sdate = DateHandler.get_date(death) + death_text += sdate + " " + place_handle = death.get_place_handle() + if place_handle: + place = self.dbstate.db.get_place_from_handle(place_handle) + place_text = place.get_title() + if place_text: + death_text += _("in") + " " + place_text + + self.de_widgets[3].set_text(death_text) + + def make_row(self, pos, text,default="",readonly=False,callback=None): + import gtk + # Data Entry: Active Person + row = gtk.HBox() + label = gtk.Label() + if readonly: + label.set_text("%s" % text) + label.set_width_chars(15) + label.set_use_markup(True) + self.de_widgets[text] = gtk.Label() + self.de_widgets[text].set_alignment(0.0, 0.5) + self.de_widgets[text].set_use_markup(True) + label.set_alignment(0.0, 0.5) + else: + label.set_text("%s: " % text) + label.set_width_chars(15) + self.de_widgets[text] = gtk.Entry() + label.set_alignment(1.0, 0.5) + if default != "": + self.de_widgets[text].set_text(default) + row.pack_start(label, False) + if callback: + icon = gtk.STOCK_EDIT + size = gtk.ICON_SIZE_MENU + button = gtk.Button() + image = gtk.Image() + image.set_from_stock(icon, size) + button.add(image) + button.set_relief(gtk.RELIEF_NONE) + button.show_all() + row.pack_start(button, False) + button.connect("clicked", callback) + row.pack_start(self.de_widgets[text], True) + # make accessible by name or position: + self.de_widgets[pos] = self.de_widgets[text] + return row + + def edit_person(self, obj): + from Editors import EditPerson + EditPerson(self.gui.dbstate, + self.gui.uistate, [], + self.gui.dbstate.get_active_person()) + + def save_data_entry(self, obj): + pass + + def abandon_data_entry(self, obj): + self.dirty = False + self.update() + + def db_changed(self): + """ + If person or family changes, the relatives of active person might have + changed + """ + self.dbstate.db.connect('person-add', self.update) + self.dbstate.db.connect('person-delete', self.update) + self.dbstate.db.connect('family-add', self.update) + self.dbstate.db.connect('family-delete', self.update) + self.dbstate.db.connect('person-rebuild', self.update) + self.dbstate.db.connect('family-rebuild', self.update) + + def active_changed(self, handle): + self.update() + register(type="gramplet", name= "Top Surnames Gramplet", tname=_("Top Surnames Gramplet"), @@ -1336,3 +1499,14 @@ register(type="gramplet", detached_height = 400, ) +register(type="gramplet", + name="Data Entry Gramplet", + tname=_("Data Entry Gramplet"), + height=300, + expand=True, + content = DataEntryGramplet, + title=_("Data Entry"), + detached_width = 600, + detached_height = 400, + ) +