diff --git a/MyTimeline.py b/MyTimeline.py index 37ab40b..5185649 100644 --- a/MyTimeline.py +++ b/MyTimeline.py @@ -129,6 +129,7 @@ FONT_SIZE_LARGE = 24 # Visual Effect Constants MARKER_HOVER_SIZE_MULTIPLIER = 1.3 MARKER_SELECTED_SIZE_MULTIPLIER = 1.2 +DEFAULT_EVENT_SHAPE = 'square' # Default shape for events without specific shape mapping GRADIENT_BRIGHTNESS_OFFSET = 0.2 GRADIENT_DARKNESS_OFFSET = 0.1 SHADOW_OFFSET_X = 1 @@ -1826,24 +1827,30 @@ class MyTimelineView(NavigationView): continue # Check primary events first (these take precedence) - for event_ref in person.get_primary_event_ref_list(): - event_handle = event_ref.ref - # Only store if not already mapped (primary events take priority) - if event_handle not in self._event_to_person_cache: - self._event_to_person_cache[event_handle] = person + self._index_event_refs(person.get_primary_event_ref_list(), person) # Check all events (for events not in primary list) - for event_ref in person.get_event_ref_list(): - event_handle = event_ref.ref - # Only store if not already mapped - if event_handle not in self._event_to_person_cache: - self._event_to_person_cache[event_handle] = person + self._index_event_refs(person.get_event_ref_list(), person) except (AttributeError, KeyError): continue except (AttributeError, KeyError) as e: logger.warning(f"Error building event-to-person index from database: {e}", exc_info=True) + def _index_event_refs(self, event_ref_list: List[Any], person: 'Person') -> None: + """ + Index event references from a list, mapping event handles to person. + + Args: + event_ref_list: List of event references from a person object. + person: The person object to associate with the events. + """ + for event_ref in event_ref_list: + event_handle = event_ref.ref + # Only store if not already mapped (to preserve priority of primary events) + if event_handle not in self._event_to_person_cache: + self._event_to_person_cache[event_handle] = person + def _find_person_for_event(self, event: 'Event') -> Optional['Person']: """ Find a primary person associated with an event using the cached index. @@ -3107,7 +3114,7 @@ class MyTimelineView(NavigationView): # Get color and shape color = EVENT_COLORS.get(event_type_value, DEFAULT_EVENT_COLOR) - shape = EVENT_SHAPES.get(event_type_value, 'square') + shape = EVENT_SHAPES.get(event_type_value, DEFAULT_EVENT_SHAPE) marker_size = EVENT_MARKER_SIZE # Increase size if hovered or selected @@ -3206,7 +3213,7 @@ class MyTimelineView(NavigationView): 'hexagon': self._draw_hexagon, } - drawer = shape_drawers.get(shape, self._draw_square) # Default to square + drawer = shape_drawers.get(shape, shape_drawers[DEFAULT_EVENT_SHAPE]) drawer(context, x, y, size) def draw_event_label(self, context: cairo.Context, x: float, y: float,