From e0dd1a8db841888ec71a700c6e92eb8c1bb56679 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Wed, 20 Aug 2025 12:19:57 +0200 Subject: [PATCH] feat(main.py): add timeline visibility toggle functionality --- main.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 3608421..9a67fef 100644 --- a/main.py +++ b/main.py @@ -56,6 +56,9 @@ class MediaGrader: self.segment_caps = [] # List of VideoCapture objects for each segment self.segment_frames = [] # List of current frames for each segment self.segment_positions = [] # List of frame positions for each segment + + # Timeline visibility state + self.timeline_visible = True # Key repeat tracking with rate limiting self.last_seek_time = 0 @@ -506,6 +509,12 @@ class MediaGrader: return True + def toggle_timeline(self): + """Toggle timeline visibility""" + self.timeline_visible = not self.timeline_visible + print(f"Timeline {'visible' if self.timeline_visible else 'hidden'}") + return True + def setup_segment_captures(self): """Setup multiple video captures for segment mode""" if not self.is_video(self.media_files[self.current_index]): @@ -755,7 +764,7 @@ class MediaGrader: def draw_multi_segment_timeline(self, frame): """Draw timeline showing all segment positions""" - if not self.is_video(self.media_files[self.current_index]) or not self.segment_caps: + if not self.is_video(self.media_files[self.current_index]) or not self.segment_caps or not self.timeline_visible: return height, width = frame.shape[:2] @@ -796,8 +805,8 @@ class MediaGrader: def draw_timeline(self, frame): """Draw timeline at the bottom of the frame""" - # Only draw timeline for video files in single mode - if not self.is_video(self.media_files[self.current_index]) or self.multi_segment_mode: + # Only draw timeline for video files in single mode and when visible + if not self.is_video(self.media_files[self.current_index]) or self.multi_segment_mode or not self.timeline_visible: return height, width = frame.shape[:2] @@ -1099,7 +1108,7 @@ class MediaGrader: print(" P: Previous file") print(" U: Undo last grading action") print(" L: Sample video at key points (videos only)") - print(" H: Undo last L jump (videos only, disabled in multi-segment)") + print(" H: Toggle timeline visibility") print(" J: Bisect backwards from current position (videos only, disabled in multi-segment)") print(" K: Bisect forwards toward next sample (videos only, disabled in multi-segment)") print(" Q/ESC: Quit") @@ -1174,11 +1183,8 @@ class MediaGrader: self.bisect_forwards() else: print("Navigation keys (H/J/K/L) disabled in multi-segment mode") - elif key == ord("h"): # Changed from "j" to "h" for undo jump - if not self.multi_segment_mode: - self.undo_jump() - else: - print("Navigation keys (H/J/K/L) disabled in multi-segment mode") + elif key == ord("h"): # Toggle timeline visibility + self.toggle_timeline() elif key == ord("g"): self.toggle_multi_segment_mode() elif key in [ord("1"), ord("2"), ord("3"), ord("4"), ord("5")]: