From 073b1d93f3dae92e15636bee4c5c7dfead5bd6ed Mon Sep 17 00:00:00 2001 From: Victor Lamoine Date: Thu, 4 Apr 2019 11:10:25 +0200 Subject: [PATCH 1/2] Save last directory opened to load a bag file --- rqt_bag/src/rqt_bag/bag_widget.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rqt_bag/src/rqt_bag/bag_widget.py b/rqt_bag/src/rqt_bag/bag_widget.py index 38b89df..482eb24 100644 --- a/rqt_bag/src/rqt_bag/bag_widget.py +++ b/rqt_bag/src/rqt_bag/bag_widget.py @@ -37,7 +37,7 @@ import rospkg from python_qt_binding import loadUi -from python_qt_binding.QtCore import qDebug, Qt, qWarning, Signal +from python_qt_binding.QtCore import qDebug, Qt, qWarning, Signal, QFileInfo from python_qt_binding.QtGui import QIcon from python_qt_binding.QtWidgets import QFileDialog, QGraphicsView, QWidget @@ -60,6 +60,7 @@ class BagWidget(QWidget): Handles all widget callbacks and contains the instance of BagTimeline for storing visualizing bag data """ + last_open_dir = "" set_status_text = Signal(str) def __init__(self, context, publish_clock): @@ -268,7 +269,9 @@ def _on_record_settings_selected(self, all_topics, selected_topics): def _handle_load_clicked(self): filenames = QFileDialog.getOpenFileNames( - self, self.tr('Load from Files'), '.', self.tr('Bag files {.bag} (*.bag)')) + self, self.tr('Load from Files'), self.last_open_dir, self.tr('Bag files {.bag} (*.bag)')) + if len(filenames) is not 0 and len(filenames[0]) is not 0: + self.last_open_dir = QFileInfo(filenames[0][0]).absoluteDir().absolutePath() for filename in filenames[0]: self.load_bag(filename) From 35d2753b16fb618096b868b228b1681dddab94fe Mon Sep 17 00:00:00 2001 From: Victor Lamoine Date: Thu, 4 Apr 2019 11:28:17 +0200 Subject: [PATCH 2/2] Add clear timeline button --- rqt_bag/resource/bag_widget.ui | 21 ++++++++++++++++++++- rqt_bag/src/rqt_bag/bag_timeline.py | 11 +++++++++++ rqt_bag/src/rqt_bag/bag_widget.py | 21 +++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/rqt_bag/resource/bag_widget.ui b/rqt_bag/resource/bag_widget.ui index 9ab11cd..1d5ff38 100644 --- a/rqt_bag/resource/bag_widget.ui +++ b/rqt_bag/resource/bag_widget.ui @@ -17,7 +17,16 @@ 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -54,6 +63,16 @@ + + + + Clear timeline + + + + + + diff --git a/rqt_bag/src/rqt_bag/bag_timeline.py b/rqt_bag/src/rqt_bag/bag_timeline.py index d853830..5842cad 100644 --- a/rqt_bag/src/rqt_bag/bag_timeline.py +++ b/rqt_bag/src/rqt_bag/bag_timeline.py @@ -179,6 +179,17 @@ def add_bag(self, bag): self._timeline_frame.index_cache_cv.notify() + def clear(self): + """ + clears all previously loaded bags + """ + # FIXME Wrong + self._playhead_positions.clear() + self._messages_cvs.clear() + self._message_loaders.clear() + self._timeline_frame.reset_timeline() + del self._bags[:] + def file_size(self): with self._bag_lock: return sum(b.size for b in self._bags) diff --git a/rqt_bag/src/rqt_bag/bag_widget.py b/rqt_bag/src/rqt_bag/bag_widget.py index 482eb24..c8d39df 100644 --- a/rqt_bag/src/rqt_bag/bag_widget.py +++ b/rqt_bag/src/rqt_bag/bag_widget.py @@ -95,6 +95,7 @@ def __init__(self, context, publish_clock): self.thumbs_button.setIcon(QIcon.fromTheme('insert-image')) self.record_button.setIcon(QIcon.fromTheme('media-record')) self.load_button.setIcon(QIcon.fromTheme('document-open')) + self.clear_timeline_button.setIcon(QIcon.fromTheme('edit-clear')) self.save_button.setIcon(QIcon.fromTheme('document-save')) self.play_button.clicked[bool].connect(self._handle_play_clicked) @@ -110,6 +111,7 @@ def __init__(self, context, publish_clock): self.end_button.clicked[bool].connect(self._handle_end_clicked) self.record_button.clicked[bool].connect(self._handle_record_clicked) self.load_button.clicked[bool].connect(self._handle_load_clicked) + self.clear_timeline_button.clicked[bool].connect(self._handle_clear_timeline_clicked) self.save_button.clicked[bool].connect(self._handle_save_clicked) self.graphics_view.mousePressEvent = self._timeline.on_mouse_down self.graphics_view.mouseReleaseEvent = self._timeline.on_mouse_up @@ -264,6 +266,7 @@ def _on_record_settings_selected(self, all_topics, selected_topics): rospy.loginfo('Recording to %s.' % record_filename) self.load_button.setEnabled(False) + self.load_clear_button.setEnabled(False) self._recording = True self._timeline.record_bag(record_filename, all_topics, selected_topics) @@ -275,6 +278,24 @@ def _handle_load_clicked(self): for filename in filenames[0]: self.load_bag(filename) + def _handle_clear_timeline_clicked(self): + self._timeline.clear() + self.play_button.setEnabled(False) + self.thumbs_button.setEnabled(False) + self.zoom_in_button.setEnabled(False) + self.zoom_out_button.setEnabled(False) + self.zoom_all_button.setEnabled(False) + self.next_button.setEnabled(False) + self.previous_button.setEnabled(False) + self.faster_button.setEnabled(False) + self.slower_button.setEnabled(False) + self.begin_button.setEnabled(False) + self.end_button.setEnabled(False) + self.save_button.setEnabled(False) + self.record_button.setEnabled(True) + self.set_status_text.emit("Timeline cleared") + # FIXME Does something else needs to be done? + def load_bag(self, filename): qDebug("Loading '%s'..." % filename.encode(errors='replace'))