diff --git a/src/View/Results/Window.py b/src/View/Results/Window.py index d2f587af7fcd43adb3955e05a8740a12da4f9da0..a5114ba957adaa857211ab1fb521eb9684cc154c 100644 --- a/src/View/Results/Window.py +++ b/src/View/Results/Window.py @@ -24,13 +24,13 @@ from tools import trace, timer from View.Tools.PamhyrWindow import PamhyrWindow from PyQt5.QtGui import ( - QKeySequence, + QKeySequence, QIcon, QPixmap, ) from PyQt5.QtCore import ( Qt, QVariant, QAbstractTableModel, QCoreApplication, QModelIndex, pyqtSlot, - QItemSelectionModel, + QItemSelectionModel, QTimer, ) from PyQt5.QtWidgets import ( @@ -124,6 +124,16 @@ class ResultsWindow(PamhyrWindow): self._slider_time.setMaximum(len(self._timestamps) - 1) self._slider_time.setValue(len(self._timestamps) - 1) + self._icon_start = QIcon() + self._icon_start.addPixmap(QPixmap('./src/View/ui/ressources/media-playback-start.png')) + self._icon_pause = QIcon() + self._icon_pause.addPixmap(QPixmap('./src/View/ui/ressources/media-playback-pause.png')) + self._button_play = self.find(QPushButton, f"playButton") + self._button_play.setIcon(self._icon_start) + self._button_back = self.find(QPushButton, f"backButton") + self._button_next = self.find(QPushButton, f"nextButton") + self._timer = QTimer(self) + def setup_plot(self): self.canvas = MplCanvas(width=5, height=4, dpi=100) self.canvas.setObjectName("canvas") @@ -310,6 +320,11 @@ class ResultsWindow(PamhyrWindow): self._slider_profile.valueChanged.connect( self._set_current_profile_slider) self._slider_time.valueChanged.connect(self._set_current_timestamp) + self._button_play.setChecked(False) + self._button_play.clicked.connect(self._pause) + self._button_back.clicked.connect(self._back) + self._button_next.clicked.connect(self._next) + self._timer.timeout.connect(self._update_slider) def update_table_selection_reach(self, ind): table = self.find(QTableView, f"tableView_reach") @@ -525,3 +540,24 @@ class ResultsWindow(PamhyrWindow): def _redo(self): self._table.redo() + + # play / pause buttons + def _update_slider(self): + if self._slider_time.value() == self._slider_time.maximum(): + self._slider_time.setValue(self._slider_time.minimum()) + else: + self._slider_time.setValue(self._slider_time.value()+1) + + def _next(self): + self._slider_time.setValue(self._slider_time.value()+1) + + def _back(self): + self._slider_time.setValue(self._slider_time.value()-1) + + def _pause(self): + if self._button_play.isChecked(): + self._timer.start(100) + self._button_play.setIcon(self._icon_pause) + else: + self._timer.stop() + self._button_play.setIcon(self._icon_start) diff --git a/src/View/ui/Results.ui b/src/View/ui/Results.ui index bb8aaae66b4ca6adef85cb922eac1ec107e2471f..54666dd983eb3d0e85fc568d695422b8625e41bd 100644 --- a/src/View/ui/Results.ui +++ b/src/View/ui/Results.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>942</width> - <height>655</height> + <height>740</height> </rect> </property> <property name="windowTitle"> @@ -43,25 +43,29 @@ </attribute> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> - <widget class="QSplitter" name="splitter_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <widget class="QSplitter" name="splitter"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <widget class="QWidget" name="verticalLayoutWidget"> - <layout class="QVBoxLayout" name="verticalLayout"/> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <widget class="QSplitter" name="splitter_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <widget class="QSplitter" name="splitter"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <widget class="QWidget" name="verticalLayoutWidget"> + <layout class="QVBoxLayout" name="verticalLayout"/> + </widget> + <widget class="QWidget" name="verticalLayoutWidget_2"> + <layout class="QVBoxLayout" name="verticalLayout_2"/> + </widget> + </widget> + <widget class="QWidget" name="verticalLayoutWidget_3"> + <layout class="QVBoxLayout" name="verticalLayout_3"/> + </widget> </widget> - <widget class="QWidget" name="verticalLayoutWidget_2"> - <layout class="QVBoxLayout" name="verticalLayout_2"/> - </widget> - </widget> - <widget class="QWidget" name="verticalLayoutWidget_3"> - <layout class="QVBoxLayout" name="verticalLayout_3"/> - </widget> - </widget> + </item> + </layout> </item> </layout> </widget> @@ -117,11 +121,67 @@ </widget> </item> <item row="1" column="0"> - <widget class="QSlider" name="horizontalSlider_time"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QPushButton" name="backButton"> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset> + <normaloff>ressources/media-seek-backward.png</normaloff>ressources/media-seek-backward.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="playButton"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="mouseTracking"> + <bool>true</bool> + </property> + <property name="contextMenuPolicy"> + <enum>Qt::DefaultContextMenu</enum> + </property> + <property name="autoFillBackground"> + <bool>true</bool> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset> + <normaloff>ressources/media-playback-start.png</normaloff> + <normalon>ressources/media-playback-pause.png</normalon>ressources/media-playback-start.png</iconset> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="nextButton"> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset> + <normaloff>ressources/media-seek-forward.png</normaloff>ressources/media-seek-forward.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QSlider" name="horizontalSlider_time"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + </layout> </item> </layout> </widget> diff --git a/src/View/ui/ressources/media-playback-pause.png b/src/View/ui/ressources/media-playback-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d8541d0f946f20c9c3db61f920626a4ef32942 Binary files /dev/null and b/src/View/ui/ressources/media-playback-pause.png differ diff --git a/src/View/ui/ressources/media-playback-start.png b/src/View/ui/ressources/media-playback-start.png new file mode 100644 index 0000000000000000000000000000000000000000..4b696d8e87e1a57c73ce54552c7d002fd3e7be25 Binary files /dev/null and b/src/View/ui/ressources/media-playback-start.png differ diff --git a/src/View/ui/ressources/media-seek-backward.png b/src/View/ui/ressources/media-seek-backward.png new file mode 100644 index 0000000000000000000000000000000000000000..05bff6fcea23f8d0cb2a54334d73c61d62e3ef69 Binary files /dev/null and b/src/View/ui/ressources/media-seek-backward.png differ diff --git a/src/View/ui/ressources/media-seek-forward.png b/src/View/ui/ressources/media-seek-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..9610f752cb36830d941f4e88c84f497c9fb780d6 Binary files /dev/null and b/src/View/ui/ressources/media-seek-forward.png differ diff --git a/src/View/ui/ressources/media-skip-backward.png b/src/View/ui/ressources/media-skip-backward.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9480c7ca09f5a4e9e0bea01caa6181c6b5c91f Binary files /dev/null and b/src/View/ui/ressources/media-skip-backward.png differ diff --git a/src/View/ui/ressources/media-skip-forward.png b/src/View/ui/ressources/media-skip-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ab904e4c9f9214b8187be071692fa944b2b3ab Binary files /dev/null and b/src/View/ui/ressources/media-skip-forward.png differ