void TwoDModelWidget::setInteractivityFlags(ReadOnlyFlags flags) { const bool worldReadOnly = (flags & ReadOnly::World) != 0; mUi->palette->setVisible(!worldReadOnly); mActions->setWorldModelActionsVisible(!worldReadOnly); mColorFieldItemPopup->setEnabled(!worldReadOnly); const auto hasSpacer = [this]() { for (int i = 0; i < mUi->sceneHeaderWidget->layout()->count(); ++i) { if (mUi->sceneHeaderWidget->layout()->itemAt(i) == mUi->horizontalSpacer) { return true; } } return false; }; mUi->gridParametersBox->setVisible(!worldReadOnly); if (!worldReadOnly && hasSpacer()) { mUi->sceneHeaderWidget->layout()->removeItem(mUi->horizontalSpacer); } else if (worldReadOnly && !hasSpacer()){ static_cast<QHBoxLayout *>(mUi->sceneHeaderWidget->layout())->insertItem(1, mUi->horizontalSpacer); } const bool sensorsReadOnly = flags.testFlag(ReadOnly::Sensors); const bool robotConfigurationReadOnly = flags.testFlag(ReadOnly::RobotSetup); mUi->detailsTab->setDevicesSectionsVisible(!sensorsReadOnly); mUi->detailsTab->setMotorsSectionsVisible(!robotConfigurationReadOnly); mCurrentConfigurer->setEnabled(!sensorsReadOnly); mUi->leftWheelComboBox->setEnabled(!robotConfigurationReadOnly); mUi->rightWheelComboBox->setEnabled(!robotConfigurationReadOnly); const bool simulationSettingsReadOnly = flags.testFlag(ReadOnly::SimulationSettings); mUi->detailsTab->setPhysicsSectionsVisible(!simulationSettingsReadOnly); mSensorsReadOnly = sensorsReadOnly; mRobotPositionReadOnly = flags.testFlag(ReadOnly::RobotPosition); mScene->setInteractivityFlags(flags); }
void ExerciseExportManager::save() { ui::ExerciseExportDialog dialog; if (dialog.exec() == QDialog::Rejected) { return; } ReadOnlyFlags flags = dialog.readOnlyFlags(); const auto save = [this, &flags] (const QString &tag, ReadOnly::ReadOnlyEnum flag) { mLogicalModel.mutableLogicalRepoApi().setMetaInformation(tag, flags.testFlag(flag)); }; save("twoDModelWorldReadOnly", ReadOnly::World); save("twoDModelSensorsReadOnly", ReadOnly::Sensors); save("twoDModelRobotPositionReadOnly", ReadOnly::RobotPosition); save("twoDModelRobotConfigurationReadOnly", ReadOnly::RobotSetup); save("twoDModelSimulationSettingsReadOnly", ReadOnly::SimulationSettings); mLogicalModel.mutableLogicalRepoApi().setMetaInformation("exerciseId", QUuid::createUuid().toString()); QString fileName = utils::QRealFileDialog::getSaveFileName("SaveAsTask" , nullptr , QObject::tr("Select file to export save to") , "." , QObject::tr("QReal Save File(*.qrs)")); if (fileName.isEmpty()) { return; } if (!fileName.isEmpty() && !fileName.endsWith(".qrs", Qt::CaseInsensitive)) { fileName += ".qrs"; } mRepoControlApi.saveTo(fileName); mProjectManager.open(fileName); }