diff --git a/Import/GacUIReflection.cpp b/Import/GacUIReflection.cpp index 6c53f251..311ff8e7 100644 --- a/Import/GacUIReflection.cpp +++ b/Import/GacUIReflection.cpp @@ -64,7 +64,7 @@ Compiled Workflow Type Resolver (Workflow) vint GetMaxPassIndex()override { - return 2; + return 1; } void Initialize(Ptr resource, GuiResourceInitializeContext& context)override @@ -74,15 +74,6 @@ Compiled Workflow Type Resolver (Workflow) switch (context.passIndex) { case 0: - if (compiled->type == GuiInstanceCompiledWorkflow::Shared) - { - if (context.usage == GuiResourceUsage::InstanceClass) - { - compiled->Initialize(true); - } - } - break; - case 1: if (compiled->type == GuiInstanceCompiledWorkflow::InstanceClass) { if (context.usage == GuiResourceUsage::InstanceClass) @@ -114,7 +105,7 @@ Compiled Workflow Type Resolver (Workflow) vint type = (vint)obj->type; writer << type; - if (obj->type != GuiInstanceCompiledWorkflow::TemporaryClass) + if (obj->type == GuiInstanceCompiledWorkflow::InstanceClass) { MemoryStream memoryStream; obj->assembly->Serialize(memoryStream); @@ -132,7 +123,7 @@ Compiled Workflow Type Resolver (Workflow) auto obj = MakePtr(); obj->type = (GuiInstanceCompiledWorkflow::AssemblyType)type; - if (obj->type != GuiInstanceCompiledWorkflow::TemporaryClass) + if (obj->type == GuiInstanceCompiledWorkflow::InstanceClass) { auto memoryStream = MakePtr(); reader << (IStream&)*memoryStream.Obj(); diff --git a/Import/GacUIReflection.h b/Import/GacUIReflection.h index e7c059d8..bf58680e 100644 --- a/Import/GacUIReflection.h +++ b/Import/GacUIReflection.h @@ -2110,7 +2110,7 @@ GuiEventInfoImpl ***********************************************************************/ template - class GuiEventInfoImpl : public EventInfoImpl + class GuiEventInfoImpl : public EventInfoImpl, private IEventInfo::ICpp { using GuiGraphicsComposition = presentation::compositions::GuiGraphicsComposition; @@ -2163,10 +2163,18 @@ GuiEventInfoImpl return TypeInfoRetriver>::CreateTypeInfo(); } + protected: + bool isCompositionEvent; + + static WString attachTemplate; + static WString detachTemplate; + static WString invokeTemplate; + public: - GuiEventInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, const EventRetriverFunction& _eventRetriver) + GuiEventInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, const EventRetriverFunction& _eventRetriver, bool _isCompositionEvent) :EventInfoImpl(_ownerTypeDescriptor, _name) , eventRetriver(_eventRetriver) + , isCompositionEvent(_isCompositionEvent) { } @@ -2176,10 +2184,32 @@ GuiEventInfoImpl ICpp* GetCpp()override { - return nullptr; + return isCompositionEvent ? this : nullptr; + } + + const WString& GetAttachTemplate()override + { + return attachTemplate; + } + + const WString& GetDetachTemplate()override + { + return detachTemplate; + } + + const WString& GetInvokeTemplate()override + { + return invokeTemplate; } }; + template + WString GuiEventInfoImpl::attachTemplate(L"::vl::__vwsn::EventAttach($This->GetEventReceiver()->$Name, $Handler)", false); + template + WString GuiEventInfoImpl::detachTemplate(L"::vl::__vwsn::EventDetach($This->GetEventReceiver()->$Name, $Handler)", false); + template + WString GuiEventInfoImpl::invokeTemplate(L"::vl::__vwsn::EventInvoke($This->GetEventReceiver()->$Name, $Handler)", false); + template struct GuiEventArgumentTypeRetriver { @@ -2203,7 +2233,8 @@ Macros L ## #EVENTNAME,\ [](DescriptableObject* thisObject, bool addEventHandler){\ return &thisObject->SafeAggregationCast()->EVENTNAME;\ - }\ + },\ + false\ )\ );\ @@ -2219,7 +2250,8 @@ Macros return (GuiGraphicsEvent::Type>*)0;\ }\ return &composition->GetEventReceiver()->EVENTNAME;\ - }\ + },\ + true\ )\ );\ diff --git a/Import/Vlpp.h b/Import/Vlpp.h index 49ac0fba..7b89718c 100644 --- a/Import/Vlpp.h +++ b/Import/Vlpp.h @@ -8947,7 +8947,7 @@ ITypeDescriptor (type) List, SortedList, Dictionary, - Unknown, + NativeCollectionReference, }; class ITypeInfo : public virtual IDescriptable, public Description @@ -11832,64 +11832,6 @@ TypeFlagTester static const TypeFlags Result=sizeof(Inherit(((ValueRetriver*)0)->pointer))==sizeof(void*)?TypeFlags::DictionaryType:TypeFlags::NonGenericType; }; -/*********************************************************************** -TypeHintTester -***********************************************************************/ - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeInfoHint::Normal; - }; - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeHintTester::Result; - }; - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeHintTester::Result; - }; - - template - struct TypeHintTester - { - static const TypeInfoHint Result = TypeHintTester::Result; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::LazyList; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::Array; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::List; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::SortedList; - }; - - template - struct TypeHintTester> - { - static const TypeInfoHint Result = TypeInfoHint::Dictionary; - }; - /*********************************************************************** TypeFlagSelector ***********************************************************************/ @@ -11959,6 +11901,85 @@ TypeFlagSelector >::Result; }; +/*********************************************************************** +TypeHintTester +***********************************************************************/ + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeInfoHint::Normal; + }; + + template + struct TypeHintTesterForReference + { + static const TypeInfoHint Result = TypeInfoHint::NativeCollectionReference; + }; + + template<> + struct TypeHintTesterForReference + { + static const TypeInfoHint Result = TypeInfoHint::Normal; + }; + + template<> + struct TypeHintTesterForReference + { + static const TypeInfoHint Result = TypeInfoHint::Normal; + }; + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeHintTester::Result; + }; + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeHintTester::Result == TypeInfoHint::Normal + ? TypeHintTesterForReference::Result>::Result + : TypeHintTester::Result + ; + }; + + template + struct TypeHintTester + { + static const TypeInfoHint Result = TypeHintTester::Result; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::LazyList; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::Array; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::List; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::SortedList; + }; + + template + struct TypeHintTester> + { + static const TypeInfoHint Result = TypeInfoHint::Dictionary; + }; + /*********************************************************************** TypeInfoRetriver ***********************************************************************/ @@ -13310,6 +13331,15 @@ namespace vl return InSet(value, reflection::description::GetLazyList(collection)); } + template + Ptr UnboxCollection(U& value) + { + auto boxedValue = reflection::description::BoxParameter(value); + Ptr result; + reflection::description::UnboxParameter>(boxedValue, result); + return result; + } + struct CreateList { using IValueList = reflection::description::IValueList; diff --git a/Import/VlppWorkflowCompiler.cpp b/Import/VlppWorkflowCompiler.cpp index 47e28f42..8c99216e 100644 --- a/Import/VlppWorkflowCompiler.cpp +++ b/Import/VlppWorkflowCompiler.cpp @@ -5533,15 +5533,10 @@ ExpandBindExpression } { // stable symbol order by sorting them by code - Dictionary orderedObserves; + List orderedObserves; - FOREACH_INDEXER(WfExpression*, observe, observeIndex, dependency.dependencies.Keys()) + auto printExpression = [](WfExpression* observe) { - if (!observe) - { - continue; - } - stream::MemoryStream stream; { stream::StreamWriter writer(stream); @@ -5550,11 +5545,28 @@ ExpandBindExpression stream.SeekFromBegin(0); { stream::StreamReader reader(stream); - orderedObserves.Add(reader.ReadToEnd(), observe); + return reader.ReadToEnd(); } - } + }; - FOREACH_INDEXER(WfExpression*, observe, observeIndex, orderedObserves.Values()) + CopyFrom( + orderedObserves, + From(dependency.dependencies.Keys()) + .Where([](WfExpression* expr) + { + return expr != nullptr; + }) + .OrderBy([&](WfExpression* a, WfExpression* b) + { + auto codeA = printExpression(a); + auto codeB = printExpression(b); + auto compare = WString::Compare(codeA, codeB); + if (compare) return compare; + return a->codeRange.start.index - b->codeRange.start.index; + }) + ); + + FOREACH_INDEXER(WfExpression*, observe, observeIndex, orderedObserves) { List events; WfExpression* parent = 0; @@ -9623,15 +9635,7 @@ CreateTypeInfoFromType { if (scopeName->typeDescriptor) { - auto hint = TypeInfoHint::Normal; - if (scopeName->typeDescriptor == description::GetTypeDescriptor() || - scopeName->typeDescriptor == description::GetTypeDescriptor() || - scopeName->typeDescriptor == description::GetTypeDescriptor() || - scopeName->typeDescriptor == description::GetTypeDescriptor()) - { - hint = TypeInfoHint::Unknown; - } - result = MakePtr(scopeName->typeDescriptor, hint); + result = MakePtr(scopeName->typeDescriptor, TypeInfoHint::Normal); } else { @@ -11937,7 +11941,7 @@ ValidateSemantic(Expression) manager->errors.Add(WfErrors::RangeShouldBeInteger(node, elementType.Obj())); } - auto enumerableType = MakePtr(description::GetTypeDescriptor(), TypeInfoHint::Unknown); + auto enumerableType = MakePtr(description::GetTypeDescriptor(), TypeInfoHint::Normal); auto genericType = MakePtr(enumerableType); genericType->AddGenericArgument(elementType); @@ -12082,7 +12086,7 @@ ValidateSemantic(Expression) { if (keyType && valueType) { - auto classType = MakePtr(description::GetTypeDescriptor(), TypeInfoHint::Unknown); + auto classType = MakePtr(description::GetTypeDescriptor(), TypeInfoHint::Normal); auto genericType = MakePtr(classType); genericType->AddGenericArgument(keyType); genericType->AddGenericArgument(valueType); @@ -12095,7 +12099,7 @@ ValidateSemantic(Expression) { if (keyType) { - auto classType = MakePtr(description::GetTypeDescriptor(), TypeInfoHint::Unknown); + auto classType = MakePtr(description::GetTypeDescriptor(), TypeInfoHint::Normal); auto genericType = MakePtr(classType); genericType->AddGenericArgument(keyType); @@ -15716,6 +15720,13 @@ WfCollectClassMemberVisitor void Visit(WfConstructorDeclaration* node)override { + FOREACH(Ptr, call, node->baseConstructorCalls) + { + FOREACH(Ptr, argument, call->arguments) + { + CollectExpression(config, argument, memberOfClass); + } + } CollectStatement(config, node->statement, memberOfClass); } @@ -16484,18 +16495,19 @@ WfGenerateExpressionVisitor template void WriteReturnValue(ITypeInfo* type, const TReturnValue& returnValueCallback, bool castReturnValue) { - if (castReturnValue && IsCppRefGenericType(type)) + if (castReturnValue) { - writer.WriteString(L"[&](){ decltype(auto) __vwsn_temp__ = "); - returnValueCallback(); - writer.WriteString(L"; return ::vl::__vwsn::Unbox<"); - writer.WriteString(config->ConvertType(type)); - writer.WriteString(L">(::vl::reflection::description::BoxParameter(__vwsn_temp__)); }()"); - } - else - { - returnValueCallback(); + if (IsCppRefGenericType(type) || type->GetHint() == TypeInfoHint::NativeCollectionReference) + { + writer.WriteString(L"::vl::__vwsn::UnboxCollection<"); + writer.WriteString(config->ConvertType(type->GetTypeDescriptor())); + writer.WriteString(L">("); + returnValueCallback(); + writer.WriteString(L")"); + return; + } } + returnValueCallback(); } template @@ -16903,6 +16915,10 @@ WfGenerateExpressionVisitor void Visit(WfMemberExpression* node)override { + if (node->name.value == L"MyList") + { + int a = 0; + } auto result = config->manager->expressionResolvings[node]; auto parentResult = config->manager->expressionResolvings[node->parent.Obj()]; WriteReferenceTemplate(result, @@ -17451,12 +17467,16 @@ WfGenerateExpressionVisitor void Visit(WfIfExpression* node)override { + auto firstResult = config->manager->expressionResolvings[node->trueBranch.Obj()]; + auto secondResult = config->manager->expressionResolvings[node->falseBranch.Obj()]; + auto mergedType = GetMergedType(firstResult.type, secondResult.type); + writer.WriteString(L"("); Call(node->condition); writer.WriteString(L" ? "); - Call(node->trueBranch); + Call(node->trueBranch, mergedType.Obj()); writer.WriteString(L" : "); - Call(node->falseBranch); + Call(node->falseBranch, mergedType.Obj()); writer.WriteString(L")"); } @@ -18603,6 +18623,7 @@ MergeCppFile void ProcessCppContent(const WString& code, const TCallback& callback) { vint state = NORMAL; + vint counter = 0; StringReader reader(code); while (!reader.IsEnd()) @@ -18644,9 +18665,20 @@ MergeCppFile } break; case WAIT_CLOSE: - if (content == L"}") + if (content == L"{") { - state = NORMAL; + counter++; + } + else if (content == L"}") + { + if (counter == 0) + { + state = NORMAL; + } + else + { + counter--; + } } break; } diff --git a/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp index a3e471ee..d8e705bf 100644 --- a/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp +++ b/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoPartialClasses.cpp @@ -149,7 +149,7 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_6.Obj())->NotifyDataModified(); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_5.Obj())->Children().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_6)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_5.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_6)); } (::vl::__vwsn::This(this)->__vwsn_precompile_7 = ::vl::Ptr<::vl::presentation::controls::tree::MemoryNodeProvider>(new ::vl::presentation::controls::tree::MemoryNodeProvider(::vl::Ptr<::vl::presentation::controls::tree::TreeViewItem>(new ::vl::presentation::controls::tree::TreeViewItem())))); { @@ -157,10 +157,10 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_7.Obj())->NotifyDataModified(); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_5.Obj())->Children().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_7)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_5.Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_7)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_4)->Nodes().Obj())->Children().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_5)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_4)->Nodes().Obj())->Children()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_5)); } { ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_3.Obj())->GetContainer())->AddChild(::vl::__vwsn::Ensure(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_4)->GetBoundsComposition()))); @@ -195,7 +195,7 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_13)->SetText(::vl::WString(L"New", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_13)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_13)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -208,7 +208,7 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_14)->SetText(::vl::WString(L"Open", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_14)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_14)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -221,7 +221,7 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_15)->SetText(::vl::WString(L"Save", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_15)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_15)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -234,14 +234,14 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_16)->SetText(::vl::WString(L"Save As ...", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_16)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_16)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuSplitterStyle(); (::vl::__vwsn::This(this)->__vwsn_precompile_17 = new ::vl::presentation::controls::GuiControl(__vwsn_controlStyle_)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_17)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_17)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -254,10 +254,10 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_18)->SetText(::vl::WString(L"Exit", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_18)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_12)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_18)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_10)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_11)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_10)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_11)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuBarButtonStyle(); @@ -281,7 +281,7 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_21)->SetText(::vl::WString(L"Undo", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_21)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_21)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -294,14 +294,14 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_22)->SetText(::vl::WString(L"Redo", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_22)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_22)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuSplitterStyle(); (::vl::__vwsn::This(this)->__vwsn_precompile_23 = new ::vl::presentation::controls::GuiControl(__vwsn_controlStyle_)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_23)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_23)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -314,7 +314,7 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_24)->SetText(::vl::WString(L"Cut", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_24)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_24)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -327,7 +327,7 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_25)->SetText(::vl::WString(L"Copy", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_25)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_25)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -340,14 +340,14 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_26)->SetText(::vl::WString(L"Paste", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_26)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_26)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuSplitterStyle(); (::vl::__vwsn::This(this)->__vwsn_precompile_27 = new ::vl::presentation::controls::GuiControl(__vwsn_controlStyle_)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_27)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_27)); } { auto __vwsn_controlStyle_ = ::vl::__vwsn::This(::vl::presentation::theme::GetCurrentTheme())->CreateMenuItemButtonStyle(); @@ -360,10 +360,10 @@ namespace demo ::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_28)->SetText(::vl::WString(L"Select All", false)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_28)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_20)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_28)); } { - ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_10)->GetToolstripItems().Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_19)); + ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_10)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(::vl::__vwsn::This(this)->__vwsn_precompile_19)); } { ::vl::__vwsn::This(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_9.Obj())->GetContainer())->AddChild(::vl::__vwsn::Ensure(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(::vl::__vwsn::This(::vl::__vwsn::This(this)->__vwsn_precompile_10)->GetBoundsComposition()))); diff --git a/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin b/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin index fe2441ba..b990c647 100644 Binary files a/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin and b/Tutorial/GacUI_Layout/UIRes/RichTextEmbedding.bin differ