| 2043 | } |
| 2044 | |
| 2045 | bool |
| 2046 | TrackerPanelPrivateV1::getTrackInstancesForButton(std::vector<KnobButton*>* trackButtons, |
| 2047 | const std::string& buttonName) |
| 2048 | { |
| 2049 | std::list<Node*> selectedInstances; |
| 2050 | |
| 2051 | publicInterface->getSelectedInstances(&selectedInstances); |
| 2052 | if ( selectedInstances.empty() ) { |
| 2053 | Dialogs::warningDialog( tr("Tracker").toStdString(), tr("You must select something to track first").toStdString() ); |
| 2054 | |
| 2055 | return false; |
| 2056 | } |
| 2057 | |
| 2058 | KnobButton* prevBtn = dynamic_cast<KnobButton*>( publicInterface->getKnobByName(buttonName).get() ); |
| 2059 | assert(prevBtn); |
| 2060 | if (prevBtn) { |
| 2061 | for (std::list<Node*>::const_iterator it = selectedInstances.begin(); it != selectedInstances.end(); ++it) { |
| 2062 | if ( !(*it)->getEffectInstance() ) { |
| 2063 | return false; |
| 2064 | } |
| 2065 | if ( (*it)->isNodeDisabled() ) { |
| 2066 | continue; |
| 2067 | } |
| 2068 | KnobIPtr k = (*it)->getKnobByName( prevBtn->getName() ); |
| 2069 | KnobButton* bKnob = dynamic_cast<KnobButton*>( k.get() ); |
| 2070 | assert(bKnob); |
| 2071 | trackButtons->push_back(bKnob); |
| 2072 | } |
| 2073 | } |
| 2074 | |
| 2075 | return true; |
| 2076 | } |
| 2077 | |
| 2078 | bool |
| 2079 | TrackerPanelV1::trackBackward(ViewerInstance* /*viewer*/) |
no test coverage detected