-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEmptyFileModel.py
135 lines (111 loc) · 3.76 KB
/
EmptyFileModel.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Blending Images
# ------------------------------------------
# Модель данных для выбора граф файлов
# ------------------------------------------
from PySide6.QtCore import QAbstractListModel, QModelIndex, Qt, Slot
from misc import FileWorker
class EmptyFileModel(QAbstractListModel):
data_list = []
col1 = Qt.UserRole + 1
col2 = Qt.UserRole + 2
col3 = Qt.UserRole + 3
selectedCount: int = 0
dir_path: str
def __init__(self, parent = None):
super().__init__(parent)
self.worker = FileWorker('efm')
self.folder = None
self.dir_path = None
self.filter = None
#--перегрузка стандартных функций
@Slot()
def rowCount(self, parent = QModelIndex):
return len(self.data_list)
def data(self, index, role = Qt.DisplayRole):
row = index.row()
card = self.data_list[row]
if index.isValid():
if role == self.col1:
return self.worker.getUrl(card.get('file_name'))
if role == self.col2:
return card.get('selected')
if role == self.col3:
return card.get('saved')
else:
return str()
def roleNames(self):
return {
self.col1: b"file_name",
self.col2: b"selected",
self.col3: b"saved",
}
#--устанавливает текущую папку в формате URL
@Slot(str)
def setFolderUrl(self, folder: str):
self.folder = folder
#--загрузить модель
@Slot()
def loadModel(self):
self.beginResetModel()
self.data_list.clear()
if self.folder:
self.dir_path = self.worker.getPathByURL(self.folder)
self.data_list = self.worker.getDataDir(self.folder, self.filter)
self.selectedCount = 0
self.endResetModel()
#--выбор элемента
@Slot(int, bool)
def selectItem(self, index:int, selected:bool):
self.beginResetModel()
card = self.data_list[index]
card['selected'] = selected
self.data_list[index] = card
if selected:
self.selectedCount = self.selectedCount + 1
else:
self.selectedCount = self.selectedCount - 1
self.endResetModel()
#--выбрать все элементы модели
@Slot()
def selectAll(self):
self.beginResetModel()
i :int = 0
for card in self.data_list:
card['selected'] = True
self.data_list[i] = card
i = i + 1
self.selectedCount = len(self.data_list)
self.endResetModel()
#--снять все выделение
@Slot()
def unselectAll(self):
self.beginResetModel()
i :int = 0
for card in self.data_list:
card['selected'] = False
self.data_list[i] = card
i = i + 1
self.selectedCount = 0
self.endResetModel()
#--получить кол-во выбранных моделей
@Slot(result=int)
def getSelectedCount(self):
return self.selectedCount
#--получить название папки
@Slot(result=str)
def getFolderName(self):
return self.dir_path
#--получить список выбранных файлов
@Slot(result=list)
def getSelectedList(self):
l = []
if len(self.data_list) > 0:
for card in self.data_list:
if card['selected']:
l.append(card['file_name'])
return l
#--установить фильтр -- не используем --
@Slot(str)
def setFilter(self, f:str = None):
self.filter = f
self.loadModel()