def _recursive_create_widget_items(self, parent, topic_name, type_name, message, is_editable=True): item = QTreeWidgetItem(parent) if is_editable: item.setFlags(item.flags() | Qt.ItemIsEditable) else: item.setFlags(item.flags() & (~Qt.ItemIsEditable)) if parent is None: # show full topic name with preceding namespace on toplevel item topic_text = topic_name else: topic_text = topic_name.split('/')[-1] item.setText(self._column_index['service'], topic_text) item.setText(self._column_index['type'], type_name) item.setData(0, Qt.UserRole, topic_name) if hasattr(message, '__slots__') and hasattr(message, '_slot_types'): for slot_name, type_name in zip(message.__slots__, message._slot_types): self._recursive_create_widget_items(item, topic_name + '/' + slot_name, type_name, getattr(message, slot_name), is_editable) elif type(message) in (list, tuple) and (len(message) > 0) and hasattr(message[0], '__slots__'): type_name = type_name.split('[', 1)[0] for index, slot in enumerate(message): self._recursive_create_widget_items(item, topic_name + '[%d]' % index, type_name, slot, is_editable) else: item.setText(self._column_index['expression'], repr(message)) return item
def _add_frequently_used_skill(self, s): self.last_executed_skill = s.name fu = self.skill_tree_widget.findItems("fu", Qt.MatchRecursive | Qt.MatchFixedString, 1)[0] for i in range(0, fu.childCount()): # avoid adding same node multiple times if s.name == fu.child(i).data(1, 0): return skill = QTreeWidgetItem(fu, [s.name, s.name]) skill.setData(2, 0, s)
def _add_available_skill(self, s): stype = self.skill_tree_widget.findItems(s.type, Qt.MatchRecursive | Qt.MatchFixedString, 1) if not stype: #If it is the first of its type, add the parents hierarchy to the tree hierarchy = self._wmi.query_ontology('SELECT ?x {{ {} rdfs:subClassOf* ?x }}'.format(s.type)) hierarchy = hierarchy[:hierarchy.index("skiros:Skill")] hierarchy.reverse() parent = self.skill_tree_widget.findItems("All", Qt.MatchRecursive | Qt.MatchFixedString, 1)[0] for c in hierarchy: child = self.skill_tree_widget.findItems(c, Qt.MatchRecursive | Qt.MatchFixedString, 1) if child: parent = child[0] else: parent = QTreeWidgetItem(parent, [c.replace("skiros:", ""), c]) parent.setExpanded(True) else: parent = stype[0] skill = QTreeWidgetItem(parent, [s.name, s.name]) skill.setData(2, 0, s)
def _add_msg_object(self, parent, path, name, obj, obj_type): label = name if hasattr(obj, '__slots__'): subobjs = [(slot, getattr(obj, slot)) for slot in obj.__slots__] elif type(obj) in [list, tuple]: len_obj = len(obj) if len_obj == 0: subobjs = [] else: w = int(math.ceil(math.log10(len_obj))) subobjs = [('[%*d]' % (w, i), subobj) for (i, subobj) in enumerate(obj)] else: subobjs = [] plotitem = False if type(obj) in [int, long, float]: plotitem = True if type(obj) == float: obj_repr = '%.6f' % obj else: obj_repr = str(obj) if obj_repr[0] == '-': label += ': %s' % obj_repr else: label += ': %s' % obj_repr elif type(obj) in [str, bool, int, long, float, complex, rospy.Time]: # Ignore any binary data obj_repr = codecs.utf_8_decode(str(obj), 'ignore')[0] # Truncate long representations if len(obj_repr) >= 50: obj_repr = obj_repr[:50] + '...' label += ': ' + obj_repr item = QTreeWidgetItem([label]) if name == '': pass elif path.find('.') == -1 and path.find('[') == -1: self.addTopLevelItem(item) else: parent.addChild(item) if plotitem == True: if path.replace(' ', '') in self._checked_states: item.setCheckState(0, Qt.Checked) else: item.setCheckState(0, Qt.Unchecked) item.setData(0, Qt.UserRole, (path, obj_type)) for subobj_name, subobj in subobjs: if subobj is None: continue if path == '': subpath = subobj_name # root field elif subobj_name.startswith('['): subpath = '%s%s' % (path, subobj_name) # list, dict, or tuple else: subpath = '%s.%s' % (path, subobj_name) # attribute (prefix with '.') if hasattr(subobj, '_type'): subobj_type = subobj._type else: subobj_type = type(subobj).__name__ self._add_msg_object(item, subpath, subobj_name, subobj, subobj_type)
def _add_msg_object(self, parent, path, name, obj, obj_type): label = name if hasattr(obj, '__slots__'): subobjs = [(slot, getattr(obj, slot)) for slot in obj.__slots__] elif type(obj) in [list, tuple]: len_obj = len(obj) if len_obj == 0: subobjs = [] else: w = int(math.ceil(math.log10(len_obj))) subobjs = [('[%*d]' % (w, i), subobj) for (i, subobj) in enumerate(obj)] else: subobjs = [] plotitem=False if type(obj) in [int, long, float]: plotitem=True if type(obj) == float: obj_repr = '%.6f' % obj else: obj_repr = str(obj) if obj_repr[0] == '-': label += ': %s' % obj_repr else: label += ': %s' % obj_repr elif type(obj) in [str, bool, int, long, float, complex, rospy.Time]: # Ignore any binary data obj_repr = codecs.utf_8_decode(str(obj), 'ignore')[0] # Truncate long representations if len(obj_repr) >= 50: obj_repr = obj_repr[:50] + '...' label += ': ' + obj_repr item = QTreeWidgetItem([label]) if name == '': pass elif path.find('.') == -1 and path.find('[') == -1: self.addTopLevelItem(item) else: parent.addChild(item) if plotitem == True: if path.replace(' ', '') in self._checked_states: item.setCheckState (0, Qt.Checked) else: item.setCheckState (0, Qt.Unchecked) item.setData(0, Qt.UserRole, (path, obj_type)) for subobj_name, subobj in subobjs: if subobj is None: continue if path == '': subpath = subobj_name # root field elif subobj_name.startswith('['): subpath = '%s%s' % (path, subobj_name) # list, dict, or tuple else: subpath = '%s.%s' % (path, subobj_name) # attribute (prefix with '.') if hasattr(subobj, '_type'): subobj_type = subobj._type else: subobj_type = type(subobj).__name__ self._add_msg_object(item, subpath, subobj_name, subobj, subobj_type)