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