* \brief Load from XML */
| 1037 | * \brief Load from XML |
| 1038 | */ |
| 1039 | bool ProjectExplorer::load(XmlStreamReader* reader) { |
| 1040 | const auto* model = static_cast<AspectTreeModel*>(m_treeView->model()); |
| 1041 | QList<QModelIndex> selected; |
| 1042 | QList<QModelIndex> expanded; |
| 1043 | QModelIndex currentIndex; |
| 1044 | QString str; |
| 1045 | |
| 1046 | // xmlVersion < 3: old logic where the "rows" for the selected and expanded items were saved |
| 1047 | // ignoring the sub-folder structure. Remove it later. |
| 1048 | if (Project::xmlVersion() < 3) { |
| 1049 | const auto& aspects = m_project->children<AbstractAspect>(AbstractAspect::ChildIndexFlag::Recursive); |
| 1050 | bool expandedItem = false; |
| 1051 | bool selectedItem = false; |
| 1052 | bool viewItem = false; |
| 1053 | (void)viewItem; // because of a strange g++-warning about unused viewItem |
| 1054 | bool currentItem = false; |
| 1055 | int row; |
| 1056 | QXmlStreamAttributes attribs; |
| 1057 | |
| 1058 | while (!reader->atEnd()) { |
| 1059 | reader->readNext(); |
| 1060 | if (reader->isEndElement() && reader->name() == QLatin1String("state")) |
| 1061 | break; |
| 1062 | |
| 1063 | if (!reader->isStartElement()) |
| 1064 | continue; |
| 1065 | |
| 1066 | if (reader->name() == QLatin1String("expanded")) { |
| 1067 | expandedItem = true; |
| 1068 | selectedItem = false; |
| 1069 | viewItem = false; |
| 1070 | currentItem = false; |
| 1071 | } else if (reader->name() == QLatin1String("selected")) { |
| 1072 | expandedItem = false; |
| 1073 | selectedItem = true; |
| 1074 | viewItem = false; |
| 1075 | currentItem = false; |
| 1076 | } else if (reader->name() == QLatin1String("view")) { |
| 1077 | expandedItem = false; |
| 1078 | selectedItem = false; |
| 1079 | viewItem = true; |
| 1080 | currentItem = false; |
| 1081 | } else if (reader->name() == QLatin1String("current")) { |
| 1082 | expandedItem = false; |
| 1083 | selectedItem = false; |
| 1084 | viewItem = false; |
| 1085 | currentItem = true; |
| 1086 | } else if (reader->name() == QLatin1String("row")) { |
| 1087 | // we need to read the attributes first and before readElementText() otherwise they are empty |
| 1088 | attribs = reader->attributes(); |
| 1089 | row = reader->readElementText().toInt(); |
| 1090 | |
| 1091 | QModelIndex index; |
| 1092 | if (row == -1) |
| 1093 | index = model->modelIndexOfAspect(m_project); //-1 corresponds to the project-item (s.a. ProjectExplorer::save()) |
| 1094 | else if (row >= aspects.size() || row < 0) // checking for <0 to protect against wrong values in the XML |
| 1095 | continue; |
| 1096 | else |
no test coverage detected