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 python_qt_binding.QtCore import QSize, Qt
34 from python_qt_binding.QtGui import QStandardItem, QStandardItemModel
35 from xmlrpclib import Binary
36
37 from node_manager_fkie.common import utf8
41 '''
42 The parameter item is stored in the parameter model. This class stores the name
43 and value of a parameter of ROS parameter server and shows the value.
44 '''
45
46 ITEM_TYPE = QStandardItem.UserType + 39
47 NAME_ROLE = Qt.UserRole + 1
48 VALUE_ROLE = Qt.UserRole + 2
49 TYPE_ROLE = Qt.UserRole + 3
50
51 - def __init__(self, name, value, parent=None):
52 '''
53 Initialize the item object.
54 @param name: the name of the parameter
55 @type name: C{str}
56 @param value: the value of the parameter
57 @type value: C{str}
58 '''
59 QStandardItem.__init__(self, utf8(value) if not isinstance(value, Binary) else utf8(value))
60 self._name = name
61 '''@ivar: the name of parameter '''
62 self._value = value
63 '''@ivar: the value of the parameter '''
64 if isinstance(value, (str, unicode)) and value.find('\n') > -1:
65 self.setSizeHint(QSize(-1, 45))
66
67 @property
70
71 @property
74
75 @value.setter
81
84
85 - def data(self, role):
94
96 '''
97 Compares the value of parameter.
98 '''
99 if isinstance(item, str) or isinstance(item, unicode):
100 return utf8(self.value) == utf8(item)
101 elif not (item is None):
102 return utf8(self.value) == utf8(item.value)
103 return False
104
106 '''
107 Compares the value of parameter.
108 '''
109 if isinstance(item, str) or isinstance(item, unicode):
110 return utf8(self.value) > utf8(item)
111 elif not (item is None):
112 return utf8(self.value) > utf8(item.value)
113 return False
114
117 '''
118 The parameter item is stored in the parameter model. This class stores the name
119 and value of a parameter of ROS parameter server and shows the name.
120 '''
121
122 ITEM_TYPE = QStandardItem.UserType + 38
123 NAME_ROLE = Qt.UserRole + 1
124 VALUE_ROLE = Qt.UserRole + 2
125 TYPE_ROLE = Qt.UserRole + 3
126
127 - def __init__(self, name, value, parent=None):
128 '''
129 Initialize the item object.
130 @param name: the name of the parameter
131 @type name: C{str}
132 @param value: the value of the parameter
133 @type value: C{str}
134 '''
135 QStandardItem.__init__(self, name)
136 self._name = name
137 '''@ivar: the name of parameter '''
138 self._value = value
139 '''@ivar: the value of the parameter '''
140
141 @property
144
145 @property
148
149 @value.setter
153
156
157 - def data(self, role):
166
168 '''
169 Compares the name of parameter.
170 '''
171 if isinstance(item, str) or isinstance(item, unicode):
172 return self.name.lower() == item.lower()
173 elif not (item is None):
174 return self.name.lower() == item.name.lower()
175 return False
176
178 '''
179 Compares the name of parameter.
180 '''
181 if isinstance(item, str) or isinstance(item, unicode):
182 return self.name.lower() > item.lower()
183 elif not (item is None):
184 return self.name.lower() > item.name.lower()
185 return False
186
189 '''
190 The parameter item is stored in the parameter model. This class stores the name
191 and value of a parameter of ROS parameter server and shows the name.
192 '''
193
194 ITEM_TYPE = QStandardItem.UserType + 40
195 NAME_ROLE = Qt.UserRole + 1
196 VALUE_ROLE = Qt.UserRole + 2
197 TYPE_ROLE = Qt.UserRole + 3
198
199 - def __init__(self, name, value, parent=None):
200 '''
201 Initialize the item object.
202 @param name: the name of the parameter
203 @type name: C{str}
204 @param value: the value of the parameter
205 @type value: C{str}
206 '''
207 QStandardItem.__init__(self, utf8(type(value)).replace("<type '", '').replace("'>", ''))
208 self._name = name
209 '''@ivar: the name of parameter '''
210 self._value = value
211 '''@ivar: the value of the parameter '''
212
213 @property
216
217 @property
220
221 @value.setter
225
228
229 - def data(self, role):
238
240 '''
241 Compares the name of parameter.
242 '''
243 if isinstance(item, str) or isinstance(item, unicode):
244 return self.name.lower() == item.lower()
245 elif not (item is None):
246 return self.name.lower() == item.name.lower()
247 return False
248
250 '''
251 Compares the name of parameter.
252 '''
253 if isinstance(item, str) or isinstance(item, unicode):
254 return self.name.lower() > item.lower()
255 elif not (item is None):
256 return self.name.lower() > item.name.lower()
257 return False
258
261 '''
262 The model to manage the list with parameter in ROS network.
263 '''
264 header = [('Parameter', 300),
265 ('Type', 50),
266 ('Value', -1)]
267 '''@ivar: the list with columns C{[(name, width), ...]}'''
268
276
278 '''
279 @param index: parent of the list
280 @type index: U{QtCore.QModelIndex<https://srinikom.github.io/pyside-docs/PySide/QtCore/QModelIndex.html>}
281 @return: Flag or the requestet item
282 @rtype: U{QtCore.Qt.ItemFlag<https://srinikom.github.io/pyside-docs/PySide/QtCore/Qt.html>}
283 @see: U{http://www.pyside.org/docs/pyside-1.0.1/PySide/QtCore/Qt.html}
284 '''
285 if not index.isValid():
286 return Qt.NoItemFlags
287 if index.column() == 2:
288 return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
289 return Qt.ItemIsEnabled | Qt.ItemIsSelectable
290
292 '''
293 Updates the parameter list model. New parameter will be inserted in sorting
294 order. Not available parameter removed from the model.
295 @param parameters: The dictionary with parameter
296 @type parameters: C{dict(parameter name : value)}
297 '''
298 parameter_names = parameters.keys()
299 root = self.invisibleRootItem()
300
301 for i in reversed(range(root.rowCount())):
302 parameterItem = root.child(i)
303 if parameterItem.name not in parameter_names:
304 root.removeRow(i)
305
306 for (name, value) in parameters.items():
307 doAddItem = True
308 for i in range(root.rowCount()):
309 parameterItem = root.child(i)
310 if (parameterItem == name):
311
312 parameterValueItem = root.child(i, 2)
313 parameterValueItem.value = value
314 doAddItem = False
315 break
316 elif (parameterItem > name):
317 root.insertRow(i, self.createParameter(name, value))
318 doAddItem = False
319 break
320 if doAddItem:
321 root.appendRow(self.createParameter(name, value))
322
324 '''
325 Creates the list of the items. This list is used for the
326 visualization of the parameter as a table row.
327 @param name: the parameter name
328 @type name: C{str}
329 @param value: the value of the parameter
330 @type value: each value, that can be converted to C{str} using L{str()}
331 @return: the list for the representation as a row
332 @rtype: C{[L{ParameterNameItem}, L{ParameterValueItem}]}
333 '''
334 items = []
335 item = ParameterNameItem(name, value)
336 item.setEditable(False)
337 items.append(item)
338 item = ParameterTypeItem(name, value)
339 item.setEditable(False)
340 items.append(item)
341 itemValue = ParameterValueItem(name, value)
342 itemValue.setEditable(True)
343 items.append(itemValue)
344 return items
345