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
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 = QStandardItem.UserType + 39
45 NAME_ROLE = Qt.UserRole + 1
46 VALUE_ROLE = Qt.UserRole + 2
47 TYPE_ROLE = Qt.UserRole + 3
48
49 - def __init__(self, name, value, parent=None):
50 '''
51 Initialize the item object.
52 @param name: the name of the parameter
53 @type name: C{str}
54 @param value: the value of the parameter
55 @type value: C{str}
56 '''
57 QStandardItem.__init__(self, unicode(value) if not isinstance(value, Binary) else str(value))
58 self._name = name
59 '''@ivar: the name of parameter '''
60 self._value = value
61 '''@ivar: the value of the parameter '''
62 if isinstance(value, (str, unicode)) and value.find('\n') > -1:
63 self.setSizeHint(QSize(-1, 45))
64
65 @property
68
69 @property
72
73 @value.setter
75 self._value = value
76 self.setText(unicode(value) if not isinstance(value, Binary) else str(value))
77 if isinstance(value, (str, unicode)) and value.find('\n') > -1:
78 self.setSizeHint(QSize(-1, 45))
79
82
83 - def data(self, role):
84 if role == self.NAME_ROLE:
85 return self.name
86 elif role == self.VALUE_ROLE:
87 return str(self.value)
88 elif role == self.TYPE_ROLE:
89 return str(type(self.value).replace('<type \'').replace('\'>'))
90 else:
91 return QStandardItem.data(self, role)
92
94 '''
95 Compares the value of parameter.
96 '''
97 if isinstance(item, str) or isinstance(item, unicode):
98 return unicode(self.value) == item
99 elif not (item is None):
100 return unicode(self.value) == unicode(item.value)
101 return False
102
104 '''
105 Compares the value of parameter.
106 '''
107 if isinstance(item, str) or isinstance(item, unicode):
108 return unicode(self.value) > item
109 elif not (item is None):
110 return unicode(self.value) > unicode(item.value)
111 return False
112
115 '''
116 The parameter item is stored in the parameter model. This class stores the name
117 and value of a parameter of ROS parameter server and shows the name.
118 '''
119
120 ITEM_TYPE = QStandardItem.UserType + 38
121 NAME_ROLE = Qt.UserRole + 1
122 VALUE_ROLE = Qt.UserRole + 2
123 TYPE_ROLE = Qt.UserRole + 3
124
125 - def __init__(self, name, value, parent=None):
126 '''
127 Initialize the item object.
128 @param name: the name of the parameter
129 @type name: C{str}
130 @param value: the value of the parameter
131 @type value: C{str}
132 '''
133 QStandardItem.__init__(self, name)
134 self._name = name
135 '''@ivar: the name of parameter '''
136 self._value = value
137 '''@ivar: the value of the parameter '''
138
139 @property
142
143 @property
146
147 @value.setter
151
154
155 - def data(self, role):
156 if role == self.NAME_ROLE:
157 return self.name
158 elif role == self.VALUE_ROLE:
159 return str(self.value)
160 elif role == self.TYPE_ROLE:
161 return str(type(self.value).replace('<type \'').replace('\'>'))
162 else:
163 return QStandardItem.data(self, role)
164
166 '''
167 Compares the name of parameter.
168 '''
169 if isinstance(item, str) or isinstance(item, unicode):
170 return self.name.lower() == item.lower()
171 elif not (item is None):
172 return self.name.lower() == item.name.lower()
173 return False
174
176 '''
177 Compares the name of parameter.
178 '''
179 if isinstance(item, str) or isinstance(item, unicode):
180 return self.name.lower() > item.lower()
181 elif not (item is None):
182 return self.name.lower() > item.name.lower()
183 return False
184
187 '''
188 The parameter item is stored in the parameter model. This class stores the name
189 and value of a parameter of ROS parameter server and shows the name.
190 '''
191
192 ITEM_TYPE = QStandardItem.UserType + 40
193 NAME_ROLE = Qt.UserRole + 1
194 VALUE_ROLE = Qt.UserRole + 2
195 TYPE_ROLE = Qt.UserRole + 3
196
197 - def __init__(self, name, value, parent=None):
198 '''
199 Initialize the item object.
200 @param name: the name of the parameter
201 @type name: C{str}
202 @param value: the value of the parameter
203 @type value: C{str}
204 '''
205 QStandardItem.__init__(self, str(type(value)).replace("<type '", '').replace("'>", ''))
206 self._name = name
207 '''@ivar: the name of parameter '''
208 self._value = value
209 '''@ivar: the value of the parameter '''
210
211 @property
214
215 @property
218
219 @value.setter
223
226
227 - def data(self, role):
228 if role == self.NAME_ROLE:
229 return self.name
230 elif role == self.VALUE_ROLE:
231 return str(self.value)
232 elif role == self.TYPE_ROLE:
233 return str(type(self.value).replace('<type \'').replace('\'>'))
234 else:
235 return QStandardItem.data(self, role)
236
238 '''
239 Compares the name of parameter.
240 '''
241 if isinstance(item, str) or isinstance(item, unicode):
242 return self.name.lower() == item.lower()
243 elif not (item is None):
244 return self.name.lower() == item.name.lower()
245 return False
246
248 '''
249 Compares the name of parameter.
250 '''
251 if isinstance(item, str) or isinstance(item, unicode):
252 return self.name.lower() > item.lower()
253 elif not (item is None):
254 return self.name.lower() > item.name.lower()
255 return False
256
259 '''
260 The model to manage the list with parameter in ROS network.
261 '''
262 header = [('Parameter', 300),
263 ('Type', 50),
264 ('Value', -1)]
265 '''@ivar: the list with columns C{[(name, width), ...]}'''
266
274
276 '''
277 @param index: parent of the list
278 @type index: U{QtCore.QModelIndex<https://srinikom.github.io/pyside-docs/PySide/QtCore/QModelIndex.html>}
279 @return: Flag or the requestet item
280 @rtype: U{QtCore.Qt.ItemFlag<https://srinikom.github.io/pyside-docs/PySide/QtCore/Qt.html>}
281 @see: U{http://www.pyside.org/docs/pyside-1.0.1/PySide/QtCore/Qt.html}
282 '''
283 if not index.isValid():
284 return Qt.NoItemFlags
285 if index.column() == 2:
286 return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsEditable
287 return Qt.ItemIsEnabled | Qt.ItemIsSelectable
288
290 '''
291 Updates the parameter list model. New parameter will be inserted in sorting
292 order. Not available parameter removed from the model.
293 @param parameters: The dictionary with parameter
294 @type parameters: C{dict(parameter name : value)}
295 '''
296 parameter_names = parameters.keys()
297 root = self.invisibleRootItem()
298
299 for i in reversed(range(root.rowCount())):
300 parameterItem = root.child(i)
301 if parameterItem.name not in parameter_names:
302 root.removeRow(i)
303
304 for (name, value) in parameters.items():
305 doAddItem = True
306 for i in range(root.rowCount()):
307 parameterItem = root.child(i)
308 if (parameterItem == name):
309
310 parameterValueItem = root.child(i, 2)
311 parameterValueItem.value = value
312 doAddItem = False
313 break
314 elif (parameterItem > name):
315 root.insertRow(i, self.createParameter(name, value))
316 doAddItem = False
317 break
318 if doAddItem:
319 root.appendRow(self.createParameter(name, value))
320
322 '''
323 Creates the list of the items. This list is used for the
324 visualization of the parameter as a table row.
325 @param name: the parameter name
326 @type name: C{str}
327 @param value: the value of the parameter
328 @type value: each value, that can be converted to C{str} using L{str()}
329 @return: the list for the representation as a row
330 @rtype: C{[L{ParameterNameItem}, L{ParameterValueItem}]}
331 '''
332 items = []
333 item = ParameterNameItem(name, value)
334 item.setEditable(False)
335 items.append(item)
336 item = ParameterTypeItem(name, value)
337 item.setEditable(False)
338 items.append(item)
339 itemValue = ParameterValueItem(name, value)
340 itemValue.setEditable(True)
341 items.append(itemValue)
342 return items
343