-
Notifications
You must be signed in to change notification settings - Fork 197
/
Copy pathtable_model.py
94 lines (77 loc) · 2.3 KB
/
table_model.py
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
89
90
91
92
93
94
# -*- coding: utf-8 -*-
import os
from enum import Enum
from PyQt5 import QtCore
from PyQt5.QtCore import QAbstractTableModel, Qt
import humanize
from nut import Print
class Column(Enum):
FILENAME = 0
TITLE_ID = 1
TITLE_TYPE = 2
FILE_SIZE = 3
class SortDirection(Enum):
ASC = 0
DESC = 1
class TableModel(QAbstractTableModel):
def __init__(self, parent=None):
del parent
super().__init__()
self.datatable = []
self.column_count = 4
self.headers = [
"File", "Title ID", "Type", "Size"
]
self.sort_column = 0
self.sort_order = SortDirection.ASC
def update(self, dataIn):
Print.debug('TableModel update start')
self.datatable = []
for value in dataIn.values():
new_item = {}
new_item[Column.FILENAME] = os.path.basename(value.path)
new_item[Column.TITLE_ID] = str(value.titleId)
titleType = "UPD" if value.isUpdate() else "DLC" if value.isDLC() \
else "BASE"
new_item[Column.TITLE_TYPE] = titleType
new_item[Column.FILE_SIZE] = value.fileSize
self.datatable.append(new_item)
self._sort()
Print.debug('TableModel update finished')
def rowCount(self, parent=QtCore.QModelIndex()):
del parent
return len(self.datatable)
def columnCount(self, parent=QtCore.QModelIndex()):
del parent
return self.column_count
def data(self, index, role=Qt.DisplayRole):
if role == Qt.DisplayRole:
i = index.row()
j = index.column()
row = self.datatable[i]
if Column(j) == Column.FILE_SIZE:
return humanize.naturalsize(row[Column(j)], True)
return f"{row[Column(j)]}"
return QtCore.QVariant()
# pylint: disable=no-self-use
def flags(self, index):
del index
return Qt.ItemIsEnabled
def headerData(self, section, orientation, role=Qt.DisplayRole):
if role != Qt.DisplayRole:
return QtCore.QVariant()
if orientation == Qt.Horizontal:
return self.headers[section]
return str(section)
def _sort(self):
self.layoutAboutToBeChanged.emit()
self.datatable.sort(key=lambda item: item[Column(self.sort_column)], \
reverse=self.sort_order != SortDirection.ASC)
self.layoutChanged.emit()
def sort(self, column, order=Qt.AscendingOrder):
self.sort_column = column
self.sort_order = SortDirection.ASC if order == Qt.AscendingOrder else SortDirection.DESC
self._sort()
def setRowCount(self, row_count):
if row_count == 0:
self.datatable = []