void UpdatesCheckerPlugin::init(qReal::PluginConfigurator const &configurator) { mErrorReporter = configurator.mainWindowInterpretersInterface().errorReporter(); mMainWindowWidget = configurator.mainWindowInterpretersInterface().windowWidget(); initSettingsUi(*configurator.mainWindowInterpretersInterface().preferencesPages()["preferencesBehaviourPage"]); checkForUpdates(false); }
void TrikRuCGeneratorPlugin::init(qReal::PluginConfigurator const &configurator , interpreterBase::robotModel::RobotModelManagerInterface const &robotModelManager , qrtext::LanguageToolboxInterface &textLanguage) { RobotsGeneratorPluginBase::init(configurator, robotModelManager, textLanguage); mCommunicator = new utils::TcpRobotCommunicator("TrikTcpServer"); mCommunicator->setErrorReporter(configurator.mainWindowInterpretersInterface().errorReporter()); }
void UXInfoPlugin::init(qReal::PluginConfigurator const &configurator) { initSettingsUi(*configurator.mainWindowInterpretersInterface().preferencesPages()["preferencesBehaviourPage"]); connect(&configurator.systemEvents(), &qReal::SystemEvents::lowLevelEvent, this, &UXInfoPlugin::processEvent); connect(&configurator.systemEvents(), &qReal::SystemEvents::closedMainWindow, [=]() { UXInfo::instance()->closeUXInfo(); int const finishTimestamp = QDateTime::currentMSecsSinceEpoch(); QString const totalTime = QString::number((finishTimestamp - mStartTimestamp) / 1000); UXInfo::reportTotalTime(totalTime); }); connect(&configurator.systemEvents(), &qReal::SystemEvents::graphicalElementAdded , [](qReal::Id const &id) { UXInfo::reportCreation(id.editor(), id.element()); }); connect(&configurator.systemEvents(), &qReal::SystemEvents::informationAdded , [](QString const &message, qReal::Id const &position) { UXInfo::reportErrors("information", position.editor(), position.element(), message); }); connect(&configurator.systemEvents(), &qReal::SystemEvents::warningAdded , [](QString const &message, qReal::Id const &position) { UXInfo::reportErrors("warning", position.editor(), position.element(), message); }); connect(&configurator.systemEvents(), &qReal::SystemEvents::errorAdded , [](QString const &message, qReal::Id const &position) { UXInfo::reportErrors("error", position.editor(), position.element(), message); }); connect(&configurator.systemEvents(), &qReal::SystemEvents::criticalAdded , [](QString const &message, qReal::Id const &position) { UXInfo::reportErrors("critical", position.editor(), position.element(), message); }); QWidget * const windowWidget = configurator.mainWindowInterpretersInterface().windowWidget(); static_cast<QMainWindow *>(windowWidget)->addToolBar(Qt::TopToolBarArea, mUsabilityTestingToolbar); mUsabilityTestingToolbar->setVisible(qReal::SettingsManager::value("usabilityTestingMode").toBool()); for (QAction const *action : windowWidget->actions()) { if (action->isCheckable()) { connect(action, &QAction::triggered, &mFilterObject, &FilterObject::toggledActionActivated); } else { connect(action, &QAction::triggered, &mFilterObject, &FilterObject::triggeredActionActivated); } } }
void GenerationRulesPlugin::init(const qReal::PluginConfigurator &configurator , qrRepo::LogicalRepoApi &metamodelRepoApi , qReal::EditorManagerInterface *editorManagerInterface) { mRepo = &configurator.repoControlInterface(); mMainWindowInterpretersInterface = &configurator.mainWindowInterpretersInterface(); mLogicalModelAssistInterface = &configurator.logicalModelApi(); mMetamodelRepoApi = &metamodelRepoApi; mEditorManagerInterface = editorManagerInterface; }
bool RobotsPluginFacade::selectKit(qReal::PluginConfigurator const &configurer) { /// @todo reinit it each time when robot model changes /// @todo: do we need this method? QString const selectedKit = qReal::SettingsManager::value("SelectedRobotKit").toString(); if (selectedKit.isEmpty() && !mKitPluginManager.kitIds().isEmpty()) { qReal::SettingsManager::setValue("SelectedRobotKit", mKitPluginManager.kitIds()[0]); } else if (mKitPluginManager.kitIds().isEmpty()) { configurer.mainWindowInterpretersInterface().setEnabledForAllElementsInPalette(false); /// @todo Correctly handle unselected kit. return false; } return true; }
void RobotsPluginFacade::initFactoriesFor(QString const &kitId , interpreterBase::robotModel::RobotModelInterface const *model , qReal::PluginConfigurator const &configurer) { // Pulling each robot model to each kit plugin with same ids. We need it for supporting // plugin-based blocks set extension for concrete roobt model. for (interpreterBase::KitPluginInterface * const kit : mKitPluginManager.kitsById(kitId)) { interpreterBase::blocksBase::BlocksFactoryInterface * const factory = kit->blocksFactoryFor(model); if (factory) { /// @todo Non-obvious dependency on mParser, which may or may not be constructed here. /// More functional style will be helpful here. factory->configure(configurer.graphicalModelApi() , configurer.logicalModelApi() , mRobotModelManager , *configurer.mainWindowInterpretersInterface().errorReporter() , *mParser ); mBlocksFactoryManager.addFactory(factory, model); } } }
void RobotsPluginFacade::initKitPlugins(qReal::PluginConfigurator const &configurer) { /// @todo: Check that this code works when different kit is selected for (QString const &kitId : mKitPluginManager.kitIds()) { for (interpreterBase::KitPluginInterface * const kit : mKitPluginManager.kitsById(kitId)) { kit->init(mEventsForKitPlugin, configurer.systemEvents(), configurer.graphicalModelApi() , configurer.logicalModelApi(), configurer.mainWindowInterpretersInterface(), *mInterpreter); for (interpreterBase::robotModel::RobotModelInterface const *model : kit->robotModels()) { initFactoriesFor(kitId, model, configurer); connect(&mEventsForKitPlugin, &interpreterBase::EventsForKitPluginInterface::interpretationStarted , model, &interpreterBase::robotModel::RobotModelInterface::onInterpretationStarted); } mDevicesConfigurationManager->connectDevicesConfigurationProvider(kit->devicesConfigurationProvider()); } for (generatorBase::GeneratorKitPluginInterface * const generator : mKitPluginManager.generatorsById(kitId)) { generator->init(configurer, mRobotModelManager, *mParser); } } }
void RobotsPluginFacade::init(qReal::PluginConfigurator const &configurer) { mRobotSettingsPage = new ui::RobotsSettingsPage(mKitPluginManager, mRobotModelManager); mDevicesConfigurationManager.reset(new DevicesConfigurationManager( configurer.graphicalModelApi() , configurer.logicalModelApi() , configurer.mainWindowInterpretersInterface() , configurer.systemEvents() )); if (!selectKit(configurer)) { /// @todo Correctly handle unselected kit. return; } mParser.reset(new textLanguage::RobotsBlockParser(mRobotModelManager , [this]() { return mInterpreter ? mInterpreter->timeElapsed() : 0; })); interpreterBase::blocksBase::BlocksFactoryInterface * const coreFactory = new coreBlocks::CoreBlocksFactory(); coreFactory->configure(configurer.graphicalModelApi() , configurer.logicalModelApi() , mRobotModelManager , *configurer.mainWindowInterpretersInterface().errorReporter() , *mParser ); mBlocksFactoryManager.addFactory(coreFactory); interpreter::Interpreter *interpreter = new interpreter::Interpreter( configurer.graphicalModelApi() , configurer.logicalModelApi() , configurer.mainWindowInterpretersInterface() , configurer.projectManager() , mBlocksFactoryManager , mRobotModelManager , *mParser , mActionsManager.connectToRobotAction() ); mInterpreter = interpreter; connect(&configurer.systemEvents(), &qReal::SystemEvents::closedMainWindow , mInterpreter, &interpreter::InterpreterInterface::stopRobot); connect(&mRobotModelManager, &RobotModelManager::robotModelChanged , mInterpreter, &interpreter::InterpreterInterface::stopRobot); initKitPlugins(configurer); initSensorWidgets(); auto paletteUpdateManager = new PaletteUpdateManager(configurer.mainWindowInterpretersInterface() , mBlocksFactoryManager, this); connect(&mRobotModelManager, &RobotModelManager::robotModelChanged , paletteUpdateManager, &PaletteUpdateManager::updatePalette); mDevicesConfigurationManager->connectDevicesConfigurationProvider(interpreter); // It will subscribe to all signals itself and free memory too. new KitAutoSwitcher(configurer.projectManager(), configurer.logicalModelApi() , mBlocksFactoryManager, mKitPluginManager, mRobotModelManager, this); connectInterpreterToActions(); connectEventsForKitPlugin(); connect(&mActionsManager.robotSettingsAction(), &QAction::triggered , [=] () { configurer.mainWindowInterpretersInterface().openSettingsDialog(tr("Robots")); }); connect(&configurer.systemEvents(), &qReal::SystemEvents::activeTabChanged , &mActionsManager, &ActionsManager::onActiveTabChanged); sync(); }
void RobotsPluginFacade::init(const qReal::PluginConfigurator &configurer) { mActionsManager.init(&configurer.mainWindowInterpretersInterface()); mRobotSettingsPage = new ui::RobotsSettingsPage(mKitPluginManager, mRobotModelManager , configurer.logicalModelApi()); connect(&configurer.systemEvents(), &qReal::SystemEvents::activeTabChanged , mRobotSettingsPage, &ui::RobotsSettingsPage::onProjectOpened); mDevicesConfigurationManager.reset(new DevicesConfigurationManager( configurer.graphicalModelApi() , configurer.logicalModelApi() , configurer.mainWindowInterpretersInterface() , configurer.projectManager() )); if (!selectKit(configurer)) { /// @todo Correctly handle unselected kit. return; } mParser.reset(new textLanguage::RobotsBlockParser(mRobotModelManager , [this]() { return mInterpreter ? mInterpreter->timeElapsed() : 0; })); kitBase::blocksBase::BlocksFactoryInterface * const coreFactory = new coreBlocks::CoreBlocksFactory(); coreFactory->configure(configurer.graphicalModelApi() , configurer.logicalModelApi() , mRobotModelManager , *configurer.mainWindowInterpretersInterface().errorReporter() , *mParser ); mBlocksFactoryManager.addFactory(coreFactory); mUiManager.reset(new UiManager(mActionsManager.debugModeAction() , mActionsManager.editModeAction() , configurer.mainWindowDockInterface() , configurer.systemEvents() , mEventsForKitPlugin , mRobotModelManager)); interpreter::Interpreter *interpreter = new interpreter::Interpreter( configurer.graphicalModelApi() , configurer.logicalModelApi() , configurer.mainWindowInterpretersInterface() , configurer.projectManager() , mBlocksFactoryManager , mRobotModelManager , *mParser , mActionsManager.connectToRobotAction() ); mInterpreter = interpreter; connect(&configurer.systemEvents(), &qReal::SystemEvents::closedMainWindow , mInterpreter, &interpreter::InterpreterInterface::userStopRobot); connect(&mRobotModelManager, &RobotModelManager::robotModelChanged , mInterpreter, &interpreter::InterpreterInterface::userStopRobot); initKitPlugins(configurer); initSensorWidgets(); auto paletteUpdateManager = new PaletteUpdateManager(configurer.mainWindowInterpretersInterface() , mBlocksFactoryManager, this); connect(&mRobotModelManager, &RobotModelManager::robotModelChanged , paletteUpdateManager, &PaletteUpdateManager::updatePalette); mDevicesConfigurationManager->connectDevicesConfigurationProvider(interpreter); // It will subscribe to all signals itself and free memory too. new KitAutoSwitcher(configurer.projectManager(), configurer.logicalModelApi() , mBlocksFactoryManager, mKitPluginManager, mRobotModelManager, this); mSaveAsTaskManager.reset(new ExerciseExportManager(configurer.logicalModelApi() , configurer.repoControlInterface(), configurer.projectManager())); connectInterpreterToActions(); connectEventsForKitPlugin(); connect(&mActionsManager.robotSettingsAction(), &QAction::triggered , [=] () { configurer.mainWindowInterpretersInterface().openSettingsDialog(tr("Robots")); }); connect(&configurer.systemEvents(), &qReal::SystemEvents::activeTabChanged , &mActionsManager, &ActionsManager::onActiveTabChanged); // Just to capture them, not configurer. qReal::ProjectManagementInterface &projectManager = configurer.projectManager(); qReal::gui::MainWindowInterpretersInterface &mainWindow = configurer.mainWindowInterpretersInterface(); qReal::GraphicalModelAssistInterface &graphicalModel = configurer.graphicalModelApi(); connect(&mActionsManager.homeAction(), &QAction::triggered, [&projectManager, &mainWindow, &graphicalModel]() { if (projectManager.somethingOpened()) { for (const qReal::Id &diagram : graphicalModel.children(qReal::Id::rootId())) { if (diagram.type() == qReal::Id("RobotsMetamodel", "RobotsDiagram", "RobotsDiagramNode")) { mainWindow.activateItemOrDiagram(diagram); return; } } } else { mainWindow.openStartTab(); } }); const qrRepo::LogicalRepoApi &repoApi = configurer.logicalModelApi().logicalRepoApi(); connect(&configurer.systemEvents(), &qReal::SystemEvents::activeTabChanged, this , [this, &repoApi] (const qReal::TabInfo &info) { Q_UNUSED(info); mDockDevicesConfigurer->setEnabled( !repoApi.metaInformation("twoDModelSensorsReadOnly").toBool()); const bool hasReadOnlyFlags = repoApi.metaInformation("twoDModelWorldReadOnly").toBool() | repoApi.metaInformation("twoDModelSensorsReadOnly").toBool() | repoApi.metaInformation("twoDModelRobotPositionReadOnly").toBool() | repoApi.metaInformation("twoDModelRobotConfigurationReadOnly").toBool() | repoApi.metaInformation("twoDModelSimulationSettingsReadOnly").toBool() ; mActionsManager.exportExerciseAction().setEnabled(!hasReadOnlyFlags); }); connect(&mActionsManager.exportExerciseAction(), &QAction::triggered , [this] () { mSaveAsTaskManager->save(); }); sync(); }
void TestInvocationPlugin::init(const qReal::PluginConfigurator &configurator) { mMainWindow = &(configurator.mainWindowInterpretersInterface()); }
void TrikV6RuntimeUploaderPlugin::init(const qReal::PluginConfigurator &configurator) { mUploaderTool.init(configurator.mainWindowInterpretersInterface()); }
void GenerationRulesPlugin::init(qReal::PluginConfigurator const &configurator, qrRepo::LogicalRepoApi &metamodelRepoApi) { mRepo = &configurator.repoControlInterface(); mMainWindowInterpretersInterface = &configurator.mainWindowInterpretersInterface(); mMetamodelRepoApi = &metamodelRepoApi; }
void TrikRuntimeUploaderPlugin::init(const qReal::PluginConfigurator &configurator) { mMainWindowInterface = &configurator.mainWindowInterpretersInterface(); }
void ExterminatusPlugin::init(qReal::PluginConfigurator const &configurator) { mRepo = &configurator.repoControlInterface(); mMainWindowInterpretersInterface = &configurator.mainWindowInterpretersInterface(); }