|
60 | 60 | from gramps.gen.display.place import displayer as place_displayer
|
61 | 61 | from gramps.gen.errors import WindowActiveError
|
62 | 62 | from gramps.gen.lib import (Person, Family, ChildRef, Name, Surname,
|
63 |
| - ChildRefType, EventType, EventRoleType) |
| 63 | + ChildRefType, Event, EventRef, EventType, EventRoleType) |
64 | 64 | from gramps.gen.utils.alive import probably_alive
|
65 | 65 | from gramps.gen.utils.callback import Callback
|
66 | 66 | from gramps.gen.utils.db import (get_birth_or_fallback, get_death_or_fallback,
|
|
73 | 73 | from gramps.gui.dialog import (OptionDialog, ErrorDialog, QuestionDialog2,
|
74 | 74 | WarningDialog)
|
75 | 75 | from gramps.gui.display import display_url
|
76 |
| -from gramps.gui.editors import EditPerson, EditFamily, EditTagList |
| 76 | +from gramps.gui.editors import EditPerson, EditFamily, EditTagList, EditEventRef |
77 | 77 | from gramps.gui.utils import (color_graph_box, color_graph_family,
|
78 | 78 | rgb_to_hex, hex_to_rgb_float,
|
79 | 79 | process_pending_events)
|
@@ -152,6 +152,7 @@ class GraphView(NavigationView):
|
152 | 152 | # default settings in the config file
|
153 | 153 | CONFIGSETTINGS = (
|
154 | 154 | ('interface.graphview-show-images', True),
|
| 155 | + ('interface.graphview-show-ID', True), |
155 | 156 | ('interface.graphview-show-avatars', True),
|
156 | 157 | ('interface.graphview-avatars-style', 1),
|
157 | 158 | ('interface.graphview-avatars-male', ''), # custom avatar
|
@@ -186,6 +187,7 @@ def __init__(self, pdata, dbstate, uistate, nav_group=0):
|
186 | 187 | PersonBookmarks, nav_group)
|
187 | 188 |
|
188 | 189 | self.show_images = self._config.get('interface.graphview-show-images')
|
| 190 | + self.show_ID = self._config.get('interface.graphview-show-ID') |
189 | 191 | self.show_full_dates = self._config.get(
|
190 | 192 | 'interface.graphview-show-full-dates')
|
191 | 193 | self.show_places = self._config.get('interface.graphview-show-places')
|
@@ -421,6 +423,13 @@ def cb_update_show_images(self, _client, _cnxn_id, entry, _data):
|
421 | 423 | self.show_images = entry == 'True'
|
422 | 424 | self.graph_widget.populate(self.get_active())
|
423 | 425 |
|
| 426 | + def cb_update_show_ID(self, _client, _cnxn_id, entry, _data): |
| 427 | + """ |
| 428 | + Called when the configuration menu changes the ID setting. |
| 429 | + """ |
| 430 | + self.show_ID = entry == 'True' |
| 431 | + self.graph_widget.populate(self.get_active()) |
| 432 | + |
424 | 433 | def cb_update_show_avatars(self, _client, _cnxn_id, entry, _data):
|
425 | 434 | """
|
426 | 435 | Called when the configuration menu changes the avatars setting.
|
@@ -637,6 +646,8 @@ def config_connect(self):
|
637 | 646 | """
|
638 | 647 | self._config.connect('interface.graphview-show-images',
|
639 | 648 | self.cb_update_show_images)
|
| 649 | + self._config.connect('interface.graphview-show-ID', |
| 650 | + self.cb_update_show_ID) |
640 | 651 | self._config.connect('interface.graphview-show-avatars',
|
641 | 652 | self.cb_update_show_avatars)
|
642 | 653 | self._config.connect('interface.graphview-avatars-style',
|
@@ -712,6 +723,9 @@ def layout_config_panel(self, configdialog):
|
712 | 723 | configdialog.add_checkbox(
|
713 | 724 | grid, _('Show images'), row, 'interface.graphview-show-images')
|
714 | 725 | row += 1
|
| 726 | + configdialog.add_checkbox( |
| 727 | + grid, _('Show IDs'), row, 'interface.graphview-show-ID') |
| 728 | + row += 1 |
715 | 729 | configdialog.add_checkbox(
|
716 | 730 | grid, _('Show avatars'), row, 'interface.graphview-show-avatars')
|
717 | 731 | row += 1
|
@@ -2308,6 +2322,8 @@ def init_dot(self):
|
2308 | 2322 |
|
2309 | 2323 | self.show_images = self.view._config.get(
|
2310 | 2324 | 'interface.graphview-show-images')
|
| 2325 | + self.show_ID = self.view._config.get( |
| 2326 | + 'interface.graphview-show-ID') |
2311 | 2327 | self.show_avatars = self.view._config.get(
|
2312 | 2328 | 'interface.graphview-show-avatars')
|
2313 | 2329 | self.show_full_dates = self.view._config.get(
|
@@ -3057,6 +3073,8 @@ def get_person_label(self, person):
|
3057 | 3073 | name = displayer.display_name(person.get_primary_name())
|
3058 | 3074 | # name string should not be empty
|
3059 | 3075 | name = escape(name) if name else ' '
|
| 3076 | + if self.show_ID: |
| 3077 | + name += " (%s)" % person.get_gramps_id() |
3060 | 3078 |
|
3061 | 3079 | # birth, death is a lists [date, place]
|
3062 | 3080 | birth, death = self.get_date_strings(person)
|
@@ -3783,6 +3801,28 @@ def person_menu(self, handle):
|
3783 | 3801 |
|
3784 | 3802 | self.add_separator()
|
3785 | 3803 |
|
| 3804 | + # build events submenu |
| 3805 | + if len(person.get_event_ref_list()) != 0: |
| 3806 | + iteme, evt_menu = self.add_submenu(label=_("Events")) |
| 3807 | + else: |
| 3808 | + iteme = self.add_menuitem(self, _("No Events for this person"), self.menu_no_action) |
| 3809 | + |
| 3810 | + nbe = 0 |
| 3811 | + for event_ref in person.get_event_ref_list(): |
| 3812 | + if not event_ref: |
| 3813 | + continue |
| 3814 | + nbe += 1 |
| 3815 | + event = self.dbstate.db.get_event_from_handle(event_ref.ref) |
| 3816 | + role = _(event_ref.get_role().xml_str()) |
| 3817 | + etype = _(event.get_type().xml_str()) |
| 3818 | + |
| 3819 | + # text = displayer.display(person) |
| 3820 | + if event_ref.get_role() != EventRoleType.PRIMARY: |
| 3821 | + etype += " (" + role + ") " |
| 3822 | + self.add_menuitem(evt_menu, etype, |
| 3823 | + self.actions.edit_person_event, |
| 3824 | + person.get_gramps_id(), event, event_ref) |
| 3825 | + |
3786 | 3826 | # build tag submenu
|
3787 | 3827 | item, tag_menu = self.add_submenu(label=_("Tags"))
|
3788 | 3828 |
|
@@ -4047,6 +4087,28 @@ def family_menu(self, handle):
|
4047 | 4087 |
|
4048 | 4088 | self.add_separator()
|
4049 | 4089 |
|
| 4090 | + # build events submenu |
| 4091 | + if len(family.get_event_ref_list()) != 0: |
| 4092 | + iteme, evt_menu = self.add_submenu(label=_("Events")) |
| 4093 | + else: |
| 4094 | + iteme = self.add_menuitem(self, _("No Events for this family"), self.menu_no_action) |
| 4095 | + |
| 4096 | + nbe = 0 |
| 4097 | + for event_ref in family.get_event_ref_list(): |
| 4098 | + if not event_ref: |
| 4099 | + continue |
| 4100 | + nbe += 1 |
| 4101 | + event = self.dbstate.db.get_event_from_handle(event_ref.ref) |
| 4102 | + role = _(event_ref.get_role().xml_str()) |
| 4103 | + etype = _(event.get_type().xml_str()) |
| 4104 | + |
| 4105 | + # text = displayer.display(person) |
| 4106 | + if event_ref.get_role() != EventRoleType.FAMILY: |
| 4107 | + etype += " (" + role + ") " |
| 4108 | + self.add_menuitem(evt_menu, etype, |
| 4109 | + self.actions.edit_family_event, |
| 4110 | + family.get_gramps_id(), event, event_ref) |
| 4111 | + |
4050 | 4112 | # build tag submenu
|
4051 | 4113 | _item, tag_menu = self.add_submenu(label=_("Tags"))
|
4052 | 4114 |
|
@@ -4161,6 +4223,12 @@ def add_submenu(self, label):
|
4161 | 4223 | submenu.set_reserve_toggle_size(False)
|
4162 | 4224 | return item, submenu
|
4163 | 4225 |
|
| 4226 | + def menu_no_action(self, *args): |
| 4227 | + """ |
| 4228 | + Do nothing |
| 4229 | + """ |
| 4230 | + return True |
| 4231 | + |
4164 | 4232 | def add_separator(self, menu=None):
|
4165 | 4233 | """
|
4166 | 4234 | Adds separator to menu.
|
@@ -4313,6 +4381,27 @@ def edit_family(self, obj, family_handle=None):
|
4313 | 4381 | if m_handle:
|
4314 | 4382 | self.emit('focus-person-changed', (m_handle, ))
|
4315 | 4383 |
|
| 4384 | + def edit_family_event(self, obj, family_id, event, evt_ref): |
| 4385 | + """ |
| 4386 | + Edit the events for this family |
| 4387 | + """ |
| 4388 | + try: |
| 4389 | + EditEventRef(self.dbstate, self.uistate, [], event, evt_ref, self.obj_added) |
| 4390 | + except WindowActiveError: |
| 4391 | + pass |
| 4392 | + |
| 4393 | + def edit_person_event(self, obj, person_id, event, evt_ref): |
| 4394 | + """ |
| 4395 | + Edit the events for this person |
| 4396 | + """ |
| 4397 | + try: |
| 4398 | + EditEventRef(self.dbstate, self.uistate, [], event, evt_ref, self.obj_added) |
| 4399 | + except WindowActiveError: |
| 4400 | + pass |
| 4401 | + |
| 4402 | + def obj_added(self, reference, primary): |
| 4403 | + reference.ref = primary.handle |
| 4404 | + |
4316 | 4405 | def copy_person_to_clipboard(self, obj):
|
4317 | 4406 | """
|
4318 | 4407 | Renders the person data into some lines of text
|
|
0 commit comments