Skip to content

dialog

Classes:

SceningListDialog

SceningListDialog(main: MainWindow)

Bases: ExtendedDialog

Methods:

Attributes:

Source code in vspreview/toolbars/scening/dialog.py
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
def __init__(self, main: MainWindow) -> None:
    super().__init__(main)

    self.main = main
    self.scening_list = SceningList()

    self.setWindowTitle('Scening List View')
    self.setup_ui()

    self.end_frame_control.valueChanged.connect(self.on_end_frame_changed)
    self.end_time_control.valueChanged.connect(self.on_end_time_changed)
    self.label_lineedit.textChanged.connect(self.on_label_changed)
    self.name_lineedit.textChanged.connect(self.on_name_changed)
    self.start_frame_control.valueChanged.connect(self.on_start_frame_changed)
    self.start_time_control.valueChanged.connect(self.on_start_time_changed)
    self.tableview.doubleClicked.connect(self.on_tableview_clicked)
    self.delete_button.clicked.connect(self.on_delete_clicked)

    self.set_qobject_names()

main instance-attribute

main = main

scening_list instance-attribute

scening_list = SceningList()

storable_attrs class-attribute

storable_attrs: tuple[str, ...] = ()

on_current_frame_changed

on_current_frame_changed(frame: Frame, time: Time) -> None
Source code in vspreview/toolbars/scening/dialog.py
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
def on_current_frame_changed(self, frame: Frame, time: Time) -> None:
    if not self.isVisible():
        return

    selection_model = self.tableview.selectionModel()

    if selection_model is None:
        return

    selection = QItemSelection()

    for i, scene in enumerate(self.scening_list):
        if frame in scene:
            index = self.scening_list.index(i, 0)
            selection.select(index, index)

    selection_model.select(
        selection,
        QItemSelectionModel.SelectionFlag.Rows
        | QItemSelectionModel.SelectionFlag.ClearAndSelect
    )

on_current_list_changed

on_current_list_changed(scening_list: SceningList) -> None
Source code in vspreview/toolbars/scening/dialog.py
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
def on_current_list_changed(self, scening_list: SceningList) -> None:
    self.scening_list = scening_list

    self.scening_list.rowsMoved.connect(self.on_tableview_rows_moved)

    self.name_lineedit.setText(self.scening_list.name)

    self.tableview.setModel(self.scening_list)
    header = self.tableview.horizontalHeader()

    if header is not None:
        for col in range(SceningList.COLUMN_COUNT):
            if col == SceningList.LABEL_COLUMN:
                header.setSectionResizeMode(col, QHeaderView.ResizeMode.Stretch)
            else:
                header.setSectionResizeMode(col, QHeaderView.ResizeMode.ResizeToContents)

    self.tableview.resizeColumnsToContents()
    selection_model = self.tableview.selectionModel()

    if selection_model is not None:
        selection_model.selectionChanged.connect(self.on_tableview_selection_changed)

    self.label_lineedit.clear()
    self.label_lineedit.clearFocus()
    self.delete_button.setEnabled(False)

on_current_output_changed

on_current_output_changed(index: int, prev_index: int) -> None
Source code in vspreview/toolbars/scening/dialog.py
140
141
142
143
144
def on_current_output_changed(self, index: int, prev_index: int) -> None:
    self.start_frame_control.setMaximum(self.main.current_output.total_frames - 1)
    self.end_frame_control.setMaximum(self.main.current_output.total_frames - 1)
    self.start_time_control.setMaximum(self.main.current_output.total_time)
    self.end_time_control.setMaximum(self.main.current_output.total_time)

on_delete_clicked

on_delete_clicked(checked: bool | None = None) -> None
Source code in vspreview/toolbars/scening/dialog.py
146
147
148
149
150
151
152
def on_delete_clicked(self, checked: bool | None = None) -> None:
    selection_model = self.tableview.selectionModel()
    if selection_model is None:
        return
    for model_index in selection_model.selectedRows():
        self.scening_list.remove(model_index.row())
    selection_model.clearSelection()

on_end_frame_changed

