63 lines · 2.0 KB · C++
RawDownload
////  Created by Sam Gondelman on 7/16/2015//  Copyright 2015 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #include "InputPlugins.h" #include "Application.h" #include <input-plugins/InputPlugin.h>#include <input-plugins/KeyboardMouseDevice.h>#include <input-plugins/SDL2Manager.h>#include <input-plugins/SixenseManager.h>#include <input-plugins/ViveControllerManager.h>  static void addInputPluginToMenu(InputPluginPointer inputPlugin, bool active = false) {    auto menu = Menu::getInstance();    QString name = inputPlugin->getName();    Q_ASSERT(!menu->menuItemExists(MenuOption::InputMenu, name));     static QActionGroup* inputPluginGroup = nullptr;    if (!inputPluginGroup) {        inputPluginGroup = new QActionGroup(menu);    }    auto parent = menu->getMenu(MenuOption::InputMenu);    auto action = menu->addCheckableActionToQMenuAndActionHash(parent,        name, 0, true, qApp,        SLOT(updateInputModes()));    inputPluginGroup->addAction(action);    inputPluginGroup->setExclusive(false);    Q_ASSERT(menu->menuItemExists(MenuOption::InputMenu, name));} // FIXME move to a plugin manager classconst InputPluginList& getInputPlugins() {    static InputPluginList INPUT_PLUGINS;    static bool init = false;    if (!init) {        init = true;         InputPlugin* PLUGIN_POOL[] = {            new KeyboardMouseDevice(),            new SDL2Manager(),            new SixenseManager(),            new ViveControllerManager(),            nullptr        };        for (int i = 0; PLUGIN_POOL[i]; ++i) {            InputPlugin * plugin = PLUGIN_POOL[i];            if (plugin->isSupported()) {                plugin->init();                InputPluginPointer pluginPointer(plugin);                addInputPluginToMenu(pluginPointer, plugin == *PLUGIN_POOL);                INPUT_PLUGINS.push_back(pluginPointer);            }        }    }    return INPUT_PLUGINS;}