From 0e455b1541ba277aad9596f705ccdbbc5a4e1635 Mon Sep 17 00:00:00 2001
From: vczh
Date: Mon, 11 May 2026 00:59:21 -0700
Subject: [PATCH] Update release imports and tutorial build
---
Import/Skins/DarkSkin/DarkSkinReflection.cpp | 676 ++
Import/Vlpp.h | 14 +-
Import/VlppGlrParserCompiler.cpp | 184 +
Import/VlppGlrParserCompiler.h | 2 +
Import/VlppReflection.cpp | 454 +-
Import/VlppReflection.h | 247 +-
Import/VlppWorkflowCompiler.cpp | 7463 ++++++++++++++++-
Import/VlppWorkflowCompiler.h | 181 +-
Import/VlppWorkflowLibrary.cpp | 2462 ++++++
Import/VlppWorkflowLibrary.h | 964 ++-
Import/VlppWorkflowRuntime.cpp | 193 +-
Import/VlppWorkflowRuntime.h | 2 +
Tools/Executables/GlrParserGen/Main.cpp | 1 +
Tools/Reflection32.bin | Bin 958791 -> 1042664 bytes
Tools/Reflection64.bin | Bin 958791 -> 1042664 bytes
.../W05_StaticRun/W05_StaticRun.vcxproj | 9 +-
.../FullControlTest/Source/DemoReflection.cpp | 1530 ++++
.../WindowSkin/UI/Source/DemoReflection.cpp | 25 +
.../AddressBook/UI/Source/DemoReflection.cpp | 106 +
.../Animation/UI/Source/DemoReflection.cpp | 39 +
.../UI/Source/DemoReflection.cpp | 58 +
.../ColorPicker/UI/Source/DemoReflection.cpp | 29 +
.../ColorPicker2/UI/Source/DemoReflection.cpp | 32 +
.../UI/Source/DemoReflection.cpp | 79 +
.../DataGrid/UI/Source/DemoReflection.cpp | 115 +
.../Dialogs/UI/Source/DemoReflection.cpp | 138 +
.../UI/Source/EditorBaseReflection.cpp | 82 +
.../UI/Source/EditorRibbonReflection.cpp | 129 +
.../UI/Source/EditorToolstripReflection.cpp | 85 +
.../GlobalHotKey/UI/Source/DemoReflection.cpp | 21 +
.../ListControls/UI/Source/DemoReflection.cpp | 125 +
.../Localization/UI/Source/DemoReflection.cpp | 29 +
.../UI/Source/DemoReflection.cpp | 33 +
.../UI/Source/DemoReflection.cpp | 15 +
.../QueryService/UI/Source/DemoReflection.cpp | 18 +
.../UI/Source/DemoReflection.cpp | 28 +
.../UI/Source/DemoReflection.cpp | 31 +
.../CppXml/UI/Source/HelloWorldReflection.cpp | 5 +
.../MVVM/UI/Source/HelloWorldReflection.cpp | 33 +
Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 | Bin 25176 -> 25658 bytes
Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 | Bin 25176 -> 25658 bytes
.../Alignment/UI/Source/DemoReflection.cpp | 10 +
.../Flow/UI/Source/DemoReflection.cpp | 81 +
.../Responsive1/UI/Source/DemoReflection.cpp | 151 +
.../Responsive2/UI/Source/DemoReflection.cpp | 73 +
.../UI/Source/DemoReflection.cpp | 57 +
.../SharedSize/UI/Source/DemoReflection.cpp | 74 +
.../Stack/UI/Source/DemoReflection.cpp | 27 +
.../Table/UI/Source/DemoReflection.cpp | 34 +
.../UI/Source/DemoReflection.cpp | 101 +
.../UI/Source/DemoReflection.cpp | 7 +
.../WindowIcon/UI/Source/DemoReflection.cpp | 12 +
.../Binding_Bind/UI/Source/DemoReflection.cpp | 20 +
.../Binding_Eval/UI/Source/DemoReflection.cpp | 5 +
.../UI/Source/DemoReflection.cpp | 12 +
.../Binding_Uri/UI/Source/DemoReflection.cpp | 14 +
.../UI/Source/DemoReflection.cpp | 14 +
.../Event_Cpp/UI/Source/DemoReflection.cpp | 26 +
.../Event_Script/UI/Source/DemoReflection.cpp | 23 +
.../UI/Source/DemoReflection.cpp | 25 +
.../UI/Source/DemoReflection.cpp | 11 +
.../UI/Source/DemoReflection.cpp | 14 +
.../UI/Source/DemoReflection.cpp | 5 +
.../Member_Field/UI/Source/DemoReflection.cpp | 21 +
.../UI/Source/DemoReflection.cpp | 7 +
.../UI/Source/DemoReflection.cpp | 19 +
.../Source/ResDerivedReflection.cpp | 8 +
67 files changed, 16351 insertions(+), 137 deletions(-)
diff --git a/Import/Skins/DarkSkin/DarkSkinReflection.cpp b/Import/Skins/DarkSkin/DarkSkinReflection.cpp
index bb5cedd6..7592b84d 100644
--- a/Import/Skins/DarkSkin/DarkSkinReflection.cpp
+++ b/Import/Skins/DarkSkin/DarkSkinReflection.cpp
@@ -180,6 +180,7 @@ namespace vl
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
#define _ ,
BEGIN_CLASS_MEMBER(::darkskin::BottomScrollButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::BottomScrollButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::BottomScrollButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::BottomScrollButtonTemplate*(), NO_PARAMETER)
@@ -189,13 +190,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::BottomScrollButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_BottomScrollButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::BottomScrollButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::ButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ButtonTemplate*(), NO_PARAMETER)
@@ -205,18 +212,29 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::CheckBoxTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::CheckBoxTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::CheckBoxTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::CheckBoxTemplate*(), NO_PARAMETER)
@@ -226,25 +244,43 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::CheckBoxTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_CheckBoxTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_13)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::CheckBoxTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ComboBoxTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ComboBoxTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiDateComboBoxTemplate)
CLASS_MEMBER_BASE(::darkskin::ComboBoxTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ComboBoxTemplate*(), NO_PARAMETER)
@@ -254,20 +290,33 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ComboBoxTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ComboBoxTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ComboBoxTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::CustomControlTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::CustomControlTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::CustomControlTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::CustomControlTemplate*(), NO_PARAMETER)
@@ -277,10 +326,13 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::CustomControlTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_CustomControlTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::CustomControlTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::CustomFrameWindowTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::CustomFrameWindowTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiWindowTemplate)
CLASS_MEMBER_BASE(::darkskin::CustomFrameWindowTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::CustomFrameWindowTemplate*(), NO_PARAMETER)
@@ -290,52 +342,97 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::CustomFrameWindowTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_CustomFrameWindowTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_13)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_14)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_15)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_16)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_17)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_18)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_19)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_20)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_21)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_22)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_23)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_24)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_25)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_26)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_27)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_28)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_29)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_30)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_31)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_32)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_33)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_34)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_35)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_36)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_37)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_38)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(contentTable)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(frameTable)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::CustomFrameWindowTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::DateButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::DateButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::DateButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::DateButtonTemplate*(), NO_PARAMETER)
@@ -345,14 +442,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::DateButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_DateButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::DateButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::DatePickerTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::DatePickerTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiDatePickerTemplate)
CLASS_MEMBER_BASE(::darkskin::DatePickerTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::DatePickerTemplate*(), NO_PARAMETER)
@@ -362,11 +466,15 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::DatePickerTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_DatePickerTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(look)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::DatePickerTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::DocumentLabelTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::DocumentLabelTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiDocumentLabelTemplate)
CLASS_MEMBER_BASE(::darkskin::DocumentLabelTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::DocumentLabelTemplate*(), NO_PARAMETER)
@@ -376,11 +484,15 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::DocumentLabelTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_DocumentLabelTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::DocumentLabelTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::DocumentTextBoxTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::DocumentTextBoxTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiDocumentLabelTemplate)
CLASS_MEMBER_BASE(::darkskin::DocumentTextBoxTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::DocumentTextBoxTemplate*(), NO_PARAMETER)
@@ -390,14 +502,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::DocumentTextBoxTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_DocumentTextBoxTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::DocumentTextBoxTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::DocumentViewerTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::DocumentViewerTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiDocumentViewerTemplate)
CLASS_MEMBER_BASE(::darkskin::DocumentViewerTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::DocumentViewerTemplate*(), NO_PARAMETER)
@@ -407,14 +526,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::DocumentViewerTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_DocumentViewerTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(look)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::DocumentViewerTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ExpandingDecoratorTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ExpandingDecoratorTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::ExpandingDecoratorTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ExpandingDecoratorTemplate*(), NO_PARAMETER)
@@ -424,16 +550,25 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ExpandingDecoratorTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ExpandingDecoratorTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ExpandingDecoratorTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::GroupBoxTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::GroupBoxTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::GroupBoxTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::GroupBoxTemplate*(), NO_PARAMETER)
@@ -443,18 +578,29 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::GroupBoxTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_GroupBoxTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(titleBounds)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::GroupBoxTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::HScrollHandleTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::HScrollHandleTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::HScrollHandleTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::HScrollHandleTemplate*(), NO_PARAMETER)
@@ -464,12 +610,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::HScrollHandleTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_HScrollHandleTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::HScrollHandleTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::HScrollTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::HScrollTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiScrollTemplate)
CLASS_MEMBER_BASE(::darkskin::HScrollTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::HScrollTemplate*(), NO_PARAMETER)
@@ -480,24 +631,41 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::HScrollTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_HScrollTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(behavior)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonDecrease)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonIncrease)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(handle)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(handleContainer)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::HScrollTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::HTrackerTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::HTrackerTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiScrollTemplate)
CLASS_MEMBER_BASE(::darkskin::HTrackerTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::HTrackerTemplate*(), NO_PARAMETER)
@@ -508,20 +676,33 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::HTrackerTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_HTrackerTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(behavior)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(handle)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::HTrackerTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ItemBackgroundTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ItemBackgroundTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::ItemBackgroundTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ItemBackgroundTemplate*(), NO_PARAMETER)
@@ -531,12 +712,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ItemBackgroundTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ItemBackgroundTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ItemBackgroundTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::LabelTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::LabelTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiLabelTemplate)
CLASS_MEMBER_BASE(::darkskin::LabelTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::LabelTemplate*(), NO_PARAMETER)
@@ -546,11 +732,15 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::LabelTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_LabelTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::LabelTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::LeftScrollButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::LeftScrollButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::LeftScrollButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::LeftScrollButtonTemplate*(), NO_PARAMETER)
@@ -560,13 +750,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::LeftScrollButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_LeftScrollButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::LeftScrollButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ListViewColumnHeaderTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ListViewColumnHeaderTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiListViewColumnHeaderTemplate)
CLASS_MEMBER_BASE(::darkskin::ListViewColumnHeaderTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ListViewColumnHeaderTemplate*(), NO_PARAMETER)
@@ -576,27 +772,47 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ListViewColumnHeaderTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ListViewColumnHeaderTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_13)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_14)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonArrow)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ListViewColumnHeaderTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ListViewTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ListViewTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiListViewTemplate)
CLASS_MEMBER_BASE(::darkskin::ListViewTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ListViewTemplate*(), NO_PARAMETER)
@@ -606,14 +822,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ListViewTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ListViewTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(look)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ListViewTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::MenuBarButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::MenuBarButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::MenuBarButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::MenuBarButtonTemplate*(), NO_PARAMETER)
@@ -623,13 +846,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::MenuBarButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_MenuBarButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::MenuBarButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::MenuItemButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::MenuItemButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::MenuItemButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::MenuItemButtonTemplate*(), NO_PARAMETER)
@@ -639,22 +868,37 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::MenuItemButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_MenuItemButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::MenuItemButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::MenuSplitterTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::MenuSplitterTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::MenuSplitterTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::MenuSplitterTemplate*(), NO_PARAMETER)
@@ -664,13 +908,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::MenuSplitterTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_MenuSplitterTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::MenuSplitterTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ProgressBarTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ProgressBarTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiScrollTemplate)
CLASS_MEMBER_BASE(::darkskin::ProgressBarTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ProgressBarTemplate*(), NO_PARAMETER)
@@ -680,16 +930,25 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ProgressBarTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ProgressBarTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ProgressBarTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RadioButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RadioButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RadioButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RadioButtonTemplate*(), NO_PARAMETER)
@@ -699,25 +958,43 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RadioButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RadioButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_13)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RadioButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonButtonsTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonButtonsTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonButtonsTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonButtonsTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonButtonsTemplate*(), NO_PARAMETER)
@@ -727,10 +1004,13 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonButtonsTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonButtonsTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonButtonsTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonGalleryDropdownButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonGalleryDropdownButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonGalleryDropdownButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonGalleryDropdownButtonTemplate*(), NO_PARAMETER)
@@ -740,15 +1020,23 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonGalleryDropdownButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonGalleryDropdownButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonGalleryDropdownButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonGalleryItemListTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonGalleryItemListTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonGalleryItemListTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonGalleryItemListTemplate*(), NO_PARAMETER)
@@ -758,10 +1046,13 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonGalleryItemListTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonGalleryItemListTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonGalleryItemListTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonGalleryTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonGalleryTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonGalleryListTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonGalleryTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonGalleryTemplate*(), NO_PARAMETER)
@@ -771,24 +1062,41 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonGalleryTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonGalleryTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonGalleryTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonGroupExpandButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonGroupExpandButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonGroupExpandButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonGroupExpandButtonTemplate*(), NO_PARAMETER)
@@ -798,12 +1106,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonGroupExpandButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonGroupExpandButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonGroupExpandButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonGroupMenuTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonGroupMenuTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonGroupMenuTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonGroupMenuTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonGroupMenuTemplate*(), NO_PARAMETER)
@@ -813,18 +1126,29 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonGroupMenuTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonGroupMenuTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonGroupMenuTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonGroupTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonGroupTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonGroupTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonGroupTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonGroupTemplate*(), NO_PARAMETER)
@@ -834,20 +1158,33 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonGroupTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonGroupTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(table)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonGroupTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonIconLabelTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonIconLabelTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonIconLabelTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonIconLabelTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonIconLabelTemplate*(), NO_PARAMETER)
@@ -857,15 +1194,23 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonIconLabelTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonIconLabelTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonIconLabelTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonLargeButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonLargeButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonLargeButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonLargeButtonTemplate*(), NO_PARAMETER)
@@ -875,20 +1220,33 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonLargeButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonLargeButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonLargeButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonLargeDropdownButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonLargeDropdownButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonLargeDropdownButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonLargeDropdownButtonTemplate*(), NO_PARAMETER)
@@ -898,24 +1256,41 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonLargeDropdownButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonLargeDropdownButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonLargeDropdownButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonLargeSplitButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonLargeSplitButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonLargeSplitButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonLargeSplitButtonTemplate*(), NO_PARAMETER)
@@ -925,22 +1300,37 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonLargeSplitButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonLargeSplitButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonArrow)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonLargeSplitButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonSmallButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonSmallButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonSmallButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonSmallButtonTemplate*(), NO_PARAMETER)
@@ -950,19 +1340,31 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonSmallButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonSmallButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonSmallButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonSmallDropdownButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonSmallDropdownButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonSmallDropdownButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonSmallDropdownButtonTemplate*(), NO_PARAMETER)
@@ -972,23 +1374,39 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonSmallDropdownButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonSmallDropdownButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonSmallDropdownButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonSmallIconLabelTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonSmallIconLabelTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonIconLabelTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonSmallIconLabelTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonSmallIconLabelTemplate*(), NO_PARAMETER)
@@ -998,18 +1416,29 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonSmallIconLabelTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonSmallIconLabelTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonSmallIconLabelTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonSmallSplitButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonSmallSplitButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonSmallSplitButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonSmallSplitButtonTemplate*(), NO_PARAMETER)
@@ -1019,24 +1448,41 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonSmallSplitButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonSmallSplitButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonArrow)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonSmallSplitButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonSplitArrowTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonSplitArrowTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonSplitArrowTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonSplitArrowTemplate*(), NO_PARAMETER)
@@ -1046,17 +1492,27 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonSplitArrowTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonSplitArrowTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonSplitArrowTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonToolstripHeaderTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonToolstripHeaderTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonToolstripHeaderTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonToolstripHeaderTemplate*(), NO_PARAMETER)
@@ -1066,12 +1522,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonToolstripHeaderTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonToolstripHeaderTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonToolstripHeaderTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonToolstripMenuTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonToolstripMenuTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonToolstripMenuTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonToolstripMenuTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonToolstripMenuTemplate*(), NO_PARAMETER)
@@ -1081,24 +1542,41 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonToolstripMenuTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonToolstripMenuTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(content)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonToolstripMenuTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RibbonToolstripsTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RibbonToolstripsTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonToolstripsTemplate)
CLASS_MEMBER_BASE(::darkskin::RibbonToolstripsTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RibbonToolstripsTemplate*(), NO_PARAMETER)
@@ -1108,10 +1586,13 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RibbonToolstripsTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RibbonToolstripsTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RibbonToolstripsTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::RightScrollButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::RightScrollButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::RightScrollButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::RightScrollButtonTemplate*(), NO_PARAMETER)
@@ -1121,13 +1602,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::RightScrollButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_RightScrollButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::RightScrollButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ScrollViewTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ScrollViewTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiScrollViewTemplate)
CLASS_MEMBER_BASE(::darkskin::ScrollViewTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ScrollViewTemplate*(), NO_PARAMETER)
@@ -1137,14 +1624,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ScrollViewTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ScrollViewTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(look)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ScrollViewTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ShortcutKeyTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ShortcutKeyTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiLabelTemplate)
CLASS_MEMBER_BASE(::darkskin::ShortcutKeyTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ShortcutKeyTemplate*(), NO_PARAMETER)
@@ -1154,15 +1648,23 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ShortcutKeyTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ShortcutKeyTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ShortcutKeyTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::SystemFrameWindowTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::SystemFrameWindowTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiWindowTemplate)
CLASS_MEMBER_BASE(::darkskin::SystemFrameWindowTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::SystemFrameWindowTemplate*(), NO_PARAMETER)
@@ -1172,12 +1674,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::SystemFrameWindowTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_SystemFrameWindowTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::SystemFrameWindowTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::TabHeaderButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::TabHeaderButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::TabHeaderButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::TabHeaderButtonTemplate*(), NO_PARAMETER)
@@ -1188,7 +1695,9 @@ namespace vl
CLASS_MEMBER_EVENT(HighlightedChanged)
CLASS_MEMBER_EVENT(TabFocusedChanged)
CLASS_MEMBER_FIELD(__vwsn_prop_Highlighted)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private)
CLASS_MEMBER_FIELD(__vwsn_prop_TabFocused)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private)
CLASS_MEMBER_PROPERTY_EVENT(Highlighted, GetHighlighted, SetHighlighted, HighlightedChanged)
CLASS_MEMBER_PROPERTY_EVENT(TabFocused, GetTabFocused, SetTabFocused, TabFocusedChanged)
END_CLASS_MEMBER(::darkskin::TabHeaderButtonTemplate)
@@ -1197,15 +1706,23 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::TabHeaderButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_TabHeaderButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::TabHeaderButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::TabHeaderTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::TabHeaderTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::TabHeaderTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::TabHeaderTemplate*(::vl::presentation::controls::GuiTabPage*), { L"__vwsn_ctor_parameter_CurrentTabPage" })
@@ -1214,7 +1731,9 @@ namespace vl
CLASS_MEMBER_METHOD(SetCommands, { L"__vwsn_value_" })
CLASS_MEMBER_EVENT(CommandsChanged)
CLASS_MEMBER_FIELD(__vwsn_parameter_CurrentTabPage)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private)
CLASS_MEMBER_FIELD(__vwsn_prop_Commands)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private)
CLASS_MEMBER_PROPERTY_EVENT(Commands, GetCommands, SetCommands, CommandsChanged)
CLASS_MEMBER_PROPERTY_READONLY(CurrentTabPage, GetCurrentTabPage)
END_CLASS_MEMBER(::darkskin::TabHeaderTemplate)
@@ -1223,13 +1742,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::TabHeaderTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_TabHeaderTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(CurrentTabPage)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::TabHeaderTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::TabTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::TabTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiRibbonTabTemplate)
CLASS_MEMBER_BASE(::darkskin::TabTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::TabTemplate*(), NO_PARAMETER)
@@ -1238,6 +1763,7 @@ namespace vl
CLASS_MEMBER_METHOD(UpdateTabHeader, NO_PARAMETER)
CLASS_MEMBER_EVENT(HighlightedChanged)
CLASS_MEMBER_FIELD(__vwsn_prop_Highlighted)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private)
CLASS_MEMBER_PROPERTY_EVENT(Highlighted, GetHighlighted, SetHighlighted, HighlightedChanged)
END_CLASS_MEMBER(::darkskin::TabTemplate)
@@ -1245,21 +1771,35 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::TabTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_TabTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(afterHeadersContainer)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(beforeHeadersContainer)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(header)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::TabTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::TextListTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::TextListTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListTemplate)
CLASS_MEMBER_BASE(::darkskin::TextListTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::TextListTemplate*(), NO_PARAMETER)
@@ -1269,14 +1809,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::TextListTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_TextListTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(look)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::TextListTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::Theme)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ThemeConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::theme::ThemeTemplates)
CLASS_MEMBER_BASE(::darkskin::ThemeConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::Theme*(), NO_PARAMETER)
@@ -1286,10 +1833,13 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ThemeConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_Theme_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ThemeConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripButtonTemplate*(), NO_PARAMETER)
@@ -1299,16 +1849,25 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripDropdownButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripDropdownButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripDropdownButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripDropdownButtonTemplate*(), NO_PARAMETER)
@@ -1318,20 +1877,33 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripDropdownButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripDropdownButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripDropdownButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripInMenuTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripInMenuTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripInMenuTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripInMenuTemplate*(), NO_PARAMETER)
@@ -1341,12 +1913,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripInMenuTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripInMenuTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripInMenuTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripMenuTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripMenuTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiMenuTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripMenuTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripMenuTemplate*(), NO_PARAMETER)
@@ -1356,14 +1933,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripMenuTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripMenuTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripMenuTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripSplitArrowTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripSplitArrowTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripSplitArrowTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripSplitArrowTemplate*(), NO_PARAMETER)
@@ -1373,14 +1957,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripSplitArrowTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripSplitArrowTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripSplitArrowTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripSplitButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripSplitButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiToolstripButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripSplitButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripSplitButtonTemplate*(), NO_PARAMETER)
@@ -1390,21 +1981,35 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripSplitButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripSplitButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonArrow)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripSplitButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripSplitterInMenuTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripSplitterInMenuTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripSplitterInMenuTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripSplitterInMenuTemplate*(), NO_PARAMETER)
@@ -1414,13 +2019,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripSplitterInMenuTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripSplitterInMenuTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripSplitterInMenuTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripSplitterTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripSplitterTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripSplitterTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripSplitterTemplate*(), NO_PARAMETER)
@@ -1430,13 +2041,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripSplitterTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripSplitterTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripSplitterTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::ToolstripTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::ToolstripTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate)
CLASS_MEMBER_BASE(::darkskin::ToolstripTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::ToolstripTemplate*(), NO_PARAMETER)
@@ -1446,12 +2063,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::ToolstripTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_ToolstripTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::ToolstripTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::TooltipTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::TooltipTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiWindowTemplate)
CLASS_MEMBER_BASE(::darkskin::TooltipTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::TooltipTemplate*(), NO_PARAMETER)
@@ -1461,14 +2083,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::TooltipTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_TooltipTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(container)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::TooltipTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::TopScrollButtonTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::TopScrollButtonTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::TopScrollButtonTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::TopScrollButtonTemplate*(), NO_PARAMETER)
@@ -1478,13 +2107,19 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::TopScrollButtonTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_TopScrollButtonTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::TopScrollButtonTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::TreeViewTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::TreeViewTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTreeViewTemplate)
CLASS_MEMBER_BASE(::darkskin::TreeViewTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::TreeViewTemplate*(), NO_PARAMETER)
@@ -1494,14 +2129,21 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::TreeViewTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_TreeViewTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(look)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::TreeViewTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::VScrollHandleTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::VScrollHandleTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate)
CLASS_MEMBER_BASE(::darkskin::VScrollHandleTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::VScrollHandleTemplate*(), NO_PARAMETER)
@@ -1511,12 +2153,17 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::VScrollHandleTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_VScrollHandleTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::VScrollHandleTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::VScrollTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::VScrollTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiScrollTemplate)
CLASS_MEMBER_BASE(::darkskin::VScrollTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::VScrollTemplate*(), NO_PARAMETER)
@@ -1527,24 +2174,41 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::VScrollTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_VScrollTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(behavior)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonDecrease)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(buttonIncrease)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(handle)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(handleContainer)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::VScrollTemplateConstructor)
BEGIN_CLASS_MEMBER(::darkskin::VTrackerTemplate)
+ ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"darkskin::VTrackerTemplateConstructor")))
CLASS_MEMBER_BASE(::vl::presentation::templates::GuiScrollTemplate)
CLASS_MEMBER_BASE(::darkskin::VTrackerTemplateConstructor)
CLASS_MEMBER_CONSTRUCTOR(::darkskin::VTrackerTemplate*(), NO_PARAMETER)
@@ -1555,17 +2219,29 @@ namespace vl
CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject)
CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::darkskin::VTrackerTemplateConstructor>(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_darkskin_VTrackerTemplate_Initialize, { L"__vwsn_this_" })
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(behavior)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(handle)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
CLASS_MEMBER_FIELD(self)
+ ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected)
END_CLASS_MEMBER(::darkskin::VTrackerTemplateConstructor)
#undef _
diff --git a/Import/Vlpp.h b/Import/Vlpp.h
index 3857a64d..ae72c45e 100644
--- a/Import/Vlpp.h
+++ b/Import/Vlpp.h
@@ -5729,9 +5729,19 @@ namespace vl
template
void operator()(TArgs2&& ...args)const
{
- for(vint i = 0; i < handlers.Count(); i++)
+ auto count = handlers.Count();
+ if (count == 0) return;
+
+ if (count == 1)
{
- handlers[i]->function(std::forward(args)...);
+ handlers[0]->function(std::forward(args)...);
+ }
+ else
+ {
+ for (vint i = 0; i < count; i++)
+ {
+ handlers[i]->function(args...);
+ }
}
}
};
diff --git a/Import/VlppGlrParserCompiler.cpp b/Import/VlppGlrParserCompiler.cpp
index 61acb134..51e88e3a 100644
--- a/Import/VlppGlrParserCompiler.cpp
+++ b/Import/VlppGlrParserCompiler.cpp
@@ -39,6 +39,7 @@ GenerateAstFileNames
astOutput->traverseCpp = globalName + group->Name() + L"_Traverse.cpp";
astOutput->jsonH = globalName + group->Name() + L"_Json.h";
astOutput->jsonCpp = globalName + group->Name() + L"_Json.cpp";
+ astOutput->jsonDts = globalName + group->Name() + L"_Json.d.ts";
parserOutput->astOutputs.Add(group, astOutput);
}
}
@@ -381,6 +382,15 @@ WriteAstFiles
files.Add(output->jsonH, fileH);
files.Add(output->jsonCpp, fileCpp);
}
+
+ {
+ WString fileDts = GenerateToStream([&](StreamWriter& writer)
+ {
+ WriteJsonVisitorDtsFile(group, output, writer);
+ });
+
+ files.Add(output->jsonDts, fileDts);
+ }
}
void WriteAstFiles(AstSymbolManager& manager, Ptr output, collections::Dictionary& files)
@@ -2257,6 +2267,180 @@ WriteJsonVisitorCppFile
}
});
}
+
+/***********************************************************************
+WriteJsonVisitorDtsFile
+***********************************************************************/
+
+ void CollectAllLeafClasses(AstClassSymbol* classSymbol, List& leafClasses)
+ {
+ if (classSymbol->derivedClasses.Count() == 0)
+ {
+ leafClasses.Add(classSymbol);
+ }
+ else
+ {
+ for (auto derived : classSymbol->derivedClasses)
+ {
+ CollectAllLeafClasses(derived, leafClasses);
+ }
+ }
+ }
+
+ AstClassSymbol* FindNearestAncestorWithProps(AstClassSymbol* classSymbol)
+ {
+ auto current = classSymbol->baseClass;
+ while (current)
+ {
+ if (current->Props().Count() > 0)
+ {
+ return current;
+ }
+ current = current->baseClass;
+ }
+ return nullptr;
+ }
+
+ void WriteDtsPropType(AstDefFileGroup* group, AstClassPropSymbol* propSymbol, stream::StreamWriter& writer)
+ {
+ switch (propSymbol->propType)
+ {
+ case AstPropType::Token:
+ writer.WriteString(L"string");
+ break;
+ case AstPropType::Type:
+ if (auto enumPropSymbol = dynamic_cast(propSymbol->propSymbol))
+ {
+ writer.WriteString(enumPropSymbol->Name());
+ }
+ else if (auto classPropSymbol = dynamic_cast(propSymbol->propSymbol))
+ {
+ writer.WriteString(classPropSymbol->Name() + L" | null");
+ }
+ break;
+ case AstPropType::Array:
+ if (auto classPropSymbol = dynamic_cast(propSymbol->propSymbol))
+ {
+ writer.WriteString(L"(" + classPropSymbol->Name() + L" | null)[]");
+ }
+ else
+ {
+ writer.WriteString(L"unknown[]");
+ }
+ break;
+ }
+ }
+
+ void WriteJsonVisitorDtsFile(AstDefFileGroup* group, Ptr output, stream::StreamWriter& writer)
+ {
+ List visitors, concreteClasses;
+ CollectVisitorsAndConcreteClasses(group, visitors, concreteClasses);
+
+ // write enums
+ for (auto name : group->SymbolOrder())
+ {
+ if (auto enumSymbol = dynamic_cast(group->Symbols()[name]))
+ {
+ writer.WriteString(L"export type " + enumSymbol->Name() + L" =");
+ bool first = true;
+ for (auto itemName : enumSymbol->ItemOrder())
+ {
+ if (!first) writer.WriteString(L" |");
+ writer.WriteString(L" \"" + itemName + L"\"");
+ first = false;
+ }
+ writer.WriteLine(L";");
+ writer.WriteLine(L"");
+ }
+ }
+
+ // write union types for abstract classes (classes with derived classes)
+ for (auto visitorSymbol : visitors)
+ {
+ List leafClasses;
+ CollectAllLeafClasses(visitorSymbol, leafClasses);
+
+ writer.WriteString(L"export type " + visitorSymbol->Name() + L" =");
+ for (auto [leafClass, index] : indexed(leafClasses))
+ {
+ if (index > 0) writer.WriteString(L" |");
+ writer.WriteString(L" " + leafClass->Name());
+ }
+ writer.WriteLine(L";");
+ writer.WriteLine(L"");
+ }
+
+ // write _Common interfaces for abstract classes that have own properties
+ for (auto name : group->SymbolOrder())
+ {
+ if (auto classSymbol = dynamic_cast(group->Symbols()[name]))
+ {
+ if (classSymbol->derivedClasses.Count() > 0 && classSymbol->Props().Count() > 0)
+ {
+ auto ancestor = FindNearestAncestorWithProps(classSymbol);
+ writer.WriteString(L"export interface " + classSymbol->Name() + L"_Common");
+ if (ancestor)
+ {
+ writer.WriteString(L" extends " + ancestor->Name() + L"_Common");
+ }
+ writer.WriteLine(L" {");
+ for (auto propName : classSymbol->PropOrder())
+ {
+ auto propSymbol = classSymbol->Props()[propName];
+ writer.WriteString(L" " + propName + L": ");
+ WriteDtsPropType(group, propSymbol, writer);
+ writer.WriteLine(L";");
+ }
+ writer.WriteLine(L"}");
+ writer.WriteLine(L"");
+ }
+ }
+ }
+
+ // write interfaces for leaf classes (classes with no derived classes)
+ for (auto name : group->SymbolOrder())
+ {
+ if (auto classSymbol = dynamic_cast(group->Symbols()[name]))
+ {
+ if (classSymbol->derivedClasses.Count() == 0)
+ {
+ // find the nearest ancestor with properties for extends
+ auto ancestor = FindNearestAncestorWithProps(classSymbol);
+ writer.WriteString(L"export interface " + classSymbol->Name());
+ if (ancestor)
+ {
+ if (ancestor->derivedClasses.Count() > 0)
+ {
+ writer.WriteString(L" extends " + ancestor->Name() + L"_Common");
+ }
+ else
+ {
+ writer.WriteString(L" extends " + ancestor->Name());
+ }
+ }
+ writer.WriteLine(L" {");
+ writer.WriteLine(L" $ast: \"" + classSymbol->Name() + L"\";");
+ for (auto propName : classSymbol->PropOrder())
+ {
+ auto propSymbol = classSymbol->Props()[propName];
+ writer.WriteString(L" " + propName + L": ");
+ WriteDtsPropType(group, propSymbol, writer);
+ writer.WriteLine(L";");
+ }
+ writer.WriteLine(L"}");
+ writer.WriteLine(L"");
+ }
+ }
+ }
+
+ // write interfaces for concrete classes (standalone, no base and no derived)
+ for (auto classSymbol : concreteClasses)
+ {
+ // concreteClasses are !baseClass && derivedClasses.Count()==0
+ // these are already handled in the leaf class section above
+ // (they would appear as leaf classes with no ancestor)
+ }
+ }
}
}
}
diff --git a/Import/VlppGlrParserCompiler.h b/Import/VlppGlrParserCompiler.h
index f1562c4a..f594da9b 100644
--- a/Import/VlppGlrParserCompiler.h
+++ b/Import/VlppGlrParserCompiler.h
@@ -616,6 +616,7 @@ Output
WString traverseCpp;
WString jsonH;
WString jsonCpp;
+ WString jsonDts;
};
struct CppSyntaxGenOutput
@@ -695,6 +696,7 @@ namespace vl
extern void WriteTraverseVisitorCppFile (AstDefFileGroup* group, Ptr output, stream::StreamWriter& writer);
extern void WriteJsonVisitorHeaderFile (AstDefFileGroup* group, Ptr output, stream::StreamWriter& writer);
extern void WriteJsonVisitorCppFile (AstDefFileGroup* group, Ptr output, stream::StreamWriter& writer);
+ extern void WriteJsonVisitorDtsFile (AstDefFileGroup* group, Ptr output, stream::StreamWriter& writer);
extern void WriteAstAssemblerHeaderFile (AstSymbolManager& manager, Ptr output, stream::StreamWriter& writer);
extern void WriteAstAssemblerCppFile (AstSymbolManager& manager, Ptr output, stream::StreamWriter& writer);
diff --git a/Import/VlppReflection.cpp b/Import/VlppReflection.cpp
index 5f40661b..89a2b937 100644
--- a/Import/VlppReflection.cpp
+++ b/Import/VlppReflection.cpp
@@ -423,6 +423,68 @@ namespace vl
#ifndef VCZH_DEBUG_NO_REFLECTION
+/***********************************************************************
+LogTypeManager (attributes)
+***********************************************************************/
+
+ WString LogTypeManager_FormatAttribute(IAttributeInfo* info)
+ {
+ WString result = info->GetAttributeType()->GetTypeName() + L"(";
+ for (vint i = 0; i < info->GetAttributeValueCount(); i++)
+ {
+ if (i > 0) result += L", ";
+ auto value = info->GetAttributeValue(i);
+ auto valueType = info->GetAttributeValueType(i);
+ CHECK_ERROR(valueType != nullptr, L"vl::reflection::description::LogTypeManager_FormatAttribute(IAttributeInfo*)#Failed to resolve the reflected type of an attribute argument.");
+
+ if (valueType == GetTypeDescriptor())
+ {
+ if (value.GetValueType() == Value::Null)
+ {
+ result += valueType->GetTypeName() + L":null";
+ }
+ else
+ {
+ auto rawPtr = value.GetRawPtr();
+ auto td = dynamic_cast(rawPtr);
+ CHECK_ERROR(td != nullptr, L"vl::reflection::description::LogTypeManager_FormatAttribute(IAttributeInfo*)#ITypeDescriptor* attribute value must point to a valid ITypeDescriptor.");
+ result += valueType->GetTypeName() + L":" + td->GetTypeName();
+ }
+ }
+ else
+ {
+ auto serializableType = valueType->GetSerializableType();
+ CHECK_ERROR(serializableType != nullptr, L"vl::reflection::description::LogTypeManager_FormatAttribute(IAttributeInfo*)#Attribute argument must use a serializable reflected type.");
+
+ WString data;
+ CHECK_ERROR(serializableType->Serialize(value, data), L"vl::reflection::description::LogTypeManager_FormatAttribute(IAttributeInfo*)#Failed to serialize an attribute argument.");
+ result += valueType->GetTypeName() + L":" + data;
+ }
+ }
+ result += L")";
+ return result;
+ }
+
+ void LogTypeManager_PrintAttributes(stream::TextWriter& writer, IAttributeBag* bag, const WString& prefix)
+ {
+ for (vint i = 0; i < bag->GetAttributeCount(); i++)
+ {
+ writer.WriteLine(prefix + L"@" + LogTypeManager_FormatAttribute(bag->GetAttribute(i)));
+ }
+ }
+
+ void LogTypeManager_PrintParameterAttributes(stream::TextWriter& writer, IMethodInfo* info)
+ {
+ for (vint i = 0; i < info->GetParameterCount(); i++)
+ {
+ auto parameter = info->GetParameter(i);
+ for (vint j = 0; j < parameter->GetAttributeCount(); j++)
+ {
+ writer.WriteLine(L" @(" + parameter->GetName() + L")" + LogTypeManager_FormatAttribute(parameter->GetAttribute(j)));
+ }
+ }
+ }
+
/***********************************************************************
LogTypeManager (enum)
***********************************************************************/
@@ -450,6 +512,7 @@ LogTypeManager (struct)
void LogTypeManager_Property(stream::TextWriter& writer, IPropertyInfo* info)
{
+ LogTypeManager_PrintAttributes(writer, info, L" ");
if (auto cpp = info->GetCpp())
{
writer.WriteLine(L" @ReferenceTemplate:" + cpp->GetReferenceTemplate());
@@ -519,6 +582,7 @@ LogTypeManager (class)
{
printed = true;
IEventInfo* info = type->GetEvent(j);
+ LogTypeManager_PrintAttributes(writer, info, L" ");
if (auto cpp = info->GetCpp())
{
writer.WriteLine(L" @AttachTemplate:" + cpp->GetAttachTemplate());
@@ -566,11 +630,13 @@ LogTypeManager (class)
void LogTypeManager_Method(stream::TextWriter& writer, IMethodInfo* info, const wchar_t* title)
{
+ LogTypeManager_PrintAttributes(writer, info, L" ");
if (auto cpp = info->GetCpp())
{
writer.WriteLine(L" @InvokeTemplate:" + cpp->GetInvokeTemplate());
writer.WriteLine(L" @ClosureTemplate:" + cpp->GetClosureTemplate());
}
+ LogTypeManager_PrintParameterAttributes(writer, info);
writer.WriteString(L" ");
writer.WriteString(title);
@@ -709,6 +775,7 @@ LogTypeManager
{
writer.WriteLine(L"@Serializable");
}
+ LogTypeManager_PrintAttributes(writer, type, L"");
switch (type->GetTypeDescriptorFlags())
{
@@ -777,6 +844,7 @@ Context
List> mis;
List> pis;
List> eis;
+ ITypeDescriptor* itdTd = nullptr;
};
/***********************************************************************
@@ -897,10 +965,24 @@ Metadata
vint count = 0;
};
+ struct AttributeValueMetadata
+ {
+ vint typeDescriptor = -1;
+ vint typeDescriptorValue = -1;
+ WString data;
+ };
+
+ struct AttributeInfoMetadata
+ {
+ vint attributeType = -1;
+ List> values;
+ };
+
struct ParameterInfoMetadata
{
WString name;
Ptr type;
+ List> attributes;
};
struct MethodInfoMetadata
@@ -913,6 +995,7 @@ Metadata
List> parameters;
Ptr returnType;
bool isStatic = false;
+ List> attributes;
};
struct PropertyInfoMetadata
@@ -926,6 +1009,7 @@ Metadata
vint getter = -1;
vint setter = -1;
vint valueChangedEvent = -1;
+ List> attributes;
};
struct EventInfoMetadata
@@ -937,6 +1021,7 @@ Metadata
vint ownerTypeDescriptor = -1;
Ptr handlerType;
List observingProperties;
+ List> attributes;
};
struct TypeDescriptorMetadata
@@ -957,6 +1042,7 @@ Metadata
List methods;
List methodGroups;
IdRange constructorGroup;
+ List> attributes;
};
}
}
@@ -975,6 +1061,17 @@ Serialization
SERIALIZE(count)
END_SERIALIZATION
+ BEGIN_SERIALIZATION(reflection::description::AttributeValueMetadata)
+ SERIALIZE(typeDescriptor)
+ SERIALIZE(typeDescriptorValue)
+ SERIALIZE(data)
+ END_SERIALIZATION
+
+ BEGIN_SERIALIZATION(reflection::description::AttributeInfoMetadata)
+ SERIALIZE(attributeType)
+ SERIALIZE(values)
+ END_SERIALIZATION
+
BEGIN_SERIALIZATION(reflection::description::MetaonlyTypeInfo)
SERIALIZE(decorator)
SERIALIZE(hint)
@@ -986,6 +1083,7 @@ Serialization
BEGIN_SERIALIZATION(reflection::description::ParameterInfoMetadata)
SERIALIZE(name)
SERIALIZE(type)
+ SERIALIZE(attributes)
END_SERIALIZATION
BEGIN_SERIALIZATION(reflection::description::MethodInfoMetadata)
@@ -997,6 +1095,7 @@ Serialization
SERIALIZE(parameters)
SERIALIZE(returnType)
SERIALIZE(isStatic)
+ SERIALIZE(attributes)
END_SERIALIZATION
BEGIN_SERIALIZATION(reflection::description::PropertyInfoMetadata)
@@ -1009,6 +1108,7 @@ Serialization
SERIALIZE(getter)
SERIALIZE(setter)
SERIALIZE(valueChangedEvent)
+ SERIALIZE(attributes)
END_SERIALIZATION
BEGIN_SERIALIZATION(reflection::description::EventInfoMetadata)
@@ -1019,6 +1119,7 @@ Serialization
SERIALIZE(ownerTypeDescriptor)
SERIALIZE(handlerType)
SERIALIZE(observingProperties)
+ SERIALIZE(attributes)
END_SERIALIZATION
BEGIN_SERIALIZATION(reflection::description::TypeDescriptorMetadata)
@@ -1038,6 +1139,7 @@ Serialization
SERIALIZE(methods)
SERIALIZE(methodGroups)
SERIALIZE(constructorGroup)
+ SERIALIZE(attributes)
END_SERIALIZATION
}
}
@@ -1054,7 +1156,7 @@ Serialization
IMethodInfo
***********************************************************************/
- class MetaonlyParameterInfo : public Object, public IParameterInfo
+ class MetaonlyParameterInfo : public MemberInfoBase
{
protected:
MetaonlyReaderContext* context = nullptr;
@@ -1092,7 +1194,7 @@ IMethodInfo
}
};
- class MetaonlyMethodInfo : public Object, public IMethodInfo, protected IMethodInfo::ICpp
+ class MetaonlyMethodInfo : public MemberInfoBase, protected IMethodInfo::ICpp
{
friend class MetaonlyMethodGroupInfo;
protected:
@@ -1113,6 +1215,11 @@ IMethodInfo
}
}
+ Ptr GetMetadata()
+ {
+ return metadata;
+ }
+
// ICpp
const WString& GetInvokeTemplate() override
@@ -1208,6 +1315,18 @@ IMethodInfo
{
}
+ // IAttributeBag
+
+ vint GetAttributeCount() override
+ {
+ return 0;
+ }
+
+ IAttributeInfo* GetAttribute(vint index)
+ {
+ return nullptr;
+ }
+
// IMemberInfo
ITypeDescriptor* GetOwnerTypeDescriptor() override
@@ -1243,7 +1362,7 @@ IMethodInfo
IPropertyInfo
***********************************************************************/
- class MetaonlyPropertyInfo : public Object, public IPropertyInfo, protected IPropertyInfo::ICpp
+ class MetaonlyPropertyInfo : public MemberInfoBase, protected IPropertyInfo::ICpp
{
protected:
MetaonlyReaderContext* context = nullptr;
@@ -1256,6 +1375,11 @@ IPropertyInfo
{
}
+ Ptr GetMetadata()
+ {
+ return metadata;
+ }
+
// ICpp
const WString& GetReferenceTemplate() override
@@ -1331,7 +1455,7 @@ IPropertyInfo
IEventInfo
***********************************************************************/
- class MetaonlyEventInfo : public Object, public IEventInfo, protected IEventInfo::ICpp
+ class MetaonlyEventInfo : public MemberInfoBase, protected IEventInfo::ICpp
{
protected:
MetaonlyReaderContext* context = nullptr;
@@ -1344,6 +1468,11 @@ IEventInfo
{
}
+ Ptr GetMetadata()
+ {
+ return metadata;
+ }
+
// ICpp
const WString& GetAttachTemplate() override
@@ -1420,7 +1549,7 @@ ITypeDescriptor
***********************************************************************/
class MetaonlyTypeDescriptor
- : public Object
+ : public AttributeBagSource
, public ITypeDescriptor
, protected ITypeDescriptor::ICpp
, protected IValueType
@@ -1454,6 +1583,23 @@ ITypeDescriptor
}
}
+ Ptr GetMetadata()
+ {
+ return metadata;
+ }
+
+ // IAttributeBag
+
+ vint GetAttributeCount() override
+ {
+ return GetAttributeCountInternal(nullptr);
+ }
+
+ IAttributeInfo* GetAttribute(vint index) override
+ {
+ return GetAttributeInternal(nullptr, index);
+ }
+
// ICpp
const WString& GetFullName() override
@@ -1688,6 +1834,113 @@ ITypeDescriptor
}
};
+/***********************************************************************
+Attribute Metadata Helpers
+***********************************************************************/
+
+ void GenerateMetaonlyAttributes(MetaonlyWriterContext& context, List>& metadataList, IAttributeBag* attributeBag)
+ {
+#define ERROR_MESSAGE_PREFIX L"vl::reflection::description::GenerateMetaonlyAttributes(MetaonlyWriterContext&, collections::List&, IAttributeBag*)#"
+ auto itdTd = GetTypeDescriptor();
+ for (vint i = 0; i < attributeBag->GetAttributeCount(); i++)
+ {
+ auto info = attributeBag->GetAttribute(i);
+ auto attributeMetadata = Ptr(new AttributeInfoMetadata{
+ .attributeType = context.tdIndex[info->GetAttributeType()],
+ });
+ for (vint j = 0; j < info->GetAttributeValueCount(); j++)
+ {
+ auto value = info->GetAttributeValue(j);
+ auto valueType = info->GetAttributeValueType(j);
+ CHECK_ERROR(valueType != nullptr, ERROR_MESSAGE_PREFIX L"Failed to resolve the reflected type of an attribute argument.");
+
+ if (valueType == itdTd)
+ {
+ vint tdValueIndex = -1;
+ if (value.GetValueType() != Value::Null)
+ {
+ auto rawPtr = value.GetRawPtr();
+ auto td = dynamic_cast(rawPtr);
+ CHECK_ERROR(td != nullptr, ERROR_MESSAGE_PREFIX L"ITypeDescriptor* attribute value must point to a valid ITypeDescriptor.");
+ CHECK_ERROR(context.tdIndex.Keys().Contains(td), ERROR_MESSAGE_PREFIX L"ITypeDescriptor* attribute value must point to a registered ITypeDescriptor.");
+ tdValueIndex = context.tdIndex[td];
+ }
+ attributeMetadata->values.Add(Ptr(new AttributeValueMetadata{
+ .typeDescriptor = context.tdIndex[valueType],
+ .typeDescriptorValue = tdValueIndex,
+ }));
+ }
+ else
+ {
+ auto serializableType = valueType->GetSerializableType();
+ CHECK_ERROR(serializableType != nullptr, ERROR_MESSAGE_PREFIX L"Attribute argument must use a serializable reflected type.");
+
+ WString data;
+ CHECK_ERROR(serializableType->Serialize(value, data), ERROR_MESSAGE_PREFIX L"Failed to serialize an attribute argument.");
+ attributeMetadata->values.Add(Ptr(new AttributeValueMetadata{
+ .typeDescriptor = context.tdIndex[valueType],
+ .data = data,
+ }));
+ }
+ }
+ metadataList.Add(attributeMetadata);
+ }
+#undef ERROR_MESSAGE_PREFIX
+ }
+
+ void LoadMetaonlyAttributes(
+ MetaonlyReaderContext* context,
+ AttributeBagSource* source,
+ IMemberInfo* memberInfo,
+ const List>& attributeMetadataList,
+ ITypeDescriptor* itdTd
+ )
+ {
+#define ERROR_MESSAGE_PREFIX L"vl::reflection::description::LoadMetaonlyAttributes(MetaonlyReaderContext*, AttributeBagSource*, IMemberInfo*, const collections::List&, ITypeDescriptor*)#"
+ for (vint i = 0; i < attributeMetadataList.Count(); i++)
+ {
+ auto&& attributeMetadata = attributeMetadataList[i];
+ CHECK_ERROR(0 <= attributeMetadata->attributeType && attributeMetadata->attributeType < context->tds.Count(), ERROR_MESSAGE_PREFIX L"Failed to resolve the reflected attribute type.");
+ auto attributeType = context->tds[attributeMetadata->attributeType].Obj();
+ auto info = Ptr(new AttributeInfoImpl(attributeType));
+
+ for (vint j = 0; j < attributeMetadata->values.Count(); j++)
+ {
+ auto&& valueMetadata = attributeMetadata->values[j];
+ CHECK_ERROR(0 <= valueMetadata->typeDescriptor && valueMetadata->typeDescriptor < context->tds.Count(), ERROR_MESSAGE_PREFIX L"Failed to resolve the reflected value type of an attribute argument.");
+ auto reflectedValueType = context->tds[valueMetadata->typeDescriptor].Obj();
+
+ if (itdTd != nullptr && reflectedValueType == itdTd)
+ {
+ if (valueMetadata->typeDescriptorValue >= 0)
+ {
+ CHECK_ERROR(valueMetadata->typeDescriptorValue < context->tds.Count(), ERROR_MESSAGE_PREFIX L"Failed to resolve the ITypeDescriptor* attribute value.");
+ auto referencedTd = context->tds[valueMetadata->typeDescriptorValue].Obj();
+ auto value = Value::From(dynamic_cast(referencedTd));
+ info->AddValue(reflectedValueType, value);
+ }
+ else
+ {
+ info->AddValue(reflectedValueType, Value());
+ }
+ }
+ else
+ {
+ auto serializableType = reflectedValueType->GetSerializableType();
+ CHECK_ERROR(serializableType != nullptr, ERROR_MESSAGE_PREFIX L"Failed to resolve the serializable type of an attribute argument.");
+
+ Value value;
+ CHECK_ERROR(serializableType->Deserialize(valueMetadata->data, value), ERROR_MESSAGE_PREFIX L"Failed to deserialize an attribute argument.");
+ value = Value::From(value.GetBoxedValue(), reflectedValueType);
+ info->AddValue(reflectedValueType, value);
+ }
+ }
+
+ source->RegisterAttribute(memberInfo, info);
+ }
+#undef ERROR_MESSAGE_PREFIX
+ }
+
/***********************************************************************
GenerateMetaonlyTypes
***********************************************************************/
@@ -1753,6 +2006,7 @@ GenerateMetaonlyTypes
metadata->constructorGroup.count = metadata->methods.Count() - metadata->constructorGroup.start;
}
+ GenerateMetaonlyAttributes(*writer.context.Obj(), metadata->attributes, td);
writer << metadata;
}
@@ -1776,10 +2030,12 @@ GenerateMetaonlyTypes
auto piMetadata = Ptr(new ParameterInfoMetadata);
piMetadata->name = pi->GetName();
piMetadata->type = Ptr(new MetaonlyTypeInfo(*writer.context.Obj(), pi->GetType()));
+ GenerateMetaonlyAttributes(*writer.context.Obj(), piMetadata->attributes, pi);
metadata->parameters.Add(piMetadata);
}
metadata->returnType = Ptr(new MetaonlyTypeInfo(*writer.context.Obj(), mi->GetReturn()));
metadata->isStatic = mi->IsStatic();
+ GenerateMetaonlyAttributes(*writer.context.Obj(), metadata->attributes, mi);
writer << metadata;
}
@@ -1807,6 +2063,7 @@ GenerateMetaonlyTypes
{
metadata->valueChangedEvent = writer.context->eiIndex[ei];
}
+ GenerateMetaonlyAttributes(*writer.context.Obj(), metadata->attributes, pi);
writer << metadata;
}
@@ -1826,6 +2083,7 @@ GenerateMetaonlyTypes
{
metadata->observingProperties.Add(writer.context->piIndex[ei->GetObservingProperty(i)]);
}
+ GenerateMetaonlyAttributes(*writer.context.Obj(), metadata->attributes, ei);
writer << metadata;
}
@@ -1963,11 +2221,19 @@ LoadMetaonlyTypes
vint eiCount = 0;
reader << tdCount << miCount << piCount << eiCount;
- for (vint i = 0; i < tdCount; i++)
{
- Ptr metadata;
- reader << metadata;
- context->tds.Add(Ptr(new MetaonlyTypeDescriptor(context.Obj(), metadata)));
+ auto itdTypeName = WString::Unmanaged(TypeInfo::content.typeName);
+ for (vint i = 0; i < tdCount; i++)
+ {
+ Ptr metadata;
+ reader << metadata;
+ auto td = Ptr(new MetaonlyTypeDescriptor(context.Obj(), metadata));
+ if (td->GetTypeName() == itdTypeName)
+ {
+ context->itdTd = td.Obj();
+ }
+ context->tds.Add(td);
+ }
}
for (vint i = 0; i < miCount; i++)
{
@@ -1989,6 +2255,48 @@ LoadMetaonlyTypes
}
}
+#define ERROR_MESSAGE_PREFIX L"vl::reflection::description::LoadMetaonlyTypes(stream::IStream&, const collections::Dictionary>&)#"
+ for (vint i = 0; i < context->tds.Count(); i++)
+ {
+ auto td = context->tds[i].Obj();
+ auto source = dynamic_cast(td);
+ CHECK_ERROR(source != nullptr, ERROR_MESSAGE_PREFIX L"Metaonly type descriptors must provide attribute storage.");
+ auto metadata = dynamic_cast(td)->GetMetadata();
+ LoadMetaonlyAttributes(context.Obj(), source, nullptr, metadata->attributes, context->itdTd);
+ }
+
+ for (vint i = 0; i < context->mis.Count(); i++)
+ {
+ auto method = context->mis[i].Obj();
+ auto source = dynamic_cast(method->GetOwnerTypeDescriptor());
+ CHECK_ERROR(source != nullptr, ERROR_MESSAGE_PREFIX L"Method owner type descriptors must provide attribute storage.");
+ auto metadata = dynamic_cast(method)->GetMetadata();
+ LoadMetaonlyAttributes(context.Obj(), source, method, metadata->attributes, context->itdTd);
+ for (vint j = 0; j < method->GetParameterCount(); j++)
+ {
+ LoadMetaonlyAttributes(context.Obj(), source, method->GetParameter(j), metadata->parameters[j]->attributes, context->itdTd);
+ }
+ }
+
+ for (vint i = 0; i < context->pis.Count(); i++)
+ {
+ auto property = context->pis[i].Obj();
+ auto source = dynamic_cast(property->GetOwnerTypeDescriptor());
+ CHECK_ERROR(source != nullptr, ERROR_MESSAGE_PREFIX L"Property owner type descriptors must provide attribute storage.");
+ auto metadata = dynamic_cast(property)->GetMetadata();
+ LoadMetaonlyAttributes(context.Obj(), source, property, metadata->attributes, context->itdTd);
+ }
+
+ for (vint i = 0; i < context->eis.Count(); i++)
+ {
+ auto eventInfo = context->eis[i].Obj();
+ auto source = dynamic_cast(eventInfo->GetOwnerTypeDescriptor());
+ CHECK_ERROR(source != nullptr, ERROR_MESSAGE_PREFIX L"Event owner type descriptors must provide attribute storage.");
+ auto metadata = dynamic_cast(eventInfo)->GetMetadata();
+ LoadMetaonlyAttributes(context.Obj(), source, eventInfo, metadata->attributes, context->itdTd);
+ }
+#undef ERROR_MESSAGE_PREFIX
+
return loader;
}
}
@@ -1997,6 +2305,7 @@ LoadMetaonlyTypes
#endif
+
/***********************************************************************
.\DESCRIPTABLEOBJECT.CPP
***********************************************************************/
@@ -3089,10 +3398,77 @@ GenericTypeInfo
genericArguments.Add(value);
}
+/***********************************************************************
+AttributeInfoImpl
+***********************************************************************/
+
+ AttributeInfoImpl::AttributeInfoImpl(ITypeDescriptor* _attributeType)
+ :attributeType(_attributeType)
+ {
+ }
+
+ ITypeDescriptor* AttributeInfoImpl::GetAttributeType()
+ {
+ return attributeType;
+ }
+
+ vint AttributeInfoImpl::GetAttributeValueCount()
+ {
+ return values.Count();
+ }
+
+ ITypeDescriptor* AttributeInfoImpl::GetAttributeValueType(vint index)
+ {
+ return values[index].key;
+ }
+
+ Value AttributeInfoImpl::GetAttributeValue(vint index)
+ {
+ return values[index].value;
+ }
+
+ void AttributeInfoImpl::AddValue(ITypeDescriptor* valueType, const Value& value)
+ {
+#define ERROR_MESSAGE_PREFIX L"vl::reflection::description::AttributeInfoImpl::AddValue(ITypeDescriptor*, const Value&)#"
+ CHECK_ERROR(valueType != nullptr, ERROR_MESSAGE_PREFIX L"valueType should not be null.");
+ if (valueType->GetSerializableType())
+ {
+ // serializable type, no additional validation needed
+ }
+ else
+ {
+ CHECK_ERROR(
+ value.GetValueType() == Value::RawPtr || value.GetValueType() == Value::Null,
+ ERROR_MESSAGE_PREFIX L"ITypeDescriptor* attribute value must be a raw pointer or null."
+ );
+ }
+#undef ERROR_MESSAGE_PREFIX
+ values.Add({ valueType,value });
+ }
+
#endif
#ifndef VCZH_DEBUG_NO_REFLECTION
+/***********************************************************************
+AttributeBagSource
+***********************************************************************/
+
+ void AttributeBagSource::RegisterAttribute(IMemberInfo* memberInfo, Ptr info)
+ {
+ attributes.Add(memberInfo, info);
+ }
+
+ IMemberInfo* AttributeBagSource::GetLastRegisteredMember()const
+ {
+ return lastRegisteredMember;
+ }
+
+ void AttributeBagSource::SetLastRegisteredMember(IMemberInfo* member)
+ {
+ lastRegisteredMember = member;
+ }
+
/***********************************************************************
TypeDescriptorImplBase
***********************************************************************/
@@ -3107,6 +3483,10 @@ TypeDescriptorImplBase
return typeInfoContent;
}
+ void TypeDescriptorImplBase::LoadForAttributeAccess()
+ {
+ }
+
TypeDescriptorImplBase::TypeDescriptorImplBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent)
:typeDescriptorFlags(_typeDescriptorFlags)
, typeInfoContent(_typeInfoContent)
@@ -3129,6 +3509,18 @@ TypeDescriptorImplBase
{
}
+ vint TypeDescriptorImplBase::GetAttributeCount()
+ {
+ LoadForAttributeAccess();
+ return GetAttributeCountInternal(nullptr);
+ }
+
+ IAttributeInfo* TypeDescriptorImplBase::GetAttribute(vint index)
+ {
+ LoadForAttributeAccess();
+ return GetAttributeInternal(nullptr, index);
+ }
+
ITypeDescriptor::ICpp* TypeDescriptorImplBase::GetCpp()
{
return typeInfoContent->cppName == TypeInfoContent::VlppType ? nullptr : this;
@@ -3161,6 +3553,11 @@ ValueTypeDescriptorBase
}
}
+ void ValueTypeDescriptorBase::LoadForAttributeAccess()
+ {
+ Load();
+ }
+
ValueTypeDescriptorBase::ValueTypeDescriptorBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent)
:TypeDescriptorImplBase(_typeDescriptorFlags, _typeInfoContent)
, loaded(false)
@@ -3468,6 +3865,16 @@ MethodGroupInfoImpl
{
}
+ vint MethodGroupInfoImpl::GetAttributeCount()
+ {
+ return 0;
+ }
+
+ IAttributeInfo* MethodGroupInfoImpl::GetAttribute(vint index)
+ {
+ return nullptr;
+ }
+
ITypeDescriptor* MethodGroupInfoImpl::GetOwnerTypeDescriptor()
{
return ownerTypeDescriptor;
@@ -3883,12 +4290,14 @@ TypeDescriptorImpl
IPropertyInfo* TypeDescriptorImpl::AddProperty(Ptr value)
{
properties.Add(value->GetName(), value);
+ SetLastRegisteredMember(value.Obj());
return value.Obj();
}
IEventInfo* TypeDescriptorImpl::AddEvent(Ptr value)
{
events.Add(value->GetName(), value);
+ SetLastRegisteredMember(value.Obj());
return value.Obj();
}
@@ -3897,6 +4306,7 @@ TypeDescriptorImpl
MethodGroupInfoImpl* methodGroup=PrepareMethodGroup(name);
value->SetOwnerMethodgroup(methodGroup);
methodGroup->AddMethod(value);
+ SetLastRegisteredMember(value.Obj());
return value.Obj();
}
@@ -3905,6 +4315,7 @@ TypeDescriptorImpl
MethodGroupInfoImpl* methodGroup=PrepareConstructorGroup();
value->SetOwnerMethodgroup(methodGroup);
methodGroup->AddMethod(value);
+ SetLastRegisteredMember(value.Obj());
return value.Obj();
}
@@ -3922,6 +4333,11 @@ TypeDescriptorImpl
}
}
+ void TypeDescriptorImpl::LoadForAttributeAccess()
+ {
+ Load();
+ }
+
TypeDescriptorImpl::TypeDescriptorImpl(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent)
:TypeDescriptorImplBase(_typeDescriptorFlags, _typeInfoContent)
,loaded(false)
@@ -4182,6 +4598,7 @@ TypeDescriptorImpl
}
}
+
/***********************************************************************
.\PREDEFINED\PREDEFINEDTYPES.CPP
***********************************************************************/
@@ -4609,6 +5026,8 @@ TypeName
IMPL_TYPE_INFO_RENAME(vl::reflection::description::ISerializableType, system::reflection::SerializableType)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::ITypeInfo, system::reflection::TypeInfo)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::ITypeInfo::Decorator, system::reflection::TypeInfo::Decorator)
+ IMPL_TYPE_INFO_RENAME(vl::reflection::description::IAttributeInfo, system::reflection::AttributeInfo)
+ IMPL_TYPE_INFO_RENAME(vl::reflection::description::IAttributeBag, system::reflection::AttributeBag)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::IMemberInfo, system::reflection::MemberInfo)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::IEventHandler, system::reflection::EventHandler)
IMPL_TYPE_INFO_RENAME(vl::reflection::description::IEventInfo, system::reflection::EventInfo)
@@ -4880,9 +5299,22 @@ LoadPredefinedTypes
ENUM_NAMESPACE_ITEM(Nullable)
ENUM_NAMESPACE_ITEM(TypeDescriptor)
ENUM_NAMESPACE_ITEM(Generic)
- END_ENUM_ITEM(ITypeInfo::Decorator)
+ END_ENUM_ITEM(ITypeInfo::Decorator)
+
+ BEGIN_INTERFACE_MEMBER_NOPROXY(IAttributeInfo)
+ CLASS_MEMBER_PROPERTY_READONLY_FAST(AttributeType)
+ CLASS_MEMBER_PROPERTY_READONLY_FAST(AttributeValueCount)
+ CLASS_MEMBER_METHOD(GetAttributeValueType, { L"index" })
+ CLASS_MEMBER_METHOD(GetAttributeValue, { L"index" })
+ END_INTERFACE_MEMBER(IAttributeInfo)
+
+ BEGIN_INTERFACE_MEMBER_NOPROXY(IAttributeBag)
+ CLASS_MEMBER_PROPERTY_READONLY_FAST(AttributeCount)
+ CLASS_MEMBER_METHOD(GetAttribute, { L"index" })
+ END_INTERFACE_MEMBER(IAttributeBag)
BEGIN_INTERFACE_MEMBER_NOPROXY(IMemberInfo)
+ CLASS_MEMBER_BASE(IAttributeBag)
CLASS_MEMBER_PROPERTY_READONLY_FAST(OwnerTypeDescriptor)
CLASS_MEMBER_PROPERTY_READONLY_FAST(Name)
END_INTERFACE_MEMBER(IMemberInfo)
@@ -4959,6 +5391,8 @@ LoadPredefinedTypes
END_ENUM_ITEM(TypeDescriptorFlags)
BEGIN_INTERFACE_MEMBER_NOPROXY(ITypeDescriptor)
+ CLASS_MEMBER_BASE(IAttributeBag)
+
CLASS_MEMBER_PROPERTY_READONLY_FAST(TypeDescriptorFlags)
CLASS_MEMBER_PROPERTY_READONLY_FAST(TypeName)
CLASS_MEMBER_PROPERTY_READONLY_FAST(ValueType)
diff --git a/Import/VlppReflection.h b/Import/VlppReflection.h
index 514d1ac6..fc7032ae 100644
--- a/Import/VlppReflection.h
+++ b/Import/VlppReflection.h
@@ -488,6 +488,22 @@ DescriptableObject
/// CLASS_MEMBER_METHOD(SetX, {L"value"})
/// CLASS_MEMBER_PROPERTY_EVENT(X, GetX, SetX, XChanged)
///
+ /// // 22) Attach an attribute to the type itself. The attribute type must be a reflected struct.
+ /// // Each argument must be a serializable primitive value. Zero arguments are allowed.
+ /// ATTRIBUTE_TYPE(MyAttribute, L"name", 100)
+ /// ATTRIBUTE_TYPE(EmptyAttribute)
+ ///
+ /// // 23) Attach an attribute to the most recently registered member (field, property, event, method, or constructor).
+ /// // Must appear after the member registration macro it decorates.
+ /// CLASS_MEMBER_FIELD(fieldValue)
+ /// ATTRIBUTE_MEMBER(MyAttribute, L"field", 1)
+ /// ATTRIBUTE_MEMBER(EmptyAttribute)
+ ///
+ /// // 24) Attach an attribute to a named parameter of the most recently registered method or constructor.
+ /// // The parameter name must match exactly one parameter.
+ /// CLASS_MEMBER_METHOD(MyFunction2, {L"parameter1" _ L"parameter2"})
+ /// ATTRIBUTE_PARAMETER(L"parameter1", MyAttribute, L"param", 2)
+ ///
/// END_CLASS_MEMBER(MyClass)
/// ]]>
///
@@ -2051,7 +2067,23 @@ ITypeDescriptor (type)
ITypeDescriptor (basic)
***********************************************************************/
- class IMemberInfo : public virtual IDescriptable, public Description
+ class IAttributeInfo : public virtual IDescriptable, public Description
+ {
+ public:
+ virtual ITypeDescriptor* GetAttributeType() = 0;
+ virtual vint GetAttributeValueCount() = 0;
+ virtual ITypeDescriptor* GetAttributeValueType(vint index) = 0;
+ virtual Value GetAttributeValue(vint index) = 0;
+ };
+
+ class IAttributeBag : public virtual IDescriptable, public Description
+ {
+ public:
+ virtual vint GetAttributeCount() = 0;
+ virtual IAttributeInfo* GetAttribute(vint index) = 0;
+ };
+
+ class IMemberInfo : public virtual IAttributeBag, public Description
{
public:
virtual ITypeDescriptor* GetOwnerTypeDescriptor()=0;
@@ -2249,7 +2281,7 @@ ITypeDescriptor
}
/// Metadata class for reflectable types.
- class ITypeDescriptor : public virtual IDescriptable, public Description
+ class ITypeDescriptor : public virtual IAttributeBag, public Description
{
public:
class ICpp : public virtual IDescriptable, public Description
@@ -4143,15 +4175,98 @@ TypeInfoImp
void AddGenericArgument(Ptr value);
};
+ class AttributeInfoImpl : public Object, public IAttributeInfo
+ {
+ using TypeValuePair = collections::Pair;
+ protected:
+ ITypeDescriptor* attributeType = nullptr;
+ collections::List values;
+ public:
+ AttributeInfoImpl(ITypeDescriptor* _attributeType);
+
+ ITypeDescriptor* GetAttributeType()override;
+ vint GetAttributeValueCount()override;
+ ITypeDescriptor* GetAttributeValueType(vint index)override;
+ Value GetAttributeValue(vint index)override;
+ void AddValue(ITypeDescriptor* valueType, const Value& value);
+ };
+
#endif
#ifndef VCZH_DEBUG_NO_REFLECTION
+/***********************************************************************
+MemberInfoBase
+***********************************************************************/
+
+ template
+ class MemberInfoBase;
+
+ class AttributeBagSource : public Object
+ {
+ template
+ friend class MemberInfoBase;
+ protected:
+ collections::Group> attributes;
+ IMemberInfo* lastRegisteredMember = nullptr;
+
+ virtual vint GetAttributeCountInternal(IMemberInfo* memberInfo)
+ {
+ if (!attributes.Contains(memberInfo))
+ {
+ return 0;
+ }
+ return attributes.Get(memberInfo).Count();
+ }
+
+ virtual IAttributeInfo* GetAttributeInternal(IMemberInfo* memberInfo, vint index)
+ {
+ if (!attributes.Contains(memberInfo))
+ {
+ return nullptr;
+ }
+ auto&& infos = attributes.Get(memberInfo);
+ return 0 <= index && index < infos.Count() ? infos[index].Obj() : nullptr;
+ }
+ public:
+ void RegisterAttribute(IMemberInfo* memberInfo, Ptr info);
+ IMemberInfo* GetLastRegisteredMember()const;
+ void SetLastRegisteredMember(IMemberInfo* member);
+ };
+
+ template
+ class MemberInfoBase : public Object, public TMemberInfo
+ {
+ protected:
+
+ AttributeBagSource* GetAttributeBagSource()
+ {
+#define ERROR_MESSAGE_PREFIX L"vl::reflection::description::MemberInfoBase::GetAttributeBagSource()#"
+ auto owner = this->GetOwnerTypeDescriptor();
+ CHECK_ERROR(owner, ERROR_MESSAGE_PREFIX L"GetOwnerTypeDescriptor() should not return nullptr.");
+ auto source = dynamic_cast(owner);
+ CHECK_ERROR(source, ERROR_MESSAGE_PREFIX L"GetOwnerTypeDescriptor() should be an AttributeBagSource instance.");
+ return source;
+#undef ERROR_MESSAGE_PREFIX
+ }
+
+ public:
+ vint GetAttributeCount()
+ {
+ return GetAttributeBagSource()->GetAttributeCountInternal(this);
+ }
+
+ IAttributeInfo* GetAttribute(vint index)
+ {
+ return GetAttributeBagSource()->GetAttributeInternal(this, index);
+ }
+ };
+
/***********************************************************************
SerializableTypeDescriptor
***********************************************************************/
- class TypeDescriptorImplBase : public Object, public ITypeDescriptor, private ITypeDescriptor::ICpp
+ class TypeDescriptorImplBase : public AttributeBagSource, public ITypeDescriptor, private ITypeDescriptor::ICpp
{
private:
TypeDescriptorFlags typeDescriptorFlags;
@@ -4163,11 +4278,14 @@ SerializableTypeDescriptor
protected:
const TypeInfoContent* GetTypeInfoContentInternal();
+ virtual void LoadForAttributeAccess();
public:
TypeDescriptorImplBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent);
~TypeDescriptorImplBase();
+ vint GetAttributeCount()override;
+ IAttributeInfo* GetAttribute(vint index)override;
ITypeDescriptor::ICpp* GetCpp()override;
TypeDescriptorFlags GetTypeDescriptorFlags()override;
const WString& GetTypeName()override;
@@ -4183,6 +4301,7 @@ SerializableTypeDescriptor
virtual void LoadInternal();;
void Load();
+ void LoadForAttributeAccess()override;
public:
ValueTypeDescriptorBase(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent);
~ValueTypeDescriptorBase();
@@ -4224,7 +4343,7 @@ SerializableTypeDescriptor
ParameterInfoImpl
***********************************************************************/
- class ParameterInfoImpl : public Object, public IParameterInfo
+ class ParameterInfoImpl : public MemberInfoBase
{
protected:
IMethodInfo* ownerMethod;
@@ -4244,7 +4363,7 @@ ParameterInfoImpl
MethodInfoImpl
***********************************************************************/
- class MethodInfoImpl : public Object, public IMethodInfo
+ class MethodInfoImpl : public MemberInfoBase
{
friend class PropertyInfoImpl;
protected:
@@ -4289,6 +4408,9 @@ MethodGroupInfoImpl
MethodGroupInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name);
~MethodGroupInfoImpl();
+ vint GetAttributeCount()override;
+ IAttributeInfo* GetAttribute(vint index)override;
+
ITypeDescriptor* GetOwnerTypeDescriptor()override;
const WString& GetName()override;
vint GetMethodCount()override;
@@ -4300,7 +4422,7 @@ MethodGroupInfoImpl
EventInfoImpl
***********************************************************************/
- class EventInfoImpl : public Object, public IEventInfo
+ class EventInfoImpl : public MemberInfoBase
{
friend class PropertyInfoImpl;
@@ -4332,7 +4454,7 @@ EventInfoImpl
TypeDescriptorImpl
***********************************************************************/
- class PropertyInfoImpl : public Object, public IPropertyInfo
+ class PropertyInfoImpl : public MemberInfoBase
{
protected:
ITypeDescriptor* ownerTypeDescriptor;
@@ -4378,7 +4500,7 @@ TypeDescriptorImpl
FieldInfoImpl
***********************************************************************/
- class FieldInfoImpl : public Object, public IPropertyInfo
+ class FieldInfoImpl : public MemberInfoBase
{
protected:
ITypeDescriptor* ownerTypeDescriptor;
@@ -4428,6 +4550,7 @@ TypeDescriptorImpl
virtual void LoadInternal()=0;
void Load();
+ void LoadForAttributeAccess()override;
public:
TypeDescriptorImpl(TypeDescriptorFlags _typeDescriptorFlags, const TypeInfoContent* _typeInfoContent);
~TypeDescriptorImpl();
@@ -4715,6 +4838,13 @@ StructTypeDescriptor
collections::Dictionary> fields;
public:
+ IPropertyInfo* AddField(Ptr value)
+ {
+ fields.Add(value->GetName(), value);
+ this->SetLastRegisteredMember(value.Obj());
+ return value.Obj();
+ }
+
StructTypeDescriptor()
{
this->valueType = Ptr(new StructValueType());
@@ -7324,6 +7454,81 @@ namespace vl
template
using FUNCTIONNAME_AddPointer = T*;
+#ifndef VCZH_DEBUG_NO_REFLECTION
+
+ namespace detail
+ {
+ namespace attribute_macro
+ {
+ template
+ struct BoxingProxy
+ {
+ AttributeInfoImpl* info;
+ TArg&& value;
+
+ template
+ operator FieldType()
+ {
+ FieldType field(std::forward(value));
+ if constexpr (std::is_pointer_v>)
+ {
+ using PointedType = std::remove_pointer_t>;
+ auto valueType = description::GetTypeDescriptor();
+ auto boxed = BoxValue>(field);
+ info->AddValue(valueType, boxed);
+ }
+ else
+ {
+ auto boxed = BoxValue>(field);
+ auto valueType = boxed.GetTypeDescriptor();
+ info->AddValue(valueType, boxed);
+ }
+ return field;
+ }
+ };
+
+ template
+ Ptr MakeAttributeInfo(TArgs&&... args)
+ {
+ static_assert(requires { TAttribute{ std::forward(args)... }; }, "ATTRIBUTE_* requires TYPE{ARG1, ...} to compile.");
+
+ auto attributeType = description::GetTypeDescriptor();
+ CHECK_ERROR(attributeType != nullptr, L"ATTRIBUTE_*#Failed to resolve the reflected attribute type.");
+ CHECK_ERROR(attributeType->GetTypeDescriptorFlags() == TypeDescriptorFlags::Struct, L"ATTRIBUTE_*#Attribute type must be a reflected struct.");
+
+ auto info = Ptr(new AttributeInfoImpl(attributeType));
+ if constexpr (sizeof...(TArgs) > 0)
+ {
+ // Actual field types will be applied by calling BoxingProxy::operator FieldType() in the constructor
+ // During the conversion, the expected attribute argument type can be retrieved to construct IAttributeInfo
+ TAttribute{ BoxingProxy{info.Obj(), std::forward(args)}... };
+ }
+ return info;
+ }
+
+ inline IParameterInfo* FindParameter(IMethodInfo* method, const WString& parameterName, const wchar_t* macroName)
+ {
+ vint matchedCount = 0;
+ IParameterInfo* matchedParameter = nullptr;
+ for (vint i = 0; i < method->GetParameterCount(); i++)
+ {
+ auto parameter = method->GetParameter(i);
+ if (parameter->GetName() == parameterName)
+ {
+ matchedCount++;
+ matchedParameter = parameter;
+ }
+ }
+
+ CHECK_ERROR(matchedCount != 0, (WString::Unmanaged(macroName) + L"#The named parameter does not exist on the last registered method.").Buffer());
+ CHECK_ERROR(matchedCount == 1, (WString::Unmanaged(macroName) + L"#The named parameter is ambiguous on the last registered method.").Buffer());
+ return matchedParameter;
+ }
+ }
+ }
+
+#endif
+
/***********************************************************************
Type
***********************************************************************/
@@ -7486,7 +7691,7 @@ Struct
};
#define STRUCT_MEMBER(FIELDNAME)\
- fields.Add(L ## #FIELDNAME, Ptr(new StructFieldInfoFIELDNAME)>(this, &StructType::FIELDNAME, L ## #FIELDNAME)));
+ AddField(Ptr(new StructFieldInfoFIELDNAME)>(this, &StructType::FIELDNAME, L ## #FIELDNAME)));
/***********************************************************************
Class
@@ -7528,6 +7733,28 @@ Class
};\
};
+#ifndef VCZH_DEBUG_NO_REFLECTION
+
+#define ATTRIBUTE_TYPE(TYPE, ...)\
+ RegisterAttribute(nullptr, detail::attribute_macro::MakeAttributeInfo(__VA_ARGS__));
+
+#define ATTRIBUTE_MEMBER(TYPE, ...)\
+ {\
+ auto attributeTargetMember = GetLastRegisteredMember();\
+ CHECK_ERROR(attributeTargetMember != nullptr, L"ATTRIBUTE_MEMBER#This macro must appear after a reflected member.");\
+ RegisterAttribute(attributeTargetMember, detail::attribute_macro::MakeAttributeInfo(__VA_ARGS__));\
+ }
+
+#define ATTRIBUTE_PARAMETER(PARAMETER_NAME, TYPE, ...)\
+ {\
+ auto attributeTargetMethod = dynamic_cast(GetLastRegisteredMember());\
+ CHECK_ERROR(attributeTargetMethod != nullptr, L"ATTRIBUTE_PARAMETER#This macro must appear after a reflected method or constructor.");\
+ auto attributeTargetParameter = detail::attribute_macro::FindParameter(attributeTargetMethod, WString::Unmanaged(PARAMETER_NAME), L"ATTRIBUTE_PARAMETER");\
+ RegisterAttribute(attributeTargetParameter, detail::attribute_macro::MakeAttributeInfo(__VA_ARGS__));\
+ }
+
+#endif
+
/***********************************************************************
Interface
***********************************************************************/
@@ -7854,6 +8081,8 @@ Predefined Types
F(ISerializableType) \
F(ITypeInfo) \
F(ITypeInfo::Decorator) \
+ F(IAttributeInfo) \
+ F(IAttributeBag) \
F(IMemberInfo) \
F(IEventHandler) \
F(IEventInfo) \
diff --git a/Import/VlppWorkflowCompiler.cpp b/Import/VlppWorkflowCompiler.cpp
index 502bdf28..4292d077 100644
--- a/Import/VlppWorkflowCompiler.cpp
+++ b/Import/VlppWorkflowCompiler.cpp
@@ -382,11 +382,6 @@ WfLexicalScopeManager
, cpuArchitecture(_cpuArchitecture)
{
workflowParserHandler = glr::InstallDefaultErrorMessageGenerator(workflowParser, errors);
- attributes.Add({ L"cpp", L"File" }, TypeInfoRetriver::CreateTypeInfo());
- attributes.Add({ L"cpp", L"UserImpl" }, TypeInfoRetriver::CreateTypeInfo());
- attributes.Add({ L"cpp", L"Private" }, TypeInfoRetriver::CreateTypeInfo());
- attributes.Add({ L"cpp", L"Protected" }, TypeInfoRetriver::CreateTypeInfo());
- attributes.Add({ L"cpp", L"Friend" }, TypeInfoRetriver::CreateTypeInfo());
switch (cpuArchitecture)
{
@@ -416,6 +411,75 @@ WfLexicalScopeManager
workflowParser.OnError.Remove(workflowParserHandler);
}
+ WString WfLexicalScopeManager::GetWorkflowAttributeTypeName(const WString& category, const WString& name)
+ {
+ auto IsId = [](const WString& s)
+ {
+ for (vint i = 0; i < s.Length(); i++)
+ {
+ auto c = s[i];
+ if (!((c >= L'0' && c <= L'9') || (c >= L'a' && c <= L'z') || (c >= L'A' && c <= L'Z') || c == L'_'))
+ {
+ return false;
+ }
+ }
+ return s.Length() > 0;
+ };
+
+ if (!IsId(category) || !IsId(name)) return L"";
+ return L"system::workflow_attributes::att_" + category + L"_" + name;
+ }
+
+ WfLexicalScopeManager::ResolvedWorkflowAttribute WfLexicalScopeManager::ResolveWorkflowAttribute(const WString& category, const WString& name)
+ {
+ ResolvedWorkflowAttribute info;
+ auto key = AttributeKey(category, name);
+ if (auto index = resolvedAttributes.Keys().IndexOf(key); index != -1)
+ {
+ return resolvedAttributes.Values()[index];
+ }
+
+ auto typeName = GetWorkflowAttributeTypeName(category, name);
+ if (typeName == L"")
+ {
+ resolvedAttributes.Add(key, info);
+ return info;
+ }
+
+ auto td = reflection::description::GetTypeDescriptor(typeName);
+ if (!td || td->GetTypeDescriptorFlags() != TypeDescriptorFlags::Struct)
+ {
+ resolvedAttributes.Add(key, info);
+ return info;
+ }
+
+ auto propCount = td->GetPropertyCount();
+ if (propCount == 0)
+ {
+ info.exists = true;
+ info.attributeType = td;
+ info.hasArgument = false;
+ info.argumentType = nullptr;
+ }
+ else if (propCount == 1)
+ {
+ info.exists = true;
+ info.attributeType = td;
+ info.hasArgument = true;
+ info.argumentType = CopyTypeInfo(td->GetProperty(0)->GetReturn());
+ }
+ else
+ {
+ info.exists = false;
+ info.attributeType = nullptr;
+ info.hasArgument = false;
+ info.argumentType = nullptr;
+ }
+
+ resolvedAttributes.Add(key, info);
+ return info;
+ }
+
vint WfLexicalScopeManager::AddModule(const WString& moduleCode)
{
if (auto module = ParseModule(moduleCode, workflowParser, usedCodeIndex))
@@ -466,8 +530,10 @@ WfLexicalScopeManager
usedCodeIndex = 0;
}
+ rpcMetadata = nullptr;
usedTempVars = 0;
errors.Clear();
+ resolvedAttributes.Clear();
namespaceNames.Clear();
nodeScopes.Clear();
checkedScopes_DuplicatedSymbol.Clear();
@@ -493,7 +559,7 @@ WfLexicalScopeManager
#define EXECUTE_CALLBACK(EXPR) if (callback) callback->EXPR
- void WfLexicalScopeManager::Rebuild(bool keepTypeDescriptorNames, IWfCompilerCallback* callback)
+ void WfLexicalScopeManager::Rebuild(bool keepTypeDescriptorNames, IWfCompilerCallback* callback, bool validateRpc)
{
EXECUTE_CALLBACK(OnLoadEnvironment());
Clear(keepTypeDescriptorNames, false);
@@ -543,6 +609,16 @@ WfLexicalScopeManager
ValidateModuleSemantic(this, module);
}
+ EXIT_IF_ERRORS_EXIST;
+ PopulateAttributesOnTypeDescriptors(this);
+ if (validateRpc)
+ {
+ for (auto module : modules)
+ {
+ ValidateModuleRPC(this, module);
+ }
+ }
+
#undef EXIT_IF_ERRORS_EXIST
}
@@ -835,6 +911,7 @@ WfLexicalScopeManager
}
}
+
/***********************************************************************
.\ANALYZER\WFANALYZER_BUILDGLOBALNAMEFROMMODULES.CPP
***********************************************************************/
@@ -1404,10 +1481,20 @@ BuildScopeForDeclaration
{
auto config = Ptr(new WfLexicalFunctionConfig);
resultScope->functionConfig = config;
+ resultScope->ownerNodeSource = source;
- config->lambda = false;
- config->thisAccessable = true;
- config->parentThisAccessable = false;
+ if (dynamic_cast(source))
+ {
+ config->lambda = true;
+ config->thisAccessable = true;
+ config->parentThisAccessable = true;
+ }
+ else
+ {
+ config->lambda = false;
+ config->thisAccessable = true;
+ config->parentThisAccessable = false;
+ }
}
BuildScopeForStatement(manager, resultScope, node->statement);
}
@@ -2059,6 +2146,11 @@ BuildScopeForExpression
{
manager->CreateLambdaCapture(node, capture);
}
+
+ void Visit(WfDestructorDeclaration* node)override
+ {
+ manager->CreateLambdaCapture(node, capture);
+ }
};
void Visit(WfNewInterfaceExpression* node)override
@@ -4497,6 +4589,11 @@ WfErrors
return MakeParsingError(node, L"G13: Class \"" + classDecl->name.value + L"\" has too many destructors.");
}
+ glr::ParsingError WfErrors::TooManyDestructor(WfDestructorDeclaration* node, WfNewInterfaceExpression* newInterfaceExpr)
+ {
+ return MakeParsingError(node, L"G13: New interface expression has too many destructors.");
+ }
+
glr::ParsingError WfErrors::AutoPropertyShouldBeInitialized(WfAutoPropertyDeclaration* node)
{
return MakeParsingError(node, L"G13: Auto property \"" + node->name.value + L"\" should be initialized.");
@@ -4507,6 +4604,96 @@ WfErrors
return MakeParsingError(node, L"G13: Auto property \"" + node->name.value + L"\" cannot be initialized in interface \"" + classDecl->name.value + L"\".");
}
+ glr::ParsingError WfErrors::RpcInterfaceCanOnlyApplyToInterface(WfAttribute* node, const WString& fullName)
+ {
+ return MakeParsingError(node, L"H0: @rpc:Interface can only apply to an interface definition, but not \"" + fullName + L"\".");
+ }
+
+ glr::ParsingError WfErrors::RpcInterfaceBaseNotSerializable(WfType* node, const WString& interfaceFullName, const WString& baseFullName)
+ {
+ return MakeParsingError(node, L"H1: @rpc:Interface cannot be applied to interface \"" + interfaceFullName + L"\" because its base type \"" + baseFullName + L"\" is not serializable.");
+ }
+
+ glr::ParsingError WfErrors::RpcInterfaceMemberNotSerializable(WfDeclaration* node, const WString& interfaceFullName, const WString& memberName)
+ {
+ return MakeParsingError(node, L"H2: @rpc:Interface cannot be applied to interface \"" + interfaceFullName + L"\" because its member \"" + memberName + L"\" is not serializable.");
+ }
+
+ glr::ParsingError WfErrors::RpcInterfaceMemberNotSerializable(WfFunctionArgument* node, const WString& interfaceFullName, const WString& memberName)
+ {
+ return MakeParsingError(node, L"H2: @rpc:Interface cannot be applied to interface \"" + interfaceFullName + L"\" because its member \"" + memberName + L"\" is not serializable.");
+ }
+
+ glr::ParsingError WfErrors::RpcCtorCanOnlyApplyToRpcInterface(WfAttribute* node)
+ {
+ return MakeParsingError(node, L"H3: @rpc:Ctor can only apply to an interface definition with @rpc:Interface.");
+ }
+
+ glr::ParsingError WfErrors::RpcAttributeCanOnlyApplyToPropertyMethodOrParameter(WfAttribute* node, const WString& attributeName)
+ {
+ return MakeParsingError(node, L"H4: @rpc:" + attributeName + L" can only apply to a property, a method or a parameter.");
+ }
+
+ glr::ParsingError WfErrors::RpcAttributeCanOnlyBeUsedInsideRpcInterface(WfAttribute* node, const WString& attributeName)
+ {
+ return MakeParsingError(node, L"H5: @rpc:" + attributeName + L" can only be used inside an interface type with @rpc:Interface.");
+ }
+
+ glr::ParsingError WfErrors::RpcAttributeRequiresStrongTypedCollection(WfAttribute* node, const WString& attributeName, const WString& memberName)
+ {
+ return MakeParsingError(node, L"H6: @rpc:" + attributeName + L" cannot be used on member \"" + memberName + L"\" because it does not have a strong typed collection types.");
+ }
+
+ glr::ParsingError WfErrors::RpcAttributeCanOnlyApplyToProperty(WfAttribute* node, const WString& attributeName)
+ {
+ return MakeParsingError(node, L"H7: @rpc:" + attributeName + L" can only apply to a property.");
+ }
+
+ glr::ParsingError WfErrors::RpcAttributeCannotCoexistWithOther(WfAttribute* node, const WString& attributeName, const WString& otherAttributeName, const WString& memberName)
+ {
+ return MakeParsingError(node, L"H8: @rpc:" + attributeName + L" cannot be used on member \"" + memberName + L"\" because it already has @rpc:" + otherAttributeName + L".");
+ }
+
+ glr::ParsingError WfErrors::RpcGeneratedNameConflict(WfDeclaration* node, const WString& category, const WString& generatedName)
+ {
+ return MakeParsingError(node, L"H9: RPC generated " + category + L" name \"" + generatedName + L"\" is duplicated.");
+ }
+
+ glr::ParsingError WfErrors::RpcReservedTypeInReturnValue(WfDeclaration* node, const WString& interfaceFullName, const WString& memberName, const WString& typeName)
+ {
+ return MakeParsingError(node, L"H10: @rpc:Interface cannot be applied to interface \"" + interfaceFullName + L"\" because its member \"" + memberName + L"\" uses reserved RPC type \"" + typeName + L"\" in a return value.");
+ }
+
+ glr::ParsingError WfErrors::RpcReservedTypeInFunctionArgument(WfFunctionArgument* node, const WString& interfaceFullName, const WString& memberName, const WString& typeName)
+ {
+ return MakeParsingError(node, L"H11: @rpc:Interface cannot be applied to interface \"" + interfaceFullName + L"\" because its function argument \"" + memberName + L"\" uses reserved RPC type \"" + typeName + L"\".");
+ }
+
+ glr::ParsingError WfErrors::RpcReservedTypeInEventArgument(WfType* node, const WString& interfaceFullName, const WString& memberName, const WString& typeName)
+ {
+ return MakeParsingError(node, L"H12: @rpc:Interface cannot be applied to interface \"" + interfaceFullName + L"\" because its event argument \"" + memberName + L"\" uses reserved RPC type \"" + typeName + L"\".");
+ }
+
+ glr::ParsingError WfErrors::RpcWrapperGenerationRequiresPropertyMode(WfPropertyDeclaration* node, const WString& memberName)
+ {
+ return MakeParsingError(node, L"I0: RPC wrapper generation requires property \"" + memberName + L"\" to have @rpc:Cached or @rpc:Dynamic.");
+ }
+
+ glr::ParsingError WfErrors::RpcWrapperGenerationRequiresCollectionReturnTransfer(WfFunctionDeclaration* node, const WString& memberName)
+ {
+ return MakeParsingError(node, L"I1: RPC wrapper generation requires method \"" + memberName + L"\" to have @rpc:Byval or @rpc:Byref on its collection return value.");
+ }
+
+ glr::ParsingError WfErrors::RpcWrapperGenerationRequiresCollectionParameterTransfer(WfFunctionArgument* node, const WString& memberName)
+ {
+ return MakeParsingError(node, L"I2: RPC wrapper generation requires parameter \"" + memberName + L"\" to have @rpc:Byval or @rpc:Byref because it is a collection parameter.");
+ }
+
+ glr::ParsingError WfErrors::RpcMangledNameConflict(WfDeclaration* node, const WString& mangledName, const WString& previousFullName, const WString& currentFullName)
+ {
+ return MakeParsingError(node, L"I3: RPC mangled name \"" + mangledName + L"\" is ambiguous between \"" + previousFullName + L"\" and \"" + currentFullName + L"\".");
+ }
+
glr::ParsingError WfErrors::CppUnableToDecideClassOrder(WfClassDeclaration* node, collections::List& tds)
{
auto description = ListToErrorMessage(tds, [](auto&& td) { return td->GetTypeName(); });
@@ -4522,6 +4709,7 @@ WfErrors
}
}
+
/***********************************************************************
.\ANALYZER\WFANALYZER_EXPANDBINDEXPRESSION.CPP
***********************************************************************/
@@ -9453,6 +9641,4482 @@ ExpandCoProviderStatement
}
}
+/***********************************************************************
+.\ANALYZER\WFANALYZER_GENERATERPC.CPP
+***********************************************************************/
+
+namespace vl
+{
+ namespace workflow
+ {
+ namespace analyzer
+ {
+ using namespace collections;
+
+ namespace rpc_generating
+ {
+ using namespace copy_visitor;
+ using namespace reflection::description;
+
+ bool IsRpcAttribute(WfAttribute* attribute, const wchar_t* name)
+ {
+ return attribute
+ && attribute->category.value == L"rpc"
+ && attribute->name.value == name;
+ }
+
+ bool HasRpcAttribute(List>& attributes, const wchar_t* name)
+ {
+ for (auto attribute : attributes)
+ {
+ if (IsRpcAttribute(attribute.Obj(), name))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool HasAttribute(IAttributeBag* bag, ITypeDescriptor* attrTd)
+ {
+ if (!bag || !attrTd)
+ {
+ return false;
+ }
+
+ for (vint i = 0; i < bag->GetAttributeCount(); i++)
+ {
+ if (bag->GetAttribute(i)->GetAttributeType() == attrTd)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool IsStrongTypedCollectionType(WfType* type)
+ {
+ return dynamic_cast(type) != nullptr
+ || dynamic_cast(type) != nullptr
+ || dynamic_cast(type) != nullptr;
+ }
+
+ bool IsRpcStrongTypedCollection(ITypeInfo* type)
+ {
+ if (!type || type->GetDecorator() != ITypeInfo::SharedPtr) return false;
+ auto genericType = type->GetElementType();
+ if (!genericType || genericType->GetDecorator() != ITypeInfo::Generic) return false;
+
+ auto collectionType = genericType->GetElementType();
+ if (!collectionType || collectionType->GetDecorator() != ITypeInfo::TypeDescriptor) return false;
+
+ auto collectionTd = collectionType->GetTypeDescriptor();
+ if (collectionTd == GetTypeDescriptor()
+ || collectionTd == GetTypeDescriptor()
+ || collectionTd == GetTypeDescriptor()
+ || collectionTd == GetTypeDescriptor())
+ {
+ return genericType->GetGenericArgumentCount() == 1;
+ }
+
+ if (collectionTd == GetTypeDescriptor()
+ || collectionTd == GetTypeDescriptor())
+ {
+ return genericType->GetGenericArgumentCount() == 2;
+ }
+
+ switch (type->GetHint())
+ {
+ case TypeInfoHint::LazyList:
+ case TypeInfoHint::Array:
+ case TypeInfoHint::List:
+ return genericType->GetGenericArgumentCount() == 1;
+ case TypeInfoHint::Dictionary:
+ return genericType->GetGenericArgumentCount() == 2;
+ default:
+ return false;
+ }
+ }
+
+ ITypeInfo* GetRpcStrongTypedCollectionElementType(ITypeInfo* type)
+ {
+ if (!IsRpcStrongTypedCollection(type)) return nullptr;
+ auto genericType = type->GetElementType();
+ if (!genericType || genericType->GetDecorator() != ITypeInfo::Generic) return nullptr;
+ switch (genericType->GetGenericArgumentCount())
+ {
+ case 1:
+ return genericType->GetGenericArgument(0);
+ case 2:
+ return genericType->GetGenericArgument(1);
+ default:
+ return nullptr;
+ }
+ }
+
+ bool IsRpcObservableStrongTypedCollection(ITypeInfo* type)
+ {
+ if (!IsRpcStrongTypedCollection(type)) return false;
+ auto genericType = type->GetElementType();
+ if (!genericType || genericType->GetDecorator() != ITypeInfo::Generic) return false;
+ auto collectionType = genericType->GetElementType();
+ if (!collectionType || collectionType->GetDecorator() != ITypeInfo::TypeDescriptor) return false;
+ return collectionType->GetTypeDescriptor() == GetTypeDescriptor();
+ }
+
+ bool IsRpcInterfaceSharedType(ITypeInfo* type, const SortedList& rpcInterfaceTds)
+ {
+ if (!type || type->GetDecorator() != ITypeInfo::SharedPtr) return false;
+ auto elementType = type->GetElementType();
+ if (!elementType || elementType->GetDecorator() != ITypeInfo::TypeDescriptor) return false;
+ auto td = elementType->GetTypeDescriptor();
+ return td
+ && (td->GetTypeDescriptorFlags() & TypeDescriptorFlags::Interface) != TypeDescriptorFlags::Undefined
+ && rpcInterfaceTds.Contains(td);
+ }
+
+ bool IsSharedInterfaceType(ITypeInfo* type)
+ {
+ if (!type || type->GetDecorator() != ITypeInfo::SharedPtr) return false;
+ auto elementType = type->GetElementType();
+ if (!elementType) return false;
+ if (elementType->GetDecorator() == ITypeInfo::Generic)
+ {
+ elementType = elementType->GetElementType();
+ }
+ if (!elementType || elementType->GetDecorator() != ITypeInfo::TypeDescriptor) return false;
+ auto td = elementType->GetTypeDescriptor();
+ return td
+ && (td->GetTypeDescriptorFlags() & TypeDescriptorFlags::Interface) != TypeDescriptorFlags::Undefined;
+ }
+
+ IMethodInfo* FindRpcMethodInfo(WfLexicalScopeManager* manager, WfClassDeclaration* interfaceDecl, WfFunctionDeclaration* methodDecl, ITypeDescriptor* typeDescriptor)
+ {
+ if (auto index = manager->declarationMemberInfos.Keys().IndexOf(methodDecl); index != -1)
+ {
+ if (auto methodInfo = dynamic_cast(manager->declarationMemberInfos.Values()[index].Obj()))
+ {
+ return methodInfo;
+ }
+ }
+
+ if (!typeDescriptor) return nullptr;
+ auto group = typeDescriptor->GetMethodGroupByName(methodDecl->name.value, false);
+ if (!group) return nullptr;
+
+ vint overloadIndex = 0;
+ for (auto declaration : interfaceDecl->declarations)
+ {
+ if (declaration.Obj() == methodDecl)
+ {
+ break;
+ }
+ if (auto previousMethod = declaration.Cast())
+ {
+ if (previousMethod->name.value == methodDecl->name.value)
+ {
+ overloadIndex++;
+ }
+ }
+ }
+ return overloadIndex < group->GetMethodCount() ? group->GetMethod(overloadIndex) : nullptr;
+ }
+
+ bool IsRpcStrongTypedCollectionContainingRpcInterface(ITypeInfo* type, const SortedList& rpcInterfaceTds)
+ {
+ auto elementType = GetRpcStrongTypedCollectionElementType(type);
+ if (!elementType) return false;
+ return IsRpcInterfaceSharedType(elementType, rpcInterfaceTds)
+ || IsRpcStrongTypedCollectionContainingRpcInterface(elementType, rpcInterfaceTds);
+ }
+
+ bool IsDefaultRpcTransferByref(ITypeInfo* type, const SortedList& rpcInterfaceTds)
+ {
+ return IsRpcStrongTypedCollection(type)
+ && (IsRpcObservableStrongTypedCollection(type)
+ || IsRpcStrongTypedCollectionContainingRpcInterface(type, rpcInterfaceTds));
+ }
+
+ void SplitTypeFullName(const WString& typeFullName, List& fragments)
+ {
+ vint start = 0;
+ while (start <= typeFullName.Length())
+ {
+ vint separator = -1;
+ for (vint i = start; i + 1 < typeFullName.Length(); i++)
+ {
+ if (typeFullName[i] == L':' && typeFullName[i + 1] == L':')
+ {
+ separator = i;
+ break;
+ }
+ }
+ if (separator == -1)
+ {
+ fragments.Add(typeFullName.Sub(start, typeFullName.Length() - start));
+ break;
+ }
+
+ fragments.Add(typeFullName.Sub(start, separator - start));
+ start = separator + 2;
+ }
+ }
+
+ WString MangleRpcFullName(const WString& fullName)
+ {
+ WString mangled;
+ for (vint i = 0; i < fullName.Length(); i++)
+ {
+ if (i + 1 < fullName.Length() && fullName[i] == L':' && fullName[i + 1] == L':')
+ {
+ mangled += L"__";
+ i++;
+ }
+ else if (fullName[i] == L'.' || fullName[i] == L'(' || fullName[i] == L')' || fullName[i] == L',')
+ {
+ mangled += L"_";
+ }
+ else
+ {
+ mangled += WString::FromChar(fullName[i]);
+ }
+ }
+ return mangled;
+ }
+
+ WfDeclaration* FindRpcDeclaration(WfLexicalScopeManager* manager, const WString& fullName)
+ {
+ if (auto index = manager->rpcMetadata->typeNames.Keys().IndexOf(fullName); index != -1)
+ {
+ return manager->rpcMetadata->typeNames.Values()[index];
+ }
+ if (auto index = manager->rpcMetadata->methodNames.Keys().IndexOf(fullName); index != -1)
+ {
+ return manager->rpcMetadata->methodNames.Values()[index];
+ }
+ if (auto index = manager->rpcMetadata->eventNames.Keys().IndexOf(fullName); index != -1)
+ {
+ return manager->rpcMetadata->eventNames.Values()[index];
+ }
+ return nullptr;
+ }
+
+ template
+ WString FindFullName(const Dictionary& names, TDecl* declaration)
+ {
+ for (vint i = 0; i < names.Count(); i++)
+ {
+ if (names.Values()[i] == declaration)
+ {
+ return names.Keys()[i];
+ }
+ }
+ return L"";
+ }
+
+ ITypeDescriptor* FindRpcTypeDescriptor(WfLexicalScopeManager* manager, const WString& fullName)
+ {
+ for (vint i = 0; i < manager->declarationTypes.Count(); i++)
+ {
+ auto typeDescriptor = manager->declarationTypes.Values()[i].Obj();
+ if (typeDescriptor && typeDescriptor->GetTypeName() == fullName)
+ {
+ return typeDescriptor;
+ }
+ }
+ return nullptr;
+ }
+
+ Ptr CopyType(WfType* type)
+ {
+ AstVisitor copier;
+ return copier.CopyNode(type);
+ }
+
+ Ptr CreatePredefinedType(WfPredefinedTypeName name)
+ {
+ auto type = Ptr(new WfPredefinedType);
+ type->name = name;
+ return type;
+ }
+
+ Ptr CreateQualifiedType(const WString& fullName)
+ {
+ List fragments;
+ SplitTypeFullName(fullName, fragments);
+ if (fragments.Count() == 0)
+ {
+ return nullptr;
+ }
+
+ Ptr type;
+ for (vint i = 0; i < fragments.Count(); i++)
+ {
+ if (i == 0)
+ {
+ auto top = Ptr(new WfReferenceType);
+ top->name.value = fragments[i];
+ type = top;
+ }
+ else
+ {
+ auto child = Ptr(new WfChildType);
+ child->parent = type;
+ child->name.value = fragments[i];
+ type = child;
+ }
+ }
+ return type;
+ }
+
+ Ptr CreateTopQualifiedType(const WString& fullName)
+ {
+ List fragments;
+ SplitTypeFullName(fullName, fragments);
+ if (fragments.Count() == 0)
+ {
+ return nullptr;
+ }
+
+ Ptr type;
+ for (vint i = 0; i < fragments.Count(); i++)
+ {
+ if (i == 0)
+ {
+ auto top = Ptr(new WfTopQualifiedType);
+ top->name.value = fragments[i];
+ type = top;
+ }
+ else
+ {
+ auto child = Ptr(new WfChildType);
+ child->parent = type;
+ child->name.value = fragments[i];
+ type = child;
+ }
+ }
+ return type;
+ }
+
+ Ptr CreateSharedType(const WString& fullName)
+ {
+ auto type = Ptr(new WfSharedPointerType);
+ type->element = CreateQualifiedType(fullName);
+ return type;
+ }
+
+ Ptr CreateRawType(const WString& fullName)
+ {
+ auto type = Ptr(new WfRawPointerType);
+ type->element = CreateQualifiedType(fullName);
+ return type;
+ }
+
+ Ptr CreateNullableType(const WString& fullName)
+ {
+ auto type = Ptr(new WfNullableType);
+ type->element = CreateQualifiedType(fullName);
+ return type;
+ }
+
+ Ptr CreateMapType(Ptr keyType, Ptr valueType)
+ {
+ auto type = Ptr(new WfMapType);
+ type->writability = WfMapWritability::Writable;
+ type->key = keyType;
+ type->value = valueType;
+ return type;
+ }
+
+ Ptr CreateNull()
+ {
+ auto expression = Ptr(new WfLiteralExpression);
+ expression->value = WfLiteralValue::Null;
+ return expression;
+ }
+
+ Ptr CreateIsNull(Ptr expression)
+ {
+ auto testing = Ptr(new WfTypeTestingExpression);
+ testing->test = WfTypeTesting::IsNull;
+ testing->expression = expression;
+ return testing;
+ }
+
+ Ptr CreateIsNotNull(Ptr expression)
+ {
+ auto testing = Ptr(new WfTypeTestingExpression);
+ testing->test = WfTypeTesting::IsNotNull;
+ testing->expression = expression;
+ return testing;
+ }
+
+ Ptr CreateBool(bool value)
+ {
+ auto expression = Ptr(new WfLiteralExpression);
+ expression->value = value ? WfLiteralValue::True : WfLiteralValue::False;
+ return expression;
+ }
+
+ Ptr CreateInt(vint value)
+ {
+ auto expression = Ptr(new WfIntegerExpression);
+ expression->value.value = itow(value);
+ return expression;
+ }
+
+ Ptr CreateString(const WString& value)
+ {
+ auto expression = Ptr(new WfStringExpression);
+ expression->value.value = value;
+ return expression;
+ }
+
+ Ptr CreateReference(const WString& name)
+ {
+ auto expression = Ptr(new WfReferenceExpression);
+ expression->name.value = name;
+ return expression;
+ }
+
+ Ptr CreateThis()
+ {
+ return Ptr(new WfThisExpression);
+ }
+
+ Ptr CreateQualifiedExpression(const WString& fullName)
+ {
+ List fragments;
+ SplitTypeFullName(fullName, fragments);
+ if (fragments.Count() == 0)
+ {
+ return nullptr;
+ }
+
+ Ptr expression = CreateReference(fragments[0]);
+ for (vint i = 1; i < fragments.Count(); i++)
+ {
+ auto child = Ptr(new WfChildExpression);
+ child->parent = expression;
+ child->name.value = fragments[i];
+ expression = child;
+ }
+ return expression;
+ }
+
+ Ptr CreateMember(Ptr parent, const WString& name)
+ {
+ auto expression = Ptr(new WfMemberExpression);
+ expression->parent = parent;
+ expression->name.value = name;
+ return expression;
+ }
+
+ Ptr CreateBinary(WfBinaryOperator op, Ptr first, Ptr second)
+ {
+ auto expression = Ptr(new WfBinaryExpression);
+ expression->op = op;
+ expression->first = first;
+ expression->second = second;
+ return expression;
+ }
+
+ Ptr CreateUnary(WfUnaryOperator op, Ptr operand)
+ {
+ auto expression = Ptr(new WfUnaryExpression);
+ expression->op = op;
+ expression->operand = operand;
+ return expression;
+ }
+
+ Ptr CreateAssign(Ptr left, Ptr right)
+ {
+ return CreateBinary(WfBinaryOperator::Assign, left, right);
+ }
+
+ Ptr CreateIndex(Ptr collection, Ptr index)
+ {
+ return CreateBinary(WfBinaryOperator::Index, collection, index);
+ }
+
+ Ptr CreateCast(Ptr type, Ptr expression)
+ {
+ auto cast = Ptr(new WfTypeCastingExpression);
+ cast->strategy = WfTypeCastingStrategy::Strong;
+ cast->type = type;
+ cast->expression = expression;
+ return cast;
+ }
+
+ Ptr CreateWeakCast(Ptr type, Ptr expression)
+ {
+ auto cast = Ptr(new WfTypeCastingExpression);
+ cast->strategy = WfTypeCastingStrategy::Weak;
+ cast->type = type;
+ cast->expression = expression;
+ return cast;
+ }
+
+ Ptr CreateInfer(Ptr expression, Ptr type)
+ {
+ auto infer = Ptr(new WfInferExpression);
+ infer->expression = expression;
+ infer->type = type;
+ return infer;
+ }
+
+ Ptr CreateConstructorArgument(Ptr key, Ptr value)
+ {
+ auto argument = Ptr(new WfConstructorArgument);
+ argument->key = key;
+ argument->value = value;
+ return argument;
+ }
+
+ Ptr CreateConstructor()
+ {
+ return Ptr(new WfConstructorExpression);
+ }
+
+ Ptr CreateRpcExceptionExpression(Ptr message)
+ {
+ auto constructor = CreateConstructor();
+ constructor->arguments.Add(CreateConstructorArgument(CreateReference(L"message"), message));
+ return CreateInfer(constructor, CreateQualifiedType(L"system::RpcException"));
+ }
+
+ Ptr CreateRpcEventExceptionMapType()
+ {
+ return CreateMapType(CreatePredefinedType(WfPredefinedTypeName::Int), CreateQualifiedType(L"system::RpcException"));
+ }
+
+ Ptr CreateNewClass(Ptr type)
+ {
+ auto expression = Ptr(new WfNewClassExpression);
+ expression->type = type;
+ return expression;
+ }
+
+ Ptr CreateNewInterface(Ptr type)
+ {
+ auto expression = Ptr(new WfNewInterfaceExpression);
+ expression->type = type;
+ return expression;
+ }
+
+ Ptr CreateExpressionStatement(Ptr expression)
+ {
+ auto statement = Ptr(new WfExpressionStatement);
+ statement->expression = expression;
+ return statement;
+ }
+
+ Ptr CreateReturn(Ptr expression)
+ {
+ auto statement = Ptr(new WfReturnStatement);
+ statement->expression = expression;
+ return statement;
+ }
+
+ Ptr CreateRaise(const WString& message)
+ {
+ auto statement = Ptr(new WfRaiseExceptionStatement);
+ statement->expression = CreateString(message);
+ return statement;
+ }
+
+ Ptr CreateRaise(Ptr expression)
+ {
+ auto statement = Ptr(new WfRaiseExceptionStatement);
+ statement->expression = expression;
+ return statement;
+ }
+
+ Ptr CreateVariableDeclaration(const WString& name, Ptr type, Ptr expression)
+ {
+ auto declaration = Ptr(new WfVariableDeclaration);
+ declaration->name.value = name;
+ declaration->type = type;
+ declaration->expression = expression;
+ return declaration;
+ }
+
+ Ptr CreateVariableStatement(const WString& name, Ptr type, Ptr expression)
+ {
+ auto statement = Ptr(new WfVariableStatement);
+ statement->variable = CreateVariableDeclaration(name, type, expression);
+ return statement;
+ }
+
+ Ptr CreateInferredVariableStatement(const WString& name, Ptr expression)
+ {
+ return CreateVariableStatement(name, nullptr, expression);
+ }
+
+ Ptr CreateIf(Ptr condition, Ptr trueBranch, Ptr falseBranch)
+ {
+ auto statement = Ptr(new WfIfStatement);
+ statement->expression = condition;
+ statement->trueBranch = trueBranch;
+ statement->falseBranch = falseBranch;
+ return statement;
+ }
+
+ Ptr CreateTry(Ptr protectedStatement, const WString& name, Ptr catchStatement, Ptr finallyStatement)
+ {
+ auto statement = Ptr(new WfTryStatement);
+ statement->protectedStatement = protectedStatement;
+ statement->name.value = name;
+ statement->catchStatement = catchStatement;
+ statement->finallyStatement = finallyStatement;
+ return statement;
+ }
+
+ Ptr CreateTryCatch(Ptr protectedStatement, const WString& name, Ptr catchStatement)
+ {
+ return CreateTry(protectedStatement, name, catchStatement, nullptr);
+ }
+
+ Ptr CreateForEach(const WString& name, Ptr collection, Ptr body)
+ {
+ auto statement = Ptr(new WfForEachStatement);
+ statement->name.value = name;
+ statement->direction = WfForEachDirection::Normal;
+ statement->collection = collection;
+ statement->statement = body;
+ return statement;
+ }
+
+ Ptr CreateBlock()
+ {
+ return Ptr(new WfBlockStatement);
+ }
+
+ void AddStatement(Ptr block, Ptr statement)
+ {
+ block->statements.Add(statement);
+ }
+
+ void AddRpcMethodExceptionRaise(Ptr block, Ptr value)
+ {
+ AddStatement(
+ block,
+ CreateExpressionStatement(CreateCall(
+ CreateQualifiedExpression(L"system::IRpcLifecycle::ReadMethodException"),
+ value)));
+ }
+
+ void AddRpcEventExceptionMapSet(Ptr block, const WString& mapName, Ptr clientId, Ptr message)
+ {
+ AddStatement(block, CreateExpressionStatement(CreateCall(
+ CreateMember(CreateReference(mapName), L"Set"),
+ clientId,
+ CreateRpcExceptionExpression(message))));
+ }
+
+ void AddRpcEventExceptionRaise(Ptr block, Ptr value)
+ {
+ AddStatement(
+ block,
+ CreateExpressionStatement(CreateCall(
+ CreateQualifiedExpression(L"system::IRpcLifecycle::ReadEventException"),
+ value)));
+ }
+
+ Ptr CreateFunctionArgument(const WString& name, Ptr type)
+ {
+ auto argument = Ptr(new WfFunctionArgument);
+ argument->name.value = name;
+ argument->type = type;
+ return argument;
+ }
+
+ Ptr CreateFunctionDeclaration(const WString& name, Ptr returnType, WfFunctionKind kind, WfFunctionAnonymity anonymity)
+ {
+ auto declaration = Ptr(new WfFunctionDeclaration);
+ declaration->name.value = name;
+ declaration->returnType = returnType;
+ declaration->functionKind = kind;
+ declaration->anonymity = anonymity;
+ declaration->statement = CreateBlock();
+ return declaration;
+ }
+
+ Ptr CreateFunctionExpression(Ptr declaration)
+ {
+ auto expression = Ptr(new WfFunctionExpression);
+ expression->function = declaration;
+ return expression;
+ }
+
+ Ptr CreateClassDeclaration(const WString& name)
+ {
+ auto declaration = Ptr(new WfClassDeclaration);
+ declaration->name.value = name;
+ declaration->kind = WfClassKind::Class;
+ declaration->constructorType = WfConstructorType::Undefined;
+ return declaration;
+ }
+
+ Ptr CreateConstructorDeclaration(WfConstructorType constructorType = WfConstructorType::SharedPtr)
+ {
+ auto declaration = Ptr(new WfConstructorDeclaration);
+ declaration->constructorType = constructorType;
+ declaration->statement = CreateBlock();
+ return declaration;
+ }
+
+ void AddSwitchCase(Ptr switchStat, Ptr expression, Ptr statement)
+ {
+ auto switchCase = Ptr(new WfSwitchCase);
+ switchCase->expression = expression;
+ switchCase->statement = statement;
+ switchStat->caseBranches.Add(switchCase);
+ }
+
+ Ptr CreateLifecycleHelperCall(const wchar_t* helperName, Ptr value, Ptr lifecycle)
+ {
+ return CreateCall(CreateQualifiedExpression(L"system::IRpcLifecycle::" + WString::Unmanaged(helperName)), value, lifecycle);
+ }
+
+ Ptr CreateRpcBoxExpression(ITypeInfo* typeInfo, bool byref, Ptr value, Ptr lifecycle)
+ {
+ if (IsSharedInterfaceType(typeInfo))
+ {
+ return CreateLifecycleHelperCall(byref ? L"RpcBoxByref" : L"RpcBoxByval", value, lifecycle);
+ }
+ return value;
+ }
+
+ Ptr CreateRpcCachedPropertyInitialValue(const RpcPropertyModel& propertyModel)
+ {
+ if (!propertyModel.typeInfo)
+ {
+ return CreateNull();
+ }
+
+ switch (propertyModel.typeInfo->GetDecorator())
+ {
+ case ITypeInfo::RawPtr:
+ case ITypeInfo::SharedPtr:
+ case ITypeInfo::Nullable:
+ return CreateNull();
+ default:
+ return CreateDefaultValue(propertyModel.typeInfo);
+ }
+ }
+
+ Ptr CreateRpcUnboxExpression(ITypeInfo* typeInfo, Ptr type, bool byref, Ptr value, Ptr lifecycle)
+ {
+ Ptr unboxed;
+ if (IsSharedInterfaceType(typeInfo))
+ {
+ auto serializable = byref
+ ? CreateCast(CreateQualifiedType(L"system::RpcObjectReference"), value)
+ : value;
+ unboxed = CreateLifecycleHelperCall(byref ? L"RpcUnboxByref" : L"RpcUnboxByval", serializable, lifecycle);
+ return IsRpcStrongTypedCollection(typeInfo) || IsStrongTypedCollectionType(type.Obj())
+ ? CreateCast(CopyType(type.Obj()), unboxed)
+ : CreateWeakCast(CopyType(type.Obj()), unboxed);
+ }
+ else
+ {
+ unboxed = value;
+ }
+ return CreateCast(CopyType(type.Obj()), unboxed);
+ }
+
+ Ptr CreateRpcCopyByvalExpression(Ptr value, Ptr lifecycle)
+ {
+ return CreateLifecycleHelperCall(L"RpcCopyByval", value, lifecycle);
+ }
+
+ bool IsVoidType(WfType* type)
+ {
+ if (auto predefined = dynamic_cast(type))
+ {
+ return predefined->name == WfPredefinedTypeName::Void;
+ }
+ if (auto child = dynamic_cast(type))
+ {
+ if (child->name.value == L"Void")
+ {
+ if (auto top = dynamic_cast(child->parent.Obj()))
+ {
+ return top->name.value == L"system";
+ }
+ }
+ }
+ return false;
+ }
+
+ bool IsRpcByvalReturn(const RpcMethodModel& methodModel)
+ {
+ return !IsVoidType(methodModel.returnType.Obj())
+ && !methodModel.returnByref
+ && (IsStrongTypedCollectionType(methodModel.returnType.Obj()) || IsRpcStrongTypedCollection(methodModel.returnTypeInfo));
+ }
+
+ void AddRpcByvalReturnValue(Ptr block, Ptr value, Ptr copiedValue)
+ {
+ AddStatement(block, CreateInferredVariableStatement(L"byvalReturnValue", CreateNewClass(CreateSharedType(L"system::RpcByvalReturnValue"))));
+ AddStatement(block, CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(L"byvalReturnValue"), L"value"), value)));
+ AddStatement(block, CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(L"byvalReturnValue"), L"slot"), CreateReference(L"_slot"))));
+ AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"_byvalReturnValues"), L"Set"), CreateReference(L"_slot"), copiedValue)));
+ AddStatement(block, CreateExpressionStatement(CreateAssign(CreateReference(L"_slot"), CreateBinary(WfBinaryOperator::Add, CreateReference(L"_slot"), CreateInt(1)))));
+ AddStatement(block, CreateReturn(CreateReference(L"byvalReturnValue")));
+ }
+
+ Ptr CreateRpcConstantReference(const wchar_t* prefix, const WString& fullName)
+ {
+ return CreateReference(WString::Unmanaged(prefix) + MangleRpcFullName(fullName));
+ }
+
+ vint GetRpcId(WfLexicalScopeManager* manager, const WString& fullName)
+ {
+ auto id = manager->rpcMetadata->orderedIds.IndexOf(fullName);
+ CHECK_ERROR(id != -1, L"RPC metadata ID list does not contain a generated RPC full name.");
+ return id;
+ }
+
+ const wchar_t* GetRpcConstantPrefix(WfLexicalScopeManager* manager, const WString& fullName)
+ {
+ if (manager->rpcMetadata->typeNames.Keys().Contains(fullName))
+ {
+ return L"rpctype_";
+ }
+ if (manager->rpcMetadata->methodNames.Keys().Contains(fullName))
+ {
+ return L"rpcmethod_";
+ }
+ if (manager->rpcMetadata->eventNames.Keys().Contains(fullName))
+ {
+ return L"rpcevent_";
+ }
+ CHECK_FAIL(L"RPC metadata ID list contains an unknown generated RPC full name.");
+ }
+
+ void AddIdLookupEntry(Ptr expression, Ptr key, Ptr value)
+ {
+ expression->arguments.Add(CreateConstructorArgument(key, value));
+ }
+
+ void CollectMangledNames(WfLexicalScopeManager* manager)
+ {
+ Dictionary mangledNames;
+ for (auto fullName : manager->rpcMetadata->orderedIds)
+ {
+ auto mangled = MangleRpcFullName(fullName);
+ auto index = mangledNames.Keys().IndexOf(mangled);
+ if (index != -1 && mangledNames.Values()[index] != fullName)
+ {
+ manager->errors.Add(WfErrors::RpcMangledNameConflict(FindRpcDeclaration(manager, fullName), mangled, mangledNames.Values()[index], fullName));
+ return;
+ }
+ if (index == -1)
+ {
+ mangledNames.Add(mangled, fullName);
+ }
+ }
+ }
+
+ List BuildInterfaceModels(WfLexicalScopeManager* manager)
+ {
+ List interfaces;
+ auto rpcByrefAttrTd = GetTypeDescriptor();
+ auto rpcCachedAttrTd = GetTypeDescriptor();
+ auto rpcDynamicAttrTd = GetTypeDescriptor();
+ SortedList rpcInterfaceTds;
+
+ for (auto typeFullName : manager->rpcMetadata->typeFullNames)
+ {
+ if (auto td = FindRpcTypeDescriptor(manager, typeFullName))
+ {
+ if (!rpcInterfaceTds.Contains(td))
+ {
+ rpcInterfaceTds.Add(td);
+ }
+ }
+ }
+
+ for (auto typeFullName : manager->rpcMetadata->typeFullNames)
+ {
+ auto typeIndex = manager->rpcMetadata->typeNames.Keys().IndexOf(typeFullName);
+ if (typeIndex == -1)
+ {
+ continue;
+ }
+
+ auto interfaceDecl = manager->rpcMetadata->typeNames.Values()[typeIndex];
+ List fragments;
+ SplitTypeFullName(typeFullName, fragments);
+
+ RpcInterfaceModel interfaceModel;
+ interfaceModel.fullName = typeFullName;
+ interfaceModel.interfaceName = fragments[fragments.Count() - 1];
+ interfaceModel.typeId = GetRpcId(manager, typeFullName);
+ interfaceModel.ctor = HasRpcAttribute(interfaceDecl->attributes, L"Ctor");
+ interfaceModel.interfaceDecl = interfaceDecl;
+ auto typeDescriptor = FindRpcTypeDescriptor(manager, typeFullName);
+
+ if (typeDescriptor)
+ {
+ for (vint i = 0; i < typeDescriptor->GetBaseTypeDescriptorCount(); i++)
+ {
+ auto baseTypeDescriptor = typeDescriptor->GetBaseTypeDescriptor(i);
+ if (!baseTypeDescriptor)
+ {
+ continue;
+ }
+
+ auto baseFullName = baseTypeDescriptor->GetTypeName();
+ if (manager->rpcMetadata->typeFullNames.Contains(baseFullName))
+ {
+ interfaceModel.baseFullNames.Add(baseFullName);
+ }
+ }
+ }
+
+ Dictionary getterPropertyIndexes;
+ Dictionary setterPropertyIndexes;
+
+ for (auto declaration : interfaceDecl->declarations)
+ {
+ if (auto propertyDecl = declaration.Cast())
+ {
+ RpcPropertyModel propertyModel;
+ propertyModel.name = propertyDecl->name.value;
+ propertyModel.type = CopyType(propertyDecl->type.Obj());
+ propertyModel.byref = HasRpcAttribute(propertyDecl->attributes, L"Byref");
+ propertyModel.cached = !HasRpcAttribute(propertyDecl->attributes, L"Dynamic");
+ propertyModel.getterName = propertyDecl->getter.value;
+ propertyModel.setterName = propertyDecl->setter.value;
+ propertyModel.valueChangedEvent = propertyDecl->valueChangedEvent.value;
+ if (!HasRpcAttribute(propertyDecl->attributes, L"Cached") && !HasRpcAttribute(propertyDecl->attributes, L"Dynamic"))
+ {
+ manager->errors.Add(WfErrors::RpcWrapperGenerationRequiresPropertyMode(propertyDecl.Obj(), typeFullName + L"." + propertyDecl->name.value));
+ }
+ interfaceModel.properties.Add(std::move(propertyModel));
+
+ auto propertyIndex = interfaceModel.properties.Count() - 1;
+ auto&& insertedProperty = interfaceModel.properties[propertyIndex];
+ if (insertedProperty.getterName != L"")
+ {
+ getterPropertyIndexes.Add(insertedProperty.getterName, propertyIndex);
+ }
+ if (insertedProperty.setterName != L"")
+ {
+ setterPropertyIndexes.Add(insertedProperty.setterName, propertyIndex);
+ }
+ }
+ }
+
+ if (typeDescriptor)
+ {
+ for (vint i = 0; i < typeDescriptor->GetPropertyCount(); i++)
+ {
+ auto propertyInfo = typeDescriptor->GetProperty(i);
+ if (!propertyInfo || propertyInfo->GetOwnerTypeDescriptor() != typeDescriptor)
+ {
+ continue;
+ }
+
+ vint propertyIndex = -1;
+ for (vint j = 0; j < interfaceModel.properties.Count(); j++)
+ {
+ if (interfaceModel.properties[j].name == propertyInfo->GetName())
+ {
+ propertyIndex = j;
+ break;
+ }
+ }
+
+ if (propertyIndex != -1)
+ {
+ auto&& propertyModel = interfaceModel.properties[propertyIndex];
+ propertyModel.typeInfo = propertyInfo->GetReturn();
+ }
+ else
+ {
+ RpcPropertyModel propertyModel;
+ propertyModel.name = propertyInfo->GetName();
+ propertyModel.type = GetTypeFromTypeInfo(propertyInfo->GetReturn());
+ propertyModel.typeInfo = propertyInfo->GetReturn();
+ propertyModel.byref = HasAttribute(propertyInfo, rpcByrefAttrTd);
+ propertyModel.cached = !HasAttribute(propertyInfo, rpcDynamicAttrTd);
+ if (auto getter = propertyInfo->GetGetter())
+ {
+ propertyModel.getterName = getter->GetName();
+ }
+ if (auto setter = propertyInfo->GetSetter())
+ {
+ propertyModel.setterName = setter->GetName();
+ }
+ if (auto valueChangedEvent = propertyInfo->GetValueChangedEvent())
+ {
+ propertyModel.valueChangedEvent = valueChangedEvent->GetName();
+ }
+ if (!HasAttribute(propertyInfo, rpcCachedAttrTd) && !HasAttribute(propertyInfo, rpcDynamicAttrTd))
+ {
+ propertyModel.cached = true;
+ }
+ interfaceModel.properties.Add(std::move(propertyModel));
+
+ propertyIndex = interfaceModel.properties.Count() - 1;
+ auto&& insertedProperty = interfaceModel.properties[propertyIndex];
+ if (insertedProperty.getterName != L"")
+ {
+ getterPropertyIndexes.Add(insertedProperty.getterName, propertyIndex);
+ }
+ if (insertedProperty.setterName != L"")
+ {
+ setterPropertyIndexes.Add(insertedProperty.setterName, propertyIndex);
+ }
+ }
+ }
+ }
+
+ for (auto declaration : interfaceDecl->declarations)
+ {
+ if (auto methodDecl = declaration.Cast())
+ {
+ auto methodFullName = FindFullName(manager->rpcMetadata->methodNames, methodDecl.Obj());
+ if (methodFullName == L"")
+ {
+ continue;
+ }
+
+ RpcMethodModel methodModel;
+ methodModel.fullName = methodFullName;
+ methodModel.name = methodDecl->name.value;
+ methodModel.methodId = GetRpcId(manager, methodFullName);
+ methodModel.returnType = CopyType(methodDecl->returnType.Obj());
+ auto methodInfo = FindRpcMethodInfo(manager, interfaceDecl, methodDecl.Obj(), typeDescriptor);
+ if (methodInfo)
+ {
+ methodModel.returnTypeInfo = methodInfo->GetReturn();
+ }
+ methodModel.returnByref = HasRpcAttribute(methodDecl->attributes, L"Byref");
+ if (IsStrongTypedCollectionType(methodModel.returnType.Obj())
+ && !methodModel.returnByref
+ && !HasRpcAttribute(methodDecl->attributes, L"Byval"))
+ {
+ manager->errors.Add(WfErrors::RpcWrapperGenerationRequiresCollectionReturnTransfer(methodDecl.Obj(), typeFullName + L"." + methodDecl->name.value));
+ }
+
+ if (auto getterIndex = getterPropertyIndexes.Keys().IndexOf(methodModel.name); getterIndex != -1)
+ {
+ auto&& property = interfaceModel.properties[getterPropertyIndexes.Values()[getterIndex]];
+ methodModel.kind = RpcMethodKind::PropertyGetter;
+ methodModel.returnType = CopyType(property.type.Obj());
+ methodModel.returnTypeInfo = property.typeInfo;
+ }
+ else if (auto setterIndex = setterPropertyIndexes.Keys().IndexOf(methodModel.name); setterIndex != -1)
+ {
+ methodModel.kind = RpcMethodKind::PropertySetter;
+ methodModel.returnByref = false;
+ }
+
+ for (vint i = 0; i < methodDecl->arguments.Count(); i++)
+ {
+ auto argumentDecl = methodDecl->arguments[i];
+ RpcParamModel paramModel;
+ paramModel.name = argumentDecl->name.value;
+ paramModel.type = CopyType(argumentDecl->type.Obj());
+ if (methodInfo && i < methodInfo->GetParameterCount())
+ {
+ paramModel.typeInfo = methodInfo->GetParameter(i)->GetType();
+ }
+ paramModel.byref = HasRpcAttribute(argumentDecl->attributes, L"Byref");
+ if (IsStrongTypedCollectionType(paramModel.type.Obj())
+ && !paramModel.byref
+ && !HasRpcAttribute(argumentDecl->attributes, L"Byval"))
+ {
+ manager->errors.Add(WfErrors::RpcWrapperGenerationRequiresCollectionParameterTransfer(argumentDecl.Obj(), typeFullName + L"." + methodDecl->name.value + L"(" + argumentDecl->name.value + L")"));
+ }
+
+ if (methodModel.kind == RpcMethodKind::PropertySetter && i == 0)
+ {
+ auto setterIndex = setterPropertyIndexes.Keys().IndexOf(methodModel.name);
+ auto&& property = interfaceModel.properties[setterPropertyIndexes.Values()[setterIndex]];
+ paramModel.type = CopyType(property.type.Obj());
+ paramModel.typeInfo = property.typeInfo;
+ }
+
+ methodModel.params.Add(std::move(paramModel));
+ }
+
+ interfaceModel.methods.Add(std::move(methodModel));
+ }
+ else if (auto eventDecl = declaration.Cast())
+ {
+ auto eventFullName = FindFullName(manager->rpcMetadata->eventNames, eventDecl.Obj());
+ if (eventFullName == L"")
+ {
+ continue;
+ }
+
+ RpcEventModel eventModel;
+ eventModel.fullName = eventFullName;
+ eventModel.name = eventDecl->name.value;
+ eventModel.eventId = GetRpcId(manager, eventFullName);
+
+ ITypeInfo* handlerGenericType = nullptr;
+ if (typeDescriptor)
+ {
+ for (vint j = 0; j < typeDescriptor->GetEventCount(); j++)
+ {
+ auto eventInfo = typeDescriptor->GetEvent(j);
+ if (eventInfo && eventInfo->GetOwnerTypeDescriptor() == typeDescriptor && eventInfo->GetName() == eventModel.name)
+ {
+ auto handlerType = eventInfo->GetHandlerType();
+ if (handlerType && handlerType->GetDecorator() == ITypeInfo::SharedPtr)
+ {
+ auto genericType = handlerType->GetElementType();
+ if (genericType && genericType->GetDecorator() == ITypeInfo::Generic)
+ {
+ handlerGenericType = genericType;
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ for (vint i = 0; i < eventDecl->arguments.Count(); i++)
+ {
+ RpcParamModel paramModel;
+ paramModel.name = L"arg" + itow(i);
+ paramModel.type = CopyType(eventDecl->arguments[i].Obj());
+ auto genericArgumentIndex = i + 1;
+ paramModel.typeInfo = handlerGenericType && genericArgumentIndex < handlerGenericType->GetGenericArgumentCount()
+ ? handlerGenericType->GetGenericArgument(genericArgumentIndex)
+ : nullptr;
+ paramModel.byref = handlerGenericType && genericArgumentIndex < handlerGenericType->GetGenericArgumentCount()
+ ? IsDefaultRpcTransferByref(handlerGenericType->GetGenericArgument(genericArgumentIndex), rpcInterfaceTds)
+ : dynamic_cast(eventDecl->arguments[i].Obj()) != nullptr;
+ eventModel.params.Add(std::move(paramModel));
+ }
+
+ interfaceModel.events.Add(std::move(eventModel));
+ }
+ }
+
+ interfaces.Add(std::move(interfaceModel));
+ }
+
+ return interfaces;
+ }
+
+ void AddDeclarationToNamespaces(
+ List>& rootDeclarations,
+ Dictionary>& namespaceMap,
+ const List& namespaceFragments,
+ Ptr declaration)
+ {
+ auto currentDeclarations = &rootDeclarations;
+ WString currentPath;
+
+ for (auto fragment : namespaceFragments)
+ {
+ currentPath = currentPath == L"" ? fragment : currentPath + L"::" + fragment;
+ auto index = namespaceMap.Keys().IndexOf(currentPath);
+ if (index == -1)
+ {
+ auto namespaceDecl = Ptr(new WfNamespaceDeclaration);
+ namespaceDecl->name.value = fragment;
+ currentDeclarations->Add(namespaceDecl);
+ namespaceMap.Add(currentPath, namespaceDecl);
+ currentDeclarations = &namespaceDecl->declarations;
+ }
+ else
+ {
+ currentDeclarations = &namespaceMap.Values()[index]->declarations;
+ }
+ }
+
+ currentDeclarations->Add(declaration);
+ }
+
+ Ptr BuildInvokeMethodBranch(const RpcInterfaceModel& interfaceModel, const RpcMethodModel& methodModel)
+ {
+ auto block = CreateBlock();
+ AddStatement(block, CreateInferredVariableStatement(L"target", CreateCast(CreateSharedType(interfaceModel.fullName), CreateCall(CreateMember(CreateReference(L"_lc"), L"RefToPtr"), CreateReference(L"ref")))));
+
+ List> arguments;
+ for (vint i = 0; i < methodModel.params.Count(); i++)
+ {
+ auto&& paramModel = methodModel.params[i];
+ auto argument = CreateIndex(CreateReference(L"arguments"), CreateInt(i));
+ arguments.Add(CreateRpcUnboxExpression(paramModel.typeInfo, paramModel.type, paramModel.byref, argument, CreateReference(L"_lc")));
+ }
+
+ auto invokeTarget = CreateMember(CreateReference(L"target"), methodModel.name);
+ auto invoke = Ptr(new WfCallExpression);
+ invoke->function = invokeTarget;
+ for (auto argument : arguments)
+ {
+ invoke->arguments.Add(argument);
+ }
+
+ if (IsVoidType(methodModel.returnType.Obj()))
+ {
+ AddStatement(block, CreateExpressionStatement(invoke));
+ AddStatement(block, CreateReturn(CreateNull()));
+ }
+ else
+ {
+ if (IsRpcByvalReturn(methodModel))
+ {
+ AddStatement(block, CreateInferredVariableStatement(L"copiedReturnValue", CreateRpcCopyByvalExpression(invoke, CreateReference(L"_lc"))));
+ AddStatement(block, CreateInferredVariableStatement(L"boxedReturnValue", CreateRpcBoxExpression(methodModel.returnTypeInfo, methodModel.returnByref, CreateReference(L"copiedReturnValue"), CreateReference(L"_lc"))));
+ AddRpcByvalReturnValue(block, CreateReference(L"boxedReturnValue"), CreateReference(L"copiedReturnValue"));
+ }
+ else
+ {
+ AddStatement(block, CreateReturn(CreateRpcBoxExpression(methodModel.returnTypeInfo, methodModel.returnByref, invoke, CreateReference(L"_lc"))));
+ }
+ }
+ return block;
+ }
+
+ Ptr BuildInvokeEventBranch(const RpcInterfaceModel& interfaceModel, const RpcEventModel& eventModel)
+ {
+ auto block = CreateBlock();
+ AddStatement(block, CreateInferredVariableStatement(L"target", CreateCast(CreateSharedType(interfaceModel.fullName), CreateCall(CreateMember(CreateReference(L"_lc"), L"RefToPtr"), CreateReference(L"ref")))));
+
+ auto invoke = Ptr(new WfCallExpression);
+ invoke->function = CreateMember(CreateReference(L"target"), eventModel.name);
+ for (vint i = 0; i < eventModel.params.Count(); i++)
+ {
+ auto&& paramModel = eventModel.params[i];
+ auto argument = CreateIndex(CreateReference(L"arguments"), CreateInt(i));
+ invoke->arguments.Add(CreateRpcUnboxExpression(paramModel.typeInfo, paramModel.type, paramModel.byref, argument, CreateReference(L"_lc")));
+ }
+ AddStatement(block, CreateExpressionStatement(invoke));
+ return block;
+ }
+
+ bool HasRpcEvents(const List& interfaces)
+ {
+ for (auto&& interfaceModel : interfaces)
+ {
+ if (interfaceModel.events.Count() > 0)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ Ptr BuildDispatchChain(const List& interfaces, bool forEvent, const WString& unknownIdVariable = WString::Empty)
+ {
+ auto switchStat = Ptr(new WfSwitchStatement);
+ switchStat->expression = CreateReference(forEvent ? L"eventId" : L"methodId");
+ switchStat->defaultBranch =
+ unknownIdVariable == L""
+ ? CreateRaise(forEvent ? L"Unknown RPC event id." : L"Unknown RPC method id.")
+ : CreateExpressionStatement(CreateAssign(CreateReference(unknownIdVariable), CreateBool(true)));
+
+ for (auto&& interfaceModel : interfaces)
+ {
+ if (forEvent)
+ {
+ for (auto&& eventModel : interfaceModel.events)
+ {
+ auto switchCase = Ptr(new WfSwitchCase);
+ switchCase->expression = CreateRpcConstantReference(L"rpcevent_", eventModel.fullName);
+ switchCase->statement = BuildInvokeEventBranch(interfaceModel, eventModel);
+ switchStat->caseBranches.Add(switchCase);
+ }
+ }
+ else
+ {
+ for (auto&& methodModel : interfaceModel.methods)
+ {
+ auto switchCase = Ptr(new WfSwitchCase);
+ switchCase->expression = CreateRpcConstantReference(L"rpcmethod_", methodModel.fullName);
+ switchCase->statement = BuildInvokeMethodBranch(interfaceModel, methodModel);
+ switchStat->caseBranches.Add(switchCase);
+ }
+ }
+ }
+ return switchStat;
+ }
+
+ Ptr GenerateIsInterfaceTypeIdHelper(const List& interfaces)
+ {
+ auto functionDecl = CreateFunctionDeclaration(L"rpcwrapper_IsInterfaceTypeId", CreatePredefinedType(WfPredefinedTypeName::Bool), WfFunctionKind::Normal);
+ functionDecl->arguments.Add(CreateFunctionArgument(L"typeId", CreatePredefinedType(WfPredefinedTypeName::Int)));
+ auto block = functionDecl->statement.Cast();
+ auto isCollectionTypeId = CreateBinary(
+ WfBinaryOperator::And,
+ CreateBinary(WfBinaryOperator::GE, CreateReference(L"typeId"), CreateInt(rpc_controller::RpcTypeId_IValueReadonlyList)),
+ CreateBinary(WfBinaryOperator::LE, CreateReference(L"typeId"), CreateInt(rpc_controller::RpcTypeId_IValueEnumerable))
+ );
+ AddStatement(block, CreateIf(isCollectionTypeId, CreateReturn(CreateBool(true))));
+ auto switchStat = Ptr(new WfSwitchStatement);
+ switchStat->expression = CreateReference(L"typeId");
+ switchStat->defaultBranch = CreateReturn(CreateBool(false));
+
+ auto addKnownType = [&](Ptr expression)
+ {
+ auto switchCase = Ptr(new WfSwitchCase);
+ switchCase->expression = expression;
+ switchCase->statement = CreateReturn(CreateBool(true));
+ switchStat->caseBranches.Add(switchCase);
+ };
+
+ for (auto&& interfaceModel : interfaces)
+ {
+ addKnownType(CreateRpcConstantReference(L"rpctype_", interfaceModel.fullName));
+ }
+
+ AddStatement(block, switchStat);
+ return functionDecl;
+ }
+
+ Ptr GenerateIsCtorInterfaceTypeIdHelper(const List& interfaces)
+ {
+ auto functionDecl = CreateFunctionDeclaration(L"rpcwrapper_IsCtorInterfaceTypeId", CreatePredefinedType(WfPredefinedTypeName::Bool), WfFunctionKind::Normal);
+ functionDecl->arguments.Add(CreateFunctionArgument(L"typeId", CreatePredefinedType(WfPredefinedTypeName::Int)));
+ auto switchStat = Ptr(new WfSwitchStatement);
+ switchStat->expression = CreateReference(L"typeId");
+ switchStat->defaultBranch = CreateReturn(CreateBool(false));
+
+ for (auto&& interfaceModel : interfaces)
+ {
+ if (!interfaceModel.ctor)
+ {
+ continue;
+ }
+
+ auto switchCase = Ptr(new WfSwitchCase);
+ switchCase->expression = CreateRpcConstantReference(L"rpctype_", interfaceModel.fullName);
+ switchCase->statement = CreateReturn(CreateBool(true));
+ switchStat->caseBranches.Add(switchCase);
+ }
+
+ AddStatement(functionDecl->statement.Cast(), switchStat);
+ return functionDecl;
+ }
+
+ Ptr BuildRegisterService()
+ {
+ auto block = CreateBlock();
+ auto registerBranch = CreateBlock();
+ AddStatement(
+ registerBranch,
+ CreateExpressionStatement(
+ CreateCall(
+ CreateMember(CreateMember(CreateReference(L"_lc"), L"Dispatcher"), L"RegisterService"),
+ CreateReference(L"typeId"),
+ CreateCall(CreateMember(CreateReference(L"_lc"), L"PtrToRef"), CreateReference(L"service"))
+ )
+ )
+ );
+ auto nonCtorBranch = CreateBlock();
+ AddStatement(nonCtorBranch, CreateRaise(L"RPC service type id is not an @rpc:Ctor interface."));
+ auto invalidTypeIdBranch = CreateBlock();
+ AddStatement(invalidTypeIdBranch, CreateRaise(L"RPC service type id does not exist."));
+ auto invalidRegisterBranch = CreateBlock();
+ AddStatement(
+ invalidRegisterBranch,
+ CreateIf(
+ CreateCall(CreateReference(L"rpcwrapper_IsInterfaceTypeId"), CreateReference(L"typeId")),
+ nonCtorBranch,
+ invalidTypeIdBranch
+ )
+ );
+ AddStatement(
+ block,
+ CreateIf(
+ CreateCall(CreateReference(L"rpcwrapper_IsCtorInterfaceTypeId"), CreateReference(L"typeId")),
+ registerBranch,
+ invalidRegisterBranch
+ )
+ );
+ return block;
+ }
+
+ Ptr GenerateObjectOpsFactory(const List& interfaces)
+ {
+ auto functionDecl = CreateFunctionDeclaration(L"rpcops_IRpcObjectOps", CreateSharedType(L"system::IRpcObjectOps"), WfFunctionKind::Normal);
+ functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle")));
+ auto newOps = CreateNewInterface(CreateSharedType(L"system::IRpcObjectOps")).Cast();
+ newOps->declarations.Add(CreateVariableDeclaration(L"_lc", CreateRawType(L"system::IRpcLifecycle"), CreateReference(L"lc")));
+ newOps->declarations.Add(CreateVariableDeclaration(L"_slot", CreatePredefinedType(WfPredefinedTypeName::Int), CreateInt(0)));
+ newOps->declarations.Add(CreateVariableDeclaration(L"_byvalReturnValues", CreateMapType(CreatePredefinedType(WfPredefinedTypeName::Int), CreatePredefinedType(WfPredefinedTypeName::Object)), CreateConstructor()));
+
+ {
+ auto invokeMethod = CreateFunctionDeclaration(L"InvokeMethod", CreatePredefinedType(WfPredefinedTypeName::Object), WfFunctionKind::Override);
+ invokeMethod->arguments.Add(CreateFunctionArgument(L"ref", CreateQualifiedType(L"system::RpcObjectReference")));
+ invokeMethod->arguments.Add(CreateFunctionArgument(L"methodId", CreatePredefinedType(WfPredefinedTypeName::Int)));
+ invokeMethod->arguments.Add(CreateFunctionArgument(L"arguments", CreateSharedType(L"system::Array")));
+ auto block = invokeMethod->statement.Cast();
+ AddStatement(block, CreateVariableStatement(L"unknownId", CreatePredefinedType(WfPredefinedTypeName::Bool), CreateBool(false)));
+ auto catchBlock = CreateBlock();
+ AddStatement(catchBlock, CreateReturn(CreateRpcExceptionExpression(CreateMember(CreateReference(L"ex"), L"Message"))));
+ AddStatement(block, CreateTryCatch(BuildDispatchChain(interfaces, false, L"unknownId"), L"ex", catchBlock));
+ auto unknownIdBranch = CreateBlock();
+ AddStatement(unknownIdBranch, CreateRaise(L"Unknown RPC method id."));
+ AddStatement(block, CreateIf(CreateReference(L"unknownId"), unknownIdBranch));
+ AddStatement(block, CreateReturn(CreateNull()));
+ newOps->declarations.Add(invokeMethod);
+ }
+
+ {
+ auto endInvokeMethod = CreateFunctionDeclaration(L"EndInvokeMethod", CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Override);
+ endInvokeMethod->arguments.Add(CreateFunctionArgument(L"slot", CreatePredefinedType(WfPredefinedTypeName::Int)));
+ AddStatement(endInvokeMethod->statement.Cast(), CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"_byvalReturnValues"), L"Remove"), CreateReference(L"slot"))));
+ newOps->declarations.Add(endInvokeMethod);
+ }
+
+ {
+ auto objectHold = CreateFunctionDeclaration(L"ObjectHold", CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Override);
+ objectHold->arguments.Add(CreateFunctionArgument(L"ref", CreateQualifiedType(L"system::RpcObjectReference")));
+ objectHold->arguments.Add(CreateFunctionArgument(L"remoteClientId", CreatePredefinedType(WfPredefinedTypeName::Int)));
+ objectHold->arguments.Add(CreateFunctionArgument(L"hold", CreatePredefinedType(WfPredefinedTypeName::Bool)));
+ auto trueBranch = CreateBlock();
+ AddStatement(trueBranch, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"_lc"), L"LocalObjectHold"), CreateReference(L"ref"), CreateReference(L"remoteClientId"))));
+ auto falseBranch = CreateBlock();
+ AddStatement(falseBranch, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"_lc"), L"LocalObjectUnhold"), CreateReference(L"ref"), CreateReference(L"remoteClientId"))));
+ AddStatement(objectHold->statement.Cast(), CreateIf(CreateReference(L"hold"), trueBranch, falseBranch));
+ newOps->declarations.Add(objectHold);
+ }
+
+ {
+ auto registerService = CreateFunctionDeclaration(L"RegisterService", CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Override);
+ registerService->arguments.Add(CreateFunctionArgument(L"typeId", CreatePredefinedType(WfPredefinedTypeName::Int)));
+ registerService->arguments.Add(CreateFunctionArgument(L"service", CreateSharedType(L"system::Interface")));
+ auto block = registerService->statement.Cast();
+ AddStatement(block, BuildRegisterService());
+ newOps->declarations.Add(registerService);
+ }
+
+ AddStatement(functionDecl->statement.Cast(), CreateReturn(newOps));
+ return functionDecl;
+ }
+
+ Ptr GenerateObjectEventOpsFactory(const List& interfaces)
+ {
+ auto functionDecl = CreateFunctionDeclaration(L"rpcops_IRpcObjectEventOps", CreateSharedType(L"system::IRpcObjectEventOps"), WfFunctionKind::Normal);
+ functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle")));
+ auto newOps = CreateNewInterface(CreateSharedType(L"system::IRpcObjectEventOps")).Cast();
+ newOps->declarations.Add(CreateVariableDeclaration(L"_lc", CreateRawType(L"system::IRpcLifecycle"), CreateReference(L"lc")));
+
+ {
+ auto invokeEvent = CreateFunctionDeclaration(L"InvokeEvent", CreatePredefinedType(WfPredefinedTypeName::Object), WfFunctionKind::Override);
+ invokeEvent->arguments.Add(CreateFunctionArgument(L"ref", CreateQualifiedType(L"system::RpcObjectReference")));
+ invokeEvent->arguments.Add(CreateFunctionArgument(L"eventId", CreatePredefinedType(WfPredefinedTypeName::Int)));
+ invokeEvent->arguments.Add(CreateFunctionArgument(L"arguments", CreateSharedType(L"system::Array")));
+ auto block = invokeEvent->statement.Cast();
+ if (!HasRpcEvents(interfaces))
+ {
+ AddStatement(block, CreateRaise(L"Unknown RPC event id."));
+ newOps->declarations.Add(invokeEvent);
+ }
+ else
+ {
+ AddStatement(block, CreateVariableStatement(L"unknownId", CreatePredefinedType(WfPredefinedTypeName::Bool), CreateBool(false)));
+ AddStatement(block, CreateVariableStatement(L"rpcEventExceptions", CreateRpcEventExceptionMapType(), CreateConstructor()));
+ AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateMember(CreateReference(L"_lc"), L"Controller"), L"SetEventSuppressedFlag"), CreateReference(L"ref"), CreateReference(L"eventId"), CreateBool(true))));
+ auto finallyBlock = CreateBlock();
+ AddStatement(finallyBlock, CreateExpressionStatement(CreateCall(CreateMember(CreateMember(CreateReference(L"_lc"), L"Controller"), L"SetEventSuppressedFlag"), CreateReference(L"ref"), CreateReference(L"eventId"), CreateBool(false))));
+ auto catchBlock = CreateBlock();
+ AddRpcEventExceptionMapSet(catchBlock, L"rpcEventExceptions", CreateMember(CreateReference(L"_lc"), L"ClientId"), CreateMember(CreateReference(L"ex"), L"Message"));
+ AddStatement(block, CreateTry(BuildDispatchChain(interfaces, true, L"unknownId"), L"ex", catchBlock, finallyBlock));
+ auto unknownIdBranch = CreateBlock();
+ AddStatement(unknownIdBranch, CreateRaise(L"Unknown RPC event id."));
+ AddStatement(block, CreateIf(CreateReference(L"unknownId"), unknownIdBranch));
+ auto returnExceptionBranch = CreateBlock();
+ AddStatement(returnExceptionBranch, CreateReturn(CreateReference(L"rpcEventExceptions")));
+ auto returnNullBranch = CreateBlock();
+ AddStatement(returnNullBranch, CreateReturn(CreateNull()));
+ AddStatement(
+ block,
+ CreateIf(
+ CreateBinary(WfBinaryOperator::GT, CreateMember(CreateReference(L"rpcEventExceptions"), L"Count"), CreateInt(0)),
+ returnExceptionBranch,
+ returnNullBranch));
+ newOps->declarations.Add(invokeEvent);
+ }
+ }
+
+ AddStatement(functionDecl->statement.Cast(), CreateReturn(newOps));
+ return functionDecl;
+ }
+
+ Ptr