| 122 | } |
| 123 | |
| 124 | void UIControl::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) |
| 125 | { |
| 126 | // Base |
| 127 | Actor::Deserialize(stream, modifier); |
| 128 | |
| 129 | DESERIALIZE_MEMBER(NavTargetUp, _navTargetUp); |
| 130 | DESERIALIZE_MEMBER(NavTargetDown, _navTargetDown); |
| 131 | DESERIALIZE_MEMBER(NavTargetLeft, _navTargetLeft); |
| 132 | DESERIALIZE_MEMBER(NavTargetRight, _navTargetRight); |
| 133 | |
| 134 | #if !COMPILE_WITHOUT_CSHARP |
| 135 | PROFILE_MEM(UI); |
| 136 | MTypeObject* typeObj = nullptr; |
| 137 | const auto controlMember = stream.FindMember("Control"); |
| 138 | if (controlMember != stream.MemberEnd()) |
| 139 | { |
| 140 | const StringAnsiView controlType(controlMember->value.GetStringAnsiView()); |
| 141 | const MClass* type = Scripting::FindClass(controlType); |
| 142 | if (type != nullptr) |
| 143 | { |
| 144 | typeObj = INTERNAL_TYPE_GET_OBJECT(type->GetType()); |
| 145 | } |
| 146 | else |
| 147 | { |
| 148 | LOG(Warning, "Unknown UIControl type: {0}", String(controlType)); |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | const auto dataMember = stream.FindMember("Data"); |
| 153 | if (dataMember != stream.MemberEnd()) |
| 154 | { |
| 155 | rapidjson_flax::StringBuffer buffer; |
| 156 | rapidjson_flax::Writer<rapidjson_flax::StringBuffer> writer(buffer); |
| 157 | dataMember->value.Accept(writer); |
| 158 | void* args[2]; |
| 159 | args[0] = MCore::String::New(buffer.GetString(), (int32)buffer.GetSize()); |
| 160 | args[1] = typeObj; |
| 161 | MObject* exception = nullptr; |
| 162 | UIControl_Deserialize->Invoke(GetOrCreateManagedInstance(), args, &exception); |
| 163 | if (exception) |
| 164 | { |
| 165 | MException ex(exception); |
| 166 | ex.Log(LogType::Error, TEXT("UIControl::Deserialize")); |
| 167 | } |
| 168 | } |
| 169 | #endif |
| 170 | } |
| 171 | |
| 172 | void UIControl::OnParentChanged() |
| 173 | { |
nothing calls this directly
no test coverage detected