Example #1
0
 def __init__(self, parent):
     dockarea.DockArea.__init__(self)
             
     self.builder = GBuilder()  
     self.widget_index = {} 
     self.widget_text = {}
     self.dock_index = {}
     
     self._external_core = CheckpointInterpreterCore()
     self._information_box_items = ['Time', 'Associated Id', 'Monitor Tag', 'Message Id', 'Message', 'Size', 'Stream Id', 'Monitor Data', 'Description']
     self._information_checked = {'Time': True, 'Associated Id': True, 'Monitor Tag': True, 'Message Id': True, 'Message': True, 'Size': True, 'Stream Id': False, 'Monitor Data': False, 'Description': True}
     self._info_widget_index = {}
     self.known = []      
     
     self.create_widgets(parent)              
Example #2
0
class ECUMessagesViewPluginGUI(dockarea.DockArea):
            
    def __init__(self, parent):
        dockarea.DockArea.__init__(self)
                
        self.builder = GBuilder()  
        self.widget_index = {} 
        self.widget_text = {}
        self.dock_index = {}
        
        self._external_core = CheckpointInterpreterCore()
        self._information_box_items = ['Time', 'Associated Id', 'Monitor Tag', 'Message Id', 'Message', 'Size', 'Stream Id', 'Monitor Data', 'Description']
        self._information_checked = {'Time': True, 'Associated Id': True, 'Monitor Tag': True, 'Message Id': True, 'Message': True, 'Size': True, 'Stream Id': False, 'Monitor Data': False, 'Description': True}
        self._info_widget_index = {}
        self.known = []      
        
        self.create_widgets(parent)              
            
    def _already_there(self, mon_input): 
        ''' handles duplicates'''
        if hash(mon_input) in self.known: 
            return True      
        self.known.append(hash(mon_input))
        if len(self.known) > 1000:
            del self.known[:floor(float(len(self.known)) / 2.0)]
        return False
    
            
    def create_widgets(self, parent):
        
        h_layout = QHBoxLayout()
        self.viewer_cbox = self.builder.checkable_combobox(parent, [], self._set_cb_changed)
        self.information_cbox = self.builder.checkable_combobox(parent, [], self._set_information_changed)
        self.information_cbox.setFixedWidth(150)
        cnt = 0
        for info in self._information_box_items:
            self.information_cbox.addItem(info)        
            new_row = self.information_cbox.count() - 1
            item = self.information_cbox.model().item(new_row, 0)
            if self._information_checked[info]:
                item.setCheckState(QtCore.Qt.Checked)
            else:
                item.setCheckState(QtCore.Qt.Unchecked)
            self._info_widget_index[cnt] = info
            cnt += 1
        
        h_layout.addWidget(self.viewer_cbox)
        h_layout.addItem(QSpacerItem(10, 10))
        h_layout.addWidget(self.information_cbox)
        
        # add ecu selection
        self.label_top = QtGui.QLabel()
        self.label_top.setText("Message View")
        self.viewDock = dockarea.Dock('view', size=(1000, 600))
        self.layout.addWidget(self.label_top)
        self.label_top.setFixedHeight(20)
        self.layout.addLayout(h_layout)        
        self.layout.addItem(QSpacerItem(10, 10))

    def _set_information_changed(self, e):
        
        # get checked items
        checked_idx = []
        for cnt in range(self.information_cbox.count()):
            item = self.information_cbox.model().item(cnt, 0)
            if item.checkState():                
                checked_idx.append(cnt)
        
        # checked items set them 
        for idx in self._info_widget_index.keys():
        
            info = self._info_widget_index[idx]
            if idx in checked_idx:
                self._information_checked[info] = True
            else: 
                self._information_checked[info] = False

    def _add_items_ecu_ids(self, ecu_ids):
        items = []
        for ecu_id in ecu_ids:
            try:
                items += [self.add_item(ecu_id)]
            except:
                pass
        
        if not items: return
        
        for i in items:
            i.setCheckState(QtCore.Qt.Unchecked)
        items[0].setCheckState(QtCore.Qt.Checked) 
        self._set_cb_changed(None)
        
    def add_item(self, title_text):
        
        # add item to dock                
        new_widget = QTextEdit()
        new_widget.setText("")
        new_widget.setReadOnly(True)
        
        new_dock = dockarea.Dock(title_text, size=(1000, 20))
        new_dock.setOrientation('horizontal')
        new_dock.addWidget(new_widget)
        
        self.addDock(new_dock, 'right')
        
        # add item to combobox
        self.viewer_cbox.addItem(title_text)        
        new_row = self.viewer_cbox.count() - 1
        item = self.viewer_cbox.model().item(new_row, 0)
        item.setCheckState(QtCore.Qt.Checked)
        
        
        # link items
        self.widget_index[new_row] = new_widget
        self.widget_text[title_text] = new_widget
        self.dock_index[new_row] = new_dock
        
        return item
        
        
    def _set_cb_changed(self, e):
        
        # clear all
        try:
            for ky in self.dock_index:
                self.dock_index[ky].setParent(None)    
        except:
            ECULogger().log_traceback()
        
        # get checked items
        checked_idx = []
        for cnt in range(self.viewer_cbox.count()):
            item = self.viewer_cbox.model().item(cnt, 0)
            if item.checkState():                
                checked_idx.append(cnt)
        
        for ky in range(self.viewer_cbox.count()):
            
            # selected draw
            if ky in checked_idx:
                self.addDock(self.dock_index[ky], 'right')                   
                self.widget_index[ky].verticalScrollBar().setValue(self.widget_index[ky].verticalScrollBar().maximum());
    
    def save(self):
        return []
    
    def load(self, val_pairs):
        pass
    
    
    def update_gui(self, monitor_input_list):

        
        # receive the ecu ids
        try: 
            if isinstance(monitor_input_list[0], str): return
            
            constellation = monitor_input_list[0].data
            ecu_groups = constellation[0]
            ecu_ids = [e.ecu_id for e in APICore()._ecu_list_from_groups(ecu_groups)]
            self._add_items_ecu_ids(ecu_ids)   
            return         
        except: 
            pass
        
        monitor_input_list.sort(key=lambda x: x[0], reverse=False)

        # receive simple inputs
        for monitor_input in monitor_input_list:
            # read information
            time = monitor_input[0]
            ecu_id = monitor_input[1]
            associated_id = monitor_input[2]
            tag = eval(monitor_input[3])
            message_id = monitor_input[4]
            message = monitor_input[5]
            message_size = monitor_input[6]
            stream_id = monitor_input[7]
            unique_id = monitor_input[8]
            input_data = monitor_input[9]
            description = self._external_core.cp_string(tag, associated_id, stream_id, message)
            
            # get textedit
            text_edit = self.widget_text[ecu_id]
#             current_text = text_edit.toPlainText()
            
            # create new text
            part_append = ""
                        
            if self._information_checked['Time']: part_append += "\n\nTime: \t%s" % time
            if self._information_checked['Associated Id']: part_append += "\nAssociated Id: \t%s" % associated_id
            if self._information_checked['Monitor Tag']: part_append += "\nMonitor Tag: \t%s" % tag
            if self._information_checked['Message Id']: part_append += "\nMessage Id: \t%s" % message_id
            if self._information_checked['Message']: part_append += "\nMessage: \t%s" % message
            if self._information_checked['Size']: part_append += "\nSize: \t%s" % message_size
            if self._information_checked['Stream Id']: part_append += "\nStream Id: \t%s" % stream_id
            if self._information_checked['Monitor Data']: part_append += "\nMonitor Data: \t%s" % input_data
            if self._information_checked['Description']: part_append += "\nDescription: \t%s" % description

            # add new part
            text_edit.append(part_append)
#             current_text += part_append
#             text_edit.setText(current_text)
            text_edit.verticalScrollBar().setValue(text_edit.verticalScrollBar().maximum());