AbstractGenerator::AbstractGenerator(QString const &templateDirPath , QString const &outputDirPath , qReal::LogicalModelAssistInterface const &logicalModel , qReal::ErrorReporterInterface &errorReporter ) : mApi(logicalModel.logicalRepoApi()) , mErrorReporter(errorReporter) , mOutputDirPath(outputDirPath) , mTemplateDirPath(templateDirPath) { }
AbstractGenerator::AbstractGenerator(const QString &templateDirPath , const QString &outputDirPath , const qReal::LogicalModelAssistInterface &logicalModel , qReal::ErrorReporterInterface &errorReporter ) : mApi(logicalModel.logicalRepoApi()) , mErrorReporter(errorReporter) , mOutputDirPath(outputDirPath) , mTemplateDirPath(templateDirPath) { loadUtilsTemplates(); }
void TwoDModelEngineFacade::loadReadOnlyFlags(const qReal::LogicalModelAssistInterface &logicalModel) { kitBase::ReadOnlyFlags readOnlyFlags = kitBase::ReadOnly::None; const auto load = [&] (const QString &tag, kitBase::ReadOnly::ReadOnlyEnum flag) { if (logicalModel.logicalRepoApi().metaInformation(tag).toBool()) { readOnlyFlags |= flag; } }; load("twoDModelWorldReadOnly", kitBase::ReadOnly::World); load("twoDModelSensorsReadOnly", kitBase::ReadOnly::Sensors); load("twoDModelRobotPositionReadOnly", kitBase::ReadOnly::RobotPosition); load("twoDModelRobotConfigurationReadOnly", kitBase::ReadOnly::RobotSetup); load("twoDModelSimulationSettingsReadOnly", kitBase::ReadOnly::SimulationSettings); mView->setInteractivityFlags(readOnlyFlags); }
void TwoDModelEngineFacade::init(const kitBase::EventsForKitPluginInterface &eventsForKitPlugin , const qReal::SystemEvents &systemEvents , qReal::LogicalModelAssistInterface &logicalModel , qReal::ControllerInterface &controller , qReal::gui::MainWindowInterpretersInterface &interpretersInterface , qReal::gui::MainWindowDockInterface &dockInterface , const qReal::ProjectManagementInterface &projectManager , kitBase::InterpreterControlInterface &interpreterControl) { mModel->init(*interpretersInterface.errorReporter(), interpreterControl); dockInterface.registerEditor(*mView); mView->setController(controller); const auto onActiveTabChanged = [this](const qReal::TabInfo &info) { mView->setEnabled(info.type() != qReal::TabInfo::TabType::other); }; const auto reloadWorld = [this, &logicalModel, &interpretersInterface, &projectManager]() { QLOG_DEBUG() << "Reloading 2D world model..."; const QString xml = projectManager.somethingOpened() ? logicalModel.logicalRepoApi().metaInformation("worldModel").toString() : QString(); QDomDocument worldModel; QString errorMessage; int errorLine, errorColumn; if (!xml.isEmpty() && !worldModel.setContent(xml, &errorMessage, &errorLine, &errorColumn)) { interpretersInterface.errorReporter()->addError(QString("%1:%2: %3") .arg(QString::number(errorLine), QString::number(errorColumn), errorMessage)); } mView->loadXml(worldModel); loadReadOnlyFlags(logicalModel); QLOG_DEBUG() << "Reloading 2D world done"; }; const auto connectTwoDModel = [this, &eventsForKitPlugin, &interpreterControl]() { connect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStarted , this, &twoDModel::TwoDModelControlInterface::onStartInterpretation , Qt::UniqueConnection); connect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStopped , this, &twoDModel::TwoDModelControlInterface::onStopInterpretation , Qt::UniqueConnection); connect(this, &twoDModel::TwoDModelControlInterface::runButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::interpret , Qt::UniqueConnection); connect(this, &twoDModel::TwoDModelControlInterface::stopButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::userStopRobot , Qt::UniqueConnection); }; auto disconnectTwoDModel = [this, &eventsForKitPlugin, &interpreterControl]() { disconnect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStarted , this, &twoDModel::TwoDModelControlInterface::onStartInterpretation); disconnect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStopped , this, &twoDModel::TwoDModelControlInterface::onStopInterpretation); disconnect(this, &twoDModel::TwoDModelControlInterface::runButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::interpret); disconnect(this, &twoDModel::TwoDModelControlInterface::stopButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::userStopRobot); }; connect(&projectManager, &qReal::ProjectManagementInterface::afterOpen, this, reloadWorld); connect(&projectManager, &qReal::ProjectManagementInterface::closed, this, reloadWorld); connect(&systemEvents, &qReal::SystemEvents::activeTabChanged, this, onActiveTabChanged); connect(mModel.data(), &model::Model::modelChanged, [this, &logicalModel] (const QDomDocument &xml) { logicalModel.mutableLogicalRepoApi().setMetaInformation("worldModel", xml.toString(4)); }); // Queued connection cause such actions like stopRobot() must be performed earlier. connect(&systemEvents, &qReal::SystemEvents::closedMainWindow, this, [=](){ mView.reset(); delete mDock; } , Qt::QueuedConnection); connect(&eventsForKitPlugin , &kitBase::EventsForKitPluginInterface::robotModelChanged , [this, connectTwoDModel, disconnectTwoDModel](const QString &modelName) { const bool isCurrentModel = modelName == mRobotModelName; if (isCurrentModel) { connectTwoDModel(); mDock->attachToMainWindow(Qt::TopDockWidgetArea); } else { disconnectTwoDModel(); mDock->detachFromMainWindow(); } } ); }
void TwoDModelEngineFacade::init(const kitBase::EventsForKitPluginInterface &eventsForKitPlugin , const qReal::SystemEvents &systemEvents , qReal::LogicalModelAssistInterface &logicalModel , qReal::gui::MainWindowInterpretersInterface &interpretersInterface , kitBase::InterpreterControlInterface &interpreterControl) { mModel->init(*interpretersInterface.errorReporter(), interpreterControl); const auto onActiveTabChanged = [this, &logicalModel, &interpretersInterface](const qReal::TabInfo &info) { mView->setEnabled(info.type() == qReal::TabInfo::TabType::editor); const QString xml = logicalModel.logicalRepoApi().metaInformation("worldModel").toString(); QDomDocument worldModel; QString errorMessage; int errorLine, errorColumn; if (!xml.isEmpty() && !worldModel.setContent(xml, &errorMessage, &errorLine, &errorColumn)) { interpretersInterface.errorReporter()->addError(QString("%1:%2: %3") .arg(QString::number(errorLine), QString::number(errorColumn), errorMessage)); } mView->loadXml(worldModel); loadReadOnlyFlags(logicalModel); }; auto connectTwoDModel = [this, &eventsForKitPlugin, &interpreterControl]() { connect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStarted , this, &twoDModel::TwoDModelControlInterface::onStartInterpretation , Qt::UniqueConnection); connect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStopped , this, &twoDModel::TwoDModelControlInterface::onStopInterpretation , Qt::UniqueConnection); connect(this, &twoDModel::TwoDModelControlInterface::runButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::interpret , Qt::UniqueConnection); connect(this, &twoDModel::TwoDModelControlInterface::stopButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::stopRobot , Qt::UniqueConnection); }; auto disconnectTwoDModel = [this, &eventsForKitPlugin, &interpreterControl]() { disconnect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStarted , this, &twoDModel::TwoDModelControlInterface::onStartInterpretation); disconnect(&eventsForKitPlugin, &kitBase::EventsForKitPluginInterface::interpretationStopped , this, &twoDModel::TwoDModelControlInterface::onStopInterpretation); disconnect(this, &twoDModel::TwoDModelControlInterface::runButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::interpret); disconnect(this, &twoDModel::TwoDModelControlInterface::stopButtonPressed , &interpreterControl, &kitBase::InterpreterControlInterface::stopRobot); }; connect(&systemEvents, &qReal::SystemEvents::activeTabChanged, onActiveTabChanged); connect(mModel.data(), &model::Model::modelChanged, [this, &logicalModel] (const QDomDocument &xml) { logicalModel.mutableLogicalRepoApi().setMetaInformation("worldModel", xml.toString(4)); }); connect(&systemEvents, &qReal::SystemEvents::closedMainWindow, [=](){ mView.reset(); delete mDock; }); connect(&eventsForKitPlugin , &kitBase::EventsForKitPluginInterface::robotModelChanged , [this, connectTwoDModel, disconnectTwoDModel](const QString &modelName) { const bool isCurrentModel = modelName == mRobotModelName; if (isCurrentModel) { connectTwoDModel(); mDock->attachToMainWindow(Qt::TopDockWidgetArea); } else { disconnectTwoDModel(); mDock->detachFromMainWindow(); } } ); }