def ProcessMessage(self, msg): hdr = msg.hdr # create identifying string for type and source of message msgRoute = Messaging.MsgRoute(msg) msgKey = msg.MsgName() if len(msgRoute) > 0 and not (all("0" == a for a in msgRoute)): msgKey += " (" + "->".join(msgRoute) + ")" if self.allowedMessages: if not msg.MsgName() in self.allowedMessages: return if (not (msgKey in self.msgWidgets)): # create a new tree widget try: keyField = self.keyFields[msg.MsgName()] except KeyError: keyField = None msgWidget = msgtools.lib.gui.MsgTreeWidget(type(msg), keyField) # connect to double-clicked signal to change scrolling globally msgWidget.itemDoubleClicked.connect(self.tableDataDoubleClicked) # add it to the tab widget, so the user can see it self.tabWidget.addTab(msgWidget, msgKey) # store a pointer to it, so we can find it next time (instead of creating it again) self.msgWidgets[msgKey] = msgWidget # give the data to the widget self.msgWidgets[msgKey].addData(msg, self.autoscroll)
def display_message_in_rx_list(self, msg_key, msg): rx_time = datetime.datetime.now() if not msg_key in self.rx_msg_list: widget_name = msg.MsgName() msg_route = Messaging.MsgRoute(msg) if len(msg_route) > 0 and not (all("0" == a for a in msg_route)): widget_name += " (" + "->".join(msg_route) + ")" msg_list_item = QTreeWidgetItem( [widget_name, str(rx_time), "- Hz"]) msg_list_item.msg_key = msg_key msg_list_item.msg = msg self.rx_message_list.addTopLevelItem(msg_list_item) self.rx_message_list.resizeColumnToContents(0) self.rx_msg_list[msg_key] = msg_list_item # Initialize a Deque with an empty iterable with a maxlen of 10 if self.thread_lock.acquire(): self.rx_msg_list_timestamps[msg_key] = collections.deque([], 10) self.thread_lock.release() if self.thread_lock.acquire(): self.rx_msg_list_timestamps[msg_key].appendleft(rx_time) self.thread_lock.release() self.rx_msg_list[msg_key].setText(1, str(rx_time)) self.rx_msg_list[msg_key].msg = msg
def ProcessMessage(self, msg): hdr = msg.hdr msg_id = hex(hdr.GetMessageID()) msg_key = ",".join(Messaging.MsgRoute(msg)) + "," + msg_id self.display_message_in_rx_list(msg_key, msg) self.display_message_in_rx_tree(msg_key, msg) self.display_message_in_plots(msg_key, msg)
def onRxMessageFieldSelected(self, rxWidgetItem): if isinstance(rxWidgetItem, txtreewidget.FieldItem) or isinstance(rxWidgetItem, txtreewidget.FieldArrayItem): fieldInfo = rxWidgetItem.fieldInfo msg_id = hex(rxWidgetItem.msg.hdr.GetMessageID()) msg_key = ",".join(Messaging.MsgRoute(rxWidgetItem.msg)) + "," + msg_id try: msgPlot = self.addPlot(msg_key, type(rxWidgetItem.msg), rxWidgetItem.fieldName) if msgPlot: msgPlot.addData(rxWidgetItem.msg) except MsgPlot.PlotError as e: QMessageBox.warning(self, "Message Scope", str(e))
def onRxMessageFieldSelected(self, rxWidgetItem): try: if isinstance(rxWidgetItem, txtreewidget.FieldItem) or isinstance( rxWidgetItem, txtreewidget.FieldArrayItem): fieldInfo = rxWidgetItem.fieldInfo fieldIndex = 0 if isinstance(rxWidgetItem, txtreewidget.FieldArrayItem): fieldIndex = rxWidgetItem.index msg_id = hex(rxWidgetItem.msg.hdr.GetMessageID()) plotListForID = [] msg_key = ",".join(Messaging.MsgRoute( rxWidgetItem.msg)) + "," + msg_id if msg_key in self.msgPlots: plotListForID = self.msgPlots[msg_key] else: self.msgPlots[msg_key] = plotListForID alreadyThere = False for plot in plotListForID: for line in plot.lines: if line.fieldInfo == fieldInfo and line.fieldSubindex == fieldIndex: alreadyThere = True if not alreadyThere: plotName = rxWidgetItem.msg.MsgName() if plottingLoaded: msgPlot = MsgPlot(type(rxWidgetItem.msg), fieldInfo, fieldIndex) # add a dock widget for new plot dockWidget = ClosableDockWidget( plotName, self, msgPlot.plotWidget, msgPlot, plotListForID) self.addDockWidget(Qt.RightDockWidgetArea, dockWidget) # Change title when plot is paused/resumed msgPlot.Paused.connect( lambda paused: dockWidget.setWindowTitle( plotName + " (PAUSED)" if paused else plotName)) plotListForID.append(msgPlot) msgPlot.addData(rxWidgetItem.msg) except AttributeError: pass
def display_message_in_rx_list(self, msg_key, msg): rx_time = datetime.now() if not msg_key in self.rx_msg_list: widget_name = msg.MsgName() msg_route = Messaging.MsgRoute(msg) if len(msg_route) > 0 and not(all ("0" == a for a in msg_route)): widget_name += " ("+",".join(msg_route)+")" msg_list_item = QTreeWidgetItem([ widget_name, rx_time.strftime('%H:%M:%S.%f')[:-3], "- Hz" ]) msg_list_item.msg_key = msg_key msg_list_item.msg = msg msg_list_item.rx_count = 1 msg_list_item.avg_rate = 1.0 self.rx_message_list.addTopLevelItem(msg_list_item) self.rx_message_list.resizeColumnToContents(0) self.rx_msg_list[msg_key] = msg_list_item self.rx_msg_list[msg_key].setText(1, rx_time.strftime('%H:%M:%S.%f')[:-3]) self.rx_msg_list[msg_key].msg = msg self.rx_msg_list[msg_key].rx_count += 1