on_end_frame_changed(value: Frame | int) -> None
Source code in vspreview/toolbars/scening/dialog.py
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
def on_end_frame_changed(self, value: Frame | int) -> None:
    selection_model = self.tableview.selectionModel()
    if selection_model is None:
        return

    frame = Frame(value)

    try:
        index = selection_model.selectedRows()[0]
    except IndexError:
        return
    if not index.isValid():
        return
    index = index.siblingAtColumn(SceningList.END_FRAME_COLUMN)
    if not index.isValid():
        return
    self.scening_list.setData(index, frame, Qt.ItemDataRole.UserRole)

on_end_time_changed

on_end_time_changed(time: Time) -> None
Source code in vspreview/toolbars/scening/dialog.py
172
173
174
175
176
177
178
179
180
181
182
183
184
185
def on_end_time_changed(self, time: Time) -> None:
    selection_model = self.tableview.selectionModel()
    if selection_model is None:
        return
    try:
        index = selection_model.selectedRows()[0]
    except IndexError:
        return
    if not index.isValid():
        return
    index = index.siblingAtColumn(SceningList.END_TIME_COLUMN)
    if not index.isValid():
        return
    self.scening_list.setData(index, time, Qt.ItemDataRole.UserRole)

on_label_changed

on_label_changed(text: str) -> None
Source code in vspreview/toolbars/scening/dialog.py
187
188
189
190
191
192
193
194
195
196
197
198
199
200
def on_label_changed(self, text: str) -> None:
    selection_model = self.tableview.selectionModel()
    if selection_model is None:
        return
    try:
        index = selection_model.selectedRows()[0]
    except IndexError:
        return
    if not index.isValid():
        return
    index = self.scening_list.index(index.row(), SceningList.LABEL_COLUMN)
    if not index.isValid():
        return
    self.scening_list.setData(index, text, Qt.ItemDataRole.UserRole)

on_name_changed

on_name_changed(text: str) -> None
Source code in vspreview/toolbars/scening/dialog.py
202
203
204
205
206
207
def on_name_changed(self, text: str) -> None:
    assert hasattr(self.main.toolbars, 'scening')

    i = self.main.toolbars.scening.lists.index_of(self.scening_list)
    index = self.main.toolbars.scening.lists.index(i)
    self.main.toolbars.scening.lists.setData(index, text, Qt.ItemDataRole.UserRole)

on_start_frame_changed

on_start_frame_changed(value: Frame | int) -> None
Source code in vspreview/toolbars/scening/dialog.py
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
def on_start_frame_changed(self, value: Frame | int) -> None:
    frame = Frame(value)
    selection_model = self.tableview.selectionModel()
    if selection_model is None:
        return
    try:
        index = selection_model.selectedRows()[0]
    except IndexError:
        return
    if not index.isValid():
        return
    index = index.siblingAtColumn(SceningList.START_FRAME_COLUMN)
    if not index.isValid():
        return
    self.scening_list.setData(index, frame, Qt.ItemDataRole.UserRole)

on_start_time_changed

on_start_time_changed(time: Time) -> None
Source code in vspreview/toolbars/scening/dialog.py
225
226
227
228
229
230
231
232
233
234
235
236
237
238
def on_start_time_changed(self, time: Time) -> None:
    selection_model = self.tableview.selectionModel()
    if selection_model is None:
        return
    try:
        index = selection_model.selectedRows()[0]
    except IndexError:
        return
    if not index.isValid():
        return
    index = index.siblingAtColumn(SceningList.START_TIME_COLUMN)
    if not index.isValid():
        return
    self.scening_list.setData(index, time, Qt.ItemDataRole.UserRole)

on_tableview_clicked

on_tableview_clicked(index: QModelIndex) -> None
Source code in vspreview/toolbars/scening/dialog.py
240
241
242
243
244
245
246
def on_tableview_clicked(self, index: QModelIndex) -> None:
    if index.column() in {SceningList.START_FRAME_COLUMN, SceningList.END_FRAME_COLUMN}:
        self.main.switch_frame(Frame(self.scening_list.data(index)))
    if index.column() == SceningList.START_TIME_COLUMN:
        self.main.switch_frame(Frame(self.scening_list.data(index.siblingAtColumn(SceningList.START_FRAME_COLUMN))))
    if index.column() == SceningList.END_TIME_COLUMN:
        self.main.switch_frame(Frame(self.scening_list.data(index.siblingAtColumn(SceningList.END_FRAME_COLUMN))))

