From e3b26c3da49bf2d849b9d14df4aa911abbb9b86e Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan.grewe@g-node.org>
Date: Sat, 1 Mar 2025 17:11:01 +0100
Subject: [PATCH] [Timeline] send move request signal when user clicks onto the
 scene

---
 fixtracks/utils/signals.py             |  1 +
 fixtracks/widgets/detectiontimeline.py | 10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/fixtracks/utils/signals.py b/fixtracks/utils/signals.py
index d62a04c..f906902 100644
--- a/fixtracks/utils/signals.py
+++ b/fixtracks/utils/signals.py
@@ -23,6 +23,7 @@ class DetectionSceneSignals(QObject):
 class DetectionTimelineSignals(QObject):
     windowMoved = Signal()
     manualMove = Signal()
+    moveRequest = Signal(float)
 
 class DetectionSignals(QObject):
     hover = Signal((int, QPointF))
diff --git a/fixtracks/widgets/detectiontimeline.py b/fixtracks/widgets/detectiontimeline.py
index 2f785ee..ed01808 100644
--- a/fixtracks/widgets/detectiontimeline.py
+++ b/fixtracks/widgets/detectiontimeline.py
@@ -65,6 +65,7 @@ class Window(QGraphicsRectItem):
 
     def mousePressEvent(self, event):
         self.setCursor(Qt.ClosedHandCursor)
+        # print(event.pos())
         super().mousePressEvent(event)
 
     def mouseReleaseEvent(self, event):
@@ -121,6 +122,7 @@ class DetectionTimeline(QWidget):
         self._scene = QGraphicsScene(QRectF(0, 0, self._total_width, 85.))
         self._scene.setBackgroundBrush(self._bg_brush)
         self._scene.addItem(self._window)
+        self._scene.mousePressEvent = self.on_sceneMousePress
 
         self._view = QGraphicsView()
         # self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform)
@@ -159,6 +161,14 @@ class DetectionTimeline(QWidget):
         # self.setMaximumHeight(100)
         # self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
 
+    def on_sceneMousePress(self, event):
+        scene_pos = event.scenePos()
+        relpos = scene_pos.x() / self._total_width
+        relpos = 0 if relpos < 0.0 else relpos
+        relpos = 2000/self._total_width if scene_pos.x() > self._total_width else relpos
+        self.signals.moveRequest.emit(relpos)
+        logging.debug("Timeline: Scene clicked at position: %.2f, %.2f --> rel x-pos %.3f", scene_pos.x(), scene_pos.y(), relpos)
+    
     def clear(self):
         for i in self._scene.items():
             if isinstance(i, (QGraphicsLineItem, QGraphicsEllipseItem)):