1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 from PySide import QtCore
34 from PySide import QtGui
35
36 import roslib
39 '''
40 The parameter item is stored in the parameter model. This class stores the name
41 and value of a parameter of ROS parameter server and shows the value.
42 '''
43
44 ITEM_TYPE = QtGui.QStandardItem.UserType + 39
45
46 - def __init__(self, name, value, parent=None):
47 '''
48 Initialize the item object.
49 @param name: the name of the parameter
50 @type name: C{str}
51 @param value: the value of the parameter
52 @type value: C{str}
53 '''
54 QtGui.QStandardItem.__init__(self, unicode(value))
55 self._name = name
56 '''@ivar: the name of parameter '''
57 self._value = value
58 '''@ivar: the value of the parameter '''
59 if isinstance(value, (str, unicode)) and value.find('\n') > -1:
60 self.setSizeHint(QtCore.QSize(-1, 45))
61
62 @property
65
66 @property
69
70 @value.setter
72 self._value = value
73 self.setText(unicode(value))
74 if isinstance(value, (str, unicode)) and value.find('\n') > -1:
75 self.setSizeHint(QtCore.QSize(-1, 45))
76
79
80
82 '''
83 Compares the value of parameter.
84 '''
85 if isinstance(item, str) or isinstance(item, unicode):
86 return unicode(self.value) == item
87 elif not (item is None):
88 return unicode(self.value) == unicode(item.value)
89 return False
90
92 '''
93 Compares the value of parameter.
94 '''
95 if isinstance(item, str) or isinstance(item, unicode):
96 return unicode(self.value) > item
97 elif not (item is None):
98 return unicode(self.value) > unicode(item.value)
99 return False
100
102 '''
103 The parameter item is stored in the parameter model. This class stores the name
104 and value of a parameter of ROS parameter server and shows the name.
105 '''
106
107 ITEM_TYPE = QtGui.QStandardItem.UserType + 38
108
109 - def __init__(self, name, value, parent=None):
110 '''
111 Initialize the item object.
112 @param name: the name of the parameter
113 @type name: C{str}
114 @param value: the value of the parameter
115 @type value: C{str}
116 '''
117 QtGui.QStandardItem.__init__(self, self.toHTML(name))
118 self._name = name
119 '''@ivar: the name of parameter '''
120 self._value = value
121 '''@ivar: the value of the parameter '''
122
123 @property
126
127 @property
130
131 @value.setter
135
138
139 @classmethod
141 '''
142 Creates a HTML representation of the parameter name.
143 @param key: the parameter name
144 @type key: C{str}
145 @return: the HTML representation of the parameter name
146 @rtype: C{str}
147 '''
148 ns, sep, name = key.rpartition('/')
149 result = ''
150 if sep:
151 result = ''.join(['<html><body>', '<span style="color:gray;">', str(ns), sep, '</span><b>', name, '</b></body></html>'])
152 else:
153 result = name
154 return result
155
157 '''
158 Compares the name of parameter.
159 '''
160 if isinstance(item, str) or isinstance(item, unicode):
161 return self.name.lower() == item.lower()
162 elif not (item is None):
163 return self.name.lower() == item.name.lower()
164 return False
165
167 '''
168 Compares the name of parameter.
169 '''
170 if isinstance(item, str) or isinstance(item, unicode):
171 return self.name.lower() > item.lower()
172 elif not (item is None):
173 return self.name.lower() > item.name.lower()
174 return False
175
179 '''
180 The model to manage the list with parameter in ROS network.
181 '''
182 header = [('Parameter', 300),
183 ('Value', -1)]
184 '''@ivar: the list with columns C{[(name, width), ...]}'''
185
193
195 '''
196 @param index: parent of the list
197 @type index: L{PySide.QtCore.QModelIndex}
198 @return: Flag or the requestet item
199 @rtype: L{PySide.QtCore.Qt.ItemFlag}
200 @see: U{http://www.pyside.org/docs/pyside-1.0.1/PySide/QtCore/Qt.html}
201 '''
202 if not index.isValid():
203 return QtCore.Qt.NoItemFlags
204 if index.column() == 1:
205 return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable
206 return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
207
209 '''
210 Updates the parameter list model. New parameter will be inserted in sorting
211 order. Not available parameter removed from the model.
212 @param parameters: The dictionary with parameter
213 @type parameters: C{dict(parameter name : value)}
214 '''
215 parameter_names = parameters.keys()
216 root = self.invisibleRootItem()
217
218 for i in reversed(range(root.rowCount())):
219 parameterItem = root.child(i)
220 if not parameterItem.name in parameter_names:
221 root.removeRow(i)
222
223 for (name, value) in parameters.items():
224 doAddItem = True
225 for i in range(root.rowCount()):
226 parameterItem = root.child(i)
227 if (parameterItem == name):
228
229 parameterValueItem = root.child(i, 1)
230 parameterValueItem.value = value
231 doAddItem = False
232 break
233 elif (parameterItem > name):
234 root.insertRow(i, self.createParameter(name, value))
235 doAddItem = False
236 break
237 if doAddItem:
238 root.appendRow(self.createParameter(name, value))
239
241 '''
242 Creates the list of the items. This list is used for the
243 visualization of the parameter as a table row.
244 @param name: the parameter name
245 @type name: C{str}
246 @param value: the value of the parameter
247 @type value: each value, that can be converted to C{str} using L{str()}
248 @return: the list for the representation as a row
249 @rtype: C{[L{ParameterNameItem}, L{ParameterValueItem}]}
250 '''
251 items = []
252 item = ParameterNameItem(name, value)
253 item.setEditable(False)
254 items.append(item)
255 itemValue = ParameterValueItem(name, value)
256 itemValue.setEditable(True)
257 items.append(itemValue)
258 return items
259