32 from python_qt_binding.QtGui
import QStandardItem, QStandardItemModel
33 from .data_items
import ReadonlyItem
41 QStandardItemModel.__init__(self, parent)
43 def add_message(self, message_instance, message_name='', message_type='', message_path=''):
44 if message_instance
is None:
47 self, message_instance, message_name, message_type, message_path)
50 items = [self.itemFromIndex(index)
for index
in index_list]
53 while item.parent()
is not None:
55 if item.row()
not in uniqueItems:
56 uniqueItems[item.row()] = item
57 return uniqueItems.values()
60 return (QStandardItem(slot_name), QStandardItem(slot_type_name), QStandardItem(slot_path))
65 item._path = slot_path
66 item._user_data = kwargs.get(
'user_data',
None)
70 if hasattr(slot,
'__slots__')
and hasattr(slot,
'_slot_types'):
71 for child_slot_name, child_slot_type
in zip(slot.__slots__, slot._slot_types):
72 child_slot_path = slot_path +
'/' + child_slot_name
73 child_slot = getattr(slot, child_slot_name)
75 row[0], child_slot, child_slot_name, child_slot_type, child_slot_path, **kwargs)
77 elif type(slot)
in (list, tuple)
and (len(slot) > 0):
78 child_slot_type = slot_type_name[:slot_type_name.find(
'[')]
79 for index, child_slot
in enumerate(slot):
80 child_slot_name =
'[%d]' % index
81 child_slot_path = slot_path + child_slot_name
83 row[0], child_slot, child_slot_name, child_slot_type, child_slot_path, **kwargs)
88 if parent
is self
and kwargs.get(
'top_level_row_number',
None)
is not None:
89 parent.insertRow(kwargs[
'top_level_row_number'], row)
93 return (row, is_leaf_node)
96 NOTE: I (Isaac Saito) suspect that this function might have same/similar 97 functionality with _recursive_create_items. 99 @summary: Evaluate current node and the previous node on the same depth. 100 If the name of both nodes at the same depth is the same, 101 current name is added to the previous node. 102 If not, the current name gets added to the parent node. 103 At the end, this function calls itself recursively going down 105 @param stditem_parent: QStandardItem. 106 @param names_on_branch: List of strings each of which 107 represents the name of the node. 108 Ex. If you have a hierarchy that looks like: 110 /top_node/sub_node/subsub_node 112 then this list would look like: 114 [ top_node, sub_node, subsub_node ] 119 name_curr = names_on_branch.pop(0)
122 row_index_parent = stditem_parent.rowCount() - 1
127 if not stditem_parent.child(row_index_parent) ==
None:
128 stditem_prev = stditem_parent.child(row_index_parent)
129 name_prev = stditem_prev.text()
132 if not name_prev == name_curr:
133 stditem_parent.appendRow(stditem_curr)
134 stditem = stditem_curr
136 stditem = stditem_prev
138 rospy.logdebug(
'add_tree_node 1 name_curr=%s ' +
139 '\n\t\t\t\t\tname_prev=%s row_index_parent=%d', name_curr, name_prev, row_index_parent)
140 if (0 < len(names_on_branch)):
141 MessageTreeModel._build_tree_recursive(stditem, names_on_branch)
def _get_data_items_for_path(self, slot_name, slot_type_name, slot_path, kwargs)
def add_message(self, message_instance, message_name='', message_type='', message_path='')
def _get_toplevel_items(self, index_list)
def _recursive_create_items(self, parent, slot, slot_name, slot_type_name, slot_path, kwargs)
def __init__(self, parent=None)
def _build_tree_recursive(stditem_parent, names_on_branch)