-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDirModel.py
142 lines (118 loc) · 4.1 KB
/
DirModel.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
136
137
138
# Blending Images
# ------------------------------------------
# Модель данных для работы с директориями
# ------------------------------------------
from PySide6.QtCore import QAbstractListModel, QModelIndex, Qt, Signal, Slot
from Database import Database
class DirModel(QAbstractListModel):
data_list = []
col1 = Qt.UserRole + 1
col2 = Qt.UserRole + 2
current = -1
currentChanged = Signal(int, arguments = ['current'])
error = Signal(str, arguments=['error'])
def __init__(self, parent = None):
super().__init__(parent)
self.db = Database("dir")
self.loadModel()
# ПЕРЕГРУЗКА ФУНКЦИИ МОДЕЛИ
@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 int(card.get('id'))
if role == self.col2:
return str(card.get('dir'))
else:
return str()
def roleNames(self):
return {
self.col1: b"id",
self.col2: b"dir",
}
# --------------------
@Slot()
def loadModel(self):
'''
получение данных из БД
успех - загрузка модели
нет - сигнал ошибки
'''
self.beginResetModel()
self.data_list.clear()
res = self.db.db_get(self.db.TABLE_DIRECTORY)
if res.get('r'):
self.data_list = res.get('data')
else:
self.error.emit(res.get('message'))
self.endResetModel()
@Slot(int, str, result=str)
def get(self, i:int, n :str):
'''
получение элемента модели
'''
if i < self.rowCount() and self.rowCount() > 0:
card = self.data_list[i]
return str(card.get(n))
return str()
@Slot(str, result=bool)
def save(self, dir: str):
'''
сохранение раздела, через лист
- проверка заполнения
- запрос на сохранение в БД
успех - перезагрузка модели
нет - сигнал ошибки
'''
id = self.current
if len(dir) == 0:
self.error.emit("Пустое название раздела!")
return False
else:
d = { 'id':id, 'dir':dir}
# res = self.db.directory_save(d)
res = self.db.db_save(d, self.db.TABLE_DIRECTORY)
if res.get('r'):
self.current = res.get('id')
self.loadModel()
self.currentChanged.emit(self.current)
return True
else:
self.error.emit(res.get('message'))
return False
@Slot(int, result=bool)
def delete(self, count:int):
'''
удаление раздела, через идентификатор
- запрос удаления из БД
успех - перезагрузка модели
нет - сигнал ошибки
'''
if count == 0:
res = self.db.db_del(self.current, self.db.TABLE_DIRECTORY)
if res.get('r'):
self.loadModel()
else:
self.error.emit(res.get('message'))
return res.get('r')
else:
self.error.emit("Нельзя удалить раздел, если в нем есть файлы")
return False
@Slot(int)
def setCurrent(self, i: int):
'''
указание текущего элемента
с сигналом изменения
??
'''
self.beginResetModel()
self.current = i
self.currentChanged.emit(i)
self.endResetModel()
@Slot(result=int)
def getCurrent(self):
return self.current