[timeline] clearer position handling

This commit is contained in:
Jan Grewe 2025-01-30 11:50:06 +01:00
parent 641ca36b93
commit 5db069b14e

View File

@ -26,18 +26,22 @@ class Window(QGraphicsRectItem):
self._y = y
def setWindowX(self, newx):
logging.debug("timeline.window: set position to %.3f", newx)
r = self.rect()
self.setRect(newx, r.y(), self._width, r.height())
self.signals.windowMoved.emit(self.scenePos().x() + self.rect().width() /2, self._width)
r = self.rect()
self.signals.windowMoved.emit(r.left(), r.right())
def setWindowWidth(self, newwidth):
logging.debug("timeline.window: update window widthto %.3f", newwidth)
self._width = newwidth
r = self.rect()
self.setRect(r.x(), r.y(), self._width, r.height())
self.signals.windowMoved.emit(self.scenePos().x() + self.rect().width() /2, self._width)
r = self.rect()
self.signals.windowMoved.emit(r.left(), r.right())
def mouseMoveEvent(self, event):
# print(event.scenePos())
super().mouseMoveEvent(event)
def mousePressEvent(self, event):
@ -52,8 +56,9 @@ class Window(QGraphicsRectItem):
if r.x() > 1000 - self._width:
self.setPos(1000 - self._width, self._y)
if r.y() != self._y:
self.setPos(self.scenePos().x(), self._y)
self.signals.windowMoved.emit(self.scenePos().x() + self.rect().width() /2, self._width)
self.setPos(self.scenePos().x(), self._y)
r = self.rect()
self.signals.windowMoved.emit(r.left(), r.right())
super().mouseReleaseEvent(event)
def hoverEnterEvent(self, event):
@ -182,13 +187,12 @@ class DetectionTimeline(QWidget):
super().resizeEvent(event)
self.fit_scene_to_view()
def on_windowMoved(self, x, w):
def on_windowMoved(self, left, right):
logging.debug("Timeline: Window moved to start x-position %.3f and end-x: %.3f", left, right)
scene_width = self._scene.width()
start_pos = x - w/2 + scene_width/2
end_pos = x + w/2 + scene_width/2
self._rangeStart = np.round(start_pos / scene_width, 3)
self._rangeStop = np.round(end_pos / scene_width, 3)
self._rangeStart = np.round(left / scene_width, 3)
self._rangeStop = np.round(right / scene_width, 3)
logging.debug("Timeline: Updated positions start: %.3f end: %.3f", self.rangeStart, self.rangeStop)
self.signals.windowMoved.emit(self._rangeStart, self._rangeStop)
def setWindowPos(self, newx: float):
@ -219,21 +223,28 @@ class DetectionTimeline(QWidget):
span = np.round(width * self.total_width)
self._window.setWindowWidth(span)
def windowBounds(self):
return self._rangeStart, self._rangeStop
def main():
def back(start_x):
view.setWindowPos(start_x)
print(view.windowBounds())
def fwd(start_x):
view.setWindowPos(start_x)
print(view.windowBounds())
def zero():
view.setWindowPos(0.0)
print(view.windowBounds())
import pickle
import numpy as np
from IPython import embed
from PySide6.QtWidgets import QApplication, QPushButton, QHBoxLayout
from fixtracks.info import PACKAGE_ROOT
logging.basicConfig(level=logging.DEBUG, force=True)
datafile = PACKAGE_ROOT / "data/merged_small.pkl"
with open(datafile, "rb") as f: