Mercurial > lcfOS
comparison python/qtpropertyviewer.py @ 109:ad14c7c52589
Created qt property viewer
author | Windel Bouwman |
---|---|
date | Thu, 03 Jan 2013 18:33:29 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
108:8267ba1dbce3 | 109:ad14c7c52589 |
---|---|
1 from PyQt4.QtCore import * | |
2 from PyQt4.QtGui import * | |
3 import sys | |
4 | |
5 class QtPropertyModel(QAbstractTableModel): | |
6 def __init__(self): | |
7 super().__init__() | |
8 self.InspectedWidget = None | |
9 def getInspectedWidget(self): | |
10 return self.inspectedWidget | |
11 def setInspectedWidget(self, w): | |
12 self.inspectedWidget = w | |
13 if isinstance(self.inspectedWidget, QObject): | |
14 mo = self.inspectedWidget.metaObject() | |
15 self.metaprops = [mo.property(i) for i in range(mo.propertyCount())] | |
16 self.metaprops = sorted(self.metaprops, key=lambda mp: mp.name()) | |
17 else: | |
18 self.metaprops = [] | |
19 self.modelReset.emit() | |
20 InspectedWidget = property(getInspectedWidget, setInspectedWidget) | |
21 def rowCount(self, parent): | |
22 return len(self.metaprops) | |
23 def columnCount(self, parent): | |
24 return 2 | |
25 def headerData(self, section, orientation, role): | |
26 if orientation == Qt.Horizontal and role == Qt.DisplayRole: | |
27 if section == 0: | |
28 return 'Property' | |
29 elif section == 1: | |
30 return 'Value' | |
31 def data(self, index, role): | |
32 if index.isValid(): | |
33 row = index.row() | |
34 col = index.column() | |
35 metaprop = self.metaprops[row] | |
36 if role == Qt.DisplayRole: | |
37 propname = metaprop.name() | |
38 if col == 0: | |
39 return propname | |
40 elif col == 1: | |
41 if metaprop.isReadable(): | |
42 propval = metaprop.read(self.inspectedWidget) | |
43 return propval | |
44 return 'NOT READABLE' | |
45 return '{0}, {1}'.format(row, col) | |
46 elif role == Qt.BackgroundRole: | |
47 if col == 1: | |
48 if metaprop.isWritable(): | |
49 return QBrush(Qt.green) | |
50 else: | |
51 return QBrush(Qt.red) | |
52 elif role == Qt.CheckStateRole: | |
53 if col == 1: | |
54 val = metaprop.read(self.inspectedWidget) | |
55 if type(val) is bool: | |
56 val = Qt.Checked if val else Qt.Unchecked | |
57 return val | |
58 | |
59 def flags(self, index): | |
60 if index.isValid(): | |
61 row = index.row() | |
62 col = index.column() | |
63 metaprop = self.metaprops[row] | |
64 if col == 1 and metaprop.isWritable(): | |
65 val = metaprop.read(self.inspectedWidget) | |
66 if type(val) == bool: | |
67 return super().flags(index) | Qt.ItemIsEditable | Qt.ItemIsUserCheckable | |
68 else: | |
69 return super().flags(index) | Qt.ItemIsEditable | |
70 else: | |
71 return super().flags(index) | |
72 def setData(self, index, value, role): | |
73 if index.isValid(): | |
74 row = index.row() | |
75 col = index.column() | |
76 metaprop = self.metaprops[row] | |
77 if role == Qt.EditRole: | |
78 metaprop.write(self.inspectedWidget, value) | |
79 return True | |
80 elif role == Qt.CheckStateRole: | |
81 value = True if value == Qt.Checked else False | |
82 metaprop.write(self.inspectedWidget, value) | |
83 return True | |
84 else: | |
85 print('unknown role:', role) | |
86 return False | |
87 return False | |
88 | |
89 class QtPropertyViewer(QWidget): | |
90 """ | |
91 The binviewer consists of a hex view, a ascii view | |
92 and perhaps others.. | |
93 """ | |
94 def __init__(self): | |
95 super().__init__() | |
96 tableView = QTableView() | |
97 l = QVBoxLayout(self) | |
98 l.addWidget(tableView) | |
99 header = tableView.horizontalHeader() | |
100 header.setResizeMode(QHeaderView.ResizeToContents) | |
101 self.propertyModel = QtPropertyModel() | |
102 tableView.setModel(self.propertyModel) | |
103 |