void ViewerNodePrivate::refreshInputChoices(bool resetChoiceIfNotFound) { // Refresh the A and B input choices KnobChoicePtr aInputKnob = aInputNodeChoiceKnob.lock(); KnobChoicePtr bInputKnob = bInputNodeChoiceKnob.lock(); ViewerCompositingOperatorEnum operation = (ViewerCompositingOperatorEnum)blendingModeChoiceKnob.lock()->getValue(); bInputKnob->setEnabled(operation != eViewerCompositingOperatorNone); std::vector<ChoiceOption> entries; entries.push_back(ChoiceOption("-", "", "")); int nInputs = _publicInterface->getMaxInputCount(); for (int i = 0; i < nInputs; ++i) { NodePtr inputNode = _publicInterface->getNode()->getRealInput(i); if (!inputNode) { continue; } std::string optionID; { std::stringstream ss; ss << i; optionID = ss.str(); } entries.push_back(ChoiceOption(optionID, inputNode->getLabel(), "")); } ChoiceOption currentAChoice = aInputKnob->getActiveEntry(); ChoiceOption currentBChoice = bInputKnob->getActiveEntry(); aInputKnob->populateChoices(entries); bInputKnob->populateChoices(entries); if (resetChoiceIfNotFound) { if (currentAChoice.id == "-" || !aInputKnob->isActiveEntryPresentInEntries(ViewIdx(0))) { aInputKnob->setValue(entries.size() > 1 ? 1 : 0); } if (currentBChoice.id == "-" || !bInputKnob->isActiveEntryPresentInEntries(ViewIdx(0))) { bInputKnob->setValue(entries.size() > 1 ? 1 : 0); } } if (uiContext) { if ( (operation == eViewerCompositingOperatorNone) || !bInputKnob->isEnabled() || bInputKnob->getActiveEntry().id.empty() ) { uiContext->setInfoBarVisible(1, false); } else if (operation != eViewerCompositingOperatorNone) { uiContext->setInfoBarVisible(1, true); } } } // refreshInputChoices
void ViewerNodeOverlay::showRightClickMenu() { KnobChoicePtr menu = _imp->rightClickMenu.lock(); std::vector<ChoiceOption> entries, showHideEntries; std::vector<KnobButtonPtr> entriesButtons; entriesButtons.push_back(_imp->rightClickToggleWipe.lock()); entriesButtons.push_back(_imp->rightClickCenterWipe.lock()); entriesButtons.push_back(_imp->centerViewerButtonKnob.lock()); entriesButtons.push_back(_imp->zoomScaleOneAction.lock()); entriesButtons.push_back(_imp->zoomInAction.lock()); entriesButtons.push_back(_imp->zoomOutAction.lock()); entriesButtons.push_back(_imp->rightClickPreviousLayer.lock()); entriesButtons.push_back(_imp->rightClickNextLayer.lock()); entriesButtons.push_back(_imp->rightClickPreviousView.lock()); entriesButtons.push_back(_imp->rightClickNextView.lock()); entriesButtons.push_back(_imp->rightClickSwitchAB.lock()); entriesButtons.push_back(_imp->rightClickShowHideOverlays.lock()); entriesButtons.push_back(_imp->enableStatsAction.lock()); for (std::size_t i = 0; i < entriesButtons.size(); ++i) { entries.push_back(ChoiceOption(entriesButtons[i]->getName(), "", "")); } entries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuShowHideSubMenu, "", "")); KnobChoicePtr showHideMenu = _imp->rightClickShowHideSubMenu.lock(); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuHideAll, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuHideAllTop, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuHideAllBottom, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuShowHideTopToolbar, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuShowHideLeftToolbar, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuShowHidePlayer, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuShowHideTimeline, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamRightClickMenuShowHideTabHeader, "", "")); showHideEntries.push_back(ChoiceOption(kViewerNodeParamEnableColorPicker, "", "")); { std::vector<int> separators; separators.push_back(2); showHideMenu->setSeparators(separators); } showHideMenu->populateChoices(showHideEntries); menu->populateChoices(entries); }
void DiskCacheNode::initializeKnobs() { KnobPagePtr page = createKnob<KnobPage>("controlsPage"); page->setLabel(tr("Controls") ); KnobChoicePtr frameRange = createKnob<KnobChoice>(kDiskCacheNodeFrameRange); frameRange->setLabel(tr(kDiskCacheNodeFrameRangeLabel) ); frameRange->setHintToolTip(tr(kDiskCacheNodeFrameRangeHint)); frameRange->setAnimationEnabled(false); { std::vector<ChoiceOption> choices; choices.push_back(ChoiceOption("Input frame range", "", "")); choices.push_back(ChoiceOption("Project frame range", "", "")); choices.push_back(ChoiceOption("Manual","", "")); frameRange->populateChoices(choices); } frameRange->setEvaluateOnChange(false); frameRange->setDefaultValue(0); page->addKnob(frameRange); _imp->frameRange = frameRange; KnobIntPtr firstFrame = createKnob<KnobInt>(kDiskCacheNodeFirstFrame); firstFrame->setLabel(tr(kDiskCacheNodeFirstFrameLabel) ); firstFrame->setHintToolTip(tr(kDiskCacheNodeFirstFrameHint)); firstFrame->setAnimationEnabled(false); firstFrame->disableSlider(); firstFrame->setEvaluateOnChange(false); firstFrame->setAddNewLine(false); firstFrame->setDefaultValue(1); firstFrame->setSecret(true); page->addKnob(firstFrame); _imp->firstFrame = firstFrame; KnobIntPtr lastFrame = createKnob<KnobInt>(kDiskCacheNodeLastFrame); lastFrame->setAnimationEnabled(false); lastFrame->setLabel(tr(kDiskCacheNodeLastFrameLabel)); lastFrame->setHintToolTip(tr(kDiskCacheNodeLastFrameHint)); lastFrame->disableSlider(); lastFrame->setEvaluateOnChange(false); lastFrame->setDefaultValue(100); lastFrame->setSecret(true); page->addKnob(lastFrame); _imp->lastFrame = lastFrame; KnobButtonPtr preRender = createKnob<KnobButton>("preRender"); preRender->setLabel(tr("Pre-cache")); preRender->setEvaluateOnChange(false); preRender->setHintToolTip( tr("Cache the frame range specified by rendering images at zoom-level 100% only.") ); page->addKnob(preRender); _imp->preRender = preRender; }
void ViewerNode::refreshViewsKnobVisibility() { KnobChoicePtr knob = _imp->activeViewKnob.lock(); if (knob) { const std::vector<std::string>& views = getApp()->getProject()->getProjectViewNames(); std::vector<ChoiceOption> entries(views.size()); for (std::size_t i = 0; i < views.size(); ++i) { entries[i] = ChoiceOption(views[i], "", ""); } knob->populateChoices(entries); knob->setInViewerContextSecret(views.size() <= 1); } }
void DiskCacheNode::initializeKnobs() { KnobPagePtr page = AppManager::createKnob<KnobPage>( shared_from_this(), tr("Controls") ); KnobChoicePtr frameRange = AppManager::createKnob<KnobChoice>( shared_from_this(), tr("Frame range") ); frameRange->setName("frameRange"); frameRange->setAnimationEnabled(false); std::vector<std::string> choices; choices.push_back("Input frame range"); choices.push_back("Project frame range"); choices.push_back("Manual"); frameRange->populateChoices(choices); frameRange->setEvaluateOnChange(false); frameRange->setDefaultValue(0); page->addKnob(frameRange); _imp->frameRange = frameRange; KnobIntPtr firstFrame = AppManager::createKnob<KnobInt>( shared_from_this(), tr("First Frame") ); firstFrame->setAnimationEnabled(false); firstFrame->setName("firstFrame"); firstFrame->disableSlider(); firstFrame->setEvaluateOnChange(false); firstFrame->setAddNewLine(false); firstFrame->setDefaultValue(1); firstFrame->setSecret(true); page->addKnob(firstFrame); _imp->firstFrame = firstFrame; KnobIntPtr lastFrame = AppManager::createKnob<KnobInt>( shared_from_this(), tr("Last Frame") ); lastFrame->setAnimationEnabled(false); lastFrame->setName("LastFrame"); lastFrame->disableSlider(); lastFrame->setEvaluateOnChange(false); lastFrame->setDefaultValue(100); lastFrame->setSecret(true); page->addKnob(lastFrame); _imp->lastFrame = lastFrame; KnobButtonPtr preRender = AppManager::createKnob<KnobButton>( shared_from_this(), tr("Pre-cache") ); preRender->setName("preRender"); preRender->setEvaluateOnChange(false); preRender->setHintToolTip( tr("Cache the frame range specified by rendering images at zoom-level 100% only.") ); page->addKnob(preRender); _imp->preRender = preRender; }
void OneViewNode::initializeKnobs() { KnobPagePtr page = AppManager::createKnob<KnobPage>( shared_from_this(), tr("Controls") ); page->setName("controls"); KnobChoicePtr viewKnob = AppManager::createKnob<KnobChoice>( shared_from_this(), tr("View") ); viewKnob->setName("view"); viewKnob->setHintToolTip( tr("View to take from the input") ); page->addKnob(viewKnob); const std::vector<std::string>& views = getApp()->getProject()->getProjectViewNames(); std::string currentView = viewKnob->getActiveEntryText_mt_safe(); viewKnob->populateChoices(views); _imp->viewKnob = viewKnob; }
void OneViewNode::onProjectViewsChanged() { const std::vector<std::string>& views = getApp()->getProject()->getProjectViewNames(); KnobChoicePtr viewKnob = _imp->viewKnob.lock(); std::string currentView = viewKnob->getActiveEntryText_mt_safe(); viewKnob->populateChoices(views); bool foundView = false; for (std::size_t i = 0; i < views.size(); ++i) { if (views[i] == currentView) { foundView = true; viewKnob->setValue(i); break; } } if (!foundView) { viewKnob->setValue(0); } }
void TrackMarker::initializeKnobs() { KnobItemsTablePtr model = getModel(); EffectInstancePtr effect; if (model) { effect = model->getNode()->getEffectInstance(); } KnobIntPtr defPatternSizeKnob, defSearchSizeKnob; KnobChoicePtr defMotionModelKnob; defPatternSizeKnob = toKnobInt(effect->getKnobByName(kTrackerUIParamDefaultMarkerPatternWinSize)); defSearchSizeKnob = toKnobInt(effect->getKnobByName(kTrackerUIParamDefaultMarkerSearchWinSize)); defMotionModelKnob = toKnobChoice(effect->getKnobByName(kTrackerUIParamDefaultMotionModel)); double patternHalfSize = defPatternSizeKnob ? defPatternSizeKnob->getValue() / 2. : 21; double searchHalfSize = defSearchSizeKnob ? defSearchSizeKnob->getValue() / 2. : 71; int defMotionModel_i = defMotionModelKnob ? defMotionModelKnob->getValue() : 0; KnobDoublePtr swbbtmLeft = createKnob<KnobDouble>(kTrackerParamSearchWndBtmLeft, 2); swbbtmLeft->setLabel(tr(kTrackerParamSearchWndBtmLeftLabel)); swbbtmLeft->setDefaultValue(-searchHalfSize, DimIdx(0)); swbbtmLeft->setDefaultValue(-searchHalfSize, DimIdx(1)); swbbtmLeft->setHintToolTip( tr(kTrackerParamSearchWndBtmLeftHint) ); _imp->searchWindowBtmLeft = swbbtmLeft; KnobDoublePtr swbtRight = createKnob<KnobDouble>(kTrackerParamSearchWndTopRight, 2); swbtRight->setLabel(tr(kTrackerParamSearchWndTopRightLabel)); swbtRight->setDefaultValue(searchHalfSize, DimIdx(0)); swbtRight->setDefaultValue(searchHalfSize, DimIdx(1)); swbtRight->setHintToolTip( tr(kTrackerParamSearchWndTopRightHint) ); _imp->searchWindowTopRight = swbtRight; KnobDoublePtr ptLeft = createKnob<KnobDouble>(kTrackerParamPatternTopLeft, 2); ptLeft->setLabel(tr(kTrackerParamPatternTopLeftLabel)); ptLeft->setDefaultValue(-patternHalfSize, DimIdx(0)); ptLeft->setDefaultValue(patternHalfSize, DimIdx(1)); ptLeft->setHintToolTip( tr(kTrackerParamPatternTopLeftHint) ); _imp->patternTopLeft = ptLeft; KnobDoublePtr ptRight = createKnob<KnobDouble>(kTrackerParamPatternTopRight, 2); ptRight->setLabel(tr(kTrackerParamPatternTopRightLabel)); ptRight->setDefaultValue(patternHalfSize, DimIdx(0)); ptRight->setDefaultValue(patternHalfSize, DimIdx(1)); ptRight->setHintToolTip( tr(kTrackerParamPatternTopRightHint) ); _imp->patternTopRight = ptRight; KnobDoublePtr pBRight = createKnob<KnobDouble>(kTrackerParamPatternBtmRight, 2); pBRight->setLabel(tr(kTrackerParamPatternBtmRightLabel)); pBRight->setDefaultValue(patternHalfSize, DimIdx(0)); pBRight->setDefaultValue(-patternHalfSize, DimIdx(1)); pBRight->setHintToolTip( tr(kTrackerParamPatternBtmRightHint) ); _imp->patternBtmRight = pBRight; KnobDoublePtr pBLeft = createKnob<KnobDouble>(kTrackerParamPatternBtmLeft, 2); pBLeft->setLabel(tr(kTrackerParamPatternBtmLeftLabel)); pBLeft->setDefaultValue(-patternHalfSize, DimIdx(0)); pBLeft->setDefaultValue(-patternHalfSize, DimIdx(1)); pBLeft->setHintToolTip( tr(kTrackerParamPatternBtmLeftHint) ); _imp->patternBtmLeft = pBLeft; KnobDoublePtr centerKnob = createKnob<KnobDouble>(kTrackerParamCenter, 2); centerKnob->setLabel(tr(kTrackerParamCenterLabel)); centerKnob->setHintToolTip( tr(kTrackerParamCenterHint) ); _imp->center = centerKnob; KnobDoublePtr offsetKnob = createKnob<KnobDouble>(kTrackerParamOffset, 2); offsetKnob->setLabel(tr(kTrackerParamOffsetLabel)); offsetKnob->setHintToolTip( tr(kTrackerParamOffsetHint) ); _imp->offset = offsetKnob; #ifdef NATRON_TRACK_MARKER_USE_WEIGHT KnobDoublePtr weightKnob = createKnob<KnobDouble>(kTrackerParamTrackWeight, 1); weightKnob->setLabel(tr(kTrackerParamTrackWeightLabel)); weightKnob->setHintToolTip( tr(kTrackerParamTrackWeightHint) ); weightKnob->setDefaultValue(1.); weightKnob->setAnimationEnabled(false); weightKnob->setRange(0., 1.); _imp->weight = weightKnob; #endif KnobChoicePtr mmodelKnob = createKnob<KnobChoice>(kTrackerParamMotionModel, 1); mmodelKnob->setHintToolTip( tr(kTrackerParamMotionModelHint) ); mmodelKnob->setLabel(tr(kTrackerParamMotionModelLabel)); { std::vector<ChoiceOption> choices, helps; std::map<int, std::string> icons; TrackerNodePrivate::getMotionModelsAndHelps(true, &choices, &icons); mmodelKnob->populateChoices(choices); mmodelKnob->setIcons(icons); } mmodelKnob->setDefaultValue(defMotionModel_i); _imp->motionModel = mmodelKnob; KnobDoublePtr errKnob = createKnob<KnobDouble>(kTrackerParamError, 1); errKnob->setLabel(tr(kTrackerParamErrorLabel)); _imp->error = errKnob; KnobBoolPtr enableKnob = createKnob<KnobBool>(kTrackerParamEnabled, 1); enableKnob->setLabel(tr(kTrackerParamEnabledLabel)); enableKnob->setHintToolTip( tr(kTrackerParamEnabledHint) ); enableKnob->setAnimationEnabled(true); enableKnob->setDefaultValue(true); _imp->enabled = enableKnob; addColumn(kKnobTableItemColumnLabel, DimIdx(0)); addColumn(kTrackerParamEnabled, DimIdx(0)); addColumn(kTrackerParamMotionModel, DimIdx(0)); addColumn(kTrackerParamCenter, DimIdx(0)); addColumn(kTrackerParamCenter, DimIdx(1)); addColumn(kTrackerParamOffset, DimIdx(0)); addColumn(kTrackerParamOffset, DimIdx(1)); addColumn(kTrackerParamError, DimIdx(0)); } // TrackMarker::initializeKnobs
void RotoShapeRenderNode::initializeKnobs() { assert(!isRenderClone()); KnobPagePtr page = createKnob<KnobPage>("controlsPage"); page->setLabel(tr("Controls")); { KnobChoicePtr param = createKnob<KnobChoice>(kRotoShapeRenderNodeParamType); param->setLabel(tr(kRotoShapeRenderNodeParamTypeLabel)); { std::vector<ChoiceOption> options; options.push_back(ChoiceOption(kRotoShapeRenderNodeParamTypeSolid, "", "")); options.push_back(ChoiceOption(kRotoShapeRenderNodeParamTypeSmear, "", "")); param->populateChoices(options); } param->setIsMetadataSlave(true); page->addKnob(param); _imp->renderType = param; } { KnobChoicePtr param = createKnob<KnobChoice>(kRotoOutputRodType); param->setLabel(tr(kRotoOutputRodTypeLabel)); param->setHintToolTip(tr(kRotoOutputRodTypeHint)); std::vector<ChoiceOption> options; options.push_back(ChoiceOption(kRotoOutputRodTypeDefaultID, kRotoOutputRodTypeDefaultLabel, tr(kRotoOutputRodTypeDefaultHint).toStdString())); options.push_back(ChoiceOption(kRotoOutputRodTypeFormatID, kRotoOutputRodTypeFormatLabel, tr(kRotoOutputRodTypeFormatHint).toStdString())); options.push_back(ChoiceOption(kRotoOutputRodTypeProjectID, kRotoOutputRodTypeProjectLabel, tr(kRotoOutputRodTypeProjectHint).toStdString())); param->populateChoices(options); param->setAddNewLine(false); param->setIsPersistent(false); page->addKnob(param); _imp->outputRoDTypeKnob = param; } { KnobChoicePtr param = createKnob<KnobChoice>(kRotoFormatParam); param->setLabel(tr(kRotoFormatParamLabel)); param->setHintToolTip(tr(kRotoFormatParamHint)); page->addKnob(param); param->setIsPersistent(false); _imp->outputFormatKnob = param; } { KnobIntPtr param = createKnob<KnobInt>(kRotoFormatSize, 2); param->setSecret(true); page->addKnob(param); param->setIsPersistent(false); _imp->outputFormatSizeKnob = param; } { KnobDoublePtr param = createKnob<KnobDouble>(kRotoFormatPar); param->setSecret(true); page->addKnob(param); param->setIsPersistent(false); _imp->outputFormatParKnob = param; } { KnobBoolPtr param = createKnob<KnobBool>(kRotoClipToFormatParam); param->setLabel(tr(kRotoClipToFormatParamLabel)); param->setHintToolTip(tr(kRotoClipToFormatParamHint)); param->setDefaultValue(false); page->addKnob(param); _imp->clipToFormatKnob = param; } }
void TrackMarker::initializeKnobs() { TrackerContextPtr context = _imp->context.lock(); KnobIntPtr defPatternSizeKnob = context->getDefaultMarkerPatternWinSizeKnob(); KnobIntPtr defSearchSizeKnob = context->getDefaultMarkerSearchWinSizeKnob(); double patternHalfSize = defPatternSizeKnob->getValue() / 2.; double searchHalfSize = defSearchSizeKnob->getValue() / 2.; KnobDoublePtr swbbtmLeft = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamSearchWndBtmLeftLabel), 2, false); swbbtmLeft->setName(kTrackerParamSearchWndBtmLeft); swbbtmLeft->setDefaultValue(-searchHalfSize, 0); swbbtmLeft->setDefaultValue(-searchHalfSize, 1); swbbtmLeft->setHintToolTip( tr(kTrackerParamSearchWndBtmLeftHint) ); _imp->searchWindowBtmLeft = swbbtmLeft; KnobDoublePtr swbtRight = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamSearchWndTopRightLabel), 2, false); swbtRight->setName(kTrackerParamSearchWndTopRight); swbtRight->setDefaultValue(searchHalfSize, 0); swbtRight->setDefaultValue(searchHalfSize, 1); swbtRight->setHintToolTip( tr(kTrackerParamSearchWndTopRightHint) ); _imp->searchWindowTopRight = swbtRight; KnobDoublePtr ptLeft = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamPatternTopLeftLabel), 2, false); ptLeft->setName(kTrackerParamPatternTopLeft); ptLeft->setDefaultValue(-patternHalfSize, 0); ptLeft->setDefaultValue(patternHalfSize, 1); ptLeft->setHintToolTip( tr(kTrackerParamPatternTopLeftHint) ); _imp->patternTopLeft = ptLeft; KnobDoublePtr ptRight = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamPatternTopRightLabel), 2, false); ptRight->setName(kTrackerParamPatternTopRight); ptRight->setDefaultValue(patternHalfSize, 0); ptRight->setDefaultValue(patternHalfSize, 1); ptRight->setHintToolTip( tr(kTrackerParamPatternTopRightHint) ); _imp->patternTopRight = ptRight; KnobDoublePtr pBRight = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamPatternBtmRightLabel), 2, false); pBRight->setName(kTrackerParamPatternBtmRight); pBRight->setDefaultValue(patternHalfSize, 0); pBRight->setDefaultValue(-patternHalfSize, 1); pBRight->setHintToolTip( tr(kTrackerParamPatternBtmRightHint) ); _imp->patternBtmRight = pBRight; KnobDoublePtr pBLeft = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamPatternBtmLeftLabel), 2, false); pBLeft->setName(kTrackerParamPatternBtmLeft); pBLeft->setDefaultValue(-patternHalfSize, 0); pBLeft->setDefaultValue(-patternHalfSize, 1); pBLeft->setHintToolTip( tr(kTrackerParamPatternBtmLeftHint) ); _imp->patternBtmLeft = pBLeft; KnobDoublePtr centerKnob = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamCenterLabel), 2, false); centerKnob->setName(kTrackerParamCenter); centerKnob->setHintToolTip( tr(kTrackerParamCenterHint) ); _imp->center = centerKnob; KnobDoublePtr offsetKnob = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamOffsetLabel), 2, false); offsetKnob->setName(kTrackerParamOffset); offsetKnob->setHintToolTip( tr(kTrackerParamOffsetHint) ); _imp->offset = offsetKnob; #ifdef NATRON_TRACK_MARKER_USE_WEIGHT KnobDoublePtr weightKnob = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamTrackWeightLabel), 1, false); weightKnob->setName(kTrackerParamTrackWeight); weightKnob->setHintToolTip( tr(kTrackerParamTrackWeightHint) ); weightKnob->setDefaultValue(1.); weightKnob->setAnimationEnabled(false); weightKnob->setMinimum(0.); weightKnob->setMaximum(1.); _imp->weight = weightKnob; #endif KnobChoicePtr mmodelKnob = AppManager::createKnob<KnobChoice>(shared_from_this(), tr(kTrackerParamMotionModelLabel), 1, false); mmodelKnob->setHintToolTip( tr(kTrackerParamMotionModelHint) ); mmodelKnob->setName(kTrackerParamMotionModel); { std::vector<std::string> choices, helps; TrackerContext::getMotionModelsAndHelps(true, &choices, &helps); mmodelKnob->populateChoices(choices, helps); } mmodelKnob->setDefaultValue(0); _imp->motionModel = mmodelKnob; KnobDoublePtr errKnob = AppManager::createKnob<KnobDouble>(shared_from_this(), tr(kTrackerParamErrorLabel), 1, false); errKnob->setName(kTrackerParamError); _imp->error = errKnob; KnobBoolPtr enableKnob = AppManager::createKnob<KnobBool>(shared_from_this(), tr(kTrackerParamEnabledLabel), 1, false); enableKnob->setName(kTrackerParamEnabled); enableKnob->setHintToolTip( tr(kTrackerParamEnabledHint) ); enableKnob->setAnimationEnabled(true); enableKnob->setDefaultValue(true); _imp->enabled = enableKnob; QObject::connect( this, SIGNAL(enabledChanged(int)), _imp->context.lock().get(), SLOT(onMarkerEnabledChanged(int)) ); boost::shared_ptr<KnobSignalSlotHandler> handler = _imp->center.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(keyFrameSet(double,ViewSpec,int,int,bool)), this, SLOT(onCenterKeyframeSet(double,ViewSpec,int,int,bool)) ); QObject::connect( handler.get(), SIGNAL(keyFrameRemoved(double,ViewSpec,int,int)), this, SLOT(onCenterKeyframeRemoved(double,ViewSpec,int,int)) ); QObject::connect( handler.get(), SIGNAL(keyFrameMoved(ViewSpec,int,double,double)), this, SLOT(onCenterKeyframeMoved(ViewSpec,int,double,double)) ); QObject::connect( handler.get(), SIGNAL(multipleKeyFramesSet(std::list<double>,ViewSpec,int,int)), this, SLOT(onCenterKeyframesSet(std::list<double>,ViewSpec,int,int)) ); QObject::connect( handler.get(), SIGNAL(multipleKeyFramesRemoved(std::list<double>,ViewSpec,int,int)), this, SLOT(onCenterMultipleKeysRemoved(std::list<double>,ViewSpec,int,int)) ); QObject::connect( handler.get(), SIGNAL(animationRemoved(ViewSpec,int)), this, SLOT(onCenterAnimationRemoved(ViewSpec,int)) ); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onCenterKnobValueChanged(ViewSpec,int,int)) ); handler = _imp->offset.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onOffsetKnobValueChanged(ViewSpec,int,int)) ); handler = _imp->error.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onErrorKnobValueChanged(ViewSpec,int,int)) ); #ifdef NATRON_TRACK_MARKER_USE_WEIGHT handler = _imp->weight.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onWeightKnobValueChanged(ViewSpec,int,int)) ); #endif handler = _imp->motionModel.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onMotionModelKnobValueChanged(ViewSpec,int,int)) ); /*handler = _imp->patternBtmLeft->getSignalSlotHandler(); QObject::connect(handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onPatternBtmLeftKnobValueChanged(int,int))); handler = _imp->patternTopLeft->getSignalSlotHandler(); QObject::connect(handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onPatternTopLeftKnobValueChanged(int,int))); handler = _imp->patternTopRight->getSignalSlotHandler(); QObject::connect(handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onPatternTopRightKnobValueChanged(int,int))); handler = _imp->patternBtmRight->getSignalSlotHandler(); QObject::connect(handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onPatternBtmRightKnobValueChanged(int,int))); */ handler = _imp->searchWindowBtmLeft.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onSearchBtmLeftKnobValueChanged(ViewSpec,int,int)) ); handler = _imp->searchWindowTopRight.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onSearchTopRightKnobValueChanged(ViewSpec,int,int)) ); handler = _imp->enabled.lock()->getSignalSlotHandler(); QObject::connect( handler.get(), SIGNAL(valueChanged(ViewSpec,int,int)), this, SLOT(onEnabledValueChanged(ViewSpec,int,int)) ); } // TrackMarker::initializeKnobs