* @brief Rebuilds the project-structure tree, restoring expansion and selection. */
| 1317 | * @brief Rebuilds the project-structure tree, restoring expansion and selection. |
| 1318 | */ |
| 1319 | void DataModel::ProjectEditor::buildTreeModel() |
| 1320 | { |
| 1321 | m_rootItems.clear(); |
| 1322 | m_groupItems.clear(); |
| 1323 | m_sourceItems.clear(); |
| 1324 | m_actionItems.clear(); |
| 1325 | m_datasetItems.clear(); |
| 1326 | m_outputWidgetItems.clear(); |
| 1327 | m_sourceParserItems.clear(); |
| 1328 | m_userTableItems.clear(); |
| 1329 | m_groupFolderItems.clear(); |
| 1330 | m_tableFolderItems.clear(); |
| 1331 | m_workspaceItems.clear(); |
| 1332 | m_workspaceFolderItems.clear(); |
| 1333 | m_groupsRootItem = nullptr; |
| 1334 | m_tablesRootItem = nullptr; |
| 1335 | m_systemDatasetsItem = nullptr; |
| 1336 | m_workspacesRootItem = nullptr; |
| 1337 | m_mqttPublisherItem = nullptr; |
| 1338 | m_controlScriptItem = nullptr; |
| 1339 | |
| 1340 | const bool seeding = m_seedExpansionFromModel; |
| 1341 | QHash<QString, bool> expandedStates; |
| 1342 | if (seeding) { |
| 1343 | const auto& persisted = DataModel::ProjectModel::instance().treeExpansion(); |
| 1344 | for (auto it = persisted.constBegin(); it != persisted.constEnd(); ++it) |
| 1345 | expandedStates.insert(it.key(), it.value().toBool()); |
| 1346 | |
| 1347 | m_seedExpansionFromModel = false; |
| 1348 | } else if (m_treeModel) { |
| 1349 | saveExpandedStateMap(m_treeModel->invisibleRootItem(), expandedStates, ""); |
| 1350 | } |
| 1351 | |
| 1352 | if (m_currentSelectionConnection) { |
| 1353 | QObject::disconnect(m_currentSelectionConnection); |
| 1354 | m_currentSelectionConnection = QMetaObject::Connection(); |
| 1355 | } |
| 1356 | |
| 1357 | if (m_selectionModel) { |
| 1358 | m_selectionModel->deleteLater(); |
| 1359 | m_selectionModel = nullptr; |
| 1360 | } |
| 1361 | |
| 1362 | if (m_treeModel) { |
| 1363 | m_treeModel->disconnect(this); |
| 1364 | m_treeModel->deleteLater(); |
| 1365 | m_treeModel = nullptr; |
| 1366 | } |
| 1367 | |
| 1368 | m_treeModel = new CustomModel(this); |
| 1369 | |
| 1370 | const auto& pm = DataModel::ProjectModel::instance(); |
| 1371 | auto* root = new QStandardItem(pm.title()); |
| 1372 | root->setData(root->text(), TreeViewText); |
| 1373 | root->setData("qrc:/icons/project-editor/treeview/project-setup.svg", TreeViewIcon); |
| 1374 | root->setData(true, TreeViewExpanded); |
| 1375 | |
| 1376 | m_treeModel->appendRow(root); |
nothing calls this directly
no test coverage detected