SceningList(
name: str = "",
max_value: Frame | None = None,
items: list[Scene] | None = None,
*,
temporary: bool = False
)
Bases: QAbstractTableModel
, QYAMLObject
Methods:
Attributes:
Source code
| def __init__(self, name: str = '', max_value: Frame | None = None, items: list[Scene] | None = None, *, temporary: bool = False) -> None:
self.setValue(name, max_value, items, temporary=temporary)
|
COLUMN_COUNT class-attribute
instance-attribute
END_FRAME_COLUMN class-attribute
instance-attribute
END_TIME_COLUMN class-attribute
instance-attribute
LABEL_COLUMN class-attribute
instance-attribute
START_FRAME_COLUMN class-attribute
instance-attribute
START_TIME_COLUMN class-attribute
instance-attribute
add
Source code
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209 | def add(self, start: Frame, end: Frame | None = None, label: str = '') -> Scene:
scene = Scene(start, end, label)
if scene in self.items:
return scene
if scene.end > self.max_value:
raise ValueError('New Scene is out of bounds of output')
index = bisect_right(self.items, scene)
self.beginInsertRows(QModelIndex(), index, index)
self.items.insert(index, scene)
self.endInsertRows()
return scene
|
columnCount
columnCount(parent: QModelIndex = QModelIndex()) -> int
Source code
| def columnCount(self, parent: QModelIndex = QModelIndex()) -> int:
return self.COLUMN_COUNT
|
data
data(index: QModelIndex, role: int = UserRole) -> Any
Source code
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 | def data(self, index: QModelIndex, role: int = Qt.ItemDataRole.UserRole) -> Any:
if not index.isValid():
return None
row = index.row()
if row >= len(self.items):
return None
column = index.column()
if column >= self.COLUMN_COUNT:
return None
if role in {Qt.ItemDataRole.DisplayRole, Qt.ItemDataRole.EditRole}:
if column == self.START_FRAME_COLUMN:
return str(self.items[row].start)
if column == self.END_FRAME_COLUMN:
if self.items[row].end != self.items[row].start:
return str(self.items[row].end)
else:
return ''
if column == self.START_TIME_COLUMN:
return str(Time(self.items[row].start))
if column == self.END_TIME_COLUMN:
if self.items[row].end != self.items[row].start:
return str(Time(self.items[row].end))
else:
return ''
if column == self.LABEL_COLUMN:
return str(self.items[row].label)
if role == Qt.ItemDataRole.UserRole:
if column == self.START_FRAME_COLUMN:
return self.items[row].start
if column == self.END_FRAME_COLUMN:
return self.items[row].end
if column == self.START_TIME_COLUMN:
return Time(self.items[row].start)
if column == self.END_TIME_COLUMN:
return Time(self.items[row].end)
if column == self.LABEL_COLUMN:
return self.items[row].label
return None
|
get_next_frame
Source code
235
236
237
238
239
240
241
242
243
244
245
246 | def get_next_frame(self, initial: Frame) -> Frame | None:
result = None
result_delta = Frame(int(self.max_value))
for scene in self.items:
if Frame(0) < scene.start - initial < result_delta:
result = scene.start
result_delta = scene.start - initial
if Frame(0) < scene.end - initial < result_delta:
result = scene.end
result_delta = scene.end - initial
return result
|
get_prev_frame
Source code
222
223
224
225
226
227
228
229
230
231
232
233 | def get_prev_frame(self, initial: Frame) -> Frame | None:
result = None
result_delta = Frame(int(self.max_value))
for scene in reversed(self.items):
if Frame(0) < initial - scene.start < result_delta:
result = scene.start
result_delta = scene.start - initial
if Frame(0) < initial - scene.end < result_delta:
result = scene.end
result_delta = scene.end - initial
return result
|
headerData(
section: int, orientation: Orientation, role: int = DisplayRole
) -> Any
Source code
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 | def headerData(self, section: int, orientation: Qt.Orientation, role: int = Qt.ItemDataRole.DisplayRole) -> Any:
if role != Qt.ItemDataRole.DisplayRole:
return None
if orientation == Qt.Orientation.Horizontal:
if section == self.START_FRAME_COLUMN:
return 'Start'
if section == self.END_FRAME_COLUMN:
return 'End'
if section == self.START_TIME_COLUMN:
return 'Start'
if section == self.END_TIME_COLUMN:
return 'End'
if section == self.LABEL_COLUMN:
return 'Label'
if orientation == Qt.Orientation.Vertical:
return section + 1
return None
|
remove
Source code
211
212
213
214
215
216
217
218
219
220 | def remove(self, i: int | Scene) -> None:
if isinstance(i, Scene):
i = self.items.index(i)
if i >= 0 and i < len(self.items):
self.beginRemoveRows(QModelIndex(), i, i)
del self.items[i]
self.endRemoveRows()
else:
raise IndexError
|
rowCount
rowCount(parent: QModelIndex = QModelIndex()) -> int
Source code
| def rowCount(self, parent: QModelIndex = QModelIndex()) -> int:
return len(self.items)
|
setData
setData(index: QModelIndex, value: Any, role: int = EditRole) -> bool
Source code
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167 | def setData(self, index: QModelIndex, value: Any, role: int = Qt.ItemDataRole.EditRole) -> bool:
if not index.isValid():
return False
if role not in {Qt.ItemDataRole.EditRole, Qt.ItemDataRole.UserRole}:
return False
row = index.row()
column = index.column()
scene = deepcopy(self.items[row])
if column == self.START_FRAME_COLUMN:
if not isinstance(value, Frame):
raise TypeError
if value > scene.end:
return False
scene.start = value
proper_update = True
elif column == self.END_FRAME_COLUMN:
if not isinstance(value, Frame):
raise TypeError
if value < scene.start:
return False
scene.end = value
proper_update = True
if column == self.START_TIME_COLUMN:
if not isinstance(value, Time):
raise TypeError
frame = Frame(value)
if frame > scene.end:
return False
scene.start = frame
proper_update = True
if column == self.END_TIME_COLUMN:
if not isinstance(value, Time):
raise TypeError
frame = Frame(value)
if frame < scene.start:
return False
scene.end = frame
proper_update = True
elif column == self.LABEL_COLUMN:
if not isinstance(value, str):
raise TypeError
scene.label = value
proper_update = False
if proper_update is True:
i = bisect_right(self.items, scene)
if i > row:
i -= 1
if i != row:
self.beginMoveRows(self.createIndex(row, 0), row, row, self.createIndex(i, 0), i)
del self.items[row]
self.items.insert(i, scene)
self.endMoveRows()
else:
self.items[index.row()] = scene
self.dataChanged.emit(index, index)
else:
self.items[index.row()] = scene
self.dataChanged.emit(index, index)
return True
|
setValue
setValue(
name: str = "",
max_value: Frame | None = None,
items: list[Scene] | None = None,
*,
temporary: bool = False
) -> None
Source code
| def setValue(self, name: str = '', max_value: Frame | None = None, items: list[Scene] | None = None, *, temporary: bool = False) -> None:
super().__init__()
self.name = name
self.max_value = max_value if max_value is not None else Frame(2**31)
self.items = items if items is not None else []
self.temporary = temporary
self.main = main_window()
|