48 if (row < 0 || row >=
items.count())
54 for (
int row=0; row <
items.count(); row++) {
55 if (
items.at(row)->dummy == dummy)
return row;
66 nodeItem->
curves.append(curve);
72 : QAbstractItemModel(parent)
78 qDeleteAll(
m_d->items);
84 m_d->dummiesFacadeConnections.clear();
85 m_d->dummiesFacade = facade;
86 m_d->dummiesFacadeConnections.addConnection(
m_d->dummiesFacade, SIGNAL(sigBeginRemoveDummy(
KisNodeDummy*)),
93 for (
int i =
m_d->items.count()-1; i >= 0; i--) {
95 if (item && item->
dummy) {
96 if (!nodes.contains(item->
dummy->
node())) {
97 beginRemoveRows(QModelIndex(), i, i);
98 m_d->items.removeAt(i);
102 m_d->curvesModel->removeCurve(curve);
118 if (!dummy)
continue;
120 if (
m_d->rowForDummy(dummy) == -1) {
121 beginInsertRows(QModelIndex(),
m_d->items.count(),
m_d->items.count());
124 m_d->items.append(item);
127 m_d->addCurveForChannel(item, channel);
140 const quintptr parentRow =
index.internalId();
141 const bool indexIsNode = (parentRow ==
ID_NODE);
147 if (!node || !node->
image())
170 if (!node || !node->
image())
181 int row =
m_d->rowForDummy(dummy);
186 int newCurveRow = item->
curves.count();
187 beginInsertRows(
index(row, 0, QModelIndex()), newCurveRow, newCurveRow);
189 m_d->addCurveForChannel(item, channel);
196 bool shouldChangeSelection =
false;
200 if (item->
dummy == dummy) {
201 shouldChangeSelection =
true;
208 if (shouldChangeSelection) {
221 if (!item)
return QModelIndex();
223 return createIndex(row, column,
ID_NODE);
226 if (
parent.parent().isValid())
return QModelIndex();
229 if (!parentItem)
return QModelIndex();
231 if (row >= parentItem->
curves.count())
return QModelIndex();
233 return createIndex(row, column,
parent.row());
239 quintptr parentIndex = child.internalId();
240 if (parentIndex ==
ID_NODE)
return QModelIndex();
241 return createIndex(parentIndex, 0,
ID_NODE);
248 return m_d->items.count();
252 return item->
curves.count();
267 const quintptr parentRow =
index.internalId();
268 const bool indexIsNode = (parentRow ==
ID_NODE);
272 case Qt::DisplayRole: {
277 return channel->
name();
285 return indexIsNode ? QVariant() : item->
curves.at(
index.row())->color();
288 return indexIsNode ? QVariant() : item->
curves.at(
index.row())->visible();
291 const bool isVisible = item->
curves.at(
index.row())->visible();
296 for (
int i = 0; i < item->
curves.size(); i++) {
300 if (item->
curves.at(i)->visible())
304 return (numVisible == 1);
312 const QColor backgroundColor = qApp->palette().color(QPalette::Button);
326 quintptr parentRow =
index.internalId();
327 bool indexIsNode = (parentRow ==
ID_NODE);
344 qDeleteAll(
m_d->items);
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisAnimCurvesChannelsModel(KisAnimCurvesModel *curvesModel, QObject *parent)
int columnCount(const QModelIndex &parent) const override
void reset(const QModelIndex &index)
QModelIndex parent(const QModelIndex &child) const override
void setDummiesFacade(KisDummiesFacadeBase *facade)
void keyframeChannelAddedToNode(KisKeyframeChannel *channel)
void selectedNodesChanged(const QList< KisNodeSP > &nodes)
const QScopedPointer< Private > m_d
int rowCount(const QModelIndex &parent) const override
~KisAnimCurvesChannelsModel() override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
QVariant data(const QModelIndex &index, int role) const override
QModelIndex index(int row, int column, const QModelIndex &parent) const override
void slotNotifyDummyRemoved(KisNodeDummy *dummy)
KisAnimationCurve * addCurve(KisScalarKeyframeChannel *channel)
KisScalarKeyframeChannel * channel() const
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
QColor colorFromLabelIndex(int index) const
The KisScalarKeyframeChannel is a concrete KisKeyframeChannel subclass that stores and manages KisSca...
KisSharedPtr< T > toStrongRef() const
toStrongRef returns a KisSharedPtr which may be dereferenced.
#define KIS_ASSERT_RECOVER_BREAK(cond)
#define KIS_ASSERT_RECOVER_RETURN(cond)
KisSharedPtr< KisNode > KisNodeSP
void resetChannels(KisImageSP image, KisNodeSP node, const QList< QString > &channelIDs)
void resetChannel(KisImageSP image, KisNodeSP node, const QString &channelID)
QColor blendColors(const QColor &c1, const QColor &c2, qreal r1)
NodeListItem * itemForRow(int row)
QList< NodeListItem * > items
void addCurveForChannel(NodeListItem *nodeItem, KisKeyframeChannel *channel)
Private(KisAnimCurvesModel *curvesModel)
KisDummiesFacadeBase * dummiesFacade
int rowForDummy(KisNodeDummy *dummy)
KisSignalAutoConnectionsStore dummiesFacadeConnections
KisAnimCurvesModel * curvesModel
QMap< QString, KisKeyframeChannel * > keyframeChannels
void keyframeChannelAdded(KisKeyframeChannel *channel)
int colorLabelIndex() const
QList< KisAnimationCurve * > curves
NodeListItem(KisNodeDummy *dummy)