62 const QString &prefix);
69 : m_d(new
Private(this, model, dummiesFacade, displayModeAdapter))
80 m_d->populateDummiesList();
91 if (row >= 0 && row < m_d->dummiesList.size()) {
92 return m_d->dummiesList[row];
105 return m_d->dummiesList.size();
110 bool oldRemoved =
false;
111 bool newAdded =
false;
114 m_d->converter.updateActiveDummy(dummy, &oldRemoved, &newAdded);
134 int pos =
m_d->converter.rowForDummy(dummy);
137 QModelIndex index0 =
m_d->model->index(pos, 0);
138 QModelIndex index1 =
m_d->model->index(pos,
m_d->model->columnCount() - 1);
139 m_d->model->callIndexChanged(index0, index1);
146 if (channels.isEmpty()) {
161 [
this, safeDummyPointer ] () {
173 if (!connectionsSet.contains(dummy))
return;
177 if (channels.isEmpty()) {
178 if (connectionsSet.contains(dummy)) {
179 connectionsSet.remove(dummy);
185 channelConnectionsStore.clear();
188 connectionsSet.remove(dummy);
195 if (
m_d->converter.isDummyVisible(dummy)) {
196 int pos =
m_d->converter.rowForDummy(dummy);
198 m_d->model->callBeginInsertRows(QModelIndex(), pos, pos);
199 m_d->dummiesList.insert(pos, 1, dummy);
200 m_d->tryConnectDummy(dummy);
201 m_d->model->callEndInsertRows();
207 if (
m_d->dummiesList.contains(dummy)) {
208 int pos =
m_d->dummiesList.indexOf(dummy);
210 m_d->model->callBeginRemoveRows(QModelIndex(), pos, pos);
211 m_d->disconnectDummy(dummy);
212 m_d->dummiesList.remove(pos);
213 m_d->model->callEndRemoveRows();
216 m_d->converter.notifyDummyRemoved(dummy);
221 const bool present =
m_d->dummiesList.contains(dummy);
222 const bool shouldBe =
m_d->converter.isDummyVisible(dummy);
224 m_d->tryConnectDummy(dummy);
226 if (!present && shouldBe) {
228 }
else if (present && !shouldBe) {
235 if (
m_d->showGlobalSelectionMask !=
m_d->displayModeAdapter->showGlobalSelectionMask()) {
237 m_d->model->callBeginResetModel();
240 m_d->disconnectDummy(dummy);
242 m_d->dummiesList.clear();
244 m_d->showGlobalSelectionMask =
m_d->displayModeAdapter->showGlobalSelectionMask();
245 m_d->converter.setShowGlobalSelectionMask(
m_d->showGlobalSelectionMask);
247 m_d->populateDummiesList();
249 m_d->model->callEndResetModel();
255 const QString &prefix)
259 if (converter.isDummyAvailableForTimeline(root) &&
264 QString(prefix + node->
name()),
270 findOtherLayers(dummy, list, prefix +
" ");
281 if (!rootDummy)
return list;
283 m_d->findOtherLayers(rootDummy, &list,
"");
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
void sigAnyKeyframeChange()
KisNodeDummy * lastChild() const
int indexOf(KisNodeDummy *child) const
KisNodeDummy * prevSibling() const
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)
void setShowGlobalSelectionMask(bool value)
KisNodeDummy * dummyFromRow(int row)
void slotBeginRemoveDummy(KisNodeDummy *dummy)
int rowForDummy(KisNodeDummy *dummy)
TimelineNodeListKeeper(ModelWithExternalNotifications *model, KisDummiesFacadeBase *dummiesFacade, KisNodeDisplayModeAdapter *displayModeAdapter)
KisNodeDummy * dummyFromRow(int row)
void slotEndInsertDummy(KisNodeDummy *dummy)
const QScopedPointer< Private > m_d
OtherLayersList otherLayersList() const
void slotUpdateDummyContent(QPointer< KisNodeDummy > dummy)
void slotDisplayModeChanged()
void updateActiveDummy(KisNodeDummy *dummy)
~TimelineNodeListKeeper() override
void slotDummyChanged(KisNodeDummy *dummy)
#define KIS_ASSERT_RECOVER_RETURN(cond)
QMap< QString, KisKeyframeChannel * > keyframeChannels
bool isPinnedToTimeline() const
bool showGlobalSelectionMask
Private(TimelineNodeListKeeper *_q, ModelWithExternalNotifications *_model, KisDummiesFacadeBase *_dummiesFacade, KisNodeDisplayModeAdapter *_displayModeAdapter)
void tryConnectDummy(KisNodeDummy *dummy)
void findOtherLayers(KisNodeDummy *root, TimelineNodeListKeeper::OtherLayersList *list, const QString &prefix)
TimelineFramesIndexConverter converter
void populateDummiesList()
KisSignalAutoConnectionsStore channelConnectionsStore
ModelWithExternalNotifications * model
KisNodeDisplayModeAdapter * displayModeAdapter
void disconnectDummy(KisNodeDummy *dummy)
KisDummiesFacadeBase * dummiesFacade
TimelineNodeListKeeper * q
QSet< KisNodeDummy * > connectionsSet
QVector< KisNodeDummy * > dummiesList