void Gui::openRecentFile() { QAction *action = qobject_cast<QAction *>( sender() ); if (action) { QFileInfo f( action->data().toString() ); QString path = f.path() + QLatin1Char('/'); QString filename = path + f.fileName(); int openedProject = appPTR->isProjectAlreadyOpened( filename.toStdString() ); if (openedProject != -1) { AppInstance* instance = appPTR->getAppInstance(openedProject); if (instance) { GuiAppInstance* guiApp = dynamic_cast<GuiAppInstance*>(instance); assert(guiApp); if (guiApp) { guiApp->getGui()->activateWindow(); return; } } } ///if the current graph has no value, just load the project in the same window if ( _imp->_appInstance->getProject()->isGraphWorthLess() ) { _imp->_appInstance->getProject()->loadProject( path, f.fileName() ); } else { CLArgs cl; AppInstance* newApp = appPTR->newAppInstance(cl, false); newApp->getProject()->loadProject( path, f.fileName() ); } } }
bool GuiAppInstance::findAndTryLoadUntitledAutoSave() { if ( !appPTR->getCurrentSettings()->isAutoSaveEnabledForUnsavedProjects() ) { return false; } QDir savesDir( Project::autoSavesDir() ); QStringList entries = savesDir.entryList(QDir::Files | QDir::NoDotAndDotDot); QStringList foundAutosaves; for (int i = 0; i < entries.size(); ++i) { const QString & entry = entries.at(i); QString searchStr( QLatin1Char('.') ); searchStr.append( QString::fromUtf8(NATRON_PROJECT_FILE_EXT) ); searchStr.append( QString::fromUtf8(".autosave") ); int suffixPos = entry.indexOf(searchStr); if ( (suffixPos == -1) || entry.contains( QString::fromUtf8("RENDER_SAVE") ) ) { continue; } foundAutosaves << entry; } if ( foundAutosaves.empty() ) { return false; } QString text = tr("An auto-saved project was found with no associated project file.\n" "Would you like to restore it? Clicking No will remove this auto-save."); appPTR->hideSplashScreen(); StandardButtonEnum ret = Dialogs::questionDialog(tr("Auto-save").toStdString(), text.toStdString(), false, StandardButtons(eStandardButtonYes | eStandardButtonNo), eStandardButtonYes); if ( (ret == eStandardButtonNo) || (ret == eStandardButtonEscape) ) { Project::clearAutoSavesDir(); return false; } for (int i = 0; i < foundAutosaves.size(); ++i) { const QString& autoSaveFileName = foundAutosaves[i]; if (i == 0) { //Load the first one into the current instance of Natron, then open-up new instances if ( !getProject()->loadProject(savesDir.path() + QLatin1Char('/'), autoSaveFileName, true) ) { return false; } } else { CLArgs cl; AppInstance* newApp = appPTR->newAppInstance(cl, false); if ( !newApp->getProject()->loadProject(savesDir.path() + QLatin1Char('/'), autoSaveFileName, true) ) { return false; } } } return true; } // findAndTryLoadAutoSave
void DialogDriver_Win32::Error( CString error, CString ID ) { g_sErrorString = error; // throw up a pretty error dialog AppInstance handle; DialogBox(handle.Get(), MAKEINTRESOURCE(IDD_ERROR_DIALOG), NULL, ErrorWndProc); }
void DialogDriver_Win32::OK( CString sMessage, CString sID ) { g_bAllowHush = sID != ""; g_sMessage = sMessage; AppInstance handle; DialogBox( handle.Get(), MAKEINTRESOURCE(IDD_OK), GraphicsWindow::GetHwnd(), OKWndProc ); if( g_bAllowHush && g_bHush ) Dialog::IgnoreMessage( sID ); }
void DialogDriver_Win32::OK( CString sMessage, CString ID ) { #if defined(HAVE_SDL) SDL_PumpEvents(); #endif g_AllowHush = ID != ""; g_sMessage = sMessage; AppInstance handle; DialogBox(handle.Get(), MAKEINTRESOURCE(IDD_OK), NULL, OKWndProc); if( g_AllowHush && g_Hush ) Dialog::IgnoreMessage( ID ); }
AppInstance::AppInstance( AppInstance const& src ) : AppObject( src.appLibrary() ), QGraphicsItem(), QGraphicsLayoutItem() { AppClass *app_class = AppLibrary::getClass(src.classId()); loading_ = NULL; clear(); class_id_ = src.classId(); if( app_class ) setObjectName( app_class->generateName() ); else setObjectName( QString::number((qptrdiff)this,0,36) ); return; }
InputHandler_DInput::InputHandler_DInput() { LOG->Trace( "InputHandler_DInput::InputHandler_DInput()" ); CheckForDirectInputDebugMode(); shutdown = false; g_NumJoysticks = 0; AppInstance inst; HRESULT hr = DirectInputCreate(inst.Get(), DIRECTINPUT_VERSION, &dinput, NULL); if ( hr != DI_OK ) RageException::Throw( hr_ssprintf(hr, "InputHandler_DInput: DirectInputCreate") ); LOG->Trace( "InputHandler_DInput: IDirectInput::EnumDevices(DIDEVTYPE_KEYBOARD)" ); hr = dinput->EnumDevices( DIDEVTYPE_KEYBOARD, EnumDevices, NULL, DIEDFL_ATTACHEDONLY ); if ( hr != DI_OK ) RageException::Throw( hr_ssprintf(hr, "InputHandler_DInput: IDirectInput::EnumDevices") ); LOG->Trace( "InputHandler_DInput: IDirectInput::EnumDevices(DIDEVTYPE_JOYSTICK)" ); hr = dinput->EnumDevices( DIDEVTYPE_JOYSTICK, EnumDevices, NULL, DIEDFL_ATTACHEDONLY ); if ( hr != DI_OK ) RageException::Throw( hr_ssprintf(hr, "InputHandler_DInput: IDirectInput::EnumDevices") ); for( unsigned i = 0; i < Devices.size(); ++i ) { if( Devices[i].Open() ) continue; Devices.erase( Devices.begin() + i ); i--; continue; } LOG->Info( "Found %u DirectInput devices:", Devices.size() ); for( unsigned i = 0; i < Devices.size(); ++i ) { LOG->Info( " %d: '%s' axes: %d, hats: %d, buttons: %d (%s)", i, Devices[i].JoystickInst.tszProductName, Devices[i].axes, Devices[i].hats, Devices[i].buttons, Devices[i].buffered? "buffered": "unbuffered" ); } m_DebugTimer.m_sName = "DirectInput"; StartThread(); }
void RestoreDefaultsCommand::undo() { assert( _clones.size() == _knobs.size() ); std::list<SequenceTime> times; KnobPtr first = _knobs.front().lock(); AppInstance* app = first->getHolder()->getApp(); assert(app); std::list<KnobWPtr >::const_iterator itClone = _clones.begin(); for (std::list<KnobWPtr >::const_iterator it = _knobs.begin(); it != _knobs.end(); ++it, ++itClone) { KnobPtr itKnob = it->lock(); if (!itKnob) { continue; } KnobPtr itCloneKnob = itClone->lock(); if (!itCloneKnob) { continue; } itKnob->cloneAndUpdateGui( itCloneKnob.get() ); if ( itKnob->getHolder()->getApp() ) { int dim = itKnob->getDimension(); for (int i = 0; i < dim; ++i) { if ( (i == _targetDim) || (_targetDim == -1) ) { boost::shared_ptr<Curve> c = itKnob->getCurve(ViewIdx(0), i); if (c) { KeyFrameSet kfs = c->getKeyFrames_mt_safe(); for (KeyFrameSet::iterator it = kfs.begin(); it != kfs.end(); ++it) { times.push_back( std::floor(it->getTime() + 0.5) ); } } } } } } app->addMultipleKeyframeIndicatorsAdded(times, true); first->getHolder()->incrHashAndEvaluate(true, true); if ( first->getHolder()->getApp() ) { first->getHolder()->getApp()->redrawAllViewers(); } setText( tr("Restore default value(s)") ); }
void KnobGui::onKeyFrameMoved(ViewSpec /*view*/, int /*dimension*/, double oldTime, double newTime) { KnobPtr knob = getKnob(); if ( !knob->isAnimationEnabled() || !knob->canAnimate() ) { return; } if (knob->isDeclaredByPlugin() || knob->isUserKnob()) { AppInstance* app = knob->getHolder()->getApp(); assert(app); app->removeKeyFrameIndicator(oldTime); app->addKeyframeIndicator(newTime); } }
void KnobGui::removeAllKeyframeMarkersOnTimeline(int dimension) { KnobPtr knob = getKnob(); if ( knob->getHolder() && knob->getHolder()->getApp() && !knob->getIsSecret() && (knob->isDeclaredByPlugin() || knob->isUserKnob())) { AppInstance* app = knob->getHolder()->getApp(); assert(app); std::list<SequenceTime> times; std::set<SequenceTime> tmpTimes; if (dimension == -1) { int dim = knob->getDimension(); for (int i = 0; i < dim; ++i) { boost::shared_ptr<Curve> curve = knob->getCurve(ViewIdx(0),i); if (curve) { KeyFrameSet kfs = curve->getKeyFrames_mt_safe(); for (KeyFrameSet::iterator it = kfs.begin(); it != kfs.end(); ++it) { tmpTimes.insert( it->getTime() ); } } } for (std::set<SequenceTime>::iterator it=tmpTimes.begin(); it!=tmpTimes.end(); ++it) { times.push_back(*it); } } else { boost::shared_ptr<Curve> curve = knob->getCurve(ViewIdx(0),dimension); if (curve) { KeyFrameSet kfs = curve->getKeyFrames_mt_safe(); for (KeyFrameSet::iterator it = kfs.begin(); it != kfs.end(); ++it) { times.push_back( it->getTime() ); } } } if (!times.empty()) { app->removeMultipleKeyframeIndicator(times,true); } } }
void KnobGui::setAllKeyframeMarkersOnTimeline(int dimension) { KnobPtr knob = getKnob(); AppInstance* app = knob->getHolder()->getApp(); assert(app); std::list<SequenceTime> times; if (dimension == -1) { int dim = knob->getDimension(); for (int i = 0; i < dim; ++i) { KeyFrameSet kfs = knob->getCurve(ViewIdx(0),i)->getKeyFrames_mt_safe(); for (KeyFrameSet::iterator it = kfs.begin(); it != kfs.end(); ++it) { times.push_back( it->getTime() ); } } } else { KeyFrameSet kfs = knob->getCurve(ViewIdx(0),dimension)->getKeyFrames_mt_safe(); for (KeyFrameSet::iterator it = kfs.begin(); it != kfs.end(); ++it) { times.push_back( it->getTime() ); } } app->addMultipleKeyframeIndicatorsAdded(times,true); }
LRESULT Player::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message == UM_FOREGROUND) { if(bring_to_front) { //::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); //SetForeground(); } return true; } else if(message == UM_COMMANDLINE) { AddCmd(app.GetCmd()); return true; } else if(message == UM_TASKBAR) { tray.PassNotification(lParam); return true; } return Ctrl::WindowProc(message, wParam, lParam); }
void RestoreDefaultsCommand::redo() { std::list<SequenceTime> times; KnobPtr first = _knobs.front().lock(); AppInstance* app = 0; KnobHolder* holder = first->getHolder(); EffectInstance* isEffect = dynamic_cast<EffectInstance*>(holder); if (holder) { app = holder->getApp(); holder->beginChanges(); } /* First reset all knobs values, this will not call instanceChanged action */ for (std::list<KnobWPtr >::iterator it = _knobs.begin(); it != _knobs.end(); ++it) { KnobPtr itKnob = it->lock(); if (!itKnob) { continue; } if ( itKnob->getHolder() && itKnob->getHolder()->getApp() ) { int dim = itKnob->getDimension(); for (int i = 0; i < dim; ++i) { if ( (i == _targetDim) || (_targetDim == -1) ) { boost::shared_ptr<Curve> c = itKnob->getCurve(ViewIdx(0), i); if (c) { KeyFrameSet kfs = c->getKeyFrames_mt_safe(); for (KeyFrameSet::iterator it = kfs.begin(); it != kfs.end(); ++it) { times.push_back( std::floor(it->getTime() + 0.5) ); } } } } } if ( itKnob->getHolder() ) { itKnob->getHolder()->beginChanges(); } itKnob->blockValueChanges(); for (int d = 0; d < itKnob->getDimension(); ++d) { itKnob->resetToDefaultValue(d); } itKnob->unblockValueChanges(); if ( itKnob->getHolder() ) { itKnob->getHolder()->endChanges(true); } } /* Block value changes and call instanceChange on all knobs afterwards to put back the plug-in in a correct state */ double time = 0; if (app) { time = app->getTimeLine()->currentFrame(); } for (std::list<KnobWPtr >::iterator it = _knobs.begin(); it != _knobs.end(); ++it) { KnobPtr itKnob = it->lock(); if (!itKnob) { continue; } if ( itKnob->getHolder() ) { itKnob->getHolder()->onKnobValueChanged_public(itKnob.get(), eValueChangedReasonRestoreDefault, time, ViewIdx(0), true); } } if (app) { app->removeMultipleKeyframeIndicator(times, true); } if ( holder && holder->getApp() ) { holder->endChanges(); } if (_isNodeReset && isEffect) { isEffect->purgeCaches(); } if ( first->getHolder() ) { first->getHolder()->incrHashAndEvaluate(true, true); if ( first->getHolder()->getApp() ) { first->getHolder()->getApp()->redrawAllViewers(); } } setText( tr("Restore default value(s)") ); } // RestoreDefaultsCommand::redo