nodeparamview: add item when nodes are added to context

This commit is contained in:
itsmattkc
2022-01-04 10:23:46 -08:00
parent 7c0ff05a8a
commit 5fb6daf3f4
2 changed files with 50 additions and 18 deletions
+46 -18
View File
@@ -252,8 +252,19 @@ void NodeParamView::SetContexts(const QVector<Node *> &contexts)
ctx->Clear();
ctx->setVisible(false);
}
foreach (Node *ctx, contexts_) {
disconnect(ctx, &Node::NodeAddedToContext, this, &NodeParamView::NodeAddedToContext);
}
contexts_ = contexts;
foreach (Node *ctx, contexts_) {
// Queued so that if any further work is done in connecting this node to the context, it'll be
// done before our sorting function is called
connect(ctx, &Node::NodeAddedToContext, this, &NodeParamView::NodeAddedToContext, Qt::QueuedConnection);
}
if (keyframe_view_) {
keyframe_view_->Clear();
}
@@ -264,29 +275,13 @@ void NodeParamView::SetContexts(const QVector<Node *> &contexts)
}
foreach (Node *ctx, contexts) {
Track::Type ctx_type = Track::kCount;
if (ClipBlock *clip = dynamic_cast<ClipBlock*>(ctx)) {
if (clip->track()) {
if (clip->track()->type() != Track::kNone) {
ctx_type = clip->track()->type();
}
}
} else if (Track *track = dynamic_cast<Track*>(ctx)) {
if (track->type() != Track::kNone) {
ctx_type = track->type();
}
}
NodeParamViewContext *item = context_items_.at(ctx_type);
NodeParamViewContext *item = GetContextItemFromContext(ctx);
item->AddContext(ctx);
item->setVisible(true);
for (auto it=ctx->GetContextPositions().cbegin(); it!=ctx->GetContextPositions().cend(); it++) {
if (!(it.key()->GetFlags() & Node::kDontShowInParamView) || ignore_flags_) {
AddNode(it.key(), item);
}
AddNode(it.key(), item);
}
}
@@ -391,6 +386,10 @@ void NodeParamView::QueueKeyframePositionUpdate()
void NodeParamView::AddNode(Node *n, NodeParamViewContext *context)
{
if ((n->GetFlags() & Node::kDontShowInParamView) && !ignore_flags_) {
return;
}
NodeParamViewItem* item = new NodeParamViewItem(n, create_checkboxes_, context);
connect(item, &NodeParamViewItem::RequestSetTime, this, &NodeParamView::SetTimeAndSignal);
@@ -480,6 +479,25 @@ void NodeParamView::SortItemsInContext(NodeParamViewContext *context_item)
}
}
NodeParamViewContext *NodeParamView::GetContextItemFromContext(Node *ctx)
{
Track::Type ctx_type = Track::kCount;
if (ClipBlock *clip = dynamic_cast<ClipBlock*>(ctx)) {
if (clip->track()) {
if (clip->track()->type() != Track::kNone) {
ctx_type = clip->track()->type();
}
}
} else if (Track *track = dynamic_cast<Track*>(ctx)) {
if (track->type() != Track::kNone) {
ctx_type = track->type();
}
}
return context_items_.at(ctx_type);
}
void NodeParamView::UpdateGlobalScrollBar()
{
if (keyframe_view_) {
@@ -588,4 +606,14 @@ void NodeParamView::UpdateElementY()
}
}
void NodeParamView::NodeAddedToContext(Node *n)
{
Node *ctx = static_cast<Node*>(sender());
NodeParamViewContext *item = GetContextItemFromContext(ctx);
AddNode(n, item);
SortItemsInContext(item);
}
}
+4
View File
@@ -112,6 +112,8 @@ private:
void SortItemsInContext(NodeParamViewContext *context);
NodeParamViewContext *GetContextItemFromContext(Node *context);
KeyframeView* keyframe_view_;
QVector<NodeParamViewContext*> context_items_;
@@ -153,6 +155,8 @@ private slots:
void UpdateElementY();
void NodeAddedToContext(Node *n);
};
}