* @brief Opens the transform editor for an explicit (groupId, datasetId) -- no selection change. */
| 1124 | * @brief Opens the transform editor for an explicit (groupId, datasetId) -- no selection change. |
| 1125 | */ |
| 1126 | void DataModel::ProjectEditor::openTransformEditorFor(int groupId, int datasetId) |
| 1127 | { |
| 1128 | auto& pm = DataModel::ProjectModel::instance(); |
| 1129 | const auto& groups = pm.groups(); |
| 1130 | |
| 1131 | if (groupId < 0 || static_cast<size_t>(groupId) >= groups.size()) |
| 1132 | return; |
| 1133 | |
| 1134 | if (datasetId < 0 || static_cast<size_t>(datasetId) >= groups[groupId].datasets.size()) |
| 1135 | return; |
| 1136 | |
| 1137 | const auto& dataset = groups[groupId].datasets[datasetId]; |
| 1138 | |
| 1139 | int lang = dataset.transformLanguage; |
| 1140 | if (lang < 0 || dataset.transformCode.isEmpty()) { |
| 1141 | for (const auto& src : pm.sources()) |
| 1142 | if (src.sourceId == dataset.sourceId) { |
| 1143 | lang = src.frameParserLanguage; |
| 1144 | break; |
| 1145 | } |
| 1146 | } |
| 1147 | |
| 1148 | if (!m_transformEditor) { |
| 1149 | m_transformEditor = new DatasetTransformEditor(nullptr); |
| 1150 | |
| 1151 | connect(m_transformEditor, |
| 1152 | &DatasetTransformEditor::transformApplied, |
| 1153 | this, |
| 1154 | [this](const QString& code, int lang, int gId, int dId) { |
| 1155 | auto& pm = DataModel::ProjectModel::instance(); |
| 1156 | auto& groups = pm.groups(); |
| 1157 | if (gId < 0 || static_cast<size_t>(gId) >= groups.size()) |
| 1158 | return; |
| 1159 | |
| 1160 | if (dId < 0 || static_cast<size_t>(dId) >= groups[gId].datasets.size()) |
| 1161 | return; |
| 1162 | |
| 1163 | auto dataset = groups[gId].datasets[dId]; |
| 1164 | dataset.transformCode = code; |
| 1165 | dataset.transformLanguage = code.isEmpty() ? -1 : lang; |
| 1166 | pm.updateDataset(gId, dId, dataset, false); |
| 1167 | |
| 1168 | if (m_selectedDataset.groupId == gId && m_selectedDataset.datasetId == dId) { |
| 1169 | m_selectedDataset.transformCode = code; |
| 1170 | m_selectedDataset.transformLanguage = dataset.transformLanguage; |
| 1171 | } |
| 1172 | |
| 1173 | for (auto it = m_datasetItems.begin(); it != m_datasetItems.end(); ++it) { |
| 1174 | if (it.value().groupId == gId && it.value().datasetId == dId) { |
| 1175 | it.value().transformCode = code; |
| 1176 | it.value().transformLanguage = dataset.transformLanguage; |
| 1177 | break; |
| 1178 | } |
| 1179 | } |
| 1180 | |
| 1181 | DataModel::FrameBuilder::instance().syncFromProjectModel(); |
| 1182 | }); |
| 1183 | } |
nothing calls this directly
no test coverage detected