diff --git a/Import/GacUI.cpp b/Import/GacUI.cpp index d7ac52ac..dd0c9714 100644 --- a/Import/GacUI.cpp +++ b/Import/GacUI.cpp @@ -6580,8 +6580,9 @@ GuiControlHost void GuiControlHost::ForceCalculateSizeImmediately() { + auto bounds = GetBounds(); boundsComposition->ForceCalculateSizeImmediately(); - SetBounds(GetBounds()); + SetBounds(bounds); } bool GuiControlHost::GetEnabled() @@ -32826,6 +32827,397 @@ IGuiParserManager } } +/*********************************************************************** +.\RESOURCES\GUIRESOURCETYPERESOLVERS.CPP +***********************************************************************/ + +namespace vl +{ + namespace presentation + { + using namespace collections; + using namespace controls; + using namespace parsing; + using namespace parsing::tabling; + using namespace parsing::xml; + using namespace stream; + +/*********************************************************************** +Image Type Resolver (Image) +***********************************************************************/ + + class GuiResourceImageTypeResolver + : public Object + , public IGuiResourceTypeResolver + , private IGuiResourceTypeResolver_DirectLoadXml + , private IGuiResourceTypeResolver_DirectLoadStream + { + public: + WString GetType()override + { + return L"Image"; + } + + bool XmlSerializable()override + { + return true; + } + + bool StreamSerializable()override + { + return true; + } + + IGuiResourceTypeResolver_DirectLoadXml* DirectLoadXml()override + { + return this; + } + + IGuiResourceTypeResolver_DirectLoadStream* DirectLoadStream()override + { + return this; + } + + Ptr Serialize(Ptr resource, Ptr content)override + { + return nullptr; + } + + void SerializePrecompiled(Ptr resource, Ptr content, stream::IStream& stream)override + { + auto obj = content.Cast(); + stream::internal::ContextFreeWriter writer(stream); + FileStream fileStream(resource->GetFileAbsolutePath(), FileStream::ReadOnly); + writer << (stream::IStream&)fileStream; + } + + Ptr ResolveResource(Ptr resource, Ptr element, GuiResourceError::List& errors)override + { + errors.Add(GuiResourceError({ resource }, L"Image should load from file.")); + return nullptr; + } + + Ptr ResolveResource(Ptr resource, const WString& path, GuiResourceError::List& errors)override + { + Ptr image = GetCurrentController()->ImageService()->CreateImageFromFile(path); + if(image) + { + return new GuiImageData(image, 0); + } + else + { + errors.Add(GuiResourceError({ resource }, L"Failed to load file \"" + path + L"\".")); + return nullptr; + } + } + + Ptr ResolveResourcePrecompiled(Ptr resource, stream::IStream& stream, GuiResourceError::List& errors)override + { + stream::internal::ContextFreeReader reader(stream); + MemoryStream memoryStream; + reader << (stream::IStream&)memoryStream; + + auto image = GetCurrentController()->ImageService()->CreateImageFromStream(memoryStream); + if (image) + { + return new GuiImageData(image, 0); + } + else + { + errors.Add(GuiResourceError({ resource }, L"[BINARY] Failed to load an image from binary data in a stream.")); + return nullptr; + } + } + }; + +/*********************************************************************** +Text Type Resolver (Text) +***********************************************************************/ + + class GuiResourceTextTypeResolver + : public Object + , public IGuiResourceTypeResolver + , private IGuiResourceTypeResolver_DirectLoadXml + , private IGuiResourceTypeResolver_DirectLoadStream + { + public: + WString GetType()override + { + return L"Text"; + } + + bool XmlSerializable()override + { + return true; + } + + bool StreamSerializable()override + { + return true; + } + + IGuiResourceTypeResolver_DirectLoadXml* DirectLoadXml()override + { + return this; + } + + IGuiResourceTypeResolver_DirectLoadStream* DirectLoadStream()override + { + return this; + } + + Ptr Serialize(Ptr resource, Ptr content)override + { + if (auto obj = content.Cast()) + { + auto xmlContent = MakePtr(); + xmlContent->content.value = obj->GetText(); + + auto xmlText = MakePtr(); + xmlText->name.value = L"Text"; + xmlText->subNodes.Add(xmlContent); + + return xmlText; + } + return 0; + } + + void SerializePrecompiled(Ptr resource, Ptr content, stream::IStream& stream)override + { + auto obj = content.Cast(); + stream::internal::ContextFreeWriter writer(stream); + WString text = obj->GetText(); + writer << text; + } + + Ptr ResolveResource(Ptr resource, Ptr element, GuiResourceError::List& errors)override + { + return new GuiTextData(XmlGetValue(element)); + } + + Ptr ResolveResource(Ptr resource, const WString& path, GuiResourceError::List& errors)override + { + WString text; + if(LoadTextFile(path, text)) + { + return new GuiTextData(text); + } + else + { + errors.Add(GuiResourceError({ resource }, L"Failed to load file \"" + path + L"\".")); + return 0; + } + } + + Ptr ResolveResourcePrecompiled(Ptr resource, stream::IStream& stream, GuiResourceError::List& errors)override + { + stream::internal::ContextFreeReader reader(stream); + WString text; + reader << text; + return new GuiTextData(text); + } + }; + +/*********************************************************************** +Xml Type Resolver (Xml) +***********************************************************************/ + + class GuiResourceXmlTypeResolver + : public Object + , public IGuiResourceTypeResolver + , private IGuiResourceTypeResolver_DirectLoadXml + , private IGuiResourceTypeResolver_DirectLoadStream + { + public: + WString GetType()override + { + return L"Xml"; + } + + bool XmlSerializable()override + { + return true; + } + + bool StreamSerializable()override + { + return true; + } + + IGuiResourceTypeResolver_DirectLoadXml* DirectLoadXml()override + { + return this; + } + + IGuiResourceTypeResolver_DirectLoadStream* DirectLoadStream()override + { + return this; + } + + Ptr Serialize(Ptr resource, Ptr content)override + { + if (auto obj = content.Cast()) + { + auto xmlXml = MakePtr(); + xmlXml->name.value = L"Xml"; + xmlXml->subNodes.Add(obj->rootElement); + return xmlXml; + } + return nullptr; + } + + void SerializePrecompiled(Ptr resource, Ptr content, stream::IStream& stream)override + { + auto obj = content.Cast(); + MemoryStream buffer; + { + StreamWriter writer(buffer); + XmlPrint(obj, writer); + } + { + buffer.SeekFromBegin(0); + StreamReader reader(buffer); + WString text = reader.ReadToEnd(); + + stream::internal::ContextFreeWriter writer(stream); + writer << text; + } + } + + Ptr ResolveResource(Ptr resource, Ptr element, GuiResourceError::List& errors)override + { + Ptr root = XmlGetElements(element).First(0); + if(root) + { + Ptr xml=new XmlDocument; + xml->rootElement=root; + return xml; + } + return nullptr; + } + + Ptr ResolveResource(Ptr resource, const WString& path, GuiResourceError::List& errors)override + { + if (auto parser = GetParserManager()->GetParser(L"XML")) + { + WString text; + if (LoadTextFile(path, text)) + { + return parser->Parse({ resource }, text, errors); + } + else + { + errors.Add(GuiResourceError({ resource }, L"Failed to load file \"" + path + L"\".")); + } + } + return nullptr; + } + + Ptr ResolveResourcePrecompiled(Ptr resource, stream::IStream& stream, GuiResourceError::List& errors)override + { + if (auto parser = GetParserManager()->GetParser(L"XML")) + { + stream::internal::ContextFreeReader reader(stream); + WString text; + reader << text; + + return parser->Parse({ resource }, text, errors); + } + return nullptr; + } + }; + +/*********************************************************************** +Doc Type Resolver (Doc) +***********************************************************************/ + + class GuiResourceDocTypeResolver + : public Object + , public IGuiResourceTypeResolver + , private IGuiResourceTypeResolver_IndirectLoad + { + public: + WString GetType()override + { + return L"Doc"; + } + + bool XmlSerializable()override + { + return true; + } + + bool StreamSerializable()override + { + return true; + } + + WString GetPreloadType()override + { + return L"Xml"; + } + + bool IsDelayLoad()override + { + return true; + } + + IGuiResourceTypeResolver_IndirectLoad* IndirectLoad()override + { + return this; + } + + Ptr Serialize(Ptr resource, Ptr content)override + { + if (auto obj = content.Cast()) + { + return obj->SaveToXml(); + } + return nullptr; + } + + Ptr ResolveResource(Ptr resource, Ptr resolver, GuiResourceError::List& errors)override + { + if(auto xml = resource->GetContent().Cast()) + { + Ptr model = DocumentModel::LoadFromXml(resource, xml, resolver, errors); + return model; + } + return nullptr; + } + }; + +/*********************************************************************** +Type Resolver Plugin +***********************************************************************/ + + class GuiResourceTypeResolversPlugin : public Object, public IGuiPlugin + { + public: + + GUI_PLUGIN_NAME(GacUI_Res_TypeResolvers) + { + GUI_PLUGIN_DEPEND(GacUI_Res_ResourceResolver); + } + + void Load()override + { + IGuiResourceResolverManager* manager=GetResourceResolverManager(); + manager->SetTypeResolver(new GuiResourceImageTypeResolver); + manager->SetTypeResolver(new GuiResourceTextTypeResolver); + manager->SetTypeResolver(new GuiResourceXmlTypeResolver); + manager->SetTypeResolver(new GuiResourceDocTypeResolver); + } + + void Unload()override + { + } + }; + GUI_REGISTER_PLUGIN(GuiResourceTypeResolversPlugin) + } +} + + /*********************************************************************** .\RESOURCES\GUIRESOURCE.CPP ***********************************************************************/ @@ -32837,10 +33229,7 @@ namespace vl using namespace controls; using namespace collections; using namespace parsing; - using namespace parsing::tabling; using namespace parsing::xml; - using namespace parsing::json; - using namespace regex; using namespace stream; using namespace filesystem; @@ -33364,8 +33753,20 @@ GuiResourceFolder errors.Add(GuiResourceError({ {this},element->codeRange.start }, L"Failed to load file \"" + fileAbsolutePath + L"\".")); } } + else if (contentAtt->value.value == L"Import") + { + auto importUri = XmlGetValue(element); + folder->ImportFromUri(importUri, { { this },element->codeRange.start }, errors); + } + else + { + errors.Add(GuiResourceError({ { this },element->codeRange.start }, L"Folder's content attributes can only be \"Link\".")); + } + } + if (folder->GetImportUri() == L"") + { + folder->LoadResourceFolderFromXml(delayLoadings, newContainingFolder, newFolderXml, errors); } - folder->LoadResourceFolderFromXml(delayLoadings, newContainingFolder, newFolderXml, errors); } else { @@ -33388,6 +33789,10 @@ GuiResourceFolder name = GetFileName(fileAbsolutePath); } } + else + { + errors.Add(GuiResourceError({ { this },element->codeRange.start }, L"File's content attributes can only be \"File\".")); + } } Ptr item = new GuiResourceItem; @@ -33544,12 +33949,18 @@ GuiResourceFolder xmlFolder->attributes.Add(attName); xmlParent->subNodes.Add(xmlFolder); - - if (folder->GetFileContentPath() == L"") + if (folder->GetImportUri() != L"") { - folder->SaveResourceFolderToXml(xmlFolder); + auto attContent = MakePtr(); + attContent->name.value = L"content"; + attContent->value.value = L"Import"; + xmlFolder->attributes.Add(attContent); + + auto xmlText = MakePtr(); + xmlText->content.value = folder->GetImportUri(); + xmlFolder->subNodes.Add(xmlText); } - else + else if (folder->GetFileContentPath() != L"") { auto attContent = MakePtr(); attContent->name.value = L"content"; @@ -33560,11 +33971,16 @@ GuiResourceFolder xmlText->content.value = folder->GetFileContentPath(); xmlFolder->subNodes.Add(xmlText); } + else + { + folder->SaveResourceFolderToXml(xmlFolder); + } } } void GuiResourceFolder::CollectTypeNames(collections::List& typeNames) { + if (importUri != L"") return; FOREACH(Ptr, item, items.Values()) { if (!typeNames.Contains(item->GetTypeName())) @@ -33669,11 +34085,18 @@ GuiResourceFolder reader << count; for (vint i = 0; i < count; i++) { - WString name; - reader << name; + WString name, importUri; + reader << name << importUri; auto folder = MakePtr(); - folder->LoadResourceFolderFromBinary(delayLoadings, reader, typeNames, errors); + if (importUri == L"") + { + folder->LoadResourceFolderFromBinary(delayLoadings, reader, typeNames, errors); + } + else + { + folder->ImportFromUri(importUri, { { this },{0,0} }, errors); + } AddFolder(name, folder); } } @@ -33730,13 +34153,18 @@ GuiResourceFolder FOREACH(Ptr, folder, folders.Values()) { WString name = folder->GetName(); - writer << name; - folder->SaveResourceFolderToBinary(writer, typeNames); + WString importUri = folder->GetImportUri(); + writer << name << importUri; + if (importUri == L"") + { + folder->SaveResourceFolderToBinary(writer, typeNames); + } } } void GuiResourceFolder::PrecompileResourceFolder(GuiResourcePrecompileContext& context, IGuiResourcePrecompileCallback* callback, GuiResourceError::List& errors) { + if (importUri != L"") return; FOREACH(Ptr, item, items.Values()) { auto typeResolver = GetResourceResolverManager()->GetTypeResolver(item->GetTypeName()); @@ -33761,6 +34189,7 @@ GuiResourceFolder void GuiResourceFolder::InitializeResourceFolder(GuiResourceInitializeContext& context) { + if (importUri != L"") return; FOREACH(Ptr, item, items.Values()) { auto typeResolver = GetResourceResolverManager()->GetTypeResolver(item->GetTypeName()); @@ -33776,6 +34205,44 @@ GuiResourceFolder } } + void GuiResourceFolder::ImportFromUri(const WString& uri, GuiResourceTextPos position, GuiResourceError::List& errors) + { + SetImportUri(uri); + if (importUri.Length() == 0 || importUri[importUri.Length() - 1] != L'/') + { + errors.Add(GuiResourceError(position, L"Path of imported folder should ends with L\"/\".")); + } + else + { + WString protocol, path; + if (IsResourceUrl(importUri, protocol, path)) + { + if (protocol == L"import-res") + { + auto factory = GetResourceResolverManager()->GetPathResolverFactory(protocol); + auto resolver = factory->CreateResolver(nullptr, L""); + if (auto sourceFolder = resolver->ResolveResource(path).Cast()) + { + CopyFrom(items, sourceFolder->items); + CopyFrom(folders, sourceFolder->folders); + } + else + { + errors.Add(GuiResourceError(position, L"Path of imported folder does not exist: \"" + importUri + L"\".")); + } + } + else + { + errors.Add(GuiResourceError(position, L"Path of imported folder should begin with \"import-res://\".")); + } + } + else + { + errors.Add(GuiResourceError(position, L"Invalid path of imported folder : \"" + importUri + L"\".")); + } + } + } + GuiResourceFolder::GuiResourceFolder() { } @@ -33784,6 +34251,16 @@ GuiResourceFolder { } + const WString& GuiResourceFolder::GetImportUri() + { + return importUri; + } + + void GuiResourceFolder::SetImportUri(const WString& uri) + { + importUri = uri; + } + const GuiResourceFolder::ItemList& GuiResourceFolder::GetItems() { return items.Values(); @@ -34319,48 +34796,6 @@ GuiResourcePathResolver } } -/*********************************************************************** -GuiResourcePathFileResolver -***********************************************************************/ - - class GuiResourcePathFileResolver : public Object, public IGuiResourcePathResolver - { - protected: - WString workingDirectory; - - public: - GuiResourcePathFileResolver(const WString& _workingDirectory) - :workingDirectory(_workingDirectory) - { - } - - Ptr ResolveResource(const WString& path) - { - if (workingDirectory == L"") return nullptr; - WString filename = path; - if (filename.Length() >= 2 && filename[1] != L':') - { - filename = workingDirectory + filename; - } - Ptr image = GetCurrentController()->ImageService()->CreateImageFromFile(filename); - return new GuiImageData(image, 0); - } - - class Factory : public Object, public IGuiResourcePathResolverFactory - { - public: - WString GetProtocol()override - { - return L"file"; - } - - Ptr CreateResolver(Ptr resource, const WString& workingDirectory)override - { - return new GuiResourcePathFileResolver(workingDirectory); - } - }; - }; - /*********************************************************************** GuiResourcePathResResolver ***********************************************************************/ @@ -34378,11 +34813,11 @@ GuiResourcePathResResolver Ptr ResolveResource(const WString& path) { - if(resource) + if (resource) { - if(path.Length()>0) + if (path.Length() > 0) { - switch(path[path.Length()-1]) + switch (path[path.Length() - 1]) { case L'\\':case L'/': return resource->GetFolderByPath(path); @@ -34391,7 +34826,7 @@ GuiResourcePathResResolver } } } - return 0; + return nullptr; } class Factory : public Object, public IGuiResourcePathResolverFactory @@ -34409,6 +34844,59 @@ GuiResourcePathResResolver }; }; +/*********************************************************************** +GuiImportResourcePathResResolver +***********************************************************************/ + + class GuiImportResourcePathResResolver : public Object, public IGuiResourcePathResolver + { + public: + GuiImportResourcePathResResolver() + { + } + + Ptr ResolveResource(const WString& path) + { + const wchar_t* buffer = path.Buffer(); + const wchar_t* d1 = wcschr(buffer, L'\\'); + const wchar_t* d2 = wcschr(buffer, L'/'); + const wchar_t* d = + d1 == nullptr&&d2 == nullptr ? nullptr : + d1 == nullptr ? d2 : + d2 == nullptr ? d1 : + d1 < d2 ? d1 : d2; + + if (!d) return nullptr; + WString resourceName(buffer, d - buffer); + WString resourcePath(path.Right(path.Length() - resourceName.Length() - 1)); + if (auto resource = GetResourceManager()->GetResource(resourceName)) + { + switch (path[path.Length() - 1]) + { + case L'\\':case L'/': + return resource->GetFolderByPath(resourcePath); + default: + return resource->GetValueByPath(resourcePath); + } + } + return nullptr; + } + + class Factory : public Object, public IGuiResourcePathResolverFactory + { + public: + WString GetProtocol()override + { + return L"import-res"; + } + + Ptr CreateResolver(Ptr resource, const WString& workingDirectory)override + { + return new GuiImportResourcePathResResolver; + } + }; + }; + /*********************************************************************** IGuiResourceResolverManager ***********************************************************************/ @@ -34443,8 +34931,8 @@ IGuiResourceResolverManager globalStringKeyManager->InitializeConstants(); resourceResolverManager = this; - SetPathResolverFactory(new GuiResourcePathFileResolver::Factory); SetPathResolverFactory(new GuiResourcePathResResolver::Factory); + SetPathResolverFactory(new GuiImportResourcePathResResolver::Factory); } void Unload()override @@ -34639,11 +35127,7 @@ Helpers if (decompress) { MemoryStream compressedStream; - for (vint i = 0; i < rows; i++) - { - vint size = i == rows - 1 ? remain : block; - compressedStream.Write((void*)buffer[i], size); - } + DecompressStream(buffer, false, rows, block, remain, compressedStream); compressedStream.SeekFromBegin(0); DecompressStream(compressedStream, outputStream); } @@ -34660,397 +35144,6 @@ Helpers } -/*********************************************************************** -.\RESOURCES\GUIRESOURCETYPERESOLVERS.CPP -***********************************************************************/ - -namespace vl -{ - namespace presentation - { - using namespace collections; - using namespace controls; - using namespace parsing; - using namespace parsing::tabling; - using namespace parsing::xml; - using namespace stream; - -/*********************************************************************** -Image Type Resolver (Image) -***********************************************************************/ - - class GuiResourceImageTypeResolver - : public Object - , public IGuiResourceTypeResolver - , private IGuiResourceTypeResolver_DirectLoadXml - , private IGuiResourceTypeResolver_DirectLoadStream - { - public: - WString GetType()override - { - return L"Image"; - } - - bool XmlSerializable()override - { - return true; - } - - bool StreamSerializable()override - { - return true; - } - - IGuiResourceTypeResolver_DirectLoadXml* DirectLoadXml()override - { - return this; - } - - IGuiResourceTypeResolver_DirectLoadStream* DirectLoadStream()override - { - return this; - } - - Ptr Serialize(Ptr resource, Ptr content)override - { - return nullptr; - } - - void SerializePrecompiled(Ptr resource, Ptr content, stream::IStream& stream)override - { - auto obj = content.Cast(); - stream::internal::ContextFreeWriter writer(stream); - FileStream fileStream(resource->GetFileAbsolutePath(), FileStream::ReadOnly); - writer << (stream::IStream&)fileStream; - } - - Ptr ResolveResource(Ptr resource, Ptr element, GuiResourceError::List& errors)override - { - errors.Add(GuiResourceError({ resource }, L"Image should load from file.")); - return nullptr; - } - - Ptr ResolveResource(Ptr resource, const WString& path, GuiResourceError::List& errors)override - { - Ptr image = GetCurrentController()->ImageService()->CreateImageFromFile(path); - if(image) - { - return new GuiImageData(image, 0); - } - else - { - errors.Add(GuiResourceError({ resource }, L"Failed to load file \"" + path + L"\".")); - return nullptr; - } - } - - Ptr ResolveResourcePrecompiled(Ptr resource, stream::IStream& stream, GuiResourceError::List& errors)override - { - stream::internal::ContextFreeReader reader(stream); - MemoryStream memoryStream; - reader << (stream::IStream&)memoryStream; - - auto image = GetCurrentController()->ImageService()->CreateImageFromStream(memoryStream); - if (image) - { - return new GuiImageData(image, 0); - } - else - { - errors.Add(GuiResourceError({ resource }, L"[BINARY] Failed to load an image from binary data in a stream.")); - return nullptr; - } - } - }; - -/*********************************************************************** -Text Type Resolver (Text) -***********************************************************************/ - - class GuiResourceTextTypeResolver - : public Object - , public IGuiResourceTypeResolver - , private IGuiResourceTypeResolver_DirectLoadXml - , private IGuiResourceTypeResolver_DirectLoadStream - { - public: - WString GetType()override - { - return L"Text"; - } - - bool XmlSerializable()override - { - return true; - } - - bool StreamSerializable()override - { - return true; - } - - IGuiResourceTypeResolver_DirectLoadXml* DirectLoadXml()override - { - return this; - } - - IGuiResourceTypeResolver_DirectLoadStream* DirectLoadStream()override - { - return this; - } - - Ptr Serialize(Ptr resource, Ptr content)override - { - if (auto obj = content.Cast()) - { - auto xmlContent = MakePtr(); - xmlContent->content.value = obj->GetText(); - - auto xmlText = MakePtr(); - xmlText->name.value = L"Text"; - xmlText->subNodes.Add(xmlContent); - - return xmlText; - } - return 0; - } - - void SerializePrecompiled(Ptr resource, Ptr content, stream::IStream& stream)override - { - auto obj = content.Cast(); - stream::internal::ContextFreeWriter writer(stream); - WString text = obj->GetText(); - writer << text; - } - - Ptr ResolveResource(Ptr resource, Ptr element, GuiResourceError::List& errors)override - { - return new GuiTextData(XmlGetValue(element)); - } - - Ptr ResolveResource(Ptr resource, const WString& path, GuiResourceError::List& errors)override - { - WString text; - if(LoadTextFile(path, text)) - { - return new GuiTextData(text); - } - else - { - errors.Add(GuiResourceError({ resource }, L"Failed to load file \"" + path + L"\".")); - return 0; - } - } - - Ptr ResolveResourcePrecompiled(Ptr resource, stream::IStream& stream, GuiResourceError::List& errors)override - { - stream::internal::ContextFreeReader reader(stream); - WString text; - reader << text; - return new GuiTextData(text); - } - }; - -/*********************************************************************** -Xml Type Resolver (Xml) -***********************************************************************/ - - class GuiResourceXmlTypeResolver - : public Object - , public IGuiResourceTypeResolver - , private IGuiResourceTypeResolver_DirectLoadXml - , private IGuiResourceTypeResolver_DirectLoadStream - { - public: - WString GetType()override - { - return L"Xml"; - } - - bool XmlSerializable()override - { - return true; - } - - bool StreamSerializable()override - { - return true; - } - - IGuiResourceTypeResolver_DirectLoadXml* DirectLoadXml()override - { - return this; - } - - IGuiResourceTypeResolver_DirectLoadStream* DirectLoadStream()override - { - return this; - } - - Ptr Serialize(Ptr resource, Ptr content)override - { - if (auto obj = content.Cast()) - { - auto xmlXml = MakePtr(); - xmlXml->name.value = L"Xml"; - xmlXml->subNodes.Add(obj->rootElement); - return xmlXml; - } - return nullptr; - } - - void SerializePrecompiled(Ptr resource, Ptr content, stream::IStream& stream)override - { - auto obj = content.Cast(); - MemoryStream buffer; - { - StreamWriter writer(buffer); - XmlPrint(obj, writer); - } - { - buffer.SeekFromBegin(0); - StreamReader reader(buffer); - WString text = reader.ReadToEnd(); - - stream::internal::ContextFreeWriter writer(stream); - writer << text; - } - } - - Ptr ResolveResource(Ptr resource, Ptr element, GuiResourceError::List& errors)override - { - Ptr root = XmlGetElements(element).First(0); - if(root) - { - Ptr xml=new XmlDocument; - xml->rootElement=root; - return xml; - } - return nullptr; - } - - Ptr ResolveResource(Ptr resource, const WString& path, GuiResourceError::List& errors)override - { - if (auto parser = GetParserManager()->GetParser(L"XML")) - { - WString text; - if (LoadTextFile(path, text)) - { - return parser->Parse({ resource }, text, errors); - } - else - { - errors.Add(GuiResourceError({ resource }, L"Failed to load file \"" + path + L"\".")); - } - } - return nullptr; - } - - Ptr ResolveResourcePrecompiled(Ptr resource, stream::IStream& stream, GuiResourceError::List& errors)override - { - if (auto parser = GetParserManager()->GetParser(L"XML")) - { - stream::internal::ContextFreeReader reader(stream); - WString text; - reader << text; - - return parser->Parse({ resource }, text, errors); - } - return nullptr; - } - }; - -/*********************************************************************** -Doc Type Resolver (Doc) -***********************************************************************/ - - class GuiResourceDocTypeResolver - : public Object - , public IGuiResourceTypeResolver - , private IGuiResourceTypeResolver_IndirectLoad - { - public: - WString GetType()override - { - return L"Doc"; - } - - bool XmlSerializable()override - { - return true; - } - - bool StreamSerializable()override - { - return true; - } - - WString GetPreloadType()override - { - return L"Xml"; - } - - bool IsDelayLoad()override - { - return true; - } - - IGuiResourceTypeResolver_IndirectLoad* IndirectLoad()override - { - return this; - } - - Ptr Serialize(Ptr resource, Ptr content)override - { - if (auto obj = content.Cast()) - { - return obj->SaveToXml(); - } - return nullptr; - } - - Ptr ResolveResource(Ptr resource, Ptr resolver, GuiResourceError::List& errors)override - { - if(auto xml = resource->GetContent().Cast()) - { - Ptr model = DocumentModel::LoadFromXml(resource, xml, resolver, errors); - return model; - } - return nullptr; - } - }; - -/*********************************************************************** -Type Resolver Plugin -***********************************************************************/ - - class GuiResourceTypeResolversPlugin : public Object, public IGuiPlugin - { - public: - - GUI_PLUGIN_NAME(GacUI_Res_TypeResolvers) - { - GUI_PLUGIN_DEPEND(GacUI_Res_ResourceResolver); - } - - void Load()override - { - IGuiResourceResolverManager* manager=GetResourceResolverManager(); - manager->SetTypeResolver(new GuiResourceImageTypeResolver); - manager->SetTypeResolver(new GuiResourceTextTypeResolver); - manager->SetTypeResolver(new GuiResourceXmlTypeResolver); - manager->SetTypeResolver(new GuiResourceDocTypeResolver); - } - - void Unload()override - { - } - }; - GUI_REGISTER_PLUGIN(GuiResourceTypeResolversPlugin) - } -} - - /*********************************************************************** .\RESOURCES\GUIRESOURCEMANAGER.CPP ***********************************************************************/ diff --git a/Import/GacUI.h b/Import/GacUI.h index 32ad098e..0b5cef88 100644 --- a/Import/GacUI.h +++ b/Import/GacUI.h @@ -4137,6 +4137,7 @@ Resource Structure typedef collections::List DelayLoadingList; + WString importUri; ItemMap items; FolderMap folders; @@ -4147,11 +4148,19 @@ Resource Structure void SaveResourceFolderToBinary(stream::internal::ContextFreeWriter& writer, collections::List& typeNames); void PrecompileResourceFolder(GuiResourcePrecompileContext& context, IGuiResourcePrecompileCallback* callback, GuiResourceError::List& errors); void InitializeResourceFolder(GuiResourceInitializeContext& context); + void ImportFromUri(const WString& uri, GuiResourceTextPos position, GuiResourceError::List& errors); public: /// Create a resource folder. GuiResourceFolder(); ~GuiResourceFolder(); + ///Get the import uri for this folder. + ///The import uri for this folder. Returns an empty string for non-import folders + const WString& GetImportUri(); + ///Set the import uri for this folder. + ///The import uri for this folder. Set an empty string for non-import folders + void SetImportUri(const WString& uri); + /// Get all sub items. /// All sub items. const ItemList& GetItems(); diff --git a/Import/GacUIWindows.cpp b/Import/GacUIWindows.cpp index 5af71613..d4b6dd42 100644 --- a/Import/GacUIWindows.cpp +++ b/Import/GacUIWindows.cpp @@ -484,6 +484,7 @@ WindowsDirect2DParagraph (Initialization) if(!FAILED(hr)) { textLayout=rawTextLayout; + textLayout->SetMaxWidth(65536); textLayout->SetWordWrapping(DWRITE_WORD_WRAPPING_WRAP); } graphicsElements.Add(TextRange(0, _text.Length()), 0); @@ -4277,7 +4278,7 @@ WindowsGDIParagraph Rect caretBounds=GetCaretBounds(caret, caretFrontSide); vint x=caretBounds.x1+bounds.x1; vint y1=caretBounds.y1+bounds.y1; - vint y2=y1+caretBounds.Height(); + vint y2=y1+(vint)(caretBounds.Height()*1.5); WinDC* dc=renderTarget->GetDC(); dc->SetPen(caretPen); diff --git a/Import/Skins/DarkSkin/DarkSkin.cpp b/Import/Skins/DarkSkin/DarkSkin.cpp index bece1aaf..0b964698 100644 --- a/Import/Skins/DarkSkin/DarkSkin.cpp +++ b/Import/Skins/DarkSkin/DarkSkin.cpp @@ -29283,9 +29283,9 @@ namespace vl class DarkSkinResourceReader { public: - static const vint parserBufferLength = 1710; // 4288 bytes before compressing + static const vint parserBufferLength = 1721; // 4400 bytes before compressing static const vint parserBufferBlock = 1024; - static const vint parserBufferRemain = 686; + static const vint parserBufferRemain = 697; static const vint parserBufferRows = 2; static const char* parserBuffer[2]; @@ -29296,8 +29296,8 @@ namespace vl }; const char* DarkSkinResourceReader::parserBuffer[] = { - "\xC0\x10\x00\x00\xA6\x06\x00\x00\x4A\x00\x01\x82\x80\x00\x81\x80\x1E\x29\x65\x73\x2F\x35\x32\x3B\x31\x33\x26\x65\x74\x21\x24\x31\x32\x88\x10\x27\x61\x6D\x25\x3D\x12\x12\x10\x10\x2B\x65\x72\x33\x29\x3F\x36\x34\x8F\x18\x2E\x30\x22\x1E\x1C\x1C\x21\x32\x38\x65\x6E\x24\x31\x93\x31\x35\x85\x17\x2C\xAF\x08\x8A\x8C\x86\x84\x88\x89\x14\x92\xBE\x05\x03\x82\x80\x05\xA2\x01\xC7\x81\x89\x2E\x33\x3A\x88\x37\x0E\x8D\x08\xA0\x02\xAB\xA5\xA7\xA7\x0E\xD3\x34\x39\x3C\x35\x33\x01\xA9\x5F\x81\x84\x2F\x33\x34\x03\xA8\xB3\x01\xD4\x25\x38\x34\x3F\x07\xA8\xB7\x01\xC3\x2C\x21\x33\x3B\x38\x8C\x8D\x08\xE3\x2F\x32\x34\x33\xA8\x01\xB0\x45\xCA\x81\xC2\x84\x21\x32\x39\x35\x53\x6B\x29\x2E\x3E\xBA\x07\xA8\x03\x8F\x82\x82\x35\x34\x3C\x39\x92\xBF\x7E\x82\xC3\x82\xC3\xB3\x31\x3A\x8D\x6E\x74\x01\x13\xA2\x03\xA8\x08\xD3\x92\xF4\xA5\x2C\x3B\xC5\x31\xCF\xCF\x31\xF4\x3E\x53\xA3\xDE\x81\xCE\x96\x43\x25\xB4\x31\xD8\x9C\x1E\xAC\xAE\x09\xAC\xBF\xDD\xA0\x16\x35\x8D\x8D\x22\x23\x2E\x86\x31\x35\x38\x36\x3A\x2D\x4F\x36\x21\x92\x39\x37\x99\x95\x3C\x7A\xAC\x3B\xBE\x1B\x12\x23\xEF\xE0\xBC\x2F\x1A\xEC\xEA\xF3\xE1\x32\xC2\xDB\x84\xE6\xEA\x8C\x8F\x11\x29\xAB\xE5\x23\x34\x34\x96\x35\xE9\xE9\x72\x55\xD7\xEC\x94\xF2\x39\xEE\xF0\xE1\x63\x7F\x1B\x76\xFE\x7C\x02\x1B\x1A\xFD\x5D\x70\x0C\x0C\x37\x01\x13\x13\x10\xE2\x47\x89\x82\x79\xEA\x68\x74\x84\x70\x73\x39\x47\x6E\x5F\x68\x45\x5D\x84\x13\x69\x0E\x58\x67\x59\x24\x81\x4D\x11\x88\x63\x23\x88\x50\x64\x2B\x82\x42\x15\x1A\x62\x22\x17\x66\x8A\x03\x6C\x85\x52\x8D\x53\x23\x12\x1F\x80\x6C\x34\x83\x40\x60\x3F\x82\x44\x15\x18\x62\x3E\x82\x43\x01\x53\x48\x99\x5B\x5A\x74\x02\x1F\x18\x1E\x46\x81\x49\x03\x54\x53\xA9\x5F\x1B\x80\x4E\x55\x70\x1D\x94\x00\x36\x85\x8E\x40\x57\x0B\x64\x1B\x1B\x77\x1C\x9C\x03\x54\x67\x81\x47\x11\x18\x63\x07\x11\x4D\x6E\x6E\x26\x19\x1B\x19\x7E\x63\x68\x50\x90\x02\x40\x63\x10\x1C\x70\x04\x57\x9F\x54\x55\x45\x51\xA3\x9E\x70\x39\x6D\x18\x1C\x72\x09\x43\x1D\x19\x64\x14\x03\x56\xA3\x62\x46\x68\x62\x62\x6E\x3B\x4B\x41\x43\x65\x2E\x03\x18\x9F\x78\x81\x4D\x87\x40\x1D\xB7\x55\x1A\x66\x46\x44\x62\xA5\x62\x8B\x5D\xA4\x54\xA0\x02\x4E\x1B\x5D\x1B\x61\x2C\x1C\x53\x18\x6C\x35\x13\x4F\x69\x48\x78\xA0\x02\x0B\x2E\x2F\x0C\xAE\xAF\xBD\xAB\x93\x19\x15\x49\x2E\x08\x1A\xAA\x11\x13\x59\xB1\x40\x08\x66\x1D\x57\x7C\xF5\x73\xA5\xAF\x4C\x39\x13\x55\xB5\x40\xBF\x99\xBD\xAD\xB3\xCF\xB4\x75\x4B\x0B\x54\x39\x10\x4E\x4B\x73\x3A\x89\x18\x1C\x96\x62\x4F\x0B\x11\x75\x29\x1C\xB6\x7C\xDE\xAE\x10\x15\xAD\x67\x0B\x66\xB2\xAA\x69\x85\x59\xBF\x14\x97\x8E\x46\x13\x80\x33\x72\x1E\x96\x40\x38\xBD\xB5\x1A\x5F\x0B\x13\x59\xC1\x40\x50\x09\xAA\x5F\xA1\x69\x1D\x54\x1A\x9D\x1E\xAF\x56\xC5\x5C\x73\x75\x52\xA9\x5E\x7B\x64\x14\x13\xC5\x45\x70\x50\x00\x45\x87\x73\x14\xA6\x0E\x3A\x14\x18\x19\x19\x1A\x58\x03\x56\xCB\x01\x64\xCB\x1A\xC9\x8B\x68\xC3\x65\x65\x25\x6A\x57\xA3\x5C\xBB\x5A\x03\x56\xCF\x31\xD2\xA4\xCE\x1B\x28\xC3\x1B\xCB\x18\x6B\x0E\x98\x1E\xCE\x70\x3C\xC5\x19\x07\x53\x50\xD1\xD1\xC9\x27\xFA\x02\x17\x44\x24\x77\xC6\x66\x1B\x4C\xCE\xDF\x07\x54\x5F\xD3\xD3\xCD\xD5\xAF\x60\x64\x1C\x13\x44\xAB\x6D\xD5\x45\x65\x21\x03\x56\xDB\x62\xC3\xD8\xC9\xD9\xB1\x6A\x5C\x5A\xD2\x6B\xFB\x60\x0B\x54\x7B\xF1\xD4\xD8\x59\xB0\x61\x66\x16\x4D\x77\x21\x49\xDD\x19\x25\x13\x59\xE2\xDF\x35\xFA\x06\xD2\x7C\x6B\x09\x1B\x6D\x1B\x42\x2C\x9B\x1B\x19\x3B\xB5\x12\x4F\xE1\x40\xC5\x5D\xE6\xCC\x72\xCE\xEF\x19\x1B\x32\xB8\xDC\xC9\xD3\x6C\xE4\x03\x56\xEA\x8C\xC4\xDA\x0D\x11\x78\x30\x11\x1A\x4C\x8B\x67\x1E\x4A\x5E\x72\x15\x4B\x5F\xE1\x7D\xC5\x5D\xEC\xE8\x55\xD2\xEC\xC9\xE5\x48\xD8\xEB\x43\xE6\xA7\xCE\xD6\x0B\x54\xCB\xED\xE8\xC8\x88\x4E\x43\xE5\x1B\x1D\xB9\x75\xAD\x1A\x1B\x48\x25\x13\x46\xE1\xC9\xEC\xDD\xE7\x40\x9F\xC2\xD5\xD4\xF4\x74\x12\xF7\x1C\xE7\x3F\xC2\x40\xF1\xE3\x76\xE7\xD1\x88\x1D\xE8\xC8\x51\xF8\xD5\xEC\xC9\xA5\x1A\xF9\x87\xDC\x03\x56\xFE\xCE\xFA\x05\x63\x6E\x50\x09\x0C\xD2\x5C\x7B\x66\xEF\x69\x7D\x7F\x47\x19\x70\x1C\x26\x75\x81\xDD\x17\x03\x2A\x0F\x9D\x7C\xDA\x62\x0A\x6D\xEE\x7B\x32\x6A\x45\x38\x83\xFA\x2E\x73\x0A\x34\x3B\x2C\x0E\x9E\x34\x0F\x12\x65\x09\x0F\xC3\x62\x03\x2A\x27\x9D\x7F\x8B\x31\x45\x25\x29\x0D\x69\x0D\x74\x01\x09\x7E\x64\x47\x71\xB0\x45\x2E\x86\x1B\x88\x67\x0A\xB2\x4E\x0C\xAD\x65\x23", - "\x0E\x87\x6D\x07\x54\x42\x8A\x84\x18\x7C\x83\x4D\x6C\x1D\x2A\x1C\x79\x04\x09\x1D\x70\x0B\x4C\x77\x1D\x84\x65\x5B\x67\x71\x13\x13\x2E\x8A\x45\x8C\x86\x1B\x48\x8A\x89\x3C\x02\x7D\x0D\xE4\x75\x84\xD8\x6A\x72\x7D\xC6\x7B\x85\x24\x5C\x81\x25\x09\x96\x85\x0D\x14\x13\x2E\x8D\x59\x87\x8A\x02\xB0\x72\x76\x99\x3E\x84\x6B\x6C\x90\x6D\x51\x7A\x89\x86\xAB\x46\x88\x8D\x0A\x90\x22\x1B\x75\x07\x70\x0C\x83\x22\x83\x65\x8E\x77\x19\xDB\x8A\x81\xC3\x7A\x8B\x20\x7C\x89\x92\x0E\xFF\x8E\x0D\x24\x3A\x2E\x0D\x13\x95\x81\x03\xE5\x03\x05\xA9\x1D\x91\x8E\x25\x28\x6E\x1C\x67\x05\x0D\x3B\x87\x73\x05\x53\x28\x94\x28\x98\x96\x30\x52\x8D\x8F\x0D\x4F\x84\x4E\x14\xB8\x68\x8F\x4D\xA8\x03\x2A\xB7\x8B\x96\x28\xA4\x9E\x84\xD6\x0D\x4B\x8A\x39\x6C\x8F\x27\xC5\x23\x99\x3E\x8B\x93\x0A\xB0\x49\x8A\x29\xEC\x8A\x95\xA2\x0D\x9E\x98\x94\x88\x99\xAC\x6C\x0F\x95\x58\x91\x8B\x99\x9B\x8D\x79\x51\x5A\x90\x9A\x2D\x92\x99\x89\x96\x81\x95\xDA\x6C\x07\x71\x5C\x85\x2E\x9C\xDD\x9C\x87\x37\xEC\x0D\x96\x18\x98\x98\x75\xBB\x38\x89\x51\x72\x99\x9D\x9C\x57\x4C\x0D\x59\x47\x5D\xF6\x5B\x72\x0F\xC3\x4B\x75\x28\xFF\x95\x9C\xD7\x77\x99\x9E\x38\x02\x94\x90\x6C\x89\x85\x51\x0A\xA2\xA0\x2A\x04\xA4\x0E\x5A\x40\x88\x1B\xAC\x75\x28\x8A\xBD\x8E\x49\x38\x6D\x0D\x8E\x3B\x4A\x98\x60\xB5\x90\x9E\x65\x16\x87\x40\x38\x82\x92\x1D\x08\x0B\xA3\x3C\x48\x0B\xEC\x64\x0D\x2B\xC3\x59\x03\x2A\x2F\xBD\x7F\x49\xBA\x4C\x47\xF8\x5E\x74\x8C\xF4\x6E\x74\x12\x54\x09\x77\x01\xBD\x99\xA1\x28\x98\xA7\xD8\x0D\x7C\x09\x32\x26\x0C\x0E\x28\xBD\xA0\x2D\x85\x91\x6A\xA1\xA1\x75\x61\x6F\x18\x72\xA2\x15\x7F\xA7\x4D\x83\x9B\x20\xC5\x85\xA7\x8B\x67\x08\x0C\xA4\xB4\xA2\xA9\x54\x8C\x8C\xFF\x45\x23\xAD\x3E\x89\xAC\x0D\xF8\x79\x8F\xDB\x4E\xA5\x6A\x87\xB0\x0F\xAC\xEF\x9E\x6B\x18\xFD\x76\x0B\xB3\xAA\xA2\x26\x2D\xAC\x8D\x4C\xC5\x2B\xAF\x3E\xB5\xAF\xAB\xE4\x8C\x8F\xF7\x02\x23\x7F\xA1\xAE\x76\x0A\x3C\xB6\x70\x01\xA0\xAF\x90\x81\x11\x91\xA7\x28\x63\x4A\x18\x7B\x91\x61\xB8\xAC\x6B\x03\x53\x38\xB1\xFF\x12\xB4\xB3\xC5\x8E\x6D\x02\x53\x20\xB7\x66\xC4\x46\x85\xA0\xBD\x7D\x09\xCE\x34\x3C\x6B\x6E\x05\x0D\xF6\x4C\x80\xA4\x57\xA2\x21\x56\x90\xBA\x07\x29\x35\x75\x2B\xAB\xAD\xB4\x93\x2F\xB2\xAE\xA4\x24\xA4\xB6\x07\xB4\xAA\x65\xFA\x6C\x6E\xB6\x8D\x77\xA0\x5F\x83\xB9\x19\x1E\x03\x2A\xE6\xA7\xB1\x26\x75\x0D\x9D\x65\x1E\xBC\x6D\x7F\x83\x21\xA0\x25\xAE\xA0\x96\x10\xA7\x5C\xE9\xB2\x83\x47\xE7\x6A\xAC\x52\x0F\xB6\xB1\xC8\x8F\xA2\x4B\xCA\xB0\x8D\x51\x6A\xBD\x8E\xED\xB8\x9C\xBB\x70\x15\x98\x14\xB3\x91\xAD\x4D\xA2\xA2\x20\xBF\xA5\xBD\xCA\x67\xB7\x5D\x83\x87\x72\x9B\x03\x3C\x99\x76\xFC\xBF\xAD\x17\xBF\x93\xA9\xC2\x9E\x92\x71\xAE\x7E\xBD\x82\x92\xBB\x37\x55\xA0\xA6\x66\xC5\x23\xC3\xF6\x84\xC2\x8C\xBE\xAB\xC1\xD1\x75\x0E\x29\xD1\x70\x48\xA2\x03\x4E\xA4\x4C\x9A\xCB\xBF\x01\x74\x38\x0E\x87\x70\x65\x51\x2A\xCD\x8F\x30\x72\x24\x86\x6C\x9E\x2C", + "\x30\x11\x00\x00\xB1\x06\x00\x00\x4A\x00\x01\x82\x80\x00\x81\x80\x1E\x29\x65\x73\x2F\x35\x32\x3B\x31\x33\x26\x65\x74\x21\x24\x31\x32\x88\x10\x27\x61\x6D\x25\x3D\x12\x12\x10\x10\x2B\x65\x72\x33\x29\x3F\x36\x34\x8F\x18\x2E\x30\x22\x1E\x1C\x1C\x21\x32\x38\x65\x6E\x24\x31\x93\x31\x35\x85\x17\x2C\xAF\x08\x8A\x8C\x86\x84\x88\x89\x14\x92\xBE\x05\x03\x82\x80\x05\xA2\x01\xC7\x81\x89\x2E\x33\x3A\x88\x37\x0E\x8D\x08\xA0\x02\xAB\xA5\xA7\xA7\x0E\xD3\x34\x39\x3C\x35\x33\x01\xA9\x5F\x81\x84\x2F\x33\x34\x03\xA8\xB3\x01\xD4\x25\x38\x34\x3F\x07\xA8\xB7\x01\xC3\x2C\x21\x33\x3B\x38\x8C\x8D\x08\xE3\x2F\x32\x34\x33\xA8\x01\xB0\x45\xCA\x81\xC2\x84\x21\x32\x39\x35\x53\x6B\x29\x2E\x3E\xBE\xBE\x05\xA9\x06\x10\xC2\x82\x25\x3C\x38\x3B\x92\x8D\x99\xC3\xC8\xA2\xC3\xB3\x31\x3A\x1A\xEE\x34\x3E\xB1\x03\xAA\x01\xA9\x10\x28\xD3\xD4\xB5\x34\x37\xC5\x32\x9E\xA0\xF1\x94\x3E\x5B\xA9\xDA\x83\x9E\xAC\x83\x25\x94\x3B\xD8\x9C\x1E\x5A\xDC\x89\x8C\x91\xE5\xAC\x10\x37\x19\x9B\xA2\x03\x1E\x96\x31\x31\x3A\x6C\x74\x2D\x0F\x26\x39\x92\x39\x34\x33\xAB\xBC\x1A\xBC\x33\xBE\x1F\x11\x46\x61\xE2\xFC\x1F\x14\xEE\xEE\xF2\xC5\xE5\x04\xFB\xA6\xE0\xE6\x8C\x8E\x23\x53\x2D\xC5\x33\x34\x38\x92\x37\xD3\xD5\xF2\x37\xE9\xEC\x96\xF2\x39\xDF\x62\x73\x79\x79\x6F\x1D\x70\x80\x0F\x62\x2B\x1F\x7F\x77\x30\x30\x07\x0D\x10\x43\x03\x14\x79\x82\x0B\xA8\x7C\x7A\x7A\x16\x82\x73\x1D\x4E\xB9\x7E\x58\x59\x51\x1F\x8C\x19\x1A\x53\x9A\x65\x80\x03\x87\x03\x5F\x8D\x13\x88\x63\x26\x8A\x65\x64\x48\x70\x80\x02\x14\x69\x22\x12\x18\x66\x2E\x8D\x62\x8F\x40\x32\x93\x13\x1A\x1C\x05\xAC\x19\x8D\x63\x80\x43\x40\x60\x15\x61\x22\x13\x92\x5F\x07\x13\x5D\x91\x5A\x6B\x74\x12\x13\x1B\x78\x0B\x93\x55\x02\x57\x82\x44\x17\x1B\x05\x8E\x57\x74\x1C\x56\xB1\x82\x65\x40\x57\x0B\x64\x1B\x1B\x77\x21\x95\x50\x03\x53\x6C\x91\x43\x11\x61\x23\x17\x11\x4C\xBB\x6E\x16\x19\x1A\x67\x03\x95\x68\x52\x45\x82\x40\x63\x10\x70\x20\x93\x54\x51\x7C\x93\x55\x55\x51\x87\x80\xA0\x1F\x6E\x6D\x30\x12\x1D\x42\x73\x25\x14\x18\x05\x53\x54\xA2\x5A\x61\x88\x4A\x6E\x1B\x4E\x0B\x4D\x45\x1A\x0B\x63\x01\xAD\x9D\x40\x28\x82\x4F\x87\x5D\x65\x02\x63\x41\x67\x98\x89\x6B\x63\xA8\x54\x46\xA2\x42\x13\x7B\x6D\x11\x18\x1B\x4C\x63\x1C\x19\x1D\x33\x69\x68\x52\xAF\x00\x2E\x0E\x0B\x0B\xC2\x84\xB3\xB0\x9C\x63\x15\x19\x12\x0B\x68\x30\xA1\x07\x54\xCF\x81\x48\x42\x19\x5D\x75\x77\x7D\xAE\xBB\xB3\x49\x0F\x54\xDB\x81\x45\xB3\xB7\xC3\x93\xB5\xB6\x7D\x25\x6F\x04\x15\x1E\x30\x6E\x43\x1F\x8F\x69\x30\x17\x66\x48\x2F\x07\x15\x1D\x1A\xE2\xB4\x74\xBA\x1B\x50\x3B\xA7\x1B\x62\xCC\xB0\xAE\x9B\x9A\x02\x53\x1D\xA6\x43\x46\x05\x83\x4E\x1C\x3B\x82\x4D\x8F\xC0\x65\x3E\x5B\x03\x54\x0F\xC1\x40\x17\xA3\x7A\x4D\xA9\x19\x57\x7D\x53\x5B\x9C\x88\x6F\x5D\xC1\x5F\x5C\x75\x68\xA9\x5F\x5E\x64\x04\x1E\xC5\x51\x70\x40\x04\x47\x61\x73\x1A\xAA\x0E\x0E\x54\x28\x15\x1A\x46\x18\x13\x55\xCD\x40\x2B\xEB\x1D\xCB\x62\x2F\xD4\x66\x65\x49\x6A\x4D\xA3\x5D\x6F\x1A\x13\x55\xD0\xCE\x98\xBB\xCE\x1B\xCB\x43\x32\xC3\x1B\x1A\x53\xB8\x11\xD0\x1C\x43\xE5\x1D\x07\x54\x57\xC8\xDC\xCA\xCB\x3A\x12\x13\x44\x49\x3E\xD7\x6E\x1B\xD4\x55\xDF\x03\x56\xD9\x5A\xFA\xCC\xD5\x6C\xA1\x74\x1C\x11\x92\xAD\x64\xD5\x45\x19\x21\x13\x55\xDD\xDA\x4A\xEF\xCC\xDB\x6C\x6A\x6C\x51\xD6\xDC\xBD\x60\x03\x56\xE0\x78\xEB\xD4\x5A\x6C\xA2\x56\x16\x4F\x1D\x21\x40\xE5\x19\x09\x53\x50\xE5\xE0\xCF\x3A\x0D\xD4\x7F\x1A\x49\x3D\x6D\x1A\x10\x71\xAB\x17\x18\x90\x75\x32\x4E\xE3\xD1\x45\x64\xE9\xCD\xDE\x95\xEF\x1D\x1B\x8D\x7F\xF3\xC4\xD7\xDC\x24\x13\x51\xEF\xE4\x4B\xFA\x05\x10\x1E\x70\x21\x12\x4F\x62\x67\x2E\x4A\x5E\x1C\x15\x7B\x5E\xE0\xE1\x45\x44\xF7\xE8\xD7\x99\xF3\xCC\xE7\xD3\x9F\xCB\x42\xEA\xEB\x55\xE6\x03\x56\xF4\xB4\xEF\xC2\x8A\x53\x8A\xE5\x17\x1F\x6E\xBB\xAD\x1E\x18\x12\x65\x13\x4D\xE0\xF4\x73\xE4\xE3\x42\xE9\x49\xDC\xD7\xF4\x1D\xD9\xF7\x13\xEA\xD1\x02\x47\xF4\xE5\xDF\x6E\xE3\x84\x1F\xFB\x48\x68\xFB\xD7\xFC\x8F\xA5\x1D\xFA\xE3\x1C\x13\x29\x00\xD5\x7A\x07\xC2\x3D\x30\x0A\x69\x0F\x6B\xF8\x42\x65\x7C\xF8\x44\x87\x08\xA0\x70\x0D\xEB\x0C\x8D\x37\x0B\x13\x2E\x82\x04\x8F\x6E\x18\x71\x64\x7D\xDE\x19\x6D\x28\x1F\x92\x7D\xED\x53\x08\x0D\xBD\x34\x0F\x33\x74\x0B\x09\x19\x79\x0E\x70\x11\x13\x2E\x85\x04\x94\x46\x8D\x25\x23\x0A\xAA\x69\x0C\x0E\x41\x1B\x3C\x9A\x0E\x78\x6D\xA2\x3D\x82", + "\x84\x2F\x72\x87\x8D\x6E\x01\x6D\x92\x33\x0E\x71\x2D\x13\x29\x12\xB1\x85\x47\x21\xB0\x4C\x0D\x5D\x32\x0D\x1E\x44\x00\x48\x38\x27\x4F\x0E\x44\x95\x32\xD8\x0E\x77\x05\xA9\x1D\x8C\x89\x33\x8E\x0F\x13\xD1\x89\x0F\xE4\x6D\x0B\x7D\x3C\x87\x6D\xFC\x69\x74\x72\x21\xA5\x23\x8C\x21\x2C\x85\x07\xE5\x09\x05\xA9\x35\x88\x8C\x4E\x91\x83\xED\x39\x72\x27\x22\xA3\x6B\x8E\x77\x65\x29\x20\xC0\x8D\x6B\x26\xAF\x89\x82\x10\x2E\x0D\x1D\x0E\x7F\x83\x81\x21\x84\x8D\xB5\x6E\x8E\x18\x91\x8E\x71\x40\x83\x23\x90\x90\x81\x8A\x21\xEE\x09\x08\xBD\x2E\x0A\x83\x1C\x94\x81\x19\x23\x03\x2A\x52\xB8\x8D\x24\x6F\x72\x0F\x19\x65\x0E\x8E\xC7\x6B\x03\x2A\xAF\x87\x97\x27\x86\x3B\x94\x2A\xAF\x0E\x8A\x68\x59\x8B\xCF\x7F\x82\x94\x14\x13\x2E\x97\xB2\x89\x97\x2A\xB5\x8E\x34\x29\x5A\x88\x68\x73\x86\x95\x51\x4A\x94\x90\x49\x93\x0E\x56\x50\x8D\x97\x1C\xB1\x95\x28\x6A\x8D\x9B\x93\xCF\x97\x54\x1B\x36\x98\x96\x2C\x92\x9A\x94\xD4\x65\x29\x38\xD7\x91\x8D\x6C\x90\x8D\x93\xA8\x90\x6C\x1B\x0E\x70\x99\xA2\x2D\x9C\x9C\x43\x86\x9C\x1B\x44\x97\x87\x6F\xAF\x75\x37\x5F\x85\x29\x3E\xF0\x90\x68\x2E\x6C\x0E\x4B\xED\x40\x7E\xF8\x72\x0E\x70\xC9\x45\x2E\xA0\xFC\x83\x6E\x3F\x80\xA0\x0F\x44\x8B\x93\x8E\x30\x85\x29\x44\x89\xAB\x4B\x2E\x74\x0F\x4B\x47\x93\x8F\xEC\x45\x2B\xA2\x42\x93\x4F\x67\x6D\x1E\x44\x90\x51\x97\x98\x5E\xB7\x9D\x0C\x3D\x83\x23\x0F\x99\x9A\x06\x24\x22\xA1\x48\x48\x1A\x74\x19\x5D\x2E\x71\x0C\x13\x2E\xA6\x04\x8E\xA7\x8F\x41\x48\x7F\xD2\x6B\x8B\x7F\xB5\x68\x08\x15\x40\x7A\x80\x82\x90\xA7\x85\x3F\xAA\x6C\xE5\x4C\x05\x0C\x33\x34\x0F\xA5\x24\xBB\x94\x23\xD8\x69\xA8\xD4\x53\x67\x0D\x9F\x70\x50\xE7\x46\xA2\x94\x65\x83\x24\x99\x2C\xB4\x47\x19\x68\x0F\xA9\x9D\x91\xAB\x8B\x73\x83\x81\x51\x6A\xA4\x90\xA8\xAC\x0F\x7F\x80\x96\x6D\x55\xDC\x6B\x4A\x38\x2E\xAE\x9E\x65\x6A\x8C\x01\xD6\x0E\xAD\x98\xB2\x24\xA6\x73\x98\xA5\x51\x02\xB4\x90\xBE\xA6\xAB\x9D\x73\x86\x7E\x40\x7A\x7A\xA9\xDA\x56\x0B\xA8\x9D\x6B\x83\x49\x96\x92\x20\x4C\x80\xAF\x65\x48\x42\x0E\x40\x87\x68\xAF\xB9\x5B\x03\x2A\x9F\xA4\x81\x66\x9B\xB2\xB3\xAA\x55\x03\x2A\xA7\xA2\xB5\x92\x2D\x88\xA8\x02\x8D\x08\x3A\xF6\x2E\x36\x1B\x65\x04\x7F\x09\xA7\xA6\xAB\x02\x20\xAF\x65\xBA\x03\x0A\xDE\x5D\x2A\xB6\xB4\xB1\x4A\x6D\xF9\xA8\x29\x95\xBB\xB6\xA1\x5B\xBD\xB1\xE0\x03\x73\xAE\xCA\x4E\xA6\x8C\xCA\xA5\x0E\x07\x53\x23\xBA\xD7\xB1\x25\x0E\xF4\x96\x31\x69\xF3\x66\xA1\x81\x08\xA4\xA5\x15\xBF\x9F\x45\xED\x59\xBB\x1C\x80\x4E\x7D\x71\xA8\x2A\x65\x8D\xB8\xB3\x85\xA3\xBA\x82\x25\xAE\x73\x1D\xC5\x23\xBE\x42\xA1\xBC\xA1\xDC\x97\x8A\x2E\xE8\xA2\x95\x94\x82\x26\xB8\xEC\xB0\x66\x7B\xDF\x4E\xA0\xC7\x61\x9B\x20\xE3\x80\xBF\x80\xE4\xB6\x86\x63\x92\xA9\x99\xA5\x8D\xB9\xED\x77\xBF\xBD\xEC\xBD\x34\xAB\x27\xA1\xB5\x51\x1A\xC6\xBF\x05\xF0\x09\x8D\xC5\xB2\xC0\xD3\x75\x0E\x28\xD5\x75\x4F\xA2\x05\x55\xA7\x4D\xA2\xC2\xC1\x02\x76\x3F\xC3\x73\x97\x65\x51\x32\xC4\x91\x32\x72\x23\x87\x73\x9E\x2C", }; class DarkSkinResourceLoaderPlugin : public Object, public IGuiPlugin diff --git a/Import/Vlpp.h b/Import/Vlpp.h index ed46dda3..3a7a8a0a 100644 --- a/Import/Vlpp.h +++ b/Import/Vlpp.h @@ -15683,7 +15683,7 @@ Collection Wrappers } }; -#define WRAPPER_POINTER ValueEnumerableWrapper::wrapperPointer +#define WRAPPER_POINTER this->wrapperPointer template class ValueReadonlyListWrapper : public ValueEnumerableWrapper, public virtual IValueReadonlyList @@ -15771,6 +15771,99 @@ Collection Wrappers } }; + template + class ValueListWrapper*> : public ValueReadonlyListWrapper*>, public virtual IValueList + { + protected: + typedef collections::Array ContainerType; + typedef T ElementType; + typedef K ElementKeyType; + + public: + ValueListWrapper(collections::Array* _wrapperPointer) + :ValueReadonlyListWrapper*>(_wrapperPointer) + { + } + + void Set(vint index, const Value& value)override + { + ElementType item = UnboxValue(value); + WRAPPER_POINTER->Set(index, item); + } + + vint Add(const Value& value)override + { + throw Exception(L"Array doesn't have Add method."); + } + + vint Insert(vint index, const Value& value)override + { + throw Exception(L"Array doesn't have Insert method."); + } + + bool Remove(const Value& value)override + { + throw Exception(L"Array doesn't have Remove method."); + } + + bool RemoveAt(vint index)override + { + throw Exception(L"Array doesn't have RemoveAt method."); + } + + void Clear()override + { + throw Exception(L"Array doesn't have Clear method."); + } + }; + + template + class ValueListWrapper*> : public ValueReadonlyListWrapper*>, public virtual IValueList + { + protected: + typedef collections::SortedList ContainerType; + typedef T ElementType; + typedef K ElementKeyType; + + public: + ValueListWrapper(collections::SortedList* _wrapperPointer) + :ValueReadonlyListWrapper*>(_wrapperPointer) + { + } + + void Set(vint index, const Value& value)override + { + throw Exception(L"SortedList doesn't have Set method."); + } + + vint Add(const Value& value)override + { + ElementType item = UnboxValue(value); + return WRAPPER_POINTER->Add(item); + } + + vint Insert(vint index, const Value& value)override + { + throw Exception(L"SortedList doesn't have Insert method."); + } + + bool Remove(const Value& value)override + { + ElementKeyType item = UnboxValue(value); + return WRAPPER_POINTER->Remove(item); + } + + bool RemoveAt(vint index)override + { + return WRAPPER_POINTER->RemoveAt(index); + } + + void Clear()override + { + WRAPPER_POINTER->Clear(); + } + }; + template class ValueObservableListWrapper : public ValueListWrapper, public virtual IValueObservableList { diff --git a/Tools/GacBuild.ps1 b/Tools/GacBuild.ps1 index 86098179..e218c881 100644 --- a/Tools/GacBuild.ps1 +++ b/Tools/GacBuild.ps1 @@ -29,9 +29,24 @@ you should add the following metadata in GacGenConfig like this: - ... - ... - ... + + The output path for unscripted binary resource. Use GetResourceManager()->LoadResourceOrPending to load the resource. + The output path for unscripted compressed binary resource. Call DecompressStream before loading the resource. + The output path for unscripted binary resource embedded in C++ code. Just add this cpp file to your project and it just works. + The output path for unscripted binary resource embedded in C++ code. Just add this cpp file to your project and it just works. + #include targets in generated C++ files, seperated by semicolon. + #include targets in generated C++ files when you turn on reflection, seperated by semicolon. + General file name for generated C++ files without extension. + The output folder for all generated C++ files. + + + The output path for scripted binary resource. Use GetResourceManager()->LoadResourceOrPending with GuiResourceUsage::InstanceClass to load the resource. + The output path for scripted compressed binary resource. Use GetResourceManager()->LoadResourceOrPending to load the resource. + Generated Workflow script, which is equivalent to generated C++ code. All assemblies are included in scripted binary resources, but if you want to load unscripted binary resources and assemblies separately, you will need this file. + + + + ... @@ -58,8 +73,8 @@ try { $FileName = (Resolve-Path -Path $FileName).Path if (Test-Path -Path "$($FileName).log") { Remove-Item -Path "$($FileName).log" -Recurse | Out-Null - New-Item -ItemType Directory "$($FileName).log" | Out-Null } + New-Item -ItemType Directory "$($FileName).log" | Out-Null EnumerateResourceFiles $FileName if (-not (Test-Path -Path "$($FileName).log\ResourceFiles.txt")) { diff --git a/Tools/GacClear.ps1 b/Tools/GacClear.ps1 index 217c0ad7..f44f4555 100644 --- a/Tools/GacClear.ps1 +++ b/Tools/GacClear.ps1 @@ -22,8 +22,8 @@ try { $FileName = (Resolve-Path -Path $FileName).Path if (Test-Path -Path "$($FileName).log") { Remove-Item -Path "$($FileName).log" -Recurse | Out-Null - New-Item -ItemType Directory "$($FileName).log" | Out-Null } + New-Item -ItemType Directory "$($FileName).log" | Out-Null EnumerateResourceFiles $FileName if (-not (Test-Path -Path "$($FileName).log\ResourceFiles.txt")) { diff --git a/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin b/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin index 84970315..04fb8a58 100644 Binary files a/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin and b/Tutorial/GacUI_ControlTemplate/UIRes/BlackSkin.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/AddressBook.bin b/Tutorial/GacUI_Controls/UIRes/AddressBook.bin index 60a346ff..91f54657 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/AddressBook.bin and b/Tutorial/GacUI_Controls/UIRes/AddressBook.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/Animation.bin b/Tutorial/GacUI_Controls/UIRes/Animation.bin index 2aae218e..91dd1f77 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/Animation.bin and b/Tutorial/GacUI_Controls/UIRes/Animation.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/CalculatorAndStateMachine.bin b/Tutorial/GacUI_Controls/UIRes/CalculatorAndStateMachine.bin index bba8a929..50aeb1ba 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/CalculatorAndStateMachine.bin and b/Tutorial/GacUI_Controls/UIRes/CalculatorAndStateMachine.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/ColorPicker.bin b/Tutorial/GacUI_Controls/UIRes/ColorPicker.bin index d2d1c645..400391f2 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/ColorPicker.bin and b/Tutorial/GacUI_Controls/UIRes/ColorPicker.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/ContainersAndButtons.bin b/Tutorial/GacUI_Controls/UIRes/ContainersAndButtons.bin index c146a0c6..42833531 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/ContainersAndButtons.bin and b/Tutorial/GacUI_Controls/UIRes/ContainersAndButtons.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/DataGrid.bin b/Tutorial/GacUI_Controls/UIRes/DataGrid.bin index 18425ede..5fd89e2c 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/DataGrid.bin and b/Tutorial/GacUI_Controls/UIRes/DataGrid.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/DocumentEditor.bin b/Tutorial/GacUI_Controls/UIRes/DocumentEditor.bin index cdd01147..b3973275 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/DocumentEditor.bin and b/Tutorial/GacUI_Controls/UIRes/DocumentEditor.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/DocumentEditorRibbon.bin b/Tutorial/GacUI_Controls/UIRes/DocumentEditorRibbon.bin index 44632320..888a00d1 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/DocumentEditorRibbon.bin and b/Tutorial/GacUI_Controls/UIRes/DocumentEditorRibbon.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/DocumentEditorToolstrip.bin b/Tutorial/GacUI_Controls/UIRes/DocumentEditorToolstrip.bin index 83fec0ab..cb82986a 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/DocumentEditorToolstrip.bin and b/Tutorial/GacUI_Controls/UIRes/DocumentEditorToolstrip.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/ListControls.bin b/Tutorial/GacUI_Controls/UIRes/ListControls.bin index 468de135..e1f6b015 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/ListControls.bin and b/Tutorial/GacUI_Controls/UIRes/ListControls.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/Localization.bin b/Tutorial/GacUI_Controls/UIRes/Localization.bin index f6c79908..8a414373 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/Localization.bin and b/Tutorial/GacUI_Controls/UIRes/Localization.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/MenuVisibility.bin b/Tutorial/GacUI_Controls/UIRes/MenuVisibility.bin index 66fefd93..2f197b3b 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/MenuVisibility.bin and b/Tutorial/GacUI_Controls/UIRes/MenuVisibility.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/ProgressAndAsync.bin b/Tutorial/GacUI_Controls/UIRes/ProgressAndAsync.bin index 528e887e..eca744f1 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/ProgressAndAsync.bin and b/Tutorial/GacUI_Controls/UIRes/ProgressAndAsync.bin differ diff --git a/Tutorial/GacUI_Controls/UIRes/TextEditor.bin b/Tutorial/GacUI_Controls/UIRes/TextEditor.bin index c6f7834c..d4cf304b 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/TextEditor.bin and b/Tutorial/GacUI_Controls/UIRes/TextEditor.bin differ diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/CppXml.bin b/Tutorial/GacUI_HelloWorlds/UIRes/CppXml.bin index b8e87f18..980dc5b0 100644 Binary files a/Tutorial/GacUI_HelloWorlds/UIRes/CppXml.bin and b/Tutorial/GacUI_HelloWorlds/UIRes/CppXml.bin differ diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/MVVM.bin b/Tutorial/GacUI_HelloWorlds/UIRes/MVVM.bin index b47af66e..70d39183 100644 Binary files a/Tutorial/GacUI_HelloWorlds/UIRes/MVVM.bin and b/Tutorial/GacUI_HelloWorlds/UIRes/MVVM.bin differ diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 index a39a1774..65253ed6 100644 Binary files a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 and b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 differ diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 index 16c8a764..6a4d7c03 100644 Binary files a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 and b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 differ diff --git a/Tutorial/GacUI_Layout/UIRes/Alignment.bin b/Tutorial/GacUI_Layout/UIRes/Alignment.bin index 24dda70f..6c814225 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/Alignment.bin and b/Tutorial/GacUI_Layout/UIRes/Alignment.bin differ diff --git a/Tutorial/GacUI_Layout/UIRes/Flow.bin b/Tutorial/GacUI_Layout/UIRes/Flow.bin index aa65a757..db652691 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/Flow.bin and b/Tutorial/GacUI_Layout/UIRes/Flow.bin differ diff --git a/Tutorial/GacUI_Layout/UIRes/Responsive1.bin b/Tutorial/GacUI_Layout/UIRes/Responsive1.bin index 9667b0d7..3c057b20 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/Responsive1.bin and b/Tutorial/GacUI_Layout/UIRes/Responsive1.bin differ diff --git a/Tutorial/GacUI_Layout/UIRes/Responsive2.bin b/Tutorial/GacUI_Layout/UIRes/Responsive2.bin index 083d6f34..b03a950b 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/Responsive2.bin and b/Tutorial/GacUI_Layout/UIRes/Responsive2.bin differ diff --git a/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin b/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin index 757807e7..7a6ce9fe 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin and b/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin differ diff --git a/Tutorial/GacUI_Layout/UIRes/Stack.bin b/Tutorial/GacUI_Layout/UIRes/Stack.bin index a4856292..bc17b84c 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/Stack.bin and b/Tutorial/GacUI_Layout/UIRes/Stack.bin differ diff --git a/Tutorial/GacUI_Layout/UIRes/Table.bin b/Tutorial/GacUI_Layout/UIRes/Table.bin index 77bc6891..d4e6617f 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/Table.bin and b/Tutorial/GacUI_Layout/UIRes/Table.bin differ diff --git a/Tutorial/GacUI_Layout/UIRes/TableSplitter.bin b/Tutorial/GacUI_Layout/UIRes/TableSplitter.bin index 7ac5f2b3..4449bb93 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/TableSplitter.bin and b/Tutorial/GacUI_Layout/UIRes/TableSplitter.bin differ diff --git a/Tutorial/GacUI_Windows/UIRes/Direct2DClock.bin b/Tutorial/GacUI_Windows/UIRes/Direct2DClock.bin index ee08c41e..dc34d276 100644 Binary files a/Tutorial/GacUI_Windows/UIRes/Direct2DClock.bin and b/Tutorial/GacUI_Windows/UIRes/Direct2DClock.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Binding_Bind.bin b/Tutorial/GacUI_Xml/UIRes/Binding_Bind.bin index dccc47ec..9ef6652b 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Binding_Bind.bin and b/Tutorial/GacUI_Xml/UIRes/Binding_Bind.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Binding_Eval.bin b/Tutorial/GacUI_Xml/UIRes/Binding_Eval.bin index 8ec5c9c6..660e28a5 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Binding_Eval.bin and b/Tutorial/GacUI_Xml/UIRes/Binding_Eval.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Binding_Format.bin b/Tutorial/GacUI_Xml/UIRes/Binding_Format.bin index ebb99cd4..8d527f68 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Binding_Format.bin and b/Tutorial/GacUI_Xml/UIRes/Binding_Format.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Binding_Uri.bin b/Tutorial/GacUI_Xml/UIRes/Binding_Uri.bin index d947def2..057cc162 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Binding_Uri.bin and b/Tutorial/GacUI_Xml/UIRes/Binding_Uri.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Binding_ViewModel.bin b/Tutorial/GacUI_Xml/UIRes/Binding_ViewModel.bin index ce7c3b23..59cf1847 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Binding_ViewModel.bin and b/Tutorial/GacUI_Xml/UIRes/Binding_ViewModel.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Event_Cpp.bin b/Tutorial/GacUI_Xml/UIRes/Event_Cpp.bin index 7e23483b..abde709a 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Event_Cpp.bin and b/Tutorial/GacUI_Xml/UIRes/Event_Cpp.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Event_Script.bin b/Tutorial/GacUI_Xml/UIRes/Event_Script.bin index 2e2466e7..47a93b20 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Event_Script.bin and b/Tutorial/GacUI_Xml/UIRes/Event_Script.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Event_ViewModel.bin b/Tutorial/GacUI_Xml/UIRes/Event_ViewModel.bin index c7178a1d..20ad998b 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Event_ViewModel.bin and b/Tutorial/GacUI_Xml/UIRes/Event_ViewModel.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Instance_Control.bin b/Tutorial/GacUI_Xml/UIRes/Instance_Control.bin index 47bd9a87..3d72823c 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Instance_Control.bin and b/Tutorial/GacUI_Xml/UIRes/Instance_Control.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Instance_MultipleWindows.bin b/Tutorial/GacUI_Xml/UIRes/Instance_MultipleWindows.bin index 3178d6d0..289ee9be 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Instance_MultipleWindows.bin and b/Tutorial/GacUI_Xml/UIRes/Instance_MultipleWindows.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Instance_Window.bin b/Tutorial/GacUI_Xml/UIRes/Instance_Window.bin index 82e9f901..25789c4f 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Instance_Window.bin and b/Tutorial/GacUI_Xml/UIRes/Instance_Window.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Member_Field.bin b/Tutorial/GacUI_Xml/UIRes/Member_Field.bin index 015eb177..970a95ce 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Member_Field.bin and b/Tutorial/GacUI_Xml/UIRes/Member_Field.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Member_Parameter.bin b/Tutorial/GacUI_Xml/UIRes/Member_Parameter.bin index 56a9f418..a4c64544 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Member_Parameter.bin and b/Tutorial/GacUI_Xml/UIRes/Member_Parameter.bin differ diff --git a/Tutorial/GacUI_Xml/UIRes/Member_Property.bin b/Tutorial/GacUI_Xml/UIRes/Member_Property.bin index d4799da0..a784df15 100644 Binary files a/Tutorial/GacUI_Xml/UIRes/Member_Property.bin and b/Tutorial/GacUI_Xml/UIRes/Member_Property.bin differ