예제 #1
0
파일: Gui20.cpp 프로젝트: azerupi/Natron
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);
    }
}
예제 #4
0
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);
    }
}