AppInstancePtr Gui::openProjectInternal(const std::string & absoluteFileName, bool attemptToLoadAutosave) { QFileInfo file( QString::fromUtf8( absoluteFileName.c_str() ) ); if ( !file.exists() ) { return AppInstancePtr(); } QString fileUnPathed = file.fileName(); QString path = file.path() + QLatin1Char('/'); int openedProject = appPTR->isProjectAlreadyOpened(absoluteFileName); if (openedProject != -1) { AppInstancePtr instance = appPTR->getAppInstance(openedProject); if (instance) { GuiAppInstancePtr guiApp = toGuiAppInstance(instance); if (guiApp) { guiApp->getGui()->activateWindow(); return instance; } } } AppInstancePtr ret; ProjectPtr project = getApp()->getProject(); ///if the current graph has no value, just load the project in the same window if ( project->isGraphWorthLess() ) { bool ok = project->loadProject( path, fileUnPathed, false, attemptToLoadAutosave); if (ok) { ret = _imp->_appInstance.lock(); } } else { CLArgs cl; AppInstancePtr newApp = appPTR->newAppInstance(cl, false); bool ok = newApp->getProject()->loadProject( path, fileUnPathed, false, attemptToLoadAutosave); if (ok) { ret = newApp; } } QSettings settings; QStringList recentFiles = settings.value( QString::fromUtf8("recentFileList") ).toStringList(); recentFiles.removeAll( QString::fromUtf8( absoluteFileName.c_str() ) ); recentFiles.prepend( QString::fromUtf8( absoluteFileName.c_str() ) ); while (recentFiles.size() > NATRON_MAX_RECENT_FILES) { recentFiles.removeLast(); } settings.setValue(QString::fromUtf8("recentFileList"), recentFiles); appPTR->updateAllRecentFileMenus(); return ret; } // Gui::openProjectInternal
void GuiApplicationManagerPrivate::addStandardKeybind(const std::string & grouping, const std::string & id, const std::string & description, QKeySequence::StandardKey key, const Qt::KeyboardModifiers & fallbackmodifiers, Qt::Key fallbacksymbol) { QString groupingStr = QString::fromUtf8( grouping.c_str() ); QString idStr = QString::fromUtf8( id.c_str() ); AppShortcuts::iterator foundGroup = _actionShortcuts.find(groupingStr); if ( foundGroup != _actionShortcuts.end() ) { GroupShortcuts::iterator foundAction = foundGroup->second.find(idStr); if ( foundAction != foundGroup->second.end() ) { return; } } Qt::KeyboardModifiers modifiers; Qt::Key symbol; extractKeySequence(QKeySequence(key), modifiers, symbol); if (symbol == (Qt::Key)0) { symbol = fallbacksymbol; modifiers = fallbackmodifiers; } KeyBoundAction* kA = new KeyBoundAction; kA->grouping = groupingStr; kA->description = QString::fromUtf8( description.c_str() ); kA->defaultModifiers.push_back(modifiers); kA->modifiers.push_back(modifiers); kA->defaultShortcut.push_back(symbol); kA->currentShortcut.push_back(symbol); if ( foundGroup != _actionShortcuts.end() ) { foundGroup->second.insert( std::make_pair(idStr, kA) ); } else { GroupShortcuts group; group.insert( std::make_pair(idStr, kA) ); _actionShortcuts.insert( std::make_pair(groupingStr, group) ); } GuiAppInstancePtr app = toGuiAppInstance( _publicInterface->getTopLevelInstance() ); if (app) { app->getGui()->addShortcut(kA); } }
void GuiApplicationManagerPrivate::addKeybindInternal(const QString & grouping, const QString & id, const QString & description, const std::list<Qt::KeyboardModifiers>& modifiersList, const std::list<Qt::Key>& symbolsList, const Qt::KeyboardModifiers& modifiersMask) { AppShortcuts::iterator foundGroup = _actionShortcuts.find(grouping); if ( foundGroup != _actionShortcuts.end() ) { GroupShortcuts::iterator foundAction = foundGroup->second.find(id); if ( foundAction != foundGroup->second.end() ) { return; } } KeyBoundAction* kA = new KeyBoundAction; kA->grouping = grouping; kA->description = description; assert( modifiersList.size() == symbolsList.size() ); std::list<Qt::KeyboardModifiers>::const_iterator mit = modifiersList.begin(); for (std::list<Qt::Key>::const_iterator it = symbolsList.begin(); it != symbolsList.end(); ++it, ++mit) { if ( (*it) != (Qt::Key)0 ) { kA->defaultModifiers.push_back(*mit); kA->modifiers.push_back(*mit); kA->defaultShortcut.push_back(*it); kA->currentShortcut.push_back(*it); } } kA->ignoreMask = modifiersMask; kA->actionID = id; if ( foundGroup != _actionShortcuts.end() ) { foundGroup->second.insert( std::make_pair(id, kA) ); } else { GroupShortcuts group; group.insert( std::make_pair(id, kA) ); _actionShortcuts.insert( std::make_pair(grouping, group) ); } GuiAppInstancePtr app = toGuiAppInstance( _publicInterface->getTopLevelInstance() ); if (app) { app->getGui()->addShortcut(kA); } }
void ToolButton::onTriggered() { GuiAppInstancePtr app = _imp->_app.lock(); if (!app) { return; } NodeCollectionPtr group = app->getGui()->getLastSelectedNodeCollection(); assert(group); CreateNodeArgs args(_imp->_id.toStdString(), group); args.setProperty<int>(kCreateNodeArgsPropPluginVersion, _imp->_major, 0); args.setProperty<int>(kCreateNodeArgsPropPluginVersion, _imp->_minor, 1); app->createNode(args); }
void GuiApplicationManagerPrivate::addMouseShortcut(const std::string & grouping, const std::string & id, const std::string & description, const Qt::KeyboardModifiers & modifiers, Qt::MouseButton button) { QString groupingStr = QString::fromUtf8( grouping.c_str() ); QString idStr = QString::fromUtf8( id.c_str() ); AppShortcuts::iterator foundGroup = _actionShortcuts.find(groupingStr); if ( foundGroup != _actionShortcuts.end() ) { GroupShortcuts::iterator foundAction = foundGroup->second.find(idStr); if ( foundAction != foundGroup->second.end() ) { return; } } MouseAction* mA = new MouseAction; mA->grouping = groupingStr; mA->description = QString::fromUtf8( description.c_str() ); mA->defaultModifiers.push_back(modifiers); mA->actionID = idStr; if ( modifiers & (Qt::AltModifier | Qt::MetaModifier) ) { qDebug() << "Warning: mouse shortcut " << groupingStr << '/' << description.c_str() << '(' << idStr << ')' << " uses the Alt or Meta modifier, which is reserved for three-button mouse emulation. Fix this ASAP."; } mA->modifiers.push_back(modifiers); mA->button = button; ///Mouse shortcuts are not editable. mA->editable = false; if ( foundGroup != _actionShortcuts.end() ) { foundGroup->second.insert( std::make_pair(idStr, mA) ); } else { GroupShortcuts group; group.insert( std::make_pair(idStr, mA) ); _actionShortcuts.insert( std::make_pair(groupingStr, group) ); } GuiAppInstancePtr app = toGuiAppInstance( _publicInterface->getTopLevelInstance() ); if (app) { app->getGui()->addShortcut(mA); } }