diff --git a/fixtracks/widgets/selection_control.py b/fixtracks/widgets/selection_control.py index a057e05..b1edcde 100644 --- a/fixtracks/widgets/selection_control.py +++ b/fixtracks/widgets/selection_control.py @@ -4,7 +4,7 @@ import numpy as np from PySide6.QtCore import Qt, Signal, QSize from PySide6.QtGui import QFont from PySide6.QtWidgets import QWidget, QLabel, QPushButton, QSizePolicy -from PySide6.QtWidgets import QGridLayout, QVBoxLayout +from PySide6.QtWidgets import QGridLayout, QVBoxLayout, QApplication from fixtracks.utils.styles import pushBtnStyle @@ -15,6 +15,7 @@ class SelectionControls(QWidget): assignTwo = Signal() assignOther = Signal() accept = Signal() + accept_until = Signal() unaccept = Signal() delete = Signal() revertall = Signal() @@ -102,7 +103,7 @@ class SelectionControls(QWidget): acceptBtn.setFont(font) acceptBtn.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) acceptBtn.setStyleSheet(pushBtnStyle("darkgray")) - acceptBtn.setToolTip(f"Accept assignments of current selection as TRUE") + acceptBtn.setToolTip(f"Accept assignments of current selection as TRUE, Hold shift while clicking to accept all until here.") acceptBtn.clicked.connect(self.on_Accept) unacceptBtn = QPushButton("un-accept") @@ -210,7 +211,12 @@ class SelectionControls(QWidget): def on_Accept(self): logging.debug("SelectionControl: accept AssignmentBtn") - self.accept.emit() + modifiers = QApplication.keyboardModifiers() + if modifiers == Qt.KeyboardModifier.ShiftModifier: + logging.debug("Shift key was pressed during accept") + self.accept_until.emit() + else: + self.accept.emit() def on_Unaccept(self): logging.debug("SelectionControl: revoke user assignmentBtn") diff --git a/fixtracks/widgets/tracks.py b/fixtracks/widgets/tracks.py index 7bad24b..44bf044 100644 --- a/fixtracks/widgets/tracks.py +++ b/fixtracks/widgets/tracks.py @@ -74,6 +74,7 @@ class FixTracks(QWidget): self._controls_widget.fwd.connect(self.on_forward) self._controls_widget.back.connect(self.on_backward) self._controls_widget.accept.connect(self.on_setUserFlag) + self._controls_widget.accept_until.connect(self.on_setUserFlagsUntil) self._controls_widget.unaccept.connect(self.on_unsetUserFlag) self._controls_widget.delete.connect(self.on_deleteDetection) self._controls_widget.revertall.connect(self.on_revertUserFlags) @@ -267,6 +268,12 @@ class FixTracks(QWidget): self._timeline.update() self.update() + def on_setUserFlagsUntil(self): + self._data.setSelectionRange("frame", 0, self._currentWindowPos + self._currentWindowWidth) + self._data.setUserLabeledStatus(True) + self._timeline.update() + self.update() + def on_unsetUserFlag(self): logging.debug("Tracks:unsetUserFlag") self._data.setUserLabeledStatus(False)