diff --git a/src/plugins/DefaultGramplets.py b/src/plugins/DefaultGramplets.py index 16e5416f7..44d5e3a83 100644 --- a/src/plugins/DefaultGramplets.py +++ b/src/plugins/DefaultGramplets.py @@ -32,6 +32,7 @@ from Utils import media_path_full import Config import DateHandler import gen.lib +import Errors from ReportBase import (CATEGORY_QR_PERSON, CATEGORY_QR_FAMILY, CATEGORY_QR_EVENT, CATEGORY_QR_SOURCE, @@ -1207,33 +1208,38 @@ class DataEntryGramplet(Gramplet): 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) + for items in [(0, _("Active person"), None, True, self.edit_person, False), + (1, _("Surname, Given"), None, False, None, True), + (2, _("Birth"), None, False, None, True), + (3, _("Death"), None, False, None, True) ]: - pos, text, default, readonly, callback = items - row = self.make_row(pos, text, default, readonly, callback) + pos, text, choices, readonly, callback, dirty = items + row = self.make_row(pos, text, choices, readonly, callback, dirty) rows.pack_start(row, False) - for items in [(4, _("Data Entry"), "", True), - (5, _("Surname, Given"), "", False), - (6, _("Birth"), "", False), - (7, _("Death"), "", False) + for items in [(4, _("Data Entry"), None, True), + (8, _("Add relation"), + ["Don't add"], + False), + (5, _("Surname, Given"), None, False), + (6, _("Birth"), None, False), + (7, _("Death"), None, False) ]: - pos, text, default, readonly = items - row = self.make_row(pos, text, default, readonly) + pos, text, choices, readonly = items + row = self.make_row(pos, text, choices, readonly) rows.pack_start(row, False) - # Mother, Father, Spouse (if sex known), Child of ... (if spouse) - + # Save, Abandon, Clear row = gtk.HBox() - button = gtk.Button(_("Save edits")) + button = gtk.Button(_("Save")) button.connect("clicked", self.save_data_entry) row.pack_start(button, True) - button = gtk.Button(_("Abanadon edits")) + button = gtk.Button(_("Abandon")) button.connect("clicked", self.abandon_data_entry) row.pack_start(button, True) + button = gtk.Button(_("Clear")) + button.connect("clicked", self.clear_data_entry) + row.pack_start(button, True) rows.pack_start(row, False) self.gui.get_container_widget().remove(self.gui.textview) @@ -1243,24 +1249,12 @@ class DataEntryGramplet(Gramplet): 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: + if active_person: # Fill in current pseron edits: name = name_displayer.display(active_person) - self.de_widgets[0].set_text("%s" % name) + self.de_widgets[0].set_text("%s " % name) self.de_widgets[0].set_use_markup(True) # Name: name_obj = active_person.get_primary_name() @@ -1268,8 +1262,7 @@ class DataEntryGramplet(Gramplet): 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 = ReportUtils.get_birth_or_fallback(self.dbstate.db, active_person) birth_text = "" if birth: sdate = DateHandler.get_date(birth) @@ -1283,8 +1276,7 @@ class DataEntryGramplet(Gramplet): self.de_widgets[2].set_text(birth_text) # Death: - death = ReportUtils.get_death_or_fallback(self.dbstate.db, - active_person) + death = ReportUtils.get_death_or_fallback(self.dbstate.db, active_person) death_text = "" if death: sdate = DateHandler.get_date(death) @@ -1295,10 +1287,28 @@ class DataEntryGramplet(Gramplet): place_text = place.get_title() if place_text: death_text += _("in") + " " + place_text - self.de_widgets[3].set_text(death_text) + + # Add options for adding: + + for i in range(10): + try: + self.de_widgets[8].remove_text(0) + except: + break + + for add_type in ["Don't add", + "Add as Mother", + "Add as Father", + "Add as Sibling", + "Add as Child"]: + self.de_widgets[8].append_text(add_type) + self.de_widgets[8].set_active(0) + + self.dirty = False - def make_row(self, pos, text,default="",readonly=False,callback=None): + def make_row(self, pos, text, choices=None, readonly=False, callback=None, + mark_dirty=False): import gtk # Data Entry: Active Person row = gtk.HBox() @@ -1311,14 +1321,27 @@ class DataEntryGramplet(Gramplet): 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) + row.pack_start(label, False) + row.pack_start(self.de_widgets[text], False) 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 choices == None: + self.de_widgets[text] = gtk.Entry() + label.set_alignment(1.0, 0.5) + if mark_dirty: + self.de_widgets[text].connect("changed", self.mark_dirty) + row.pack_start(label, False) + row.pack_start(self.de_widgets[text], True) + else: + eventBox = gtk.EventBox() + self.de_widgets[text] = gtk.combo_box_new_text() + eventBox.add(self.de_widgets[text]) + for add_type in choices: + self.de_widgets[text].append_text(add_type) + self.de_widgets[text].set_active(0) + row.pack_start(label, False) + row.pack_start(eventBox, True, True) if callback: icon = gtk.STOCK_EDIT size = gtk.ICON_SIZE_MENU @@ -1327,22 +1350,38 @@ class DataEntryGramplet(Gramplet): image.set_from_stock(icon, size) button.add(image) button.set_relief(gtk.RELIEF_NONE) + button.connect("clicked", callback) 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 mark_dirty(self, obj): + self.dirty = True + + def edit_callback(self, person): + self.dirty = False + self.update() + def edit_person(self, obj): from Editors import EditPerson - EditPerson(self.gui.dbstate, - self.gui.uistate, [], - self.gui.dbstate.get_active_person()) + try: + EditPerson(self.gui.dbstate, + self.gui.uistate, [], + self.gui.dbstate.get_active_person(), + callback=self.edit_callback) + except Errors.WindowActiveError: + pass def save_data_entry(self, obj): - pass + self.dirty = False + # FIXME: save entries to db + + def clear_data_entry(self, obj): + self.de_widgets[5].set_text("") + self.de_widgets[6].set_text("") + self.de_widgets[7].set_text("") def abandon_data_entry(self, obj): self.dirty = False