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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
from PyQt5.QtCore import ( QAbstractListModel, QMimeData,
QModelIndex, Qt, QVariant )
class Class:
_image = None
_name = None
_number = None
def __init__(self, number, name, image):
self._image = image
self._name = name
self._number = number
@property
def name(self):
return self._name
@property
def number(self):
return self._number
@property
def image(self):
return self._image
@property
def display(self):
return '{} - {}'.format(self._number, self._name)
class ClassListModel(QAbstractListModel):
_classes = None
_size = 0
def __init__(self, classes, parent=None):
super().__init__(parent)
self._classes = dict(enumerate(classes))
self._size = len(self._classes)
def flags(self, index):
return Qt.ItemIsSelectable | Qt.ItemIsDragEnabled | Qt.ItemIsEnabled
def rowCount(self, parent=QModelIndex()):
return len(self._classes)
def mimeTypes(self):
return 'text/plain'
def mimeData(self, indeces):
idx = indeces[0]
cls = idx.data(Qt.UserRole)
mime_data = QMimeData()
mime_data.setText(str(cls))
return mime_data
def data(self, index, role):
if index.isValid():
cl = self._classes[index.row()]
if role == Qt.DisplayRole:
return QVariant(cl.display)
if role == Qt.DecorationRole:
return QVariant(cl.image)
if role == Qt.UserRole:
return QVariant(cl.number)
return QVariant()
def findClass(self, num):
for i in range(self._size):
if self._classes[i].number == num:
return self.index(i, 0)
return QModelIndex()
@property
def classes(self):
return self._classes
def hsvF(self, num):
hue = 0.1
if self._size > 0:
hue += num / self._size
sat = 1.0
val = 1.0
return (hue, sat, val)
|