aboutsummaryrefslogtreecommitdiff
path: root/YOSO/Classes.py
blob: 9d5b09cbed28747156f74d932e7bea1f07f518f9 (plain)
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)