diff --git a/MyTimeline.py b/MyTimeline.py
index 1c92db6..7c3a811 100644
--- a/MyTimeline.py
+++ b/MyTimeline.py
@@ -79,7 +79,6 @@ CLICKABLE_AREA_HEIGHT = 30
# UI Constants
YEAR_LABEL_WIDTH = 100
-EXPANDED_HEIGHT = 120
TOOLTIP_DELAY = 500 # milliseconds
# Event type categories and color mapping
@@ -239,7 +238,7 @@ class MyTimelineView(NavigationView):
# Current family handle
self.active_family_handle = None
- self.events = [] # List of (date_sort, date_obj, event, person, event_type, expanded, y_pos)
+ self.events = [] # List of (date_sort, date_obj, event, person, event_type, y_pos)
# UI components
self.scrolledwindow = None
@@ -254,7 +253,6 @@ class MyTimelineView(NavigationView):
self.hovered_event_index = None
self.tooltip_timeout_id = None
self.tooltip_window = None
- self.expanded_event_index = None
self.selected_person_handle = None
self.mouse_x = 0
self.mouse_y = 0
@@ -414,7 +412,6 @@ class MyTimelineView(NavigationView):
return
self.active_family_handle = handle
- self.expanded_event_index = None
self.collect_events()
if self.drawing_area:
self.drawing_area.queue_draw()
@@ -449,7 +446,6 @@ class MyTimelineView(NavigationView):
event,
None, # No person for family events
event_type,
- False, # expanded
0, # y_pos (will be calculated during draw)
)
)
@@ -477,7 +473,6 @@ class MyTimelineView(NavigationView):
event,
person_obj,
event_type,
- False, # expanded
0, # y_pos
)
)
@@ -541,7 +536,7 @@ class MyTimelineView(NavigationView):
if self.drawing_area:
self.drawing_area.set_size_request(800, self.timeline_height)
- def _get_event_label_text(self, event, person, event_type, is_expanded=False):
+ def _get_event_label_text(self, event, person, event_type):
"""Generate label text for an event. Centralized logic."""
date_str = get_date(event)
event_type_str = str(event_type)
@@ -564,10 +559,10 @@ class MyTimelineView(NavigationView):
adjusted_events = []
for event_data in events_with_y_pos:
- date_sort, date_obj, event, person, event_type, expanded, y_pos = event_data
+ date_sort, date_obj, event, person, event_type, y_pos = event_data
# Calculate label height using centralized text generation
- label_text = self._get_event_label_text(event, person, event_type, expanded)
+ label_text = self._get_event_label_text(event, person, event_type)
layout.set_text(label_text, -1)
text_width, text_height = layout.get_pixel_size()
label_height = text_height + LABEL_PADDING
@@ -575,7 +570,7 @@ class MyTimelineView(NavigationView):
# Check for overlap with previous events
adjusted_y = y_pos
for prev_data in adjusted_events:
- prev_y_pos = prev_data[6] # Get y_pos from previous event
+ prev_y_pos = prev_data[5] # Get y_pos from previous event (index 5 now)
# Check if labels would overlap
if abs(adjusted_y - prev_y_pos) < MIN_LABEL_SPACING:
# Adjust downward
@@ -585,7 +580,7 @@ class MyTimelineView(NavigationView):
adjusted_y = max(timeline_y_start, min(adjusted_y, timeline_y_end))
# Create new event data with adjusted Y position
- adjusted_events.append((date_sort, date_obj, event, person, event_type, expanded, adjusted_y))
+ adjusted_events.append((date_sort, date_obj, event, person, event_type, adjusted_y))
return adjusted_events
@@ -662,16 +657,9 @@ class MyTimelineView(NavigationView):
# Convert mouse coordinates to drawing coordinates (account for zoom)
scaled_x = event.x / self.zoom_level
- date_sort, date_obj, clicked_event, clicked_person, event_type, expanded, _y_pos = self.events[clicked_index]
-
- # Check if click is on marker area (left side) or label area (right side)
- timeline_x = TIMELINE_MARGIN_LEFT
- marker_area_width = EVENT_MARKER_SIZE + 20
+ date_sort, date_obj, clicked_event, clicked_person, event_type, _y_pos = self.events[clicked_index]
# Clicking anywhere on the event line selects the person (like selecting the event)
- # Always collapse any expanded event when selecting
- self.expanded_event_index = None
-
if clicked_person:
person_handle = clicked_person.get_handle()
if self.selected_person_handle == person_handle:
@@ -757,11 +745,11 @@ class MyTimelineView(NavigationView):
# Calculate initial Y positions
events_with_y_pos = []
for event_data in self.events:
- date_sort, date_obj, event, person, event_type, expanded, _ = event_data
+ date_sort, date_obj, event, person, event_type, _ = event_data
y_pos = timeline_y_start + (
(date_sort - min_date) / date_range
) * (timeline_y_end - timeline_y_start)
- events_with_y_pos.append((date_sort, date_obj, event, person, event_type, expanded, y_pos))
+ events_with_y_pos.append((date_sort, date_obj, event, person, event_type, y_pos))
# Apply collision detection using shared method
adjusted_events = self._calculate_adjusted_positions(context, events_with_y_pos, timeline_y_start, timeline_y_end)
@@ -803,7 +791,7 @@ class MyTimelineView(NavigationView):
label_x = timeline_x + LABEL_X_OFFSET
for i, event_data in enumerate(adjusted_events):
- date_sort, date_obj, event, person, event_type, expanded, adjusted_y = event_data
+ date_sort, date_obj, event, person, event_type, adjusted_y = event_data
# Check if click is in the event's area (marker + label)
if (scaled_x >= timeline_x - marker_size - MARKER_CLICK_PADDING and
@@ -818,7 +806,7 @@ class MyTimelineView(NavigationView):
if event_index is None or event_index >= len(self.events):
return False
- date_sort, date_obj, event, person, event_type, expanded, y_pos = self.events[event_index]
+ date_sort, date_obj, event, person, event_type, y_pos = self.events[event_index]
# If event has a person, show all events for that person
if person:
@@ -828,7 +816,7 @@ class MyTimelineView(NavigationView):
# Find all events for this person
person_events = []
for evt_data in self.events:
- evt_date_sort, evt_date_obj, evt_event, evt_person, evt_event_type, evt_expanded, evt_y_pos = evt_data
+ evt_date_sort, evt_date_obj, evt_event, evt_person, evt_event_type, evt_y_pos = evt_data
if evt_person and evt_person.get_handle() == person_handle:
person_events.append((evt_date_sort, evt_date_obj, evt_event, evt_event_type))
@@ -976,28 +964,22 @@ class MyTimelineView(NavigationView):
# Draw events
for i, event_data in enumerate(events_with_y_pos):
- date_sort, date_obj, event, person, event_type, expanded, y_pos = event_data
+ date_sort, date_obj, event, person, event_type, y_pos = event_data
- # Check if this event is hovered or expanded
+ # Check if this event is hovered
is_hovered = (i == self.hovered_event_index)
- is_expanded = (i == self.expanded_event_index)
# Check if this event belongs to selected person
is_selected = (self.selected_person_handle is not None and
person and person.get_handle() == self.selected_person_handle)
- # Selected events should not show expanded (multi-line) text
- # Only show expanded text if explicitly expanded AND not selected
- if is_selected:
- is_expanded = False
-
# Draw event marker with modern styling
self.draw_event_marker(context, timeline_x, y_pos, event_type, is_hovered, is_selected)
# Draw event label
- label_x = timeline_x + 25
+ label_x = timeline_x + LABEL_X_OFFSET
self.draw_event_label(
- context, label_x, y_pos, date_obj, event, person, event_type, is_hovered, is_expanded
+ context, label_x, y_pos, date_obj, event, person, event_type, is_hovered
)
# Draw visual connections for selected person
@@ -1103,7 +1085,7 @@ class MyTimelineView(NavigationView):
context.line_to(px, py)
context.close_path()
- def draw_event_label(self, context, x, y, date_obj, event, person, event_type, is_hovered=False, is_expanded=False):
+ def draw_event_label(self, context, x, y, date_obj, event, person, event_type, is_hovered=False):
"""Draw the label for an event with modern styling."""
context.save()
@@ -1117,46 +1099,13 @@ class MyTimelineView(NavigationView):
layout.set_font_description(font_desc)
# Build label text using centralized method
- base_text = self._get_event_label_text(event, person, event_type, is_expanded)
-
- if is_expanded:
- # Format as expanded with markup
- date_str = get_date(event)
- event_type_str = str(event_type)
-
- if person:
- person_name = name_displayer.display(person)
- label_text = f"{date_str} - {event_type_str}\n{person_name}"
- else:
- label_text = f"{date_str} - {event_type_str}"
-
- # Add place
- place_handle = event.get_place_handle()
- if place_handle:
- try:
- place = self.dbstate.db.get_place_from_handle(place_handle)
- if place:
- place_name = place.get_title()
- label_text += f"\nš {place_name}"
- except Exception:
- # Skip if place handle is invalid
- pass
-
- # Add description
- description = event.get_description()
- if description:
- label_text += f"\n{description}"
- else:
- label_text = base_text
+ label_text = self._get_event_label_text(event, person, event_type)
layout.set_markup(label_text, -1)
layout.set_width(-1) # No width limit
- if is_expanded:
- layout.set_width(500 * Pango.SCALE) # Limit width for expanded view
- layout.set_wrap(Pango.WrapMode.WORD)
- # Draw background for expanded/hovered events
- if is_expanded or is_hovered:
+ # Draw background for hovered events
+ if is_hovered:
text_width, text_height = layout.get_pixel_size()
padding = 8
@@ -1175,10 +1124,7 @@ class MyTimelineView(NavigationView):
context.close_path()
# Fill with semi-transparent background
- if is_expanded:
- context.set_source_rgba(1.0, 1.0, 1.0, 0.95)
- else:
- context.set_source_rgba(1.0, 1.0, 1.0, 0.8)
+ context.set_source_rgba(1.0, 1.0, 1.0, 0.8)
context.fill()
# Draw border
@@ -1200,7 +1146,7 @@ class MyTimelineView(NavigationView):
# Find min and max years from events
min_year = None
max_year = None
- for date_sort, date_obj, event, person, event_type, expanded, y_pos in self.events:
+ for date_sort, date_obj, event, person, event_type, y_pos in self.events:
try:
year = date_obj.get_year()
if year and year != 0:
@@ -1270,7 +1216,7 @@ class MyTimelineView(NavigationView):
# Find all events for the selected person
person_events = []
for event_data in events_with_y_pos:
- date_sort, date_obj, event, person, event_type, expanded, y_pos = event_data
+ date_sort, date_obj, event, person, event_type, y_pos = event_data
if person and person.get_handle() == self.selected_person_handle:
person_events.append((y_pos, event_data))