| 69 | } |
| 70 | |
| 71 | void LayerManager::_load(xml::ElementPtr _node, std::string_view _file, Version _version) |
| 72 | { |
| 73 | VectorLayer layers; |
| 74 | // берем детей и крутимся, основной цикл |
| 75 | xml::ElementEnumerator layer = _node->getElementEnumerator(); |
| 76 | while (layer.next(mCategoryName)) |
| 77 | { |
| 78 | std::string name; |
| 79 | |
| 80 | if (!layer->findAttribute("name", name)) |
| 81 | { |
| 82 | MYGUI_LOG(Warning, "Attribute 'name' not found (file : " << _file << ")"); |
| 83 | continue; |
| 84 | } |
| 85 | |
| 86 | for (const auto& item : layers) |
| 87 | { |
| 88 | MYGUI_ASSERT(item->getName() != name, "Layer '" << name << "' already exist (file : " << _file << ")"); |
| 89 | } |
| 90 | |
| 91 | std::string_view type = layer->findAttribute("type"); |
| 92 | if (type.empty() && _version <= Version(1, 0)) |
| 93 | { |
| 94 | bool overlapped = utility::parseBool(layer->findAttribute("overlapped")); |
| 95 | type = overlapped ? "OverlappedLayer" : "SharedLayer"; |
| 96 | } |
| 97 | |
| 98 | ILayer* item = _createLayerObject(type); |
| 99 | item->deserialization(layer.current(), _version); |
| 100 | |
| 101 | layers.push_back(item); |
| 102 | } |
| 103 | |
| 104 | // теперь мержим новые и старые слои |
| 105 | merge(layers); |
| 106 | } |
| 107 | |
| 108 | ILayer* LayerManager::_createLayerObject(std::string_view _type) |
| 109 | { |
nothing calls this directly
no test coverage detected