void KnobGuiFile::createWidget(QHBoxLayout* layout) { KnobGuiPtr knobUI = getKnobGui(); if (!knobUI) { return; } Gui* gui = knobUI->getGui(); if (!gui) { return; } GuiAppInstancePtr app = gui->getApp(); if (!app) { return; } KnobFilePtr knob = _knob.lock(); if (!knob) { return; } EffectInstancePtr holderIsEffect = toEffectInstance( knob->getHolder() ); if ( holderIsEffect && holderIsEffect->isReader() && (knob->getName() == kOfxImageEffectFileParamName) ) { TimeLinePtr timeline = app->getTimeLine(); QObject::connect( timeline.get(), SIGNAL(frameChanged(SequenceTime,int)), this, SLOT(onTimelineFrameChanged(SequenceTime,int)) ); }
NATRON_NAMESPACE_ENTER void Gui::setupUi() { onProjectNameChanged(QString(), false); setMouseTracking(true); installEventFilter(this); assert( !isFullScreen() ); //Gui::loadStyleSheet(); ///Restores position, size of the main window as well as whether it was fullscreen or not. _imp->restoreGuiGeometry(); _imp->_undoStacksGroup = new QUndoGroup; createMenuActions(); /*CENTRAL AREA*/ //====================== _imp->_centralWidget = new QWidget(this); setCentralWidget(_imp->_centralWidget); _imp->_mainLayout = new QHBoxLayout(_imp->_centralWidget); _imp->_mainLayout->setContentsMargins(0, 0, 0, 0); _imp->_centralWidget->setLayout(_imp->_mainLayout); _imp->_leftRightSplitter = new Splitter(Qt::Horizontal, this, _imp->_centralWidget); _imp->_leftRightSplitter->setChildrenCollapsible(false); _imp->_leftRightSplitter->setObjectName( QString::fromUtf8(kMainSplitterObjectName) ); getApp()->registerSplitter(_imp->_leftRightSplitter); _imp->_leftRightSplitter->setOrientation(Qt::Horizontal); _imp->_leftRightSplitter->setContentsMargins(0, 0, 0, 0); _imp->_toolBox = new AutoHideToolBar(this, _imp->_leftRightSplitter); _imp->_toolBox->setToolButtonStyle(Qt::ToolButtonIconOnly); _imp->_toolBox->setOrientation(Qt::Vertical); _imp->_toolBox->setMaximumWidth( TO_DPIX(NATRON_TOOL_BUTTON_SIZE) ); if (_imp->leftToolBarDisplayedOnHoverOnly) { _imp->refreshLeftToolBarVisibility( mapFromGlobal( QCursor::pos() ) ); } _imp->_leftRightSplitter->addWidget(_imp->_toolBox); _imp->_mainLayout->addWidget(_imp->_leftRightSplitter); _imp->createNodeGraphGui(); _imp->createAnimationModuleGui(); _imp->createScriptEditorGui(); _imp->createProgressPanelGui(); ///Must be absolutely called once _nodeGraphArea has been initialized. _imp->createPropertiesBinGui(); ProjectPtr project = getApp()->getProject(); _imp->_projectGui = new ProjectGui(this); _imp->_projectGui->create(project, _imp->_layoutPropertiesBin, this); _imp->_errorLog = new LogWindow(0); _imp->_errorLog->hide(); createDefaultLayoutInternal(false); initProjectGuiKnobs(); setVisibleProjectSettingsPanel(); _imp->_aboutWindow = new AboutWindow(this, this); _imp->_aboutWindow->hide(); //the same action also clears the ofx plugins caches, they are not the same cache but are used to the same end QObject::connect( project.get(), SIGNAL(projectNameChanged(QString,bool)), this, SLOT(onProjectNameChanged(QString,bool)) ); TimeLinePtr timeline = project->getTimeLine(); QObject::connect( timeline.get(), SIGNAL(frameChanged(SequenceTime,int)), this, SLOT(onTimelineTimeChanged(SequenceTime,int)) ); QObject::connect( timeline.get(), SIGNAL(frameAboutToChange()), this, SLOT(onTimelineTimeAboutToChange()) ); /*Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form: void on_<object name>_<signal name>(<signal parameters>); Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be: void on_button1_clicked(); If object itself has a properly set object name, its own signals are also connected to its respective slots. */ QMetaObject::connectSlotsByName(this); { #ifdef DEBUG boost_adaptbx::floating_point::exception_trapping trap(0); #endif appPTR->setOFXHostHandle( getApp()->getOfxHostOSHandle() ); } } // setupUi