diff --git a/fixtracks/widgets/detectiontimeline.py b/fixtracks/widgets/detectiontimeline.py index 5464a7a..65e1659 100644 --- a/fixtracks/widgets/detectiontimeline.py +++ b/fixtracks/widgets/detectiontimeline.py @@ -2,7 +2,8 @@ import logging import numpy as np import pandas as pd from PySide6.QtCore import Qt -from PySide6.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QGraphicsView, QGraphicsScene, QGraphicsItem, QGraphicsRectItem, QGraphicsLineItem +from PySide6.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QLabel +from PySide6.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsItem, QGraphicsRectItem, QGraphicsLineItem from PySide6.QtCore import Qt, QRectF, QRectF from PySide6.QtGui import QBrush, QColor, QPen, QFont @@ -107,6 +108,9 @@ class DetectionTimeline(QWidget): self._view = QGraphicsView() # self._view.setRenderHints(QPainter.RenderHint.Antialiasing | QPainter.RenderHint.SmoothPixmapTransform); self._view.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + self._view.setScene(self._scene) + self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio) + self.fit_scene_to_view() t1_label = self._scene.addText("track 1", font) t1_label.setDefaultTextColor(self._t1_pen.color()) @@ -120,17 +124,19 @@ class DetectionTimeline(QWidget): other_label.setDefaultTextColor(self._other_pen.color()) other_label.setPos(0, 30) - self._view.setScene(self._scene) - self._view.fitInView(self._scene.sceneRect(), aspectRadioMode=Qt.AspectRatioMode.KeepAspectRatio) + self._position_label = QLabel("") + f = self._position_label.font() + f.setPointSize(9) + self._position_label.setFont(f) layout = QVBoxLayout() layout.addWidget(self._view) + layout.addWidget(self._position_label, Qt.AlignmentFlag.AlignRight) self.setLayout(layout) if self._data is not None: self.draw_coverage() - self.fit_scene_to_view() - self.setMaximumHeight(100) + # self.setMaximumHeight(100) # self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) def setDetectionData(self, data): @@ -149,7 +155,7 @@ class DetectionTimeline(QWidget): track1_frames = self._data.frame.values[self._data.track == self._trackone] track2_frames = self._data.frame.values[self._data.track == self._tracktwo] other_frames = self._data.frame.values[(self._data.track != self._trackone) & - (self._data.track != self._tracktwo)] + (self._data.track != self._tracktwo)] elif isinstance(self._data, dict): maxframe = np.max(self._data["frame"]) bins = np.linspace(0, maxframe, self._stepCount) @@ -172,6 +178,11 @@ class DetectionTimeline(QWidget): if t2_coverage[i]: self._scene.addLine(pos[i], 17, pos[i], 32., pen=self._t2_pen) if other_coverage[i]: self._scene.addLine(pos[i], 34, pos[i], 49., pen=self._other_pen) + def updatePosition(self): + start = np.round(self._rangeStart * 100, 1) + stop = np.round(self._rangeStop * 100, 1) + self._position_label.setText(f"Current position: {start}% to {stop}% of data.") + @property def rangeStart(self): return self._rangeStart @@ -194,6 +205,7 @@ class DetectionTimeline(QWidget): self._rangeStart = np.round(self._window.sceneBoundingRect().left() / scene_width, 3) self._rangeStop = np.round(self._window.sceneBoundingRect().right() / scene_width, 3) logging.debug("Timeline: WindowUpdated positions start: %.3f end: %.3f", self.rangeStart, self.rangeStop) + self.updatePosition() self.signals.windowMoved.emit() def setWindowPos(self, newx: float):