Coverage for lib/lottie/gui/timeline_widget.py: 0%
61 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
1from PyQt5.QtGui import QIcon
2from PyQt5.QtCore import Qt, QTimer
3from PyQt5.QtCore import pyqtSignal as Signal
4from PyQt5.QtCore import pyqtSlot as Slot
5from PyQt5.QtWidgets import *
8class TimelineWidget(QWidget):
9 frame_changed = Signal(int)
11 def __init__(self):
12 super().__init__()
13 layout_slider = QHBoxLayout()
14 layout_slider.setContentsMargins(0, 0, 0, 0)
15 self.setLayout(layout_slider)
16 self.button_play = QPushButton()
17 self.button_play.setCheckable(True)
18 self.button_play.toggled.connect(self.play_toggle)
19 layout_slider.addWidget(self.button_play)
20 self.slider = QSlider(Qt.Horizontal)
21 layout_slider.addWidget(self.slider)
22 self.slider_spin = QSpinBox()
23 layout_slider.addWidget(self.slider_spin)
24 self.slider.valueChanged.connect(self.slider_spin.setValue)
25 self.slider_spin.valueChanged.connect(self.slider.setValue)
26 self.slider.valueChanged.connect(self.frame_changed)
28 self.framerate = 60
29 self.timer = QTimer(self)
30 self.timer.timeout.connect(self._next_frame)
31 self.stop()
33 self._min = 0
34 self._max = 99
36 def set_min_max(self, min, max):
37 self._min = min
38 self._max = max
39 self.slider.setMinimum(min)
40 self.slider.setMaximum(max)
41 self.slider_spin.setMinimum(min)
42 self.slider_spin.setMaximum(max)
44 @Slot(int)
45 def set_frame(self, frame):
46 self.slider.setValue(frame)
48 @property
49 def frame(self):
50 return self.slider.value()
52 def _next_frame(self):
53 nf = self.frame + 1
54 if nf > self._max:
55 nf = self._min
56 self.slider.setValue(nf)
58 @Slot()
59 def stop(self):
60 self.timer.stop()
61 self.button_play.setIcon(QIcon.fromTheme("media-playback-start"))
62 self.button_play.setText("Play")
63 self.button_play.setChecked(False)
65 @Slot()
66 def play(self):
67 if not self.isEnabled():
68 self.stop()
69 return
71 self.button_play.setIcon(QIcon.fromTheme("media-playback-stop"))
72 self.button_play.setText("Stop")
74 self.timer.start(1000/self.fps)
76 @Slot(bool)
77 def play_toggle(self, play):
78 if play:
79 self.play()
80 else:
81 self.stop()