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 import os
34 import sys
35 import shutil
36
37 from python_qt_binding import QtCore
38 from python_qt_binding import QtGui
39
40 import node_manager_fkie as nm
41 from common import is_package, package_name
42 from packages_thread import PackagesThread
43 from .detailed_msg_box import WarningMessageBox
46
47 ITEM_TYPE = QtGui.QStandardItem.UserType + 80
48
53
56
57 - def data(self, role):
58 '''
59 The view asks us for all sorts of information about our data...
60 @param role: the art of the data
61 @type role: L{QtCore.Qt.DisplayRole}
62 @see: U{http://www.pyside.org/docs/pyside-1.0.1/PySide/QtCore/Qt.html}
63 '''
64 if role == QtCore.Qt.DisplayRole:
65
66 return self.name
67 elif role == QtCore.Qt.ToolTipRole:
68
69 return self.tooltip
70 else:
71
72 return QtGui.QStandardItem.data(self, role)
73
76
77 ITEM_TYPE = QtGui.QStandardItem.UserType + 81
78
79 EDIT_TYPE_AUTODETECT = 0
80 EDIT_TYPE_FOLDER = 1
81
82 - def __init__(self, value, (settings, attrname)=(None, None),
83 edit_type=0,
84 value_default=None, value_min=None, value_max=None):
85 '''
86 :param value: the current value
87 :type value: any std types
88 :param settings: the object, which contains `attrname` as property and
89 provide the parameter changes
90 :type settings: object (Settings)
91 :param attrname: the parameter name, which is available as property in
92 `settings` object.
93 :type attrname: str
94 :param edit_type: the editor type will be detected automatically by default.
95 For different editors you can set manually the `EDIT_TYPE_*`
96 :type edit_type: int (`EDIT_TYPE_*`)
97 :param value_default: the default value, is needed for reset functionality
98 :param value_min: the maximum value (used by int or float)
99 :param value_max: the minimum value (used by int or float)
100 '''
101 QtGui.QStandardItem.__init__(self, '%s'%value)
102 self._attrname = attrname
103 self._value = value
104 self._value_default = value_default
105 self._value_min = value_min
106 self._value_max = value_max
107 self._settings = settings
108 self._edit_type = edit_type
109
112
114 return self._attrname
115
118
120 return self._value_default
121
123 return self._value_min
124
126 return self._value_max
127
129 return self._edit_type
130
131 - def data(self, role):
132 '''
133 The view asks us for all sorts of information about our data...
134 @param role: the art of the data
135 @type role: L{QtCore.Qt.DisplayRole}
136 @see: U{http://www.pyside.org/docs/pyside-1.0.1/PySide/QtCore/Qt.html}
137 '''
138 if role == QtCore.Qt.DisplayRole:
139
140 return '%s'%self._value
141
142
143 elif role == QtCore.Qt.EditRole:
144 return self._value
145 else:
146
147 return QtGui.QStandardItem.data(self, role)
148
149 - def setData(self, value, role=QtCore.Qt.EditRole):
150 if role == QtCore.Qt.EditRole:
151 self._value = value
152 if hasattr(self._settings, self._attrname):
153 setattr(self._settings, self._attrname, value)
154 return QtGui.QStandardItem.setData(self, value, role)
155
158
159 ITEM_TYPE = QtGui.QStandardItem.UserType + 82
160
164
167
168 - def data(self, role):
169 '''
170 The view asks us for all sorts of information about our data...
171 @param index: parent of the list
172 @type index: L{QtCore.QModelIndex}
173 @param role: the art of the data
174 @type role: L{QtCore.Qt.DisplayRole}
175 @see: U{http://www.pyside.org/docs/pyside-1.0.1/PySide/QtCore/Qt.html}
176 '''
177 if role == QtCore.Qt.DisplayRole:
178
179 return self.name
180
181
182 else:
183
184 return QtGui.QStandardItem.data(self, role)
185
186 @classmethod
188 '''
189 Creates the list of the items . This list is used for the
190 visualization of settings group data as a table row.
191 @param name: the group name
192 @type name: C{str}
193 @rtype: C{[L{SettingsGroupItem} and L{PySide.QtGui.QStandardItem}]}
194 '''
195 items = []
196 item = SettingsGroupItem(name)
197 items.append(item)
198
199
200 return items
201
202 @classmethod
203 - def getSettingsItemList(self, name, value, (settings, attrname)=(None, None),
204 tooltip='', edit_type=SettingsValueItem.EDIT_TYPE_AUTODETECT,
205 value_default=None, value_min=None, value_max=None):
219
222 '''
223 The model to manage the settings.
224 '''
225 header = [('Parameter', 160), ('Value', -1)]
226 '''@ivar: the list with columns C{[(name, width), ...]}'''
227
229 '''
230 Creates a new list model.
231 '''
232 QtGui.QStandardItemModel.__init__(self)
233 self.setColumnCount(len(SettingsModel.header))
234 self.setHorizontalHeaderLabels([label for label, width in SettingsModel.header])
235 self.pyqt_workaround = dict()
236
237
238
239
240
242 '''
243 @param index: parent of the list
244 @type index: L{PySide.QtCore.QModelIndex}
245 @return: Flag or the requested item
246 @rtype: L{PySide.QtCore.Qt.ItemFlag}
247 @see: U{http://www.pyside.org/docs/pyside-1.0.1/PySide/QtCore/Qt.html}
248 '''
249 if not index.isValid():
250 return QtCore.Qt.NoItemFlags
251 try:
252 item = self.itemFromIndex(index)
253 result = QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled
254 if item.type() in [SettingsValueItem.ITEM_TYPE]:
255 result = result | QtCore.Qt.ItemIsEditable
256 return result
257 except:
258 import traceback
259 print traceback.format_exc()
260 return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
261
262
263
264
265
267 '''
268 Updates the model data.
269 @param settings: a dictionary with settings name and values.
270 @type settings: C{dict(str:L{(.. parameter of SettingsGroupItem.getSettingsItemList())}, ...)}
271 '''
272
273 root = self.invisibleRootItem()
274 while root.rowCount():
275 print "remove"
276 root.removeRow(0)
277 self.pyqt_workaround.clear()
278
279 try:
280 for name, value in settings.items():
281 self._add_item(root, name, value)
282 except:
283 import traceback
284 print traceback.format_exc()
285
287 if isinstance(value, dict):
288 new_item_row = SettingsGroupItem.getGroupItemList(name)
289 root.appendRow(new_item_row)
290 self.pyqt_workaround['group_%s'%name] = new_item_row[0]
291 for name, value in value.items():
292 self._add_item(new_item_row[0], name, value)
293 else:
294 new_item_row = SettingsGroupItem.getSettingsItemList(name,
295 self._get_settings_param(value, 'value'),
296 (self._get_settings_param(value, 'settings'),
297 self._get_settings_param(value, 'attrname')),
298 self._get_settings_param(value, 'tooltip', ''),
299 self._get_settings_param(value, 'edit_type',
300 SettingsValueItem.EDIT_TYPE_AUTODETECT),
301 self._get_settings_param(value, 'value_default'),
302 self._get_settings_param(value, 'value_min'),
303 self._get_settings_param(value, 'value_max')
304 )
305 root.appendRow(new_item_row)
306 self.pyqt_workaround[name] = new_item_row[0]
307
309 try:
310 return entry[0][param]
311 except:
312 return default
313