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'))
Esempio n. 2
0
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