on_tableview_rows_moved

on_tableview_rows_moved(
    parent_index: QModelIndex,
    start_i: int,
    end_i: int,
    dest_index: QModelIndex,
    dest_i: int,
) -> None
Source code in vspreview/toolbars/scening/dialog.py
248
249
250
251
def on_tableview_rows_moved(
    self, parent_index: QModelIndex, start_i: int, end_i: int, dest_index: QModelIndex, dest_i: int
) -> None:
    QTimer.singleShot(0, lambda: self.tableview.selectRow(dest_i))

on_tableview_selection_changed

on_tableview_selection_changed(
    selected: QItemSelection, deselected: QItemSelection
) -> None
Source code in vspreview/toolbars/scening/dialog.py
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
def on_tableview_selection_changed(self, selected: QItemSelection, deselected: QItemSelection) -> None:
    if len(selected.indexes()) == 0:
        self.delete_button.setEnabled(False)
        self.start_frame_control.setEnabled(False)
        self.end_frame_control.setEnabled(False)
        self.start_time_control.setEnabled(False)
        self.end_time_control.setEnabled(False)
        self.label_lineedit.setEnabled(False)
        return

    index = selected.indexes()[0]
    scene = self.scening_list[index.row()]

    qt_silent_call(self.start_frame_control.setValue, scene.start)
    qt_silent_call(self.end_frame_control.setValue, scene.end)
    qt_silent_call(self.start_time_control.setValue, Time(scene.start))
    qt_silent_call(self.end_time_control.setValue, Time(scene.end))
    qt_silent_call(self.label_lineedit.setText, scene.label)

    self.delete_button.setEnabled(True)
    self.start_frame_control.setEnabled(True)
    self.end_frame_control.setEnabled(True)
    self.start_time_control.setEnabled(True)
    self.end_time_control.setEnabled(True)
    self.label_lineedit.setEnabled(True)

set_qobject_names

set_qobject_names() -> None
Source code in vspreview/core/abstracts.py
279
280
281
282
283
284
285
286
287
288
289
290
291
292
def set_qobject_names(self) -> None:
    if not hasattr(self, '__slots__'):
        return

    slots = list(self.__slots__)

    if isinstance(self, AbstractToolbar) and 'main' in slots:
        slots.remove('main')

    for attr_name in slots:
        attr = getattr(self, attr_name)
        if not isinstance(attr, QObject):
            continue
        attr.setObjectName(type(self).__name__ + '.' + attr_name)

setup_ui

setup_ui() -> None
Source code in vspreview/toolbars/scening/dialog.py
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
def setup_ui(self) -> None:
    self.name_lineedit = LineEdit('Scening list name')

    self.tableview = ExtendedTableView()
    self.tableview.setSelectionMode(QTableView.SelectionMode.SingleSelection)
    self.tableview.setSelectionBehavior(QTableView.SelectionBehavior.SelectRows)
    self.tableview.setSizeAdjustPolicy(QTableView.SizeAdjustPolicy.AdjustToContents)

    if (header := self.tableview.horizontalHeader()) is not None:
        for col in range(SceningList.COLUMN_COUNT):
            if col == SceningList.LABEL_COLUMN:
                header.setSectionResizeMode(col, QHeaderView.ResizeMode.Stretch)
            else:
                header.setSectionResizeMode(col, QHeaderView.ResizeMode.ResizeToContents)

    self.start_frame_control = FrameEdit()
    self.end_frame_control = FrameEdit()

    self.start_time_control = TimeEdit()
    self.end_time_control = TimeEdit()

    self.label_lineedit = LineEdit(placeholder='Label')

    self.delete_button = PushButton('Delete Selected Scene', enabled=False)
    self.delete_button.setAutoDefault(False)

    VBoxLayout(self, [
        self.name_lineedit, self.tableview
    ]).addLayout(
        HBoxLayout([
            self.start_frame_control,
            self.end_frame_control,
            self.start_time_control,
            self.end_time_control,
            self.label_lineedit,
            self.delete_button
        ])
    )