global count_dock_widgets count_dock_widgets += 1 dw = QDockWidget('dockwidget%d' % count_dock_widgets, mw) dw.setObjectName('dockwidget%d' % count_dock_widgets) mw.addDockWidget(Qt.BottomDockWidgetArea, dw, orientation) def add_horizontal(self): add_dock_widget(Qt.Horizontal) def add_vertical(self): add_dock_widget(Qt.Vertical) a1 = QAction('add h', tb) a1.do = add_horizontal a1.triggered.connect(a1.do) tb.addAction(a1) a2 = QAction('add v', tb) a2.do = add_vertical a2.triggered.connect(a2.do) tb.addAction(a2) def save(self): global mw, settings settings.setValue('state', mw.saveState()) print('saved') def restore(self): global mw, settings if settings.contains('state'): restored = mw.restoreState(settings.value('state'))
class TopicMessageView(MessageView): """ A message view with a toolbar for navigating messages in a single topic. """ def __init__(self, timeline, parent): MessageView.__init__(self, timeline) self._parent = parent self._topic = None self._stamp = None self._name = parent.objectName() self.parent.destroyed.connect(self._on_close) self.toolbar = QToolBar() self._first_action = QAction(QIcon.fromTheme('go-first'), '', self.toolbar) self._first_action.triggered.connect(self.navigate_first) self.toolbar.addAction(self._first_action) self._prev_action = QAction(QIcon.fromTheme('go-previous'), '', self.toolbar) self._prev_action.triggered.connect(self.navigate_previous) self.toolbar.addAction(self._prev_action) self._next_action = QAction(QIcon.fromTheme('go-next'), '', self.toolbar) self._next_action.triggered.connect(self.navigate_next) self.toolbar.addAction(self._next_action) self._last_action = QAction(QIcon.fromTheme('go-last'), '', self.toolbar) self._last_action.triggered.connect(self.navigate_last) self.toolbar.addAction(self._last_action) parent.layout().addWidget(self.toolbar) @property def parent(self): return self._parent @property def topic(self): return self._topic @property def stamp(self): return self._stamp # MessageView implementation def message_viewed(self, bag, msg_details): self._topic, _, self._stamp = msg_details[:3] # Events def _on_close(self): # TODO: needs to handle closing when a message hasn't been viewed yet if self._topic: self.timeline.popups.remove(self._name) self.timeline.remove_view(self._topic, self) def navigate_first(self): if not self.topic: return for entry in self.timeline.get_entries( self._topic, *self.timeline._timeline_frame.play_region): self.timeline._timeline_frame.playhead = entry.time break def navigate_previous(self): if not self.topic: return last_entry = None for entry in self.timeline.get_entries( self._topic, self.timeline._timeline_frame.start_stamp, self.timeline._timeline_frame.playhead): if entry.time < self.timeline._timeline_frame.playhead: last_entry = entry if last_entry: self.timeline._timeline_frame.playhead = last_entry.time def navigate_next(self): if not self.topic: return for entry in self.timeline.get_entries( self._topic, self.timeline._timeline_frame.playhead, self.timeline._timeline_frame.end_stamp): if entry.time > self.timeline._timeline_frame.playhead: self.timeline._timeline_frame.playhead = entry.time break def navigate_last(self): if not self.topic: return last_entry = None for entry in self.timeline.get_entries( self._topic, *self.timeline._timeline_frame.play_region): last_entry = entry if last_entry: self.timeline._timeline_frame.playhead = last_entry.time
class TopicMessageView(MessageView): """ A message view with a toolbar for navigating messages in a single topic. """ def __init__(self, timeline, parent, topic): MessageView.__init__(self, timeline, topic) self._parent = parent self._stamp = None self._name = parent.objectName() self.toolbar = QToolBar() self._first_action = QAction(QIcon.fromTheme('go-first'), '', self.toolbar) self._first_action.triggered.connect(self.navigate_first) self.toolbar.addAction(self._first_action) self._prev_action = QAction(QIcon.fromTheme('go-previous'), '', self.toolbar) self._prev_action.triggered.connect(self.navigate_previous) self.toolbar.addAction(self._prev_action) self._next_action = QAction(QIcon.fromTheme('go-next'), '', self.toolbar) self._next_action.triggered.connect(self.navigate_next) self.toolbar.addAction(self._next_action) self._last_action = QAction(QIcon.fromTheme('go-last'), '', self.toolbar) self._last_action.triggered.connect(self.navigate_last) self.toolbar.addAction(self._last_action) parent.layout().addWidget(self.toolbar) @property def parent(self): return self._parent @property def stamp(self): return self._stamp # MessageView implementation def message_viewed(self, bag, msg_details): _, _, self._stamp = msg_details[:3] # Events def navigate_first(self): for entry in self.timeline.get_entries( [self.topic], *self.timeline._timeline_frame.play_region): self.timeline._timeline_frame.playhead = entry.time break def navigate_previous(self): last_entry = None for entry in self.timeline.get_entries( [self.topic], self.timeline._timeline_frame.start_stamp, self.timeline._timeline_frame.playhead): if entry.time < self.timeline._timeline_frame.playhead: last_entry = entry if last_entry: self.timeline._timeline_frame.playhead = last_entry.time def navigate_next(self): for entry in self.timeline.get_entries( [self.topic], self.timeline._timeline_frame.playhead, self.timeline._timeline_frame.end_stamp): if entry.time > self.timeline._timeline_frame.playhead: self.timeline._timeline_frame.playhead = entry.time break def navigate_last(self): last_entry = None for entry in self.timeline.get_entries( [self.topic], *self.timeline._timeline_frame.play_region): last_entry = entry if last_entry: self.timeline._timeline_frame.playhead = last_entry.time
class TopicMessageView(MessageView): """ A message view with a toolbar for navigating messages in a single topic. """ def __init__(self, timeline, parent, topic): MessageView.__init__(self, timeline, topic) self._parent = parent self._stamp = None self._name = parent.objectName() self.toolbar = QToolBar() self._first_action = QAction(QIcon.fromTheme('go-first'), '', self.toolbar) self._first_action.triggered.connect(self.navigate_first) self.toolbar.addAction(self._first_action) self._prev_action = QAction(QIcon.fromTheme('go-previous'), '', self.toolbar) self._prev_action.triggered.connect(self.navigate_previous) self.toolbar.addAction(self._prev_action) self._next_action = QAction(QIcon.fromTheme('go-next'), '', self.toolbar) self._next_action.triggered.connect(self.navigate_next) self.toolbar.addAction(self._next_action) self._last_action = QAction(QIcon.fromTheme('go-last'), '', self.toolbar) self._last_action.triggered.connect(self.navigate_last) self.toolbar.addAction(self._last_action) parent.layout().addWidget(self.toolbar) @property def parent(self): return self._parent @property def stamp(self): return self._stamp # MessageView implementation def message_viewed(self, bag, msg_details): _, _, self._stamp = msg_details[:3] # Events def navigate_first(self): for entry in self.timeline.get_entries([self.topic], *self.timeline._timeline_frame.play_region): self.timeline._timeline_frame.playhead = entry.time break def navigate_previous(self): last_entry = None for entry in self.timeline.get_entries([self.topic], self.timeline._timeline_frame.start_stamp, self.timeline._timeline_frame.playhead): if entry.time < self.timeline._timeline_frame.playhead: last_entry = entry if last_entry: self.timeline._timeline_frame.playhead = last_entry.time def navigate_next(self): for entry in self.timeline.get_entries([self.topic], self.timeline._timeline_frame.playhead, self.timeline._timeline_frame.end_stamp): if entry.time > self.timeline._timeline_frame.playhead: self.timeline._timeline_frame.playhead = entry.time break def navigate_last(self): last_entry = None for entry in self.timeline.get_entries([self.topic], *self.timeline._timeline_frame.play_region): last_entry = entry if last_entry: self.timeline._timeline_frame.playhead = last_entry.time