Пример #1
0
void
NodeAnim::refreshVisibility()
{

    AnimationModulePtr animModule = getModel();
    QTreeWidgetItem *nodeItem = getTreeItem();
    bool showNode = false;
    int nChildren = nodeItem->childCount();

    // Refresh children, which will recursively refresh their children
    for (int i = 0; i < nChildren; ++i) {
        QTreeWidgetItem* child = nodeItem->child(i);

        AnimatedItemTypeEnum type;
        KnobAnimPtr isKnob;
        TableItemAnimPtr isTableItem;
        NodeAnimPtr isNodeItem;
        ViewSetSpec view;
        DimSpec dim;
        bool found = animModule->findItem(child, &type, &isKnob, &isTableItem, &isNodeItem, &view, &dim);
        if (!found) {
            continue;
        }
        if (isTableItem) {
            isTableItem->refreshVisibilityConditional(false /*refreshParent*/);
        } else if (isNodeItem) {
            isNodeItem->refreshVisibility();
        } else if (isKnob) {
            isKnob->refreshVisibilityConditional(false /*refreshHolder*/);
        }
        if (!child->isHidden()) {
            showNode = true;
        }
    }

    if (!showNode) {
        // If so far none of the children should be displayed, still check if the node has a range
        if (isRangeDrawingEnabled()) {
            showNode = true;
        }
        
    }

    // If settings panel is not opened and the "Keep in Animation Module" knob is not checked, hide the node.
    NodeGuiPtr nodeGui = getNodeGui();
    bool keepInAnimationModule = nodeGui->getNode()->isKeepInAnimationModuleButtonDown();
    if (!keepInAnimationModule && !nodeGui->isSettingsPanelVisible()) {
        showNode = false;
    }

    refreshFrameRange();

    nodeItem->setData(0, QT_ROLE_CONTEXT_IS_ANIMATED, showNode);

    nodeItem->setHidden(!showNode);


} // refreshVisibility
Пример #2
0
static TableItemAnimPtr findTableItemAnimRecursive(const TableItemAnimPtr& anim, const KnobTableItemPtr& item)
{
    if (anim->getInternalItem() == item) {
        return anim;
    }
    const std::vector<TableItemAnimPtr>& children = anim->getChildren();
    for (std::size_t i = 0; i < children.size(); ++i) {
        TableItemAnimPtr r = findTableItemAnimRecursive(children[i], item);
        if (r) {
            return r;
        }
    }
    return TableItemAnimPtr();
}
Пример #3
0
void
NodeAnimPrivate::insertItem(int index, const KnobTableItemPtr& item, TableChangeReasonEnum reason)
{

    // The item already exists
    if (_publicInterface->findTableItem(item)) {
        return;
    }
    KnobTableItemPtr parentItem = item->getParent();
    TableItemAnimPtr parentAnim;
    if (parentItem) {

        // If the parent item is not yet in the model, do not create item, the parent will create its children recursively
        if (parentItem->getIndexInParent() == -1) {
            return;
        }
        parentAnim = _publicInterface->findTableItem(parentItem);
    }
    KnobItemsTableGuiPtr table = _publicInterface->getNodeGui()->getKnobItemsTable(item->getModel()->getTableIdentifier());
    assert(table);
    if (parentItem) {
        TableItemAnimPtr anim(TableItemAnim::create(_publicInterface->getModel(), table, _publicInterface->shared_from_this(), item, parentAnim->getRootItem()));
        parentAnim->insertChild(index, anim);
    } else {
        TableItemAnimPtr anim(TableItemAnim::create(_publicInterface->getModel(), table, _publicInterface->shared_from_this(), item, nameItem));
        if (index < 0 || index >= (int)topLevelTableItems.size()) {
            topLevelTableItems.push_back(anim);
        } else {
            std::vector<TableItemAnimPtr>::iterator it = topLevelTableItems.begin();
            std::advance(it, index);
            topLevelTableItems.insert(it, anim);
        }
    }

    // Create children recursively
    std::vector<KnobTableItemPtr> children = item->getChildren();
    for (std::size_t i = 0; i < children.size(); ++i) {
        insertItem(i, children[i], reason);
    }

}
void
AnimationModuleSelectionModel::addTableItemKeyframes(const TableItemAnimPtr& item,
                                                     bool withKeyFrames,
                                                     bool recurse,
                                                     DimSpec dim,
                                                     ViewSetSpec viewSpec,
                                                     std::vector<TableItemAnimPtr> *selectedTableItems,
                                                     AnimItemDimViewKeyFramesMap* result)
{
    if (item->isRangeDrawingEnabled()) {
        if (selectedTableItems) {
            selectedTableItems->push_back(item);
        }
    }

    if (withKeyFrames) {
        addAnimatedItemKeyframes(item, dim, viewSpec, result);
    } else {
        addAnimatedItemsWithoutKeyframes(item, dim, viewSpec, result);
    }

    const std::vector<KnobAnimPtr>& knobs = item->getKnobs();
    for (std::vector<KnobAnimPtr>::const_iterator it2 = knobs.begin(); it2 != knobs.end(); ++it2) {
        if (withKeyFrames) {
            addAnimatedItemKeyframes(*it2, DimSpec::all(), ViewSetSpec::all(), result);
        } else {
            addAnimatedItemsWithoutKeyframes(*it2, DimSpec::all(), ViewSetSpec::all(), result);
        }
    }

    if (recurse) {
        std::vector<TableItemAnimPtr> children = item->getChildren();
        for (std::size_t i = 0; i < children.size(); ++i) {
            addTableItemKeyframes(children[i], withKeyFrames, true, dim, viewSpec, selectedTableItems, result);
        }
    }
}
Пример #5
0
void
NodeAnim::onTableItemInserted(int index, const KnobTableItemPtr& item, TableChangeReasonEnum)
{
    KnobTableItemPtr parentItem = item->getParent();
    TableItemAnimPtr parentAnim;
    if (parentItem) {
        parentAnim = findTableItem(parentItem);
    }
    KnobItemsTableGuiPtr table = getNodeGui()->getKnobItemsTable();
    if (parentItem) {
        TableItemAnimPtr anim(TableItemAnim::create(getModel(), table, shared_from_this(), item, parentAnim->getRootItem()));
        parentAnim->insertChild(index, anim);
    } else {
        TableItemAnimPtr anim(TableItemAnim::create(getModel(), table, shared_from_this(), item, _imp->nameItem));
        if (index < 0 || index >= (int)_imp->topLevelTableItems.size()) {
            _imp->topLevelTableItems.push_back(anim);
        } else {
            std::vector<TableItemAnimPtr>::iterator it = _imp->topLevelTableItems.begin();
            std::advance(it, index);
            _imp->topLevelTableItems.insert(it, anim);
        }
    }

}