Ejemplo n.º 1
0
NodePtr
NodeAnim::getInternalNode() const
{
    NodeGuiPtr node = getNodeGui();

    return node ? node->getNode() : NodePtr();
}
Ejemplo n.º 2
0
bool
Node::getOverlayColor(double* r,
                      double *g,
                      double* b) const
{
    NodeGuiIPtr node_ui = getNodeGui();
    if (node_ui && node_ui->isOverlayLocked()) {
        *r = 0.5;
        *g = 0.5;
        *b = 0.5;
        return true;
    }

    double tmpColor[3];
    {
        QMutexLocker k(&_imp->nodeUIDataMutex);
        tmpColor[0] = _imp->overlayColor[0];
        tmpColor[1] = _imp->overlayColor[1];
        tmpColor[2] = _imp->overlayColor[2];
    }
    if (tmpColor[0] == -1 && tmpColor[1] == -1 && tmpColor[2] == -1) {
        // No overlay color
        return false;
    }
    *r = tmpColor[0];
    *g = tmpColor[1];
    *b = tmpColor[2];

    return true;
}
Ejemplo n.º 3
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
Ejemplo n.º 4
0
void
Node::setCurrentCursor(CursorEnum defaultCursor)
{
    NodeGuiIPtr nodeGui = getNodeGui();

    if (nodeGui) {
        nodeGui->setCurrentCursor(defaultCursor);
    }
}
Ejemplo n.º 5
0
bool
Node::setCurrentCursor(const QString& customCursorFilePath)
{
    NodeGuiIPtr nodeGui = getNodeGui();

    if (nodeGui) {
        return nodeGui->setCurrentCursor(customCursorFilePath);
    }

    return false;
}
Ejemplo n.º 6
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);
        }
    }

}
Ejemplo n.º 7
0
void
NodeAnim::initialize(AnimatedItemTypeEnum nodeType)
{
    _imp->nodeType = nodeType;
    NodePtr internalNode = getNodeGui()->getNode();

    AnimationModuleBasePtr model = getModel();
    NodeAnimPtr thisShared = shared_from_this();
    _imp->nameItem = new QTreeWidgetItem;
    _imp->nameItem->setData(0, QT_ROLE_CONTEXT_ITEM_POINTER, qVariantFromValue((void*)thisShared.get()));
    _imp->nameItem->setText( 0, QString::fromUtf8( internalNode->getLabel().c_str() ) );
    _imp->nameItem->setData(0, QT_ROLE_CONTEXT_TYPE, nodeType);
    _imp->nameItem->setData(0, QT_ROLE_CONTEXT_IS_ANIMATED, true);
    _imp->nameItem->setExpanded(true);
    int nCols = getModel()->getTreeColumnsCount();
    if (nCols > ANIMATION_MODULE_TREE_VIEW_COL_VISIBLE) {
        _imp->nameItem->setData(ANIMATION_MODULE_TREE_VIEW_COL_VISIBLE, QT_ROLE_CONTEXT_ITEM_VISIBLE, QVariant(true));
        _imp->nameItem->setIcon(ANIMATION_MODULE_TREE_VIEW_COL_VISIBLE, model->getItemVisibilityIcon(true));
    }
    if (nCols > ANIMATION_MODULE_TREE_VIEW_COL_PLUGIN_ICON) {
        QString iconFilePath = QString::fromUtf8(internalNode->getPluginIconFilePath().c_str());
        AnimationModuleTreeView::setItemIcon(iconFilePath, _imp->nameItem);
    }

    connect( internalNode.get(), SIGNAL(labelChanged(QString, QString)), this, SLOT(onNodeLabelChanged(QString, QString)) );

    initializeKnobsAnim();

    initializeTableItems();

    // Connect signals/slots to knobs to compute the frame range
    AnimationModulePtr animModel = toAnimationModule(model);
    assert(animModel);

    if (nodeType == eAnimatedItemTypeCommon) {
        // Also connect the lifetime knob
        KnobIntPtr lifeTimeKnob = internalNode->getLifeTimeKnob();
        if (lifeTimeKnob) {
            connect( lifeTimeKnob->getSignalSlotHandler().get(), SIGNAL(mustRefreshKnobGui(ViewSetSpec,DimSpec,ValueChangedReasonEnum)), this, SLOT(onFrameRangeKnobChanged()) );
        }

    } else if (nodeType == eAnimatedItemTypeReader) {
        // The dopesheet view must refresh if the user set some values in the settings panel
        // so we connect some signals/slots
        KnobIPtr lastFrameKnob = internalNode->getKnobByName(kReaderParamNameLastFrame);
        if (!lastFrameKnob) {
            return;
        }
        boost::shared_ptr<KnobSignalSlotHandler> lastFrameKnobHandler =  lastFrameKnob->getSignalSlotHandler();
        assert(lastFrameKnob);
        boost::shared_ptr<KnobSignalSlotHandler> startingTimeKnob = internalNode->getKnobByName(kReaderParamNameStartingTime)->getSignalSlotHandler();
        assert(startingTimeKnob);

        connect( lastFrameKnobHandler.get(), SIGNAL(mustRefreshKnobGui(ViewSetSpec,DimSpec,ValueChangedReasonEnum)), this, SLOT(onFrameRangeKnobChanged()) );

        connect( startingTimeKnob.get(), SIGNAL(mustRefreshKnobGui(ViewSetSpec,DimSpec,ValueChangedReasonEnum)), this, SLOT(onFrameRangeKnobChanged()) );

        // We don't make the connection for the first frame knob, because the
        // starting time is updated when it's modified. Thus we avoid two
        // refreshes of the view.
    } else if (nodeType == eAnimatedItemTypeRetime) {
        boost::shared_ptr<KnobSignalSlotHandler> speedKnob =  internalNode->getKnobByName(kRetimeParamNameSpeed)->getSignalSlotHandler();
        assert(speedKnob);

        connect( speedKnob.get(), SIGNAL(mustRefreshKnobGui(ViewSetSpec,DimSpec,ValueChangedReasonEnum)), this, SLOT(onFrameRangeKnobChanged()) );
    } else if (nodeType == eAnimatedItemTypeTimeOffset) {
        boost::shared_ptr<KnobSignalSlotHandler> timeOffsetKnob =  internalNode->getKnobByName(kReaderParamNameTimeOffset)->getSignalSlotHandler();
        assert(timeOffsetKnob);

        connect( timeOffsetKnob.get(), SIGNAL(mustRefreshKnobGui(ViewSetSpec,DimSpec,ValueChangedReasonEnum)), this, SLOT(onFrameRangeKnobChanged()) );
    } else if (nodeType == eAnimatedItemTypeFrameRange) {
        boost::shared_ptr<KnobSignalSlotHandler> frameRangeKnob =  internalNode->getKnobByName(kFrameRangeParamNameFrameRange)->getSignalSlotHandler();
        assert(frameRangeKnob);

        connect( frameRangeKnob.get(), SIGNAL(mustRefreshKnobGui(ViewSetSpec,DimSpec,ValueChangedReasonEnum)),  this, SLOT(onFrameRangeKnobChanged()) );
    }
    
    refreshFrameRange();

} // initialize