| 2102 | } |
| 2103 | |
| 2104 | void |
| 2105 | Node::Implementation::restoreUserKnobsRecursive(const std::list<boost::shared_ptr<KnobSerializationBase> >& knobs, |
| 2106 | const boost::shared_ptr<KnobGroup>& group, |
| 2107 | const boost::shared_ptr<KnobPage>& page) |
| 2108 | { |
| 2109 | for (std::list<boost::shared_ptr<KnobSerializationBase> >::const_iterator it = knobs.begin(); it != knobs.end(); ++it) { |
| 2110 | GroupKnobSerialization* isGrp = dynamic_cast<GroupKnobSerialization*>( it->get() ); |
| 2111 | KnobSerialization* isRegular = dynamic_cast<KnobSerialization*>( it->get() ); |
| 2112 | assert(isGrp || isRegular); |
| 2113 | |
| 2114 | KnobPtr found = _publicInterface->getKnobByName( (*it)->getName() ); |
| 2115 | |
| 2116 | if (isGrp) { |
| 2117 | boost::shared_ptr<KnobGroup> grp; |
| 2118 | if (!found) { |
| 2119 | grp = AppManager::createKnob<KnobGroup>(effect.get(), isGrp->getLabel(), 1, false); |
| 2120 | } else { |
| 2121 | grp = boost::dynamic_pointer_cast<KnobGroup>(found); |
| 2122 | if (!grp) { |
| 2123 | continue; |
| 2124 | } |
| 2125 | } |
| 2126 | grp->setAsUserKnob(true); |
| 2127 | grp->setName( (*it)->getName() ); |
| 2128 | if ( isGrp && isGrp->isSetAsTab() ) { |
| 2129 | grp->setAsTab(); |
| 2130 | } |
| 2131 | page->addKnob(grp); |
| 2132 | if (group) { |
| 2133 | group->addKnob(grp); |
| 2134 | } |
| 2135 | grp->setValue( isGrp->isOpened() ); |
| 2136 | restoreUserKnobsRecursive(isGrp->getChildren(), grp, page); |
| 2137 | } else if (isRegular) { |
| 2138 | assert( isRegular->isUserKnob() ); |
| 2139 | KnobPtr sKnob = isRegular->getKnob(); |
| 2140 | KnobPtr knob; |
| 2141 | KnobInt* isInt = dynamic_cast<KnobInt*>( sKnob.get() ); |
| 2142 | KnobDouble* isDbl = dynamic_cast<KnobDouble*>( sKnob.get() ); |
| 2143 | KnobBool* isBool = dynamic_cast<KnobBool*>( sKnob.get() ); |
| 2144 | KnobChoice* isChoice = dynamic_cast<KnobChoice*>( sKnob.get() ); |
| 2145 | KnobColor* isColor = dynamic_cast<KnobColor*>( sKnob.get() ); |
| 2146 | KnobString* isStr = dynamic_cast<KnobString*>( sKnob.get() ); |
| 2147 | KnobFile* isFile = dynamic_cast<KnobFile*>( sKnob.get() ); |
| 2148 | KnobOutputFile* isOutFile = dynamic_cast<KnobOutputFile*>( sKnob.get() ); |
| 2149 | KnobPath* isPath = dynamic_cast<KnobPath*>( sKnob.get() ); |
| 2150 | KnobButton* isBtn = dynamic_cast<KnobButton*>( sKnob.get() ); |
| 2151 | KnobSeparator* isSep = dynamic_cast<KnobSeparator*>( sKnob.get() ); |
| 2152 | KnobParametric* isParametric = dynamic_cast<KnobParametric*>( sKnob.get() ); |
| 2153 | |
| 2154 | assert(isInt || isDbl || isBool || isChoice || isColor || isStr || isFile || isOutFile || isPath || isBtn || isSep || isParametric); |
| 2155 | |
| 2156 | if (isInt) { |
| 2157 | boost::shared_ptr<KnobInt> k; |
| 2158 | |
| 2159 | if (!found) { |
| 2160 | k = AppManager::createKnob<KnobInt>(effect.get(), isRegular->getLabel(), |
| 2161 | sKnob->getDimension(), false); |
no test coverage detected