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 CreateAnonymousLambda(const List& params, Ptr body) + { + auto functionDecl = CreateFunctionDeclaration(L"", CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Normal, WfFunctionAnonymity::Anonymous); + functionDecl->statement = body; + for (auto&& param : params) + { + functionDecl->arguments.Add(CreateFunctionArgument(param.name, CopyType(param.type.Obj()))); + } + return functionDecl; + } + + const RpcInterfaceModel* FindInterfaceModel(const List& interfaces, const WString& fullName) + { + for (auto&& interfaceModel : interfaces) + { + if (interfaceModel.fullName == fullName) + { + return &interfaceModel; + } + } + return nullptr; + } + + bool ContainsEventModel(const List& events, const WString& fullName) + { + for (auto eventModel : events) + { + if (eventModel->fullName == fullName) + { + return true; + } + } + return false; + } + + bool ContainsPropertyModel(const List& properties, const WString& name) + { + for (auto propertyModel : properties) + { + if (propertyModel->name == name) + { + return true; + } + } + return false; + } + + bool ContainsMethodModel(const List& methods, const WString& fullName) + { + for (auto methodModel : methods) + { + if (methodModel->fullName == fullName) + { + return true; + } + } + return false; + } + + void CollectInterfaceProperties(const RpcInterfaceModel& interfaceModel, const List& interfaces, List& properties) + { + for (auto&& baseFullName : interfaceModel.baseFullNames) + { + if (auto baseModel = FindInterfaceModel(interfaces, baseFullName)) + { + CollectInterfaceProperties(*baseModel, interfaces, properties); + } + } + + for (auto&& propertyModel : interfaceModel.properties) + { + if (!ContainsPropertyModel(properties, propertyModel.name)) + { + properties.Add(&propertyModel); + } + } + } + + void CollectInterfaceMethods(const RpcInterfaceModel& interfaceModel, const List& interfaces, List& methods) + { + for (auto&& baseFullName : interfaceModel.baseFullNames) + { + if (auto baseModel = FindInterfaceModel(interfaces, baseFullName)) + { + CollectInterfaceMethods(*baseModel, interfaces, methods); + } + } + + for (auto&& methodModel : interfaceModel.methods) + { + if (!ContainsMethodModel(methods, methodModel.fullName)) + { + methods.Add(&methodModel); + } + } + } + + void CollectInterfaceEvents(const RpcInterfaceModel& interfaceModel, const List& interfaces, List& events) + { + for (auto&& baseFullName : interfaceModel.baseFullNames) + { + if (auto baseModel = FindInterfaceModel(interfaces, baseFullName)) + { + CollectInterfaceEvents(*baseModel, interfaces, events); + } + } + + for (auto&& eventModel : interfaceModel.events) + { + if (!ContainsEventModel(events, eventModel.fullName)) + { + events.Add(&eventModel); + } + } + } + + bool HasInterfaceEvents(const RpcInterfaceModel& interfaceModel, const List& interfaces) + { + List events; + CollectInterfaceEvents(interfaceModel, interfaces, events); + return events.Count() > 0; + } + + const RpcEventModel* FindInterfaceEvent(const List& events, const WString& name) + { + for (auto eventModel : events) + { + if (eventModel->name == name) + { + return eventModel; + } + } + return nullptr; + } + + WString GetPropertyCacheAvailableName(const RpcPropertyModel& propertyModel) + { + return propertyModel.name + L""; + } + + WString GetPropertyCacheValueName(const RpcPropertyModel& propertyModel) + { + return propertyModel.name + L""; + } + + WString GetPropertyCacheResetFunctionName(const RpcPropertyModel& propertyModel) + { + return L"_rpcInvalidate_" + propertyModel.name; + } + + Ptr CreatePropertyCacheAvailableRead(const RpcPropertyModel& propertyModel) + { + return CreateReference(GetPropertyCacheAvailableName(propertyModel)); + } + + Ptr CreatePropertyCacheValueRead(const RpcPropertyModel& propertyModel) + { + return CreateReference(GetPropertyCacheValueName(propertyModel)); + } + + Ptr GenerateWrapperInterface(const RpcInterfaceModel& interfaceModel, const List& interfaces) + { + List properties; + CollectInterfaceProperties(interfaceModel, interfaces, properties); + + auto interfaceDecl = Ptr(new WfClassDeclaration); + interfaceDecl->name.value = L"IRpcWrapper_" + interfaceModel.interfaceName; + interfaceDecl->kind = WfClassKind::Interface; + interfaceDecl->constructorType = WfConstructorType::SharedPtr; + + { + auto baseType = Ptr(new WfReferenceType); + baseType->name.value = interfaceModel.fullName; + auto qualType = CreateQualifiedType(interfaceModel.fullName); + interfaceDecl->baseTypes.Add(qualType); + } + + { + auto baseType = CreateQualifiedType(L"system::IRpcWrapperBase"); + interfaceDecl->baseTypes.Add(baseType); + } + + for (auto propertyModel : properties) + { + if (propertyModel->cached && propertyModel->valueChangedEvent != L"") + { + auto invalidateDecl = Ptr(new WfFunctionDeclaration); + invalidateDecl->name.value = GetPropertyCacheResetFunctionName(*propertyModel); + invalidateDecl->returnType = CreatePredefinedType(WfPredefinedTypeName::Void); + invalidateDecl->functionKind = WfFunctionKind::Normal; + invalidateDecl->anonymity = WfFunctionAnonymity::Named; + interfaceDecl->declarations.Add(invalidateDecl); + } + } + + return interfaceDecl; + } + + WString GetRpcOpsInvokeMethodName(const RpcMethodModel& methodModel); + WString GetRpcOpsInvokeEventName(const RpcEventModel& eventModel); + + Ptr GenerateListenerFactory(const RpcInterfaceModel& interfaceModel, const List& interfaces, const WString& opsInterfaceName) + { + List events; + CollectInterfaceEvents(interfaceModel, interfaces, events); + if (events.Count() == 0) + { + return nullptr; + } + + auto mangledName = MangleRpcFullName(interfaceModel.fullName); + auto functionDecl = CreateFunctionDeclaration(L"rpclistener_" + mangledName, CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"ref", CreateQualifiedType(L"system::RpcObjectReference"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"target", CreateRawType(interfaceModel.fullName))); + functionDecl->arguments.Add(CreateFunctionArgument(L"ops", CreateSharedType(opsInterfaceName))); + auto block = functionDecl->statement.Cast(); + + for (auto eventModel : events) + { + auto lambdaBody = CreateBlock(); + + AddStatement( + lambdaBody, + CreateIf( + CreateCall( + CreateMember(CreateMember(CreateReference(L"lc"), L"Controller"), L"GetEventSuppressedFlag"), + CreateReference(L"ref"), + CreateRpcConstantReference(L"rpcevent_", eventModel->fullName) + ), + CreateReturn(nullptr) + ) + ); + auto invoke = CreateCall( + CreateMember(CreateReference(L"ops"), GetRpcOpsInvokeEventName(*eventModel)), + CreateReference(L"ref")); + for (auto&& paramModel : eventModel->params) + { + invoke->arguments.Add(CreateReference(paramModel.name)); + } + AddStatement(lambdaBody, CreateExpressionStatement(invoke)); + + auto attach = Ptr(new WfAttachEventExpression); + attach->event = CreateMember(CreateReference(L"target"), eventModel->name); + attach->function = CreateFunctionExpression(CreateAnonymousLambda(eventModel->params, lambdaBody)); + AddStatement(block, CreateExpressionStatement(attach)); + } + + return functionDecl; + } + + Ptr GenerateListenerDispatcher(const List& interfaces, const WString& opsInterfaceName) + { + auto functionDecl = CreateFunctionDeclaration(L"rpclistener_Attach", CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"typeId", CreatePredefinedType(WfPredefinedTypeName::Int))); + functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"ref", CreateQualifiedType(L"system::RpcObjectReference"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"obj", CreateRawType(L"system::Interface"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"ops", CreateSharedType(opsInterfaceName))); + auto block = functionDecl->statement.Cast(); + + auto switchStat = Ptr(new WfSwitchStatement); + switchStat->expression = CreateReference(L"typeId"); + switchStat->defaultBranch = CreateRaise(L"Unknown RPC type id for listener attachment."); + + for (auto&& interfaceModel : interfaces) + { + auto switchCase = Ptr(new WfSwitchCase); + switchCase->expression = CreateRpcConstantReference(L"rpctype_", interfaceModel.fullName); + auto caseBranch = CreateBlock(); + if (HasInterfaceEvents(interfaceModel, interfaces)) + { + auto mangledName = MangleRpcFullName(interfaceModel.fullName); + AddStatement(caseBranch, CreateExpressionStatement(CreateCall(CreateReference(L"rpclistener_" + mangledName), CreateReference(L"lc"), CreateReference(L"ref"), CreateCast(CreateRawType(interfaceModel.fullName), CreateReference(L"obj")), CreateReference(L"ops")))); + } + AddStatement(caseBranch, CreateReturn(nullptr)); + switchCase->statement = caseBranch; + switchStat->caseBranches.Add(switchCase); + } + + AddStatement(block, switchStat); + return functionDecl; + } + + WString GetRpcOpsInterfaceName(const WString& assemblyName) + { + return L"rpcops_IOps_" + assemblyName; + } + + WString GetRpcOpsInvokeMethodName(const RpcMethodModel& methodModel) + { + return L"InvokeMethod_" + MangleRpcFullName(methodModel.fullName); + } + + WString GetRpcOpsInvokeEventName(const RpcEventModel& eventModel) + { + return L"InvokeEvent_" + MangleRpcFullName(eventModel.fullName); + } + + WString GetRpcOpsArgumentName(const RpcParamModel& paramModel) + { + return L"arg_" + paramModel.name; + } + + Ptr CreateRpcOpsFunctionDeclaration(const WString& name, Ptr returnType, WfFunctionKind kind) + { + auto functionDecl = Ptr(new WfFunctionDeclaration); + functionDecl->name.value = name; + functionDecl->returnType = returnType; + functionDecl->functionKind = kind; + functionDecl->anonymity = WfFunctionAnonymity::Named; + if (kind == WfFunctionKind::Override) + { + functionDecl->statement = CreateBlock(); + } + return functionDecl; + } + + void AddRpcOpsFunctionArguments(Ptr functionDecl, const List& params) + { + functionDecl->arguments.Add(CreateFunctionArgument(L"ref", CreateQualifiedType(L"system::RpcObjectReference"))); + for (auto&& paramModel : params) + { + functionDecl->arguments.Add(CreateFunctionArgument(GetRpcOpsArgumentName(paramModel), CopyType(paramModel.type.Obj()))); + } + } + + void AddRpcOpsArgumentsArray( + Ptr block, + const List& params) + { + AddStatement(block, CreateVariableStatement(L"arguments", CreateSharedType(L"system::Array"), CreateConstructor())); + AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"arguments"), L"Resize"), CreateInt(params.Count())))); + + for (vint i = 0; i < params.Count(); i++) + { + auto&& paramModel = params[i]; + auto value = CreateReference(GetRpcOpsArgumentName(paramModel)); + auto argument = CreateRpcBoxExpression(paramModel.typeInfo, paramModel.byref, value, CreateReference(L"_lc")); + AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"arguments"), L"Set"), CreateInt(i), argument))); + } + } + + Ptr CreateRpcOpsObjectOps() + { + return CreateCall( + CreateMember(CreateMember(CreateReference(L"_lc"), L"Dispatcher"), L"SendToClient_ObjectOps"), + CreateMember(CreateReference(L"ref"), L"clientId") + ); + } + + Ptr CreateRpcOpsObjectInvoke(const RpcMethodModel& methodModel, Ptr objectOps) + { + return CreateCall( + CreateMember(objectOps, L"InvokeMethod"), + CreateReference(L"ref"), + CreateRpcConstantReference(L"rpcmethod_", methodModel.fullName), + CreateReference(L"arguments") + ); + } + + Ptr CreateRpcOpsObjectInvoke(const RpcMethodModel& methodModel) + { + return CreateRpcOpsObjectInvoke(methodModel, CreateRpcOpsObjectOps()); + } + + Ptr CreateRpcOpsObjectEventInvoke(const RpcEventModel& eventModel) + { + return CreateCall( + CreateMember( + CreateCall( + CreateMember(CreateMember(CreateReference(L"_lc"), L"Dispatcher"), L"BroadcastFromClient_ObjectEventOps"), + CreateMember(CreateReference(L"_lc"), L"ClientId") + ), + L"InvokeEvent" + ), + CreateReference(L"ref"), + CreateRpcConstantReference(L"rpcevent_", eventModel.fullName), + CreateReference(L"arguments") + ); + } + + Ptr GenerateRpcOpsMethodImplementation(const RpcMethodModel& methodModel) + { + auto functionDecl = CreateRpcOpsFunctionDeclaration(GetRpcOpsInvokeMethodName(methodModel), CopyType(methodModel.returnType.Obj()), WfFunctionKind::Override); + AddRpcOpsFunctionArguments(functionDecl, methodModel.params); + auto block = functionDecl->statement.Cast(); + + AddRpcOpsArgumentsArray(block, methodModel.params); + if (IsVoidType(methodModel.returnType.Obj())) + { + auto invoke = CreateRpcOpsObjectInvoke(methodModel); + AddStatement(block, CreateInferredVariableStatement(L"invokeResult", invoke)); + AddRpcMethodExceptionRaise(block, CreateReference(L"invokeResult")); + } + else if (IsRpcByvalReturn(methodModel)) + { + AddStatement(block, CreateInferredVariableStatement(L"objectOps", CreateRpcOpsObjectOps())); + auto invoke = CreateRpcOpsObjectInvoke(methodModel, CreateReference(L"objectOps")); + AddStatement(block, CreateInferredVariableStatement(L"invokeResult", invoke)); + AddRpcMethodExceptionRaise(block, CreateReference(L"invokeResult")); + AddStatement(block, CreateInferredVariableStatement( + L"byvalReturnValue", + CreateCast(CreateSharedType(L"system::RpcByvalReturnValue"), CreateReference(L"invokeResult")))); + AddStatement(block, CreateInferredVariableStatement( + L"result", + CreateRpcUnboxExpression( + methodModel.returnTypeInfo, + methodModel.returnType, + methodModel.returnByref, + CreateMember(CreateReference(L"byvalReturnValue"), L"value"), + CreateReference(L"_lc")))); + AddStatement(block, CreateExpressionStatement(CreateCall( + CreateMember(CreateReference(L"objectOps"), L"EndInvokeMethod"), + CreateMember(CreateReference(L"byvalReturnValue"), L"slot")))); + AddStatement(block, CreateReturn(CreateReference(L"result"))); + } + else + { + auto invoke = CreateRpcOpsObjectInvoke(methodModel); + AddStatement(block, CreateInferredVariableStatement(L"invokeResult", invoke)); + AddRpcMethodExceptionRaise(block, CreateReference(L"invokeResult")); + AddStatement(block, CreateReturn(CreateRpcUnboxExpression(methodModel.returnTypeInfo, methodModel.returnType, methodModel.returnByref, CreateReference(L"invokeResult"), CreateReference(L"_lc")))); + } + + return functionDecl; + } + + Ptr GenerateRpcOpsEventImplementation(const RpcEventModel& eventModel) + { + auto functionDecl = CreateRpcOpsFunctionDeclaration(GetRpcOpsInvokeEventName(eventModel), CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Override); + AddRpcOpsFunctionArguments(functionDecl, eventModel.params); + auto block = functionDecl->statement.Cast(); + + AddRpcOpsArgumentsArray(block, eventModel.params); + AddRpcEventExceptionRaise(block, CreateCast(CreateRpcEventExceptionMapType(), CreateRpcOpsObjectEventInvoke(eventModel))); + return functionDecl; + } + + Ptr GenerateRpcOpsInterface(const WString& assemblyName, const List& interfaces) + { + auto interfaceDecl = Ptr(new WfClassDeclaration); + interfaceDecl->name.value = GetRpcOpsInterfaceName(assemblyName); + interfaceDecl->kind = WfClassKind::Interface; + interfaceDecl->constructorType = WfConstructorType::SharedPtr; + + for (auto&& interfaceModel : interfaces) + { + for (auto&& methodModel : interfaceModel.methods) + { + auto methodDecl = CreateRpcOpsFunctionDeclaration(GetRpcOpsInvokeMethodName(methodModel), CopyType(methodModel.returnType.Obj()), WfFunctionKind::Normal); + AddRpcOpsFunctionArguments(methodDecl, methodModel.params); + interfaceDecl->declarations.Add(methodDecl); + } + for (auto&& eventModel : interfaceModel.events) + { + auto eventDecl = CreateRpcOpsFunctionDeclaration(GetRpcOpsInvokeEventName(eventModel), CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Normal); + AddRpcOpsFunctionArguments(eventDecl, eventModel.params); + interfaceDecl->declarations.Add(eventDecl); + } + } + + return interfaceDecl; + } + + Ptr GenerateRpcOpsFactory(const WString& assemblyName, const List& interfaces) + { + auto functionDecl = CreateFunctionDeclaration(L"rpcops_IOps_Create", CreateSharedType(GetRpcOpsInterfaceName(assemblyName)), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle"))); + auto newOps = CreateNewInterface(CreateSharedType(GetRpcOpsInterfaceName(assemblyName))).Cast(); + newOps->declarations.Add(CreateVariableDeclaration(L"_lc", CreateRawType(L"system::IRpcLifecycle"), CreateReference(L"lc"))); + + for (auto&& interfaceModel : interfaces) + { + for (auto&& methodModel : interfaceModel.methods) + { + newOps->declarations.Add(GenerateRpcOpsMethodImplementation(methodModel)); + } + for (auto&& eventModel : interfaceModel.events) + { + newOps->declarations.Add(GenerateRpcOpsEventImplementation(eventModel)); + } + } + + AddStatement(functionDecl->statement.Cast(), CreateReturn(newOps)); + return functionDecl; + } + + Ptr GenerateWrapperFactory(const RpcInterfaceModel& interfaceModel, const List& interfaces, const WString& opsInterfaceName) + { + auto mangledName = MangleRpcFullName(interfaceModel.fullName); + auto wrapperInterfaceFullName = interfaceModel.fullName.Sub(0, interfaceModel.fullName.Length() - interfaceModel.interfaceName.Length()) + L"IRpcWrapper_" + interfaceModel.interfaceName; + List properties; + CollectInterfaceProperties(interfaceModel, interfaces, properties); + List methods; + CollectInterfaceMethods(interfaceModel, interfaces, methods); + List events; + CollectInterfaceEvents(interfaceModel, interfaces, events); + + auto functionDecl = CreateFunctionDeclaration(L"rpcwrapper_" + mangledName, CreateSharedType(wrapperInterfaceFullName), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"proxyRef", CreateQualifiedType(L"system::RpcObjectReference"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"ops", CreateSharedType(opsInterfaceName))); + auto block = functionDecl->statement.Cast(); + + auto proxyExpr = CreateNewInterface(CreateSharedType(wrapperInterfaceFullName)).Cast(); + proxyExpr->declarations.Add(CreateVariableDeclaration(L"_lc", CreateRawType(L"system::IRpcLifecycle"), CreateReference(L"lc"))); + proxyExpr->declarations.Add(CreateVariableDeclaration(L"_ref", CreateQualifiedType(L"system::RpcObjectReference"), CreateReference(L"proxyRef"))); + proxyExpr->declarations.Add(CreateVariableDeclaration(L"_ops", CreateSharedType(opsInterfaceName), CreateReference(L"ops"))); + for (auto propertyModel : properties) + { + if (propertyModel->cached) + { + proxyExpr->declarations.Add(CreateVariableDeclaration(GetPropertyCacheValueName(*propertyModel), CopyType(propertyModel->type.Obj()), CreateRpcCachedPropertyInitialValue(*propertyModel))); + proxyExpr->declarations.Add(CreateVariableDeclaration(GetPropertyCacheAvailableName(*propertyModel), CreatePredefinedType(WfPredefinedTypeName::Bool), CreateBool(false))); + } + } + + for (auto propertyModel : properties) + { + if (propertyModel->cached && propertyModel->valueChangedEvent != L"") + { + auto invalidateDecl = CreateFunctionDeclaration(GetPropertyCacheResetFunctionName(*propertyModel), CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Override); + auto invalidateBlock = invalidateDecl->statement.Cast(); + AddStatement(invalidateBlock, CreateExpressionStatement(CreateAssign(CreateReference(GetPropertyCacheAvailableName(*propertyModel)), CreateBool(false)))); + proxyExpr->declarations.Add(invalidateDecl); + } + } + + // Generate DisconnectFromLifecycle override + { + auto disconnectDecl = CreateFunctionDeclaration(L"DisconnectFromLifecycle", CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Override); + auto disconnectBlock = disconnectDecl->statement.Cast(); + AddStatement(disconnectBlock, CreateExpressionStatement(CreateAssign(CreateReference(L"_lc"), CreateNull()))); + AddStatement(disconnectBlock, CreateExpressionStatement(CreateAssign(CreateReference(L"_ops"), CreateNull()))); + proxyExpr->declarations.Add(disconnectDecl); + } + + // Generate destructor: delete{} + { + auto dtorDecl = Ptr(new WfDestructorDeclaration); + auto dtorBlock = CreateBlock(); + dtorDecl->statement = dtorBlock; + + // if (_lc is not null) { _lc.Dispatcher.SendToClient_ObjectOps(_ref.clientId).ObjectHold(_ref, _lc.ClientId, false); } + auto condition = CreateIsNotNull(CreateReference(L"_lc")); + auto trueBranch = CreateBlock(); + AddStatement( + trueBranch, + CreateExpressionStatement( + CreateCall( + CreateMember( + CreateCall( + CreateMember(CreateMember(CreateReference(L"_lc"), L"Dispatcher"), L"SendToClient_ObjectOps"), + CreateMember(CreateReference(L"_ref"), L"clientId") + ), + L"ObjectHold" + ), + CreateReference(L"_ref"), + CreateMember(CreateReference(L"_lc"), L"ClientId"), + CreateBool(false) + ) + ) + ); + AddStatement(dtorBlock, CreateIf(condition, trueBranch)); + + proxyExpr->declarations.Add(dtorDecl); + } + + for (auto methodModel : methods) + { + const RpcPropertyModel* cachedProperty = nullptr; + if (methodModel->kind == RpcMethodKind::PropertyGetter) + { + for (auto propertyModel : properties) + { + if (propertyModel->cached && propertyModel->getterName == methodModel->name) + { + cachedProperty = propertyModel; + break; + } + } + } + + auto methodDecl = CreateFunctionDeclaration(methodModel->name, CopyType(methodModel->returnType.Obj()), WfFunctionKind::Override); + for (auto&& paramModel : methodModel->params) + { + methodDecl->arguments.Add(CreateFunctionArgument(paramModel.name, CopyType(paramModel.type.Obj()))); + } + + auto methodBlock = methodDecl->statement.Cast(); + + // null check: if (_lc is null) raise "..." + { + auto condition = CreateIsNull(CreateReference(L"_lc")); + auto trueBranch = CreateRaise(L"RPC wrapper has been disconnected from lifecycle."); + AddStatement(methodBlock, CreateIf(condition, trueBranch)); + } + + if (cachedProperty) + { + auto trueBranch = CreateBlock(); + AddStatement(trueBranch, CreateReturn(CreatePropertyCacheValueRead(*cachedProperty))); + AddStatement(methodBlock, CreateIf(CreatePropertyCacheAvailableRead(*cachedProperty), trueBranch)); + } + + auto invoke = Ptr(new WfCallExpression); + invoke->function = CreateMember(CreateReference(L"_ops"), GetRpcOpsInvokeMethodName(*methodModel)); + invoke->arguments.Add(CreateReference(L"_ref")); + for (auto&& paramModel : methodModel->params) + { + invoke->arguments.Add(CreateReference(paramModel.name)); + } + + if (IsVoidType(methodModel->returnType.Obj())) + { + AddStatement(methodBlock, CreateExpressionStatement(invoke)); + } + else if (cachedProperty) + { + AddStatement(methodBlock, CreateExpressionStatement(CreateAssign(CreateReference(GetPropertyCacheValueName(*cachedProperty)), invoke))); + AddStatement(methodBlock, CreateExpressionStatement(CreateAssign(CreateReference(GetPropertyCacheAvailableName(*cachedProperty)), CreateBool(true)))); + AddStatement(methodBlock, CreateReturn(CreatePropertyCacheValueRead(*cachedProperty))); + } + else + { + AddStatement(methodBlock, CreateReturn(invoke)); + } + + proxyExpr->declarations.Add(methodDecl); + } + + AddStatement(block, CreateInferredVariableStatement(L"proxy", proxyExpr)); + AddStatement( + block, + CreateExpressionStatement( + CreateCall( + CreateMember( + CreateCall( + CreateMember(CreateMember(CreateReference(L"lc"), L"Dispatcher"), L"SendToClient_ObjectOps"), + CreateMember(CreateReference(L"proxyRef"), L"clientId") + ), + L"ObjectHold" + ), + CreateReference(L"proxyRef"), + CreateMember(CreateReference(L"lc"), L"ClientId"), + CreateBool(true) + ) + ) + ); + + for (auto propertyModel : properties) + { + if (propertyModel->cached && propertyModel->valueChangedEvent != L"") + { + if (auto eventModel = FindInterfaceEvent(events, propertyModel->valueChangedEvent)) + { + auto lambdaBody = CreateBlock(); + auto invalidateTarget = CreateCast(CreateSharedType(wrapperInterfaceFullName), CreateCall(CreateMember(CreateReference(L"lc"), L"RefToPtr"), CreateReference(L"proxyRef"))); + AddStatement(lambdaBody, CreateExpressionStatement(CreateCall(CreateMember(invalidateTarget, GetPropertyCacheResetFunctionName(*propertyModel))))); + + auto attach = Ptr(new WfAttachEventExpression); + attach->event = CreateMember(CreateCast(CreateSharedType(interfaceModel.fullName), CreateReference(L"proxy")), eventModel->name); + attach->function = CreateFunctionExpression(CreateAnonymousLambda(eventModel->params, lambdaBody)); + AddStatement(block, CreateExpressionStatement(attach)); + } + } + } + + if (events.Count() > 0) + { + AddStatement(block, CreateExpressionStatement(CreateCall(CreateReference(L"rpclistener_" + mangledName), CreateReference(L"lc"), CreateReference(L"proxyRef"), CreateCast(CreateRawType(interfaceModel.fullName), CreateReference(L"proxy")), CreateReference(L"ops")))); + } + + AddStatement(block, CreateReturn(CreateReference(L"proxy"))); + return functionDecl; + } + + + Ptr GenerateWrapperDispatcher(const List& interfaces, const WString& opsInterfaceName) + { + auto returnType = Ptr(new WfSharedPointerType); + returnType->element = CreateQualifiedType(L"system::IRpcWrapperBase"); + auto functionDecl = CreateFunctionDeclaration(L"rpcwrapper_Create", returnType, WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"ref", CreateQualifiedType(L"system::RpcObjectReference"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle"))); + functionDecl->arguments.Add(CreateFunctionArgument(L"ops", CreateSharedType(opsInterfaceName))); + auto block = functionDecl->statement.Cast(); + + auto switchStat = Ptr(new WfSwitchStatement); + switchStat->expression = CreateMember(CreateReference(L"ref"), L"typeId"); + switchStat->defaultBranch = CreateRaise(L"Unknown RPC type id for wrapper creation."); + + for (auto&& interfaceModel : interfaces) + { + auto switchCase = Ptr(new WfSwitchCase); + switchCase->expression = CreateRpcConstantReference(L"rpctype_", interfaceModel.fullName); + auto caseBranch = CreateBlock(); + auto mangledName = MangleRpcFullName(interfaceModel.fullName); + AddStatement(caseBranch, CreateReturn(CreateCall(CreateReference(L"rpcwrapper_" + mangledName), CreateReference(L"lc"), CreateReference(L"ref"), CreateReference(L"ops")))); + switchCase->statement = caseBranch; + switchStat->caseBranches.Add(switchCase); + } + + AddStatement(block, switchStat); + return functionDecl; + } + } + + Ptr GenerateModuleRpc(WfLexicalScopeManager* manager, WString assemblyName) + { + using namespace rpc_generating; + + if (!manager || !manager->rpcMetadata || !manager->rpcMetadata->metadataModule) + { + return nullptr; + } + + CollectMangledNames(manager); + if (manager->errors.Count() > 0) + { + return nullptr; + } + + auto interfaces = BuildInterfaceModels(manager); + if (manager->errors.Count() > 0) + { + return nullptr; + } + auto module = Ptr(new WfModule); + module->moduleType = WfModuleType::Module; + module->name.value = L"RpcMetadata"; + auto opsInterfaceName = GetRpcOpsInterfaceName(assemblyName); + + vint id = 0; + for (auto fullName : manager->rpcMetadata->orderedIds) + { + auto name = WString::Unmanaged(GetRpcConstantPrefix(manager, fullName)) + MangleRpcFullName(fullName); + module->declarations.Add(CreateVariableDeclaration(name, CreatePredefinedType(WfPredefinedTypeName::Int), CreateInt(id++))); + } + + { + auto getIds = CreateFunctionDeclaration(L"rpc_GetIds", CreateMapType(CreatePredefinedType(WfPredefinedTypeName::String), CreatePredefinedType(WfPredefinedTypeName::Int)), WfFunctionKind::Normal); + auto block = getIds->statement.Cast(); + AddStatement(block, CreateVariableStatement(L"result", CreateMapType(CreatePredefinedType(WfPredefinedTypeName::String), CreatePredefinedType(WfPredefinedTypeName::Int)), CreateConstructor())); + id = 0; + for (auto fullName : manager->rpcMetadata->orderedIds) + { + AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(rpc_generating::CreateReference(L"result"), L"Set"), CreateString(fullName), CreateInt(id++)))); + } + AddStatement(block, CreateReturn(rpc_generating::CreateReference(L"result"))); + module->declarations.Add(getIds); + } + + module->declarations.Add(GenerateIsInterfaceTypeIdHelper(interfaces)); + module->declarations.Add(GenerateIsCtorInterfaceTypeIdHelper(interfaces)); + module->declarations.Add(GenerateRpcOpsInterface(assemblyName, interfaces)); + module->declarations.Add(GenerateObjectOpsFactory(interfaces)); + module->declarations.Add(GenerateObjectEventOpsFactory(interfaces)); + module->declarations.Add(GenerateRpcOpsFactory(assemblyName, interfaces)); + + List> wrapperDeclarations; + Dictionary> wrapperNamespaces; + for (auto&& interfaceModel : interfaces) + { + List namespaceFragments; + SplitTypeFullName(interfaceModel.fullName, namespaceFragments); + namespaceFragments.RemoveAt(namespaceFragments.Count() - 1); + AddDeclarationToNamespaces(wrapperDeclarations, wrapperNamespaces, namespaceFragments, GenerateWrapperInterface(interfaceModel, interfaces)); + } + for (auto declaration : wrapperDeclarations) + { + module->declarations.Add(declaration); + } + + vint listenerCount = 0; + for (auto&& interfaceModel : interfaces) + { + if (auto listener = GenerateListenerFactory(interfaceModel, interfaces, opsInterfaceName)) + { + module->declarations.Add(listener); + listenerCount++; + } + } + if (listenerCount > 0) + { + module->declarations.Add(GenerateListenerDispatcher(interfaces, opsInterfaceName)); + } + + for (auto&& interfaceModel : interfaces) + { + module->declarations.Add(GenerateWrapperFactory(interfaceModel, interfaces, opsInterfaceName)); + } + + module->declarations.Add(GenerateWrapperDispatcher(interfaces, opsInterfaceName)); + + return module; + } + } + } +} + + +/*********************************************************************** +.\ANALYZER\WFANALYZER_GENERATERPC_JSONDTS.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { +/*********************************************************************** +GenerateDtsFromRpcMetadata +***********************************************************************/ + + namespace rpc_dts_generating + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + + enum class DtsPrimitiveKind + { + Number, + Boolean, + String, + }; + + struct DtsPrimitiveModel + { + WString keyword; + DtsPrimitiveKind kind = DtsPrimitiveKind::Number; + }; + + struct DtsEnumItemModel + { + WString name; + vuint64_t value = 0; + }; + + struct DtsEnumModel + { + WString fullName; + Ptr> items; + }; + + struct DtsFieldModel + { + WString name; + Ptr type; + }; + + struct DtsStructModel + { + WString fullName; + Ptr> fields; + }; + + struct DtsContext + { + WfLexicalScopeManager* manager = nullptr; + List* enums = nullptr; + List* structs = nullptr; + }; + + void AppendChar(WString& text, wchar_t c) + { + text += WString::CopyFrom(&c, 1); + } + + bool IsDtsIdentifierStart(wchar_t c) + { + return (L'a' <= c && c <= L'z') + || (L'A' <= c && c <= L'Z') + || c == L'_' + || c == L'$'; + } + + bool IsDtsIdentifierPart(wchar_t c) + { + return IsDtsIdentifierStart(c) || (L'0' <= c && c <= L'9'); + } + + WString EscapeDtsString(const WString& value) + { + WString result = L"\""; + for (vint i = 0; i < value.Length(); i++) + { + auto c = value[i]; + switch (c) + { + case L'\\': result += L"\\\\"; break; + case L'"': result += L"\\\""; break; + case L'\r': result += L"\\r"; break; + case L'\n': result += L"\\n"; break; + case L'\t': result += L"\\t"; break; + default: + AppendChar(result, c); + break; + } + } + result += L"\""; + return result; + } + + WString GetDtsPropertyName(const WString& name) + { + if (name.Length() > 0 && IsDtsIdentifierStart(name[0])) + { + bool isIdentifier = true; + for (vint i = 1; i < name.Length(); i++) + { + if (!IsDtsIdentifierPart(name[i])) + { + isIdentifier = false; + break; + } + } + if (isIdentifier) + { + return name; + } + } + return EscapeDtsString(name); + } + + WString MakeDtsTypeName(const WString& fullName) + { + WString result; + for (vint i = 0; i < fullName.Length(); i++) + { + auto c = fullName[i]; + if ((result.Length() == 0 && IsDtsIdentifierStart(c)) || (result.Length() > 0 && IsDtsIdentifierPart(c))) + { + AppendChar(result, c); + } + else if (result.Length() == 0 || result[result.Length() - 1] != L'_') + { + result += L"_"; + } + } + if (result.Length() == 0) + { + return L"_"; + } + if (result[result.Length() - 1] == L'_') + { + result = result.Left(result.Length() - 1); + } + return result; + } + + WString MakeUnknownStructDtsTypeName(const WString& fullName) + { + return L"UnknownType_" + MakeDtsTypeName(fullName); + } + + bool TryGetPrimitiveModel(const WString& fullName, DtsPrimitiveModel& primitive) + { + auto tryName = [&](const wchar_t* name, DtsPrimitiveKind kind) + { + if (fullName == WString::Unmanaged(L"system::") + name) + { + primitive.keyword = WString::Unmanaged(name); + primitive.kind = kind; + return true; + } + return false; + }; + + return tryName(L"UInt8", DtsPrimitiveKind::Number) + || tryName(L"UInt16", DtsPrimitiveKind::Number) + || tryName(L"UInt32", DtsPrimitiveKind::Number) + || tryName(L"UInt64", DtsPrimitiveKind::Number) + || tryName(L"Int8", DtsPrimitiveKind::Number) + || tryName(L"Int16", DtsPrimitiveKind::Number) + || tryName(L"Int32", DtsPrimitiveKind::Number) + || tryName(L"Int64", DtsPrimitiveKind::Number) + || tryName(L"Single", DtsPrimitiveKind::Number) + || tryName(L"Double", DtsPrimitiveKind::Number) + || tryName(L"Boolean", DtsPrimitiveKind::Boolean) + || tryName(L"Char", DtsPrimitiveKind::String) + || tryName(L"String", DtsPrimitiveKind::String) + || tryName(L"DateTime", DtsPrimitiveKind::String) + || tryName(L"Locale", DtsPrimitiveKind::String); + } + + WString GetPredefinedFullName(WfLexicalScopeManager* manager, WfPredefinedTypeName name) + { + switch (name) + { + case WfPredefinedTypeName::Int: + return manager && manager->cputdSInt ? manager->cputdSInt->GetTypeName() : WString::Unmanaged(L"system::Int64"); + case WfPredefinedTypeName::UInt: + return manager && manager->cputdUInt ? manager->cputdUInt->GetTypeName() : WString::Unmanaged(L"system::UInt64"); + case WfPredefinedTypeName::Float: + return L"system::Single"; + case WfPredefinedTypeName::Double: + return L"system::Double"; + case WfPredefinedTypeName::String: + return L"system::String"; + case WfPredefinedTypeName::Char: + return L"system::Char"; + case WfPredefinedTypeName::Bool: + return L"system::Boolean"; + case WfPredefinedTypeName::Object: + return L"system::Object"; + case WfPredefinedTypeName::Interface: + return L"system::Interface"; + default: + return L""; + } + } + + WString GetTypeFullName(WfLexicalScopeManager* manager, WfType* type) + { + if (!type) + { + return L""; + } + if (auto predefined = dynamic_cast(type)) + { + return GetPredefinedFullName(manager, predefined->name); + } + if (auto top = dynamic_cast(type)) + { + return top->name.value; + } + if (auto reference = dynamic_cast(type)) + { + return reference->name.value; + } + if (auto child = dynamic_cast(type)) + { + auto parent = GetTypeFullName(manager, child->parent.Obj()); + return parent == L"" ? child->name.value : parent + L"::" + child->name.value; + } + if (auto raw = dynamic_cast(type)) + { + return GetTypeFullName(manager, raw->element.Obj()); + } + if (auto shared = dynamic_cast(type)) + { + return GetTypeFullName(manager, shared->element.Obj()); + } + if (auto nullable = dynamic_cast(type)) + { + return GetTypeFullName(manager, nullable->element.Obj()); + } + return L""; + } + + vint FindStruct(const List& structs, const WString& fullName) + { + for (vint i = 0; i < structs.Count(); i++) + { + if (structs[i].fullName == fullName) + { + return i; + } + } + return -1; + } + + vint FindEnum(const List& enums, const WString& fullName) + { + for (vint i = 0; i < enums.Count(); i++) + { + if (enums[i].fullName == fullName) + { + return i; + } + } + return -1; + } + + WString GetDtsTypeFromFullName(DtsContext& context, const WString& fullName) + { + DtsPrimitiveModel primitive; + if (TryGetPrimitiveModel(fullName, primitive)) + { + switch (primitive.kind) + { + case DtsPrimitiveKind::Number: + return L"number"; + case DtsPrimitiveKind::Boolean: + return L"boolean"; + case DtsPrimitiveKind::String: + return L"string"; + default: + CHECK_FAIL(L"Internal error: Unknown primitive kind."); + } + } + if (context.enums && FindEnum(*context.enums, fullName) != -1) + { + return L"number"; + } + if (context.structs && FindStruct(*context.structs, fullName) != -1) + { + return MakeDtsTypeName(fullName); + } + return L"UnknownTypeSchema"; + } + + WString GetDtsTypeFromType(DtsContext& context, WfType* type) + { + if (!type) + { + return L"UnknownTypeSchema"; + } + if (auto nullable = dynamic_cast(type)) + { + return GetDtsTypeFromType(context, nullable->element.Obj()) + L" | null"; + } + if (auto raw = dynamic_cast(type)) + { + return GetDtsTypeFromType(context, raw->element.Obj()); + } + if (auto shared = dynamic_cast(type)) + { + return GetDtsTypeFromType(context, shared->element.Obj()); + } + if (auto enumerable = dynamic_cast(type)) + { + return GetDtsTypeFromType(context, enumerable->element.Obj()) + L"[]"; + } + if (auto map = dynamic_cast(type)) + { + if (map->key) + { + return L"[" + GetDtsTypeFromType(context, map->key.Obj()) + L", " + GetDtsTypeFromType(context, map->value.Obj()) + L"][]"; + } + return GetDtsTypeFromType(context, map->value.Obj()) + L"[]"; + } + if (auto observable = dynamic_cast(type)) + { + return GetDtsTypeFromType(context, observable->element.Obj()) + L"[]"; + } + return GetDtsTypeFromFullName(context, GetTypeFullName(context.manager, type)); + } + + void AddDtsTypesFromDeclarations( + const List>& declarations, + const WString& prefix, + List& enums, + List& structs) + { + for (auto declaration : declarations) + { + auto fullName = prefix == L"" ? declaration->name.value : prefix + L"::" + declaration->name.value; + if (auto namespaceDecl = declaration.Cast()) + { + AddDtsTypesFromDeclarations(namespaceDecl->declarations, fullName, enums, structs); + } + else if (auto enumDecl = declaration.Cast()) + { + if (FindEnum(enums, fullName) == -1) + { + DtsEnumModel model; + model.fullName = fullName; + model.items = Ptr(new List); + Dictionary values; + for (auto item : enumDecl->items) + { + DtsEnumItemModel itemModel; + itemModel.name = item->name.value; + if (item->kind == WfEnumItemKind::Constant) + { + itemModel.value = wtou64(item->number.value); + } + else + { + for (auto intersection : item->intersections) + { + auto index = values.Keys().IndexOf(intersection->name.value); + if (index != -1) + { + itemModel.value |= values.Values()[index]; + } + } + } + values.Add(itemModel.name, itemModel.value); + model.items->Add(itemModel); + } + enums.Add(model); + } + } + else if (auto structDecl = declaration.Cast()) + { + if (FindStruct(structs, fullName) != -1) + { + continue; + } + + DtsStructModel model; + model.fullName = fullName; + model.fields = Ptr(new List); + for (auto member : structDecl->members) + { + DtsFieldModel field; + field.name = member->name.value; + field.type = CopyType(member->type.Obj()); + model.fields->Add(field); + } + structs.Add(model); + } + } + } + + void AddRpcBuiltinDtsStruct(List& structs, const WString& fullName, ITypeDescriptor* td) + { + if (FindStruct(structs, fullName) != -1) + { + return; + } + + if (!td) + { + return; + } + + DtsStructModel model; + model.fullName = fullName; + model.fields = Ptr(new List); + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + auto propertyInfo = td->GetProperty(i); + DtsFieldModel field; + field.name = propertyInfo->GetName(); + field.type = GetTypeFromTypeInfo(propertyInfo->GetReturn()); + model.fields->Add(field); + } + structs.Add(model); + } + + const wchar_t* GetDtsPrimitiveTypeScriptType(DtsPrimitiveKind kind) + { + switch (kind) + { + case DtsPrimitiveKind::Number: + return L"number"; + case DtsPrimitiveKind::Boolean: + return L"boolean"; + case DtsPrimitiveKind::String: + return L"string"; + default: + CHECK_FAIL(L"Internal error: Unknown primitive kind."); + } + } + + void AppendUnknownTypePrimitiveSchema(WString& dts) + { + const Pair primitiveNames[] = + { + { L"UInt8", DtsPrimitiveKind::Number }, + { L"UInt16", DtsPrimitiveKind::Number }, + { L"UInt32", DtsPrimitiveKind::Number }, + { L"UInt64", DtsPrimitiveKind::Number }, + { L"Int8", DtsPrimitiveKind::Number }, + { L"Int16", DtsPrimitiveKind::Number }, + { L"Int32", DtsPrimitiveKind::Number }, + { L"Int64", DtsPrimitiveKind::Number }, + { L"Single", DtsPrimitiveKind::Number }, + { L"Double", DtsPrimitiveKind::Number }, + { L"Char", DtsPrimitiveKind::String }, + { L"DateTime", DtsPrimitiveKind::String }, + { L"Locale", DtsPrimitiveKind::String }, + }; + + dts += L"export type UnknownType_PrimitiveSchema =\r\n"; + for (auto&& [name, kind] : primitiveNames) + { + dts += L" | [" + EscapeDtsString(WString::Unmanaged(name)) + L", " + WString::Unmanaged(GetDtsPrimitiveTypeScriptType(kind)) + L"]\r\n"; + } + dts += L" | null\r\n"; + dts += L" | true\r\n"; + dts += L" | false\r\n"; + dts += L" | string\r\n"; + dts += L" ;\r\n\r\n"; + } + + void AppendTypeListEnum(WString& dts, const List& enums) + { + if (enums.Count() == 0) + { + dts += L"export type TypeList_Enum = never;\r\n\r\n"; + return; + } + + dts += L"export type TypeList_Enum =\r\n"; + for (auto&& model : enums) + { + dts += L" | " + EscapeDtsString(model.fullName) + L"\r\n"; + } + dts += L" ;\r\n\r\n"; + } + + void AppendUnknownTypeEnumSchema(WString& dts) + { + dts += L"export type UnknownType_EnumSchema = [TypeList_Enum, number];\r\n\r\n"; + } + + void AppendUnknownTypeList(WString& dts) + { + dts += L"export interface UnknownType_List\r\n"; + dts += L"{\r\n"; + dts += L" " + EscapeDtsString(L"$") + L": " + EscapeDtsString(L"list") + L" | " + EscapeDtsString(L"oblist") + L";\r\n"; + dts += L" values: UnknownTypeSchema[];\r\n"; + dts += L"}\r\n\r\n"; + } + + void AppendUnknownTypeMap(WString& dts) + { + dts += L"export interface UnknownType_Map\r\n"; + dts += L"{\r\n"; + dts += L" " + EscapeDtsString(L"$") + L": " + EscapeDtsString(L"map") + L";\r\n"; + dts += L" values: [UnknownTypeSchema, UnknownTypeSchema][];\r\n"; + dts += L"}\r\n\r\n"; + } + + void AppendUnknownTypeSchemaUnion(WString& dts, const List& structs) + { + dts += L"export type UnknownTypeSchema =\r\n"; + dts += L" | UnknownType_PrimitiveSchema\r\n"; + dts += L" | UnknownType_EnumSchema\r\n"; + dts += L" | UnknownType_List\r\n"; + dts += L" | UnknownType_Map\r\n"; + for (auto&& model : structs) + { + dts += L" | " + MakeUnknownStructDtsTypeName(model.fullName) + L"\r\n"; + } + dts += L" ;\r\n\r\n"; + } + + void AppendUnknownStructSchemas(WString& dts, DtsContext& context) + { + for (auto&& model : *context.structs) + { + dts += L"export interface " + MakeUnknownStructDtsTypeName(model.fullName) + L" extends " + MakeDtsTypeName(model.fullName) + L"\r\n"; + dts += L"{\r\n"; + dts += L" " + EscapeDtsString(L"$") + L": " + EscapeDtsString(model.fullName) + L";\r\n"; + dts += L"}\r\n\r\n"; + } + } + + void AppendKnownEnums(WString& dts, const List& enums) + { + for (auto&& model : enums) + { + dts += L"export enum " + MakeDtsTypeName(model.fullName) + L"\r\n"; + dts += L"{\r\n"; + for (auto&& item : *model.items.Obj()) + { + dts += L" " + GetDtsPropertyName(item.name) + L" = " + u64tow(item.value) + L",\r\n"; + } + dts += L"}\r\n\r\n"; + } + } + + void AppendKnownStructs(WString& dts, DtsContext& context) + { + for (auto&& model : *context.structs) + { + dts += L"export interface " + MakeDtsTypeName(model.fullName) + L"\r\n"; + dts += L"{\r\n"; + for (auto&& field : *model.fields.Obj()) + { + dts += L" " + GetDtsPropertyName(field.name) + L": " + GetDtsTypeFromType(context, field.type.Obj()) + L";\r\n"; + } + dts += L"}\r\n\r\n"; + } + } + + void AppendKnownTypeSchema(WString& dts, const List& structs) + { + dts += L"// All enum_type_full_name is omitted because in known type enums are just numbers\r\n"; + dts += L"export type KnownTypeSchema =\r\n"; + dts += L" | number\r\n"; + dts += L" | true\r\n"; + dts += L" | false\r\n"; + dts += L" | string\r\n"; + dts += L" | KnownTypeSchema[]\r\n"; + dts += L" | [KnownTypeSchema, KnownTypeSchema][]\r\n"; + for (auto&& model : structs) + { + dts += L" | " + MakeDtsTypeName(model.fullName) + L"\r\n"; + } + dts += L" ;\r\n"; + } + } + + WString GenerateDtsFromRpcMetadata(WfLexicalScopeManager* manager) + { + using namespace rpc_dts_generating; + + WString dts; + if (!manager || !manager->rpcMetadata || !manager->rpcMetadata->metadataModule) + { + return dts; + } + + List enums; + List structs; + AddDtsTypesFromDeclarations(manager->rpcMetadata->metadataModule->declarations, L"", enums, structs); + AddRpcBuiltinDtsStruct(structs, WString::Unmanaged(L"system::RpcObjectReference"), GetTypeDescriptor()); + AddRpcBuiltinDtsStruct(structs, WString::Unmanaged(L"system::RpcException"), GetTypeDescriptor()); + + DtsContext context; + context.manager = manager; + context.enums = &enums; + context.structs = &structs; + + AppendUnknownTypePrimitiveSchema(dts); + AppendTypeListEnum(dts, enums); + AppendUnknownTypeEnumSchema(dts); + AppendUnknownTypeList(dts); + AppendUnknownTypeMap(dts); + AppendUnknownTypeSchemaUnion(dts, structs); + AppendUnknownStructSchemas(dts, context); + dts += L"// below are all known types\r\n\r\n"; + AppendKnownEnums(dts, enums); + AppendKnownStructs(dts, context); + AppendKnownTypeSchema(dts, structs); + return dts; + } + } + } +} + + +/*********************************************************************** +.\ANALYZER\WFANALYZER_GENERATERPC_JSONSERIALIZATION.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + using namespace collections; + + namespace rpc_generating + { + using namespace reflection::description; + + WString MangleRpcFullName(const WString& fullName); + Ptr CopyType(WfType* type); + Ptr CreatePredefinedType(WfPredefinedTypeName name); + Ptr CreateQualifiedType(const WString& fullName); + Ptr CreateTopQualifiedType(const WString& fullName); + Ptr CreateRawType(const WString& fullName); + Ptr CreateSharedType(const WString& fullName); + Ptr CreateNullableType(const WString& fullName); + Ptr CreateMapType(Ptr keyType, Ptr valueType); + Ptr CreateNull(); + Ptr CreateIsNull(Ptr expression); + Ptr CreateIsNotNull(Ptr expression); + Ptr CreateBool(bool value); + Ptr CreateInt(vint value); + Ptr CreateString(const WString& value); + Ptr CreateReference(const WString& name); + Ptr CreateQualifiedExpression(const WString& fullName); + Ptr CreateMember(Ptr parent, const WString& name); + Ptr CreateBinary(WfBinaryOperator op, Ptr first, Ptr second); + Ptr CreateAssign(Ptr left, Ptr right); + Ptr CreateIndex(Ptr collection, Ptr index); + Ptr CreateCast(Ptr type, Ptr expression); + Ptr CreateWeakCast(Ptr type, Ptr expression); + Ptr CreateInfer(Ptr expression, Ptr type); + + Ptr CreateConstructorArgument(Ptr key, Ptr value); + Ptr CreateConstructor(); + Ptr CreateRpcExceptionExpression(Ptr message); + Ptr CreateRpcEventExceptionMapType(); + Ptr CreateNewClass(Ptr type); + Ptr CreateNewInterface(Ptr type); + Ptr CreateExpressionStatement(Ptr expression); + Ptr CreateReturn(Ptr expression); + Ptr CreateRaise(const WString& message); + Ptr CreateRaise(Ptr expression); + Ptr CreateTry(Ptr protectedStatement, const WString& name, Ptr catchStatement, Ptr finallyStatement); + Ptr CreateTryCatch(Ptr protectedStatement, const WString& name, Ptr catchStatement); + Ptr CreateVariableDeclaration(const WString& name, Ptr type, Ptr expression); + Ptr CreateVariableStatement(const WString& name, Ptr type, Ptr expression); + Ptr CreateInferredVariableStatement(const WString& name, Ptr expression); + Ptr CreateForEach(const WString& name, Ptr collection, Ptr body); + Ptr CreateBlock(); + void AddStatement(Ptr block, Ptr statement); + void AddRpcMethodExceptionRaise(Ptr block, Ptr value); + void AddRpcEventExceptionMapSet(Ptr block, const WString& mapName, Ptr clientId, Ptr message); + void AddRpcEventExceptionRaise(Ptr block, Ptr value); + Ptr CreateFunctionArgument(const WString& name, Ptr type); + void AddSwitchCase(Ptr switchStat, Ptr expression, Ptr statement); + bool IsSharedInterfaceType(ITypeInfo* type); + bool IsVoidType(WfType* type); + bool IsRpcByvalReturn(const RpcMethodModel& methodModel); + Ptr CreateRpcBoxExpression(ITypeInfo* typeInfo, bool byref, Ptr value, Ptr lifecycle); + Ptr CreateRpcUnboxExpression(ITypeInfo* typeInfo, Ptr type, bool byref, Ptr value, Ptr lifecycle); + Ptr CreateRpcCopyByvalExpression(Ptr value, Ptr lifecycle); + void AddRpcByvalReturnValue(Ptr block, Ptr value, Ptr copiedValue); + Ptr CreateRpcConstantReference(const wchar_t* prefix, const WString& fullName); + void CollectMangledNames(WfLexicalScopeManager* manager); + List BuildInterfaceModels(WfLexicalScopeManager* manager); + bool HasRpcEvents(const List& interfaces); + Ptr BuildRegisterService(); + WString GetRpcOpsInterfaceName(const WString& assemblyName); + WString GetRpcOpsInvokeMethodName(const RpcMethodModel& methodModel); + WString GetRpcOpsInvokeEventName(const RpcEventModel& eventModel); + WString GetRpcOpsArgumentName(const RpcParamModel& paramModel); + Ptr CreateRpcOpsFunctionDeclaration(const WString& name, Ptr returnType, WfFunctionKind kind); + void AddRpcOpsFunctionArguments(Ptr functionDecl, const List& params); + Ptr CreateRpcOpsObjectOps(); + Ptr CreateRpcOpsObjectInvoke(const RpcMethodModel& methodModel, Ptr objectOps); + Ptr CreateRpcOpsObjectInvoke(const RpcMethodModel& methodModel); + Ptr CreateRpcOpsObjectEventInvoke(const RpcEventModel& eventModel); + + enum class RpcJsonPrimitiveKind + { + Number, + Boolean, + String, + }; + + struct RpcJsonPrimitiveModel + { + WString fullName; + WString keyword; + RpcJsonPrimitiveKind kind = RpcJsonPrimitiveKind::Number; + }; + + struct RpcJsonFieldModel + { + WString name; + Ptr type; + }; + + struct RpcJsonTypeModel + { + WString fullName; + Ptr type; + Ptr> fields; + }; + + Ptr CreateJsonArrayItem(const WString& arrayName, vint index) + { + return CreateIndex(CreateMember(CreateReference(arrayName), L"items"), CreateInt(index)); + } + + Ptr CreateJsonArrayItemContent(const WString& arrayName, vint index, const WString& jsonType) + { + return CreateMember(CreateMember(CreateCast(CreateSharedType(jsonType), CreateJsonArrayItem(arrayName, index)), L"content"), L"value"); + } + + void AddRpcJsonTypesFromDeclarations( + const List>& declarations, + const WString& prefix, + List& enums, + List& structs) + { + for (auto declaration : declarations) + { + auto fullName = prefix == L"" ? declaration->name.value : prefix + L"::" + declaration->name.value; + if (auto namespaceDecl = declaration.Cast()) + { + AddRpcJsonTypesFromDeclarations(namespaceDecl->declarations, fullName, enums, structs); + } + else if (declaration.Cast()) + { + RpcJsonTypeModel model; + model.fullName = fullName; + model.type = CreateTopQualifiedType(fullName); + enums.Add(model); + } + else if (auto structDecl = declaration.Cast()) + { + RpcJsonTypeModel model; + model.fullName = fullName; + model.type = CreateTopQualifiedType(fullName); + model.fields = Ptr(new List); + for (auto member : structDecl->members) + { + RpcJsonFieldModel field; + field.name = member->name.value; + field.type = CopyType(member->type.Obj()); + model.fields->Add(field); + } + structs.Add(model); + } + } + } + + void AddRpcBuiltinJsonType(List& structs, const WString& fullName, ITypeDescriptor* td) + { + for (auto&& model : structs) + { + if (model.fullName == fullName) + { + return; + } + } + + if (!td) + { + return; + } + + RpcJsonTypeModel model; + model.fullName = fullName; + model.type = CreateTopQualifiedType(fullName); + model.fields = Ptr(new List); + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + auto propertyInfo = td->GetProperty(i); + RpcJsonFieldModel field; + field.name = propertyInfo->GetName(); + field.type = GetTypeFromTypeInfo(propertyInfo->GetReturn()); + model.fields->Add(field); + } + structs.Add(model); + } + + void CollectRpcJsonTypes(WfLexicalScopeManager* manager, List& enums, List& structs) + { + if (manager->rpcMetadata && manager->rpcMetadata->metadataModule) + { + AddRpcJsonTypesFromDeclarations(manager->rpcMetadata->metadataModule->declarations, L"", enums, structs); + } + } + + void CollectRpcJsonPrimitives(List& primitives) + { + auto add = [&](const wchar_t* fullName, const wchar_t* keyword, RpcJsonPrimitiveKind kind) + { + RpcJsonPrimitiveModel model; + model.fullName = WString::Unmanaged(fullName); + model.keyword = WString::Unmanaged(keyword); + model.kind = kind; + primitives.Add(model); + }; + + add(L"system::UInt8", L"UInt8", RpcJsonPrimitiveKind::Number); + add(L"system::UInt16", L"UInt16", RpcJsonPrimitiveKind::Number); + add(L"system::UInt32", L"UInt32", RpcJsonPrimitiveKind::Number); + add(L"system::UInt64", L"UInt64", RpcJsonPrimitiveKind::Number); + add(L"system::Int8", L"Int8", RpcJsonPrimitiveKind::Number); + add(L"system::Int16", L"Int16", RpcJsonPrimitiveKind::Number); + add(L"system::Int32", L"Int32", RpcJsonPrimitiveKind::Number); + add(L"system::Int64", L"Int64", RpcJsonPrimitiveKind::Number); + add(L"system::Single", L"Single", RpcJsonPrimitiveKind::Number); + add(L"system::Double", L"Double", RpcJsonPrimitiveKind::Number); + add(L"system::Boolean", L"Boolean", RpcJsonPrimitiveKind::Boolean); + add(L"system::Char", L"Char", RpcJsonPrimitiveKind::String); + add(L"system::String", L"String", RpcJsonPrimitiveKind::String); + add(L"system::DateTime", L"DateTime", RpcJsonPrimitiveKind::String); + add(L"system::Locale", L"Locale", RpcJsonPrimitiveKind::String); + } + + Ptr CreateWhile(Ptr condition, Ptr body) + { + auto statement = Ptr(new WfWhileStatement); + statement->condition = condition; + statement->statement = body; + return statement; + } + + Ptr CreateRpcJsonSerializeCallbackType() + { + auto type = Ptr(new WfFunctionType); + type->result = CreateSharedType(L"system::JsonNode"); + type->arguments.Add(CreatePredefinedType(WfPredefinedTypeName::Object)); + return type; + } + + Ptr CreateRpcJsonDeserializeCallbackType() + { + auto type = Ptr(new WfFunctionType); + type->result = CreatePredefinedType(WfPredefinedTypeName::Object); + type->arguments.Add(CreateSharedType(L"system::JsonNode")); + return type; + } + + WString GetRpcJsonSerializeEnumFunctionName(const WString& fullName) + { + return L"rpcjson_Serialize_Enum_" + MangleRpcFullName(fullName); + } + + WString GetRpcJsonDeserializeEnumFunctionName(const WString& fullName) + { + return L"rpcjson_Deserialize_Enum_" + MangleRpcFullName(fullName); + } + + WString GetRpcJsonSerializeStructFunctionName(const WString& fullName) + { + return L"rpcjson_Serialize_Struct_" + MangleRpcFullName(fullName); + } + + WString GetRpcJsonDeserializeStructFunctionName(const WString& fullName) + { + return L"rpcjson_Deserialize_Struct_" + MangleRpcFullName(fullName); + } + + WString GetRpcJsonPredefinedFullName(WfLexicalScopeManager* manager, WfPredefinedTypeName name) + { + switch (name) + { + case WfPredefinedTypeName::Int: + return manager && manager->cputdSInt ? manager->cputdSInt->GetTypeName() : WString::Unmanaged(L"system::Int64"); + case WfPredefinedTypeName::UInt: + return manager && manager->cputdUInt ? manager->cputdUInt->GetTypeName() : WString::Unmanaged(L"system::UInt64"); + case WfPredefinedTypeName::Float: + return L"system::Single"; + case WfPredefinedTypeName::Double: + return L"system::Double"; + case WfPredefinedTypeName::String: + return L"system::String"; + case WfPredefinedTypeName::Char: + return L"system::Char"; + case WfPredefinedTypeName::Bool: + return L"system::Boolean"; + case WfPredefinedTypeName::Object: + return L"system::Object"; + case WfPredefinedTypeName::Interface: + return L"system::Interface"; + default: + return L""; + } + } + + WString GetRpcJsonTypeFullName(WfLexicalScopeManager* manager, WfType* type) + { + if (!type) return L""; + if (auto predefined = dynamic_cast(type)) + { + return GetRpcJsonPredefinedFullName(manager, predefined->name); + } + if (auto top = dynamic_cast(type)) + { + return top->name.value; + } + if (auto reference = dynamic_cast(type)) + { + return reference->name.value; + } + if (auto child = dynamic_cast(type)) + { + auto parent = GetRpcJsonTypeFullName(manager, child->parent.Obj()); + return parent == L"" ? child->name.value : parent + L"::" + child->name.value; + } + if (auto raw = dynamic_cast(type)) + { + return GetRpcJsonTypeFullName(manager, raw->element.Obj()); + } + if (auto shared = dynamic_cast(type)) + { + return GetRpcJsonTypeFullName(manager, shared->element.Obj()); + } + if (auto nullable = dynamic_cast(type)) + { + return GetRpcJsonTypeFullName(manager, nullable->element.Obj()); + } + return L""; + } + + RpcJsonPrimitiveModel* FindRpcJsonPrimitive(List& primitives, const WString& fullName) + { + for (vint i = 0; i < primitives.Count(); i++) + { + if (primitives[i].fullName == fullName) + { + return &primitives[i]; + } + } + return nullptr; + } + + const RpcJsonTypeModel* FindRpcJsonType(const List& types, const WString& fullName) + { + for (vint i = 0; i < types.Count(); i++) + { + if (types[i].fullName == fullName) + { + return &types[i]; + } + } + return nullptr; + } + + struct RpcJsonGenerationContext + { + WfLexicalScopeManager* manager = nullptr; + List* primitives = nullptr; + List* enums = nullptr; + List* structs = nullptr; + vint tempIndex = 0; + }; + + WString AllocateRpcJsonTemp(RpcJsonGenerationContext& context, const wchar_t* prefix) + { + return WString::Unmanaged(prefix) + itow(context.tempIndex++); + } + + Ptr CreateRpcJsonToken(Ptr value) + { + auto constructor = CreateConstructor(); + constructor->arguments.Add(CreateConstructorArgument(CreateReference(L"value"), value)); + return constructor; + } + + WString AddRpcJsonLiteral(Ptr block, RpcJsonGenerationContext& context, const WString& literal) + { + auto nodeName = AllocateRpcJsonTemp(context, L"jsonLiteral"); + AddStatement(block, CreateInferredVariableStatement(nodeName, CreateNewClass(CreateSharedType(L"system::JsonLiteral")))); + AddStatement(block, CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(nodeName), L"value"), CreateQualifiedExpression(L"system::JsonLiteralValue::" + literal)))); + return nodeName; + } + + WString AddRpcJsonBooleanLiteral(Ptr block, RpcJsonGenerationContext& context, Ptr value) + { + auto nodeName = AllocateRpcJsonTemp(context, L"jsonLiteral"); + AddStatement(block, CreateInferredVariableStatement(nodeName, CreateNewClass(CreateSharedType(L"system::JsonLiteral")))); + AddStatement(block, CreateIf( + value, + CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(nodeName), L"value"), CreateQualifiedExpression(L"system::JsonLiteralValue::True"))), + CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(nodeName), L"value"), CreateQualifiedExpression(L"system::JsonLiteralValue::False"))))); + return nodeName; + } + + WString AddRpcJsonString(Ptr block, RpcJsonGenerationContext& context, Ptr value) + { + auto nodeName = AllocateRpcJsonTemp(context, L"jsonString"); + AddStatement(block, CreateInferredVariableStatement(nodeName, CreateNewClass(CreateSharedType(L"system::JsonString")))); + AddStatement(block, CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(nodeName), L"content"), CreateRpcJsonToken(value)))); + return nodeName; + } + + WString AddRpcJsonNumber(Ptr block, RpcJsonGenerationContext& context, Ptr value) + { + auto nodeName = AllocateRpcJsonTemp(context, L"jsonNumber"); + AddStatement(block, CreateInferredVariableStatement(nodeName, CreateNewClass(CreateSharedType(L"system::JsonNumber")))); + AddStatement(block, CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(nodeName), L"content"), CreateRpcJsonToken(value)))); + return nodeName; + } + + void AddRpcJsonArrayItem(Ptr block, const WString& arrayName, Ptr value) + { + AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateMember(CreateReference(arrayName), L"items"), L"Add"), value))); + } + + void AddRpcJsonObjectField(Ptr block, RpcJsonGenerationContext& context, Ptr object, const WString& fieldName, Ptr value) + { + auto fieldVar = AllocateRpcJsonTemp(context, L"jsonField"); + AddStatement(block, CreateInferredVariableStatement(fieldVar, CreateNewClass(CreateSharedType(L"system::JsonObjectField")))); + AddStatement(block, CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(fieldVar), L"name"), CreateRpcJsonToken(CreateString(fieldName))))); + AddStatement(block, CreateExpressionStatement(CreateAssign(CreateMember(CreateReference(fieldVar), L"value"), value))); + AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateMember(object, L"fields"), L"Add"), CreateReference(fieldVar)))); + } + + WString AddRpcJsonObjectFieldLookup(Ptr block, RpcJsonGenerationContext& context, Ptr object, const WString& fieldName, bool required = true) + { + auto resultVar = AllocateRpcJsonTemp(context, L"jsonFieldValue"); + auto fieldVar = AllocateRpcJsonTemp(context, L"jsonField"); + AddStatement(block, CreateVariableStatement(resultVar, CreateSharedType(L"system::JsonNode"), CreateNull())); + auto forBlock = CreateBlock(); + AddStatement(forBlock, CreateIf( + CreateBinary(WfBinaryOperator::EQ, CreateMember(CreateMember(CreateReference(fieldVar), L"name"), L"value"), CreateString(fieldName)), + CreateExpressionStatement(CreateAssign(CreateReference(resultVar), CreateMember(CreateReference(fieldVar), L"value"))))); + AddStatement(block, CreateForEach(fieldVar, CreateMember(object, L"fields"), forBlock)); + if (required) + { + AddStatement(block, CreateIf(CreateIsNull(CreateReference(resultVar)), CreateRaise(L"JSON object field not found: " + fieldName))); + } + return resultVar; + } + + WString AddKnownRpcJsonSerializeValue(RpcJsonGenerationContext& context, Ptr block, Ptr value, WfType* type); + WString AddKnownRpcJsonDeserializeValue(RpcJsonGenerationContext& context, Ptr block, Ptr node, WfType* type); + + Ptr CreateWritableRpcJsonCollectionType(WfType* type) + { + if (auto enumerable = dynamic_cast(type)) + { + auto listType = Ptr(new WfMapType); + listType->writability = WfMapWritability::Writable; + listType->value = CopyType(enumerable->element.Obj()); + return listType; + } + if (auto map = dynamic_cast(type)) + { + auto mapType = Ptr(new WfMapType); + mapType->writability = WfMapWritability::Writable; + mapType->key = map->key ? CopyType(map->key.Obj()) : nullptr; + mapType->value = CopyType(map->value.Obj()); + return mapType; + } + if (auto observable = dynamic_cast(type)) + { + auto listType = Ptr(new WfObservableListType); + listType->element = CopyType(observable->element.Obj()); + return listType; + } + return CopyType(type); + } + + Ptr CreateRpcJsonSerializedArgument(vint index) + { + return CreateIndex(CreateReference(L"arguments"), CreateInt(index)); + } + + WString AddUnknownRpcJsonSerializeValue(RpcJsonGenerationContext& context, Ptr block, Ptr value) + { + auto valueName = AllocateRpcJsonTemp(context, L"jsonValue"); + auto resultName = AllocateRpcJsonTemp(context, L"jsonNode"); + AddStatement(block, CreateInferredVariableStatement(valueName, value)); + AddStatement(block, CreateInferredVariableStatement(resultName, CreateCall(CreateReference(L"rpcjson_Serialize"), CreateReference(valueName)))); + return resultName; + } + + WString AddKnownRpcJsonSerializeValue(RpcJsonGenerationContext& context, Ptr block, Ptr value, WfType* type) + { + if (auto nullable = dynamic_cast(type)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonNode"); + AddStatement(block, CreateVariableStatement(resultName, CreateSharedType(L"system::JsonNode"), CreateNull())); + auto nullBranch = CreateBlock(); + auto nullNode = AddRpcJsonLiteral(nullBranch, context, L"Null"); + AddStatement(nullBranch, CreateExpressionStatement(CreateAssign(CreateReference(resultName), CreateReference(nullNode)))); + auto valueBranch = CreateBlock(); + auto valueNode = AddKnownRpcJsonSerializeValue(context, valueBranch, CreateCast(CopyType(nullable->element.Obj()), CopyExpression(value, true)), nullable->element.Obj()); + AddStatement(valueBranch, CreateExpressionStatement(CreateAssign(CreateReference(resultName), CreateReference(valueNode)))); + AddStatement(block, CreateIf(CreateIsNull(value), nullBranch, valueBranch)); + return resultName; + } + + auto fullName = GetRpcJsonTypeFullName(context.manager, type); + if (auto primitive = FindRpcJsonPrimitive(*context.primitives, fullName)) + { + switch (primitive->kind) + { + case RpcJsonPrimitiveKind::Number: + return AddRpcJsonNumber(block, context, CreateCast(CreatePredefinedType(WfPredefinedTypeName::String), value)); + case RpcJsonPrimitiveKind::Boolean: + return AddRpcJsonBooleanLiteral(block, context, value); + case RpcJsonPrimitiveKind::String: + return AddRpcJsonString(block, context, CreateCast(CreatePredefinedType(WfPredefinedTypeName::String), value)); + default: + CHECK_FAIL(L"Internal error: Unknown primitive kind."); + } + } + + if (fullName == L"system::JsonNode") + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonNode"); + AddStatement(block, CreateInferredVariableStatement(resultName, value)); + return resultName; + } + + if (fullName == L"system::Object" || fullName == L"system::Interface") + { + return AddUnknownRpcJsonSerializeValue(context, block, value); + } + + if (FindRpcJsonType(*context.enums, fullName)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonNode"); + AddStatement(block, CreateInferredVariableStatement(resultName, CreateCall(CreateReference(GetRpcJsonSerializeEnumFunctionName(fullName)), value))); + return resultName; + } + + if (FindRpcJsonType(*context.structs, fullName)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonNode"); + AddStatement(block, CreateInferredVariableStatement(resultName, CreateCall(CreateReference(GetRpcJsonSerializeStructFunctionName(fullName)), value))); + return resultName; + } + + if (auto enumerable = dynamic_cast(type)) + { + auto arrayName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(block, CreateInferredVariableStatement(arrayName, CreateNewClass(CreateSharedType(L"system::JsonArray")))); + auto forBlock = CreateBlock(); + auto itemNode = AddKnownRpcJsonSerializeValue(context, forBlock, CreateReference(L"item"), enumerable->element.Obj()); + AddRpcJsonArrayItem(forBlock, arrayName, CreateReference(itemNode)); + AddStatement(block, CreateForEach(L"item", value, forBlock)); + return arrayName; + } + + if (auto map = dynamic_cast(type)) + { + auto arrayName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(block, CreateInferredVariableStatement(arrayName, CreateNewClass(CreateSharedType(L"system::JsonArray")))); + auto forBlock = CreateBlock(); + if (map->key) + { + auto pairName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(forBlock, CreateInferredVariableStatement(pairName, CreateNewClass(CreateSharedType(L"system::JsonArray")))); + auto keyNode = AddKnownRpcJsonSerializeValue(context, forBlock, CreateReference(L"key"), map->key.Obj()); + AddRpcJsonArrayItem(forBlock, pairName, CreateReference(keyNode)); + auto valueNode = AddKnownRpcJsonSerializeValue(context, forBlock, CreateIndex(value, CreateReference(L"key")), map->value.Obj()); + AddRpcJsonArrayItem(forBlock, pairName, CreateReference(valueNode)); + AddRpcJsonArrayItem(forBlock, arrayName, CreateReference(pairName)); + AddStatement(block, CreateForEach(L"key", CreateMember(value, L"Keys"), forBlock)); + } + else + { + auto itemNode = AddKnownRpcJsonSerializeValue(context, forBlock, CreateReference(L"item"), map->value.Obj()); + AddRpcJsonArrayItem(forBlock, arrayName, CreateReference(itemNode)); + AddStatement(block, CreateForEach(L"item", value, forBlock)); + } + return arrayName; + } + + if (auto observable = dynamic_cast(type)) + { + auto arrayName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(block, CreateInferredVariableStatement(arrayName, CreateNewClass(CreateSharedType(L"system::JsonArray")))); + auto forBlock = CreateBlock(); + auto itemNode = AddKnownRpcJsonSerializeValue(context, forBlock, CreateReference(L"item"), observable->element.Obj()); + AddRpcJsonArrayItem(forBlock, arrayName, CreateReference(itemNode)); + AddStatement(block, CreateForEach(L"item", value, forBlock)); + return arrayName; + } + + return AddUnknownRpcJsonSerializeValue(context, block, value); + } + + WString AddKnownRpcJsonDeserializeValue(RpcJsonGenerationContext& context, Ptr block, Ptr node, WfType* type) + { + if (auto nullable = dynamic_cast(type)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + auto literalName = AllocateRpcJsonTemp(context, L"jsonLiteral"); + AddStatement(block, CreateVariableStatement(resultName, CopyType(type), CreateNull())); + AddStatement(block, CreateInferredVariableStatement(literalName, CreateWeakCast(CreateSharedType(L"system::JsonLiteral"), CopyExpression(node, true)))); + auto assignBranch = CreateBlock(); + auto valueName = AddKnownRpcJsonDeserializeValue(context, assignBranch, node, nullable->element.Obj()); + AddStatement(assignBranch, CreateExpressionStatement(CreateAssign(CreateReference(resultName), CreateReference(valueName)))); + AddStatement(block, CreateIf( + CreateBinary( + WfBinaryOperator::Or, + CreateIsNull(CreateReference(literalName)), + CreateBinary(WfBinaryOperator::NE, CreateMember(CreateReference(literalName), L"value"), CreateQualifiedExpression(L"system::JsonLiteralValue::Null"))), + assignBranch)); + return resultName; + } + + auto fullName = GetRpcJsonTypeFullName(context.manager, type); + if (auto primitive = FindRpcJsonPrimitive(*context.primitives, fullName)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + auto deserialized = CreateCall(CreateReference(L"rpcjson_Deserialize"), node); + auto value = + primitive->kind == RpcJsonPrimitiveKind::Boolean || fullName == L"system::String" + ? CreateCast(CreateTopQualifiedType(fullName), deserialized) + : CreateCast(CreateTopQualifiedType(fullName), CreateCast(CreatePredefinedType(WfPredefinedTypeName::String), deserialized)); + AddStatement(block, CreateInferredVariableStatement(resultName, value)); + return resultName; + } + + if (fullName == L"system::JsonNode") + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + AddStatement(block, CreateInferredVariableStatement(resultName, node)); + return resultName; + } + + if (fullName == L"system::Object" || fullName == L"system::Interface") + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + AddStatement(block, CreateInferredVariableStatement(resultName, CreateCall(CreateReference(L"rpcjson_Deserialize"), node))); + return resultName; + } + + if (FindRpcJsonType(*context.enums, fullName)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + AddStatement(block, CreateInferredVariableStatement(resultName, CreateCall(CreateReference(GetRpcJsonDeserializeEnumFunctionName(fullName)), node))); + return resultName; + } + + if (FindRpcJsonType(*context.structs, fullName)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + AddStatement(block, CreateInferredVariableStatement(resultName, CreateCall(CreateReference(GetRpcJsonDeserializeStructFunctionName(fullName)), node))); + return resultName; + } + + if (auto enumerable = dynamic_cast(type)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + auto arrayName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(block, CreateVariableStatement(resultName, CreateWritableRpcJsonCollectionType(type), CreateConstructor())); + AddStatement(block, CreateInferredVariableStatement(arrayName, CreateCast(CreateSharedType(L"system::JsonArray"), node))); + auto forBlock = CreateBlock(); + auto itemValue = AddKnownRpcJsonDeserializeValue(context, forBlock, CreateReference(L"item"), enumerable->element.Obj()); + AddStatement(forBlock, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(resultName), L"Add"), CreateReference(itemValue)))); + AddStatement(block, CreateForEach(L"item", CreateMember(CreateReference(arrayName), L"items"), forBlock)); + return resultName; + } + + if (auto map = dynamic_cast(type)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + auto arrayName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(block, CreateVariableStatement(resultName, CreateWritableRpcJsonCollectionType(type), CreateConstructor())); + AddStatement(block, CreateInferredVariableStatement(arrayName, CreateCast(CreateSharedType(L"system::JsonArray"), node))); + auto forBlock = CreateBlock(); + if (map->key) + { + auto pairName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(forBlock, CreateInferredVariableStatement(pairName, CreateCast(CreateSharedType(L"system::JsonArray"), CreateReference(L"item")))); + auto keyValue = AddKnownRpcJsonDeserializeValue(context, forBlock, CreateJsonArrayItem(pairName, 0), map->key.Obj()); + auto itemValue = AddKnownRpcJsonDeserializeValue(context, forBlock, CreateJsonArrayItem(pairName, 1), map->value.Obj()); + AddStatement(forBlock, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(resultName), L"Set"), CreateReference(keyValue), CreateReference(itemValue)))); + } + else + { + auto itemValue = AddKnownRpcJsonDeserializeValue(context, forBlock, CreateReference(L"item"), map->value.Obj()); + AddStatement(forBlock, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(resultName), L"Add"), CreateReference(itemValue)))); + } + AddStatement(block, CreateForEach(L"item", CreateMember(CreateReference(arrayName), L"items"), forBlock)); + return resultName; + } + + if (auto observable = dynamic_cast(type)) + { + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + auto arrayName = AllocateRpcJsonTemp(context, L"jsonArray"); + AddStatement(block, CreateVariableStatement(resultName, CreateWritableRpcJsonCollectionType(type), CreateConstructor())); + AddStatement(block, CreateInferredVariableStatement(arrayName, CreateCast(CreateSharedType(L"system::JsonArray"), node))); + auto forBlock = CreateBlock(); + auto itemValue = AddKnownRpcJsonDeserializeValue(context, forBlock, CreateReference(L"item"), observable->element.Obj()); + AddStatement(forBlock, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(resultName), L"Add"), CreateReference(itemValue)))); + AddStatement(block, CreateForEach(L"item", CreateMember(CreateReference(arrayName), L"items"), forBlock)); + return resultName; + } + + auto resultName = AllocateRpcJsonTemp(context, L"jsonValue"); + AddStatement(block, CreateInferredVariableStatement(resultName, CreateCast(CopyType(type), CreateCall(CreateReference(L"rpcjson_Deserialize"), node)))); + return resultName; + } + + void AddRpcJsonUnknownTupleReturn(RpcJsonGenerationContext& context, Ptr block, const WString& keyword, Ptr valueNode) + { + auto arrayName = AllocateRpcJsonTemp(context, L"jsonArray"); + auto keywordNode = AddRpcJsonString(block, context, CreateString(keyword)); + AddStatement(block, CreateInferredVariableStatement(arrayName, CreateNewClass(CreateSharedType(L"system::JsonArray")))); + AddRpcJsonArrayItem(block, arrayName, CreateReference(keywordNode)); + AddRpcJsonArrayItem(block, arrayName, valueNode); + AddStatement(block, CreateReturn(CreateReference(arrayName))); + } + + Ptr GenerateRpcJsonSerializeEnum(RpcJsonGenerationContext& context, const RpcJsonTypeModel& enumModel) + { + auto functionDecl = CreateFunctionDeclaration(GetRpcJsonSerializeEnumFunctionName(enumModel.fullName), CreateSharedType(L"system::JsonNode"), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"value", CopyType(enumModel.type.Obj()))); + auto block = functionDecl->statement.Cast(); + auto nodeName = AddRpcJsonNumber(block, context, CreateCast( + CreatePredefinedType(WfPredefinedTypeName::String), + CreateCast(CreateQualifiedType(L"system::UInt64"), CreateReference(L"value")))); + AddStatement(block, CreateReturn(CreateReference(nodeName))); + return functionDecl; + } + + Ptr GenerateRpcJsonDeserializeEnum(RpcJsonGenerationContext& context, const RpcJsonTypeModel& enumModel) + { + auto functionDecl = CreateFunctionDeclaration(GetRpcJsonDeserializeEnumFunctionName(enumModel.fullName), CopyType(enumModel.type.Obj()), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"node", CreateSharedType(L"system::JsonNode"))); + auto block = functionDecl->statement.Cast(); + AddStatement(block, CreateReturn(CreateCast( + CopyType(enumModel.type.Obj()), + CreateCast(CreateQualifiedType(L"system::UInt64"), CreateMember(CreateMember(CreateCast(CreateSharedType(L"system::JsonNumber"), CreateReference(L"node")), L"content"), L"value"))))); + return functionDecl; + } + + void AddRpcJsonStructFields(RpcJsonGenerationContext& context, Ptr block, const RpcJsonTypeModel& structModel, const WString& objectName, const WString& valueName) + { + for (auto&& field : *structModel.fields.Obj()) + { + auto fieldNode = AddKnownRpcJsonSerializeValue(context, block, CreateMember(CreateReference(valueName), field.name), field.type.Obj()); + AddRpcJsonObjectField(block, context, CreateReference(objectName), field.name, CreateReference(fieldNode)); + } + } + + Ptr GenerateRpcJsonSerializeStruct(RpcJsonGenerationContext& context, const RpcJsonTypeModel& structModel) + { + auto functionDecl = CreateFunctionDeclaration(GetRpcJsonSerializeStructFunctionName(structModel.fullName), CreateSharedType(L"system::JsonNode"), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"value", CopyType(structModel.type.Obj()))); + auto block = functionDecl->statement.Cast(); + AddStatement(block, CreateInferredVariableStatement(L"object", CreateNewClass(CreateSharedType(L"system::JsonObject")))); + AddRpcJsonStructFields(context, block, structModel, L"object", L"value"); + AddStatement(block, CreateReturn(CreateReference(L"object"))); + return functionDecl; + } + + Ptr GenerateRpcJsonDeserializeStruct(RpcJsonGenerationContext& context, const RpcJsonTypeModel& structModel) + { + auto functionDecl = CreateFunctionDeclaration(GetRpcJsonDeserializeStructFunctionName(structModel.fullName), CopyType(structModel.type.Obj()), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"node", CreateSharedType(L"system::JsonNode"))); + auto block = functionDecl->statement.Cast(); + AddStatement(block, CreateInferredVariableStatement(L"object", CreateCast(CreateSharedType(L"system::JsonObject"), CreateReference(L"node")))); + auto constructor = CreateConstructor(); + for (auto&& field : *structModel.fields.Obj()) + { + auto fieldNode = AddRpcJsonObjectFieldLookup(block, context, CreateReference(L"object"), field.name); + auto fieldValue = AddKnownRpcJsonDeserializeValue(context, block, CreateReference(fieldNode), field.type.Obj()); + constructor->arguments.Add(CreateConstructorArgument(CreateReference(field.name), CreateReference(fieldValue))); + } + AddStatement(block, CreateReturn(constructor)); + return functionDecl; + } + + void AddUnknownSerializeCollectionCase(RpcJsonGenerationContext& context, Ptr block, const WString& varName, const WString& typeFullName, const WString& keyword) + { + AddStatement(block, CreateInferredVariableStatement(varName, CreateWeakCast(CreateSharedType(typeFullName), CreateReference(L"value")))); + auto trueBranch = CreateBlock(); + AddStatement(trueBranch, CreateInferredVariableStatement(L"object", CreateNewClass(CreateSharedType(L"system::JsonObject")))); + auto keywordNode = AddRpcJsonString(trueBranch, context, CreateString(keyword)); + AddRpcJsonObjectField(trueBranch, context, CreateReference(L"object"), L"$", CreateReference(keywordNode)); + AddStatement(trueBranch, CreateInferredVariableStatement(L"values", CreateNewClass(CreateSharedType(L"system::JsonArray")))); + auto forBlock = CreateBlock(); + AddRpcJsonArrayItem(forBlock, L"values", CreateCall(CreateReference(L"rpcjson_Serialize"), CreateReference(L"item"))); + AddStatement(trueBranch, CreateForEach(L"item", CreateReference(varName), forBlock)); + AddRpcJsonObjectField(trueBranch, context, CreateReference(L"object"), L"values", CreateReference(L"values")); + AddStatement(trueBranch, CreateReturn(CreateReference(L"object"))); + AddStatement(block, CreateIf(CreateIsNotNull(CreateReference(varName)), trueBranch)); + } + + void AddUnknownSerializeMapCase(RpcJsonGenerationContext& context, Ptr block, const WString& varName, const WString& typeFullName) + { + AddStatement(block, CreateInferredVariableStatement(varName, CreateWeakCast(CreateSharedType(typeFullName), CreateReference(L"value")))); + auto trueBranch = CreateBlock(); + AddStatement(trueBranch, CreateInferredVariableStatement(L"object", CreateNewClass(CreateSharedType(L"system::JsonObject")))); + auto keywordNode = AddRpcJsonString(trueBranch, context, CreateString(L"map")); + AddRpcJsonObjectField(trueBranch, context, CreateReference(L"object"), L"$", CreateReference(keywordNode)); + AddStatement(trueBranch, CreateInferredVariableStatement(L"values", CreateNewClass(CreateSharedType(L"system::JsonArray")))); + auto forBlock = CreateBlock(); + AddRpcJsonArrayItem(forBlock, L"values", CreateCall(CreateReference(L"rpcjson_Serialize"), CreateReference(L"key"))); + AddRpcJsonArrayItem(forBlock, L"values", CreateCall(CreateReference(L"rpcjson_Serialize"), CreateCall(CreateMember(CreateReference(varName), L"Get"), CreateReference(L"key")))); + AddStatement(trueBranch, CreateForEach(L"key", CreateMember(CreateReference(varName), L"Keys"), forBlock)); + AddRpcJsonObjectField(trueBranch, context, CreateReference(L"object"), L"values", CreateReference(L"values")); + AddStatement(trueBranch, CreateReturn(CreateReference(L"object"))); + AddStatement(block, CreateIf(CreateIsNotNull(CreateReference(varName)), trueBranch)); + } + + void AddUnknownSerializePrimitiveCase(RpcJsonGenerationContext& context, Ptr block, const RpcJsonPrimitiveModel& primitive) + { + if (primitive.kind == RpcJsonPrimitiveKind::Boolean || primitive.fullName == L"system::String") + { + return; + } + + auto varName = L"value_" + MangleRpcFullName(primitive.fullName); + auto nullableType = CreateNullableType(primitive.fullName); + AddStatement(block, CreateInferredVariableStatement(varName, CreateWeakCast(nullableType, CreateReference(L"value")))); + auto trueBranch = CreateBlock(); + auto varValue = CreateCast(CreateTopQualifiedType(primitive.fullName), CreateReference(varName)); + WString nodeName; + switch (primitive.kind) + { + case RpcJsonPrimitiveKind::Number: + nodeName = AddRpcJsonNumber(trueBranch, context, CreateCast(CreatePredefinedType(WfPredefinedTypeName::String), varValue)); + break; + case RpcJsonPrimitiveKind::String: + nodeName = AddRpcJsonString(trueBranch, context, CreateCast(CreatePredefinedType(WfPredefinedTypeName::String), varValue)); + break; + default: + CHECK_FAIL(L"Internal error: Unexpected primitive kind."); + } + AddRpcJsonUnknownTupleReturn(context, trueBranch, primitive.keyword, CreateReference(nodeName)); + AddStatement(block, CreateIf(CreateIsNotNull(CreateReference(varName)), trueBranch)); + } + + void AddUnknownSerializeEnumCase(RpcJsonGenerationContext& context, Ptr block, const RpcJsonTypeModel& enumModel) + { + auto varName = L"value_" + MangleRpcFullName(enumModel.fullName); + auto nullableType = Ptr(new WfNullableType); + nullableType->element = CopyType(enumModel.type.Obj()); + AddStatement(block, CreateInferredVariableStatement(varName, CreateWeakCast(nullableType, CreateReference(L"value")))); + auto trueBranch = CreateBlock(); + auto valueNode = AllocateRpcJsonTemp(context, L"jsonNode"); + AddStatement(trueBranch, CreateInferredVariableStatement(valueNode, CreateCall(CreateReference(GetRpcJsonSerializeEnumFunctionName(enumModel.fullName)), CreateCast(CopyType(enumModel.type.Obj()), CreateReference(varName))))); + AddRpcJsonUnknownTupleReturn(context, trueBranch, enumModel.fullName, CreateReference(valueNode)); + AddStatement(block, CreateIf(CreateIsNotNull(CreateReference(varName)), trueBranch)); + } + + void AddUnknownSerializeStructCase(RpcJsonGenerationContext& context, Ptr block, const RpcJsonTypeModel& structModel) + { + auto varName = L"value_" + MangleRpcFullName(structModel.fullName); + auto nullableType = Ptr(new WfNullableType); + nullableType->element = CopyType(structModel.type.Obj()); + AddStatement(block, CreateInferredVariableStatement(varName, CreateWeakCast(nullableType, CreateReference(L"value")))); + auto trueBranch = CreateBlock(); + AddStatement(trueBranch, CreateInferredVariableStatement(L"object", CreateNewClass(CreateSharedType(L"system::JsonObject")))); + auto keywordNode = AddRpcJsonString(trueBranch, context, CreateString(structModel.fullName)); + AddRpcJsonObjectField(trueBranch, context, CreateReference(L"object"), L"$", CreateReference(keywordNode)); + auto varValueName = AllocateRpcJsonTemp(context, L"value"); + AddStatement(trueBranch, CreateInferredVariableStatement(varValueName, CreateCast(CopyType(structModel.type.Obj()), CreateReference(varName)))); + AddRpcJsonStructFields(context, trueBranch, structModel, L"object", varValueName); + AddStatement(trueBranch, CreateReturn(CreateReference(L"object"))); + AddStatement(block, CreateIf(CreateIsNotNull(CreateReference(varName)), trueBranch)); + } + + Ptr GenerateRpcJsonSerialize(RpcJsonGenerationContext& context) + { + auto functionDecl = CreateFunctionDeclaration(L"rpcjson_Serialize", CreateSharedType(L"system::JsonNode"), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"value", CreatePredefinedType(WfPredefinedTypeName::Object))); + auto block = functionDecl->statement.Cast(); + for (auto&& enumModel : *context.enums) + { + AddUnknownSerializeEnumCase(context, block, enumModel); + } + for (auto&& structModel : *context.structs) + { + AddUnknownSerializeStructCase(context, block, structModel); + } + AddStatement(block, CreateReturn(CreateCall( + CreateQualifiedExpression(L"system::IRpcLifecycle::JsonSerializePredefinedTypes"), + CreateReference(L"value"), + CreateReference(L"rpcjson_Serialize")))); + return functionDecl; + } + + void AddUnknownDeserializePrimitiveCase(Ptr switchStat, const RpcJsonPrimitiveModel& primitive) + { + if (primitive.kind == RpcJsonPrimitiveKind::Boolean || primitive.fullName == L"system::String") + { + return; + } + + auto jsonType = primitive.kind == RpcJsonPrimitiveKind::Number ? L"system::JsonNumber" : L"system::JsonString"; + AddSwitchCase( + switchStat, + CreateString(primitive.keyword), + CreateReturn(CreateCast(CreateTopQualifiedType(primitive.fullName), CreateJsonArrayItemContent(L"array", 1, jsonType)))); + } + + void AddUnknownDeserializeEnumCase(Ptr switchStat, const RpcJsonTypeModel& enumModel) + { + AddSwitchCase( + switchStat, + CreateString(enumModel.fullName), + CreateReturn(CreateCall(CreateReference(GetRpcJsonDeserializeEnumFunctionName(enumModel.fullName)), CreateJsonArrayItem(L"array", 1)))); + } + + void AddUnknownDeserializeStructCase(Ptr switchStat, const RpcJsonTypeModel& structModel) + { + AddSwitchCase( + switchStat, + CreateString(structModel.fullName), + CreateReturn(CreateCall(CreateReference(GetRpcJsonDeserializeStructFunctionName(structModel.fullName)), CreateReference(L"object")))); + } + + Ptr CreateUnknownDeserializeListCase(RpcJsonGenerationContext& context, const WString& variableType) + { + auto block = CreateBlock(); + AddStatement(block, CreateVariableStatement(L"result", CreateSharedType(variableType), CreateConstructor())); + auto valuesNode = AddRpcJsonObjectFieldLookup(block, context, CreateReference(L"object"), L"values"); + AddStatement(block, CreateInferredVariableStatement(L"values", CreateCast(CreateSharedType(L"system::JsonArray"), CreateReference(valuesNode)))); + auto forBlock = CreateBlock(); + AddStatement(forBlock, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"result"), L"Add"), CreateCall(CreateReference(L"rpcjson_Deserialize"), CreateReference(L"item"))))); + AddStatement(block, CreateForEach(L"item", CreateMember(CreateReference(L"values"), L"items"), forBlock)); + AddStatement(block, CreateReturn(CreateReference(L"result"))); + return block; + } + + Ptr CreateUnknownDeserializeMapCase(RpcJsonGenerationContext& context) + { + auto block = CreateBlock(); + AddStatement(block, CreateVariableStatement(L"result", CreateSharedType(L"system::Dictionary"), CreateConstructor())); + auto valuesNode = AddRpcJsonObjectFieldLookup(block, context, CreateReference(L"object"), L"values"); + AddStatement(block, CreateInferredVariableStatement(L"values", CreateCast(CreateSharedType(L"system::JsonArray"), CreateReference(valuesNode)))); + AddStatement(block, CreateInferredVariableStatement(L"index", CreateInt(0))); + auto whileBlock = CreateBlock(); + AddStatement(whileBlock, CreateExpressionStatement(CreateCall( + CreateMember(CreateReference(L"result"), L"Set"), + CreateCall(CreateReference(L"rpcjson_Deserialize"), CreateIndex(CreateMember(CreateReference(L"values"), L"items"), CreateReference(L"index"))), + CreateCall(CreateReference(L"rpcjson_Deserialize"), CreateIndex(CreateMember(CreateReference(L"values"), L"items"), CreateBinary(WfBinaryOperator::Add, CreateReference(L"index"), CreateInt(1))))))); + AddStatement(whileBlock, CreateExpressionStatement(CreateAssign(CreateReference(L"index"), CreateBinary(WfBinaryOperator::Add, CreateReference(L"index"), CreateInt(2))))); + AddStatement(block, CreateWhile(CreateBinary(WfBinaryOperator::LT, CreateReference(L"index"), CreateMember(CreateMember(CreateReference(L"values"), L"items"), L"Count")), whileBlock)); + AddStatement(block, CreateReturn(CreateReference(L"result"))); + return block; + } + + Ptr GenerateRpcJsonDeserialize(RpcJsonGenerationContext& context) + { + auto functionDecl = CreateFunctionDeclaration(L"rpcjson_Deserialize", CreatePredefinedType(WfPredefinedTypeName::Object), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"node", CreateSharedType(L"system::JsonNode"))); + auto block = functionDecl->statement.Cast(); + + if (context.enums->Count() > 0) + { + AddStatement(block, CreateInferredVariableStatement(L"array", CreateWeakCast(CreateSharedType(L"system::JsonArray"), CreateReference(L"node")))); + auto arrayBranch = CreateBlock(); + AddStatement(arrayBranch, CreateInferredVariableStatement(L"keyword", CreateJsonArrayItemContent(L"array", 0, L"system::JsonString"))); + auto arraySwitch = Ptr(new WfSwitchStatement); + arraySwitch->expression = CreateReference(L"keyword"); + for (auto&& enumModel : *context.enums) + { + AddUnknownDeserializeEnumCase(arraySwitch, enumModel); + } + AddStatement(arrayBranch, arraySwitch); + AddStatement(block, CreateIf(CreateIsNotNull(CreateReference(L"array")), arrayBranch)); + } + + AddStatement(block, CreateInferredVariableStatement(L"object", CreateWeakCast(CreateSharedType(L"system::JsonObject"), CreateReference(L"node")))); + auto objectBranch = CreateBlock(); + { + auto keywordNode = AddRpcJsonObjectFieldLookup(objectBranch, context, CreateReference(L"object"), L"$", false); + auto keywordBranch = CreateBlock(); + AddStatement(keywordBranch, CreateInferredVariableStatement(L"keyword", CreateMember(CreateMember(CreateCast(CreateSharedType(L"system::JsonString"), CreateReference(keywordNode)), L"content"), L"value"))); + auto objectSwitch = Ptr(new WfSwitchStatement); + objectSwitch->expression = CreateReference(L"keyword"); + for (auto&& structModel : *context.structs) + { + AddUnknownDeserializeStructCase(objectSwitch, structModel); + } + AddStatement(keywordBranch, objectSwitch); + AddStatement(objectBranch, CreateIf(CreateIsNotNull(CreateReference(keywordNode)), keywordBranch)); + } + AddStatement(block, CreateIf(CreateIsNotNull(CreateReference(L"object")), objectBranch)); + AddStatement(block, CreateReturn(CreateCall( + CreateQualifiedExpression(L"system::IRpcLifecycle::JsonDeserializePredefinedTypes"), + CreateReference(L"node"), + CreateReference(L"rpcjson_Deserialize")))); + return functionDecl; + } + + void AddRpcJsonDeclarations(WfLexicalScopeManager* manager, Ptr module) + { + List primitives; + List enums; + List structs; + CollectRpcJsonPrimitives(primitives); + CollectRpcJsonTypes(manager, enums, structs); + + RpcJsonGenerationContext context; + context.manager = manager; + context.primitives = &primitives; + context.enums = &enums; + context.structs = &structs; + + for (auto&& enumModel : enums) + { + module->declarations.Add(GenerateRpcJsonSerializeEnum(context, enumModel)); + module->declarations.Add(GenerateRpcJsonDeserializeEnum(context, enumModel)); + } + for (auto&& structModel : structs) + { + module->declarations.Add(GenerateRpcJsonSerializeStruct(context, structModel)); + module->declarations.Add(GenerateRpcJsonDeserializeStruct(context, structModel)); + } + module->declarations.Add(GenerateRpcJsonSerialize(context)); + module->declarations.Add(GenerateRpcJsonDeserialize(context)); + } + + Ptr GenerateRpcSerializerFactoryJson() + { + auto functionDecl = CreateFunctionDeclaration(L"rpcops_IRpcSerializer", CreateSharedType(L"system::IRpcSerializer"), WfFunctionKind::Normal); + auto newSerializer = CreateNewInterface(CreateSharedType(L"system::IRpcSerializer")).Cast(); + + { + auto serialize = CreateFunctionDeclaration(L"Serialize", CreatePredefinedType(WfPredefinedTypeName::Object), WfFunctionKind::Override); + serialize->arguments.Add(CreateFunctionArgument(L"value", CreatePredefinedType(WfPredefinedTypeName::Object))); + auto block = serialize->statement.Cast(); + AddStatement(block, CreateInferredVariableStatement(L"result", CreateCall(CreateReference(L"rpcjson_Serialize"), CreateReference(L"value")))); + AddStatement(block, CreateReturn(CreateReference(L"result"))); + newSerializer->declarations.Add(serialize); + } + + { + auto deserialize = CreateFunctionDeclaration(L"Deserialize", CreatePredefinedType(WfPredefinedTypeName::Object), WfFunctionKind::Override); + deserialize->arguments.Add(CreateFunctionArgument(L"value", CreatePredefinedType(WfPredefinedTypeName::Object))); + auto block = deserialize->statement.Cast(); + AddStatement(block, CreateReturn(CreateCall( + CreateReference(L"rpcjson_Deserialize"), + CreateCast(CreateSharedType(L"system::JsonNode"), CreateReference(L"value"))))); + newSerializer->declarations.Add(deserialize); + } + + AddStatement(functionDecl->statement.Cast(), CreateReturn(newSerializer)); + return functionDecl; + } + + WString AddRpcJsonSerializeValue(WfLexicalScopeManager* manager, vint& tempIndex, Ptr block, Ptr value, WfType* type) + { + List primitives; + List enums; + List structs; + CollectRpcJsonPrimitives(primitives); + CollectRpcJsonTypes(manager, enums, structs); + + RpcJsonGenerationContext context; + context.manager = manager; + context.primitives = &primitives; + context.enums = &enums; + context.structs = &structs; + context.tempIndex = tempIndex; + + auto result = AddKnownRpcJsonSerializeValue(context, block, value, type); + tempIndex = context.tempIndex; + return result; + } + + WString AddRpcJsonDeserializeValue(WfLexicalScopeManager* manager, vint& tempIndex, Ptr block, Ptr node, WfType* type) + { + List primitives; + List enums; + List structs; + CollectRpcJsonPrimitives(primitives); + CollectRpcJsonTypes(manager, enums, structs); + + RpcJsonGenerationContext context; + context.manager = manager; + context.primitives = &primitives; + context.enums = &enums; + context.structs = &structs; + context.tempIndex = tempIndex; + + auto result = AddKnownRpcJsonDeserializeValue(context, block, node, type); + tempIndex = context.tempIndex; + return result; + } + + Ptr CreateRpcJsonTransferType(ITypeInfo* typeInfo, bool byref, WfType* type) + { + if (IsSharedInterfaceType(typeInfo)) + { + return byref + ? CreateQualifiedType(L"system::RpcObjectReference") + : CreatePredefinedType(WfPredefinedTypeName::Object); + } + return CopyType(type); + } + + Ptr CreateRpcJsonTransferExpression(ITypeInfo* typeInfo, bool byref, Ptr value, Ptr lifecycle) + { + if (IsSharedInterfaceType(typeInfo)) + { + return CreateRpcBoxExpression(typeInfo, byref, value, lifecycle); + } + return value; + } + + Ptr CreateRpcJsonTransferExpression(const RpcParamModel& paramModel, Ptr value, Ptr lifecycle) + { + return CreateRpcJsonTransferExpression(paramModel.typeInfo, paramModel.byref, value, lifecycle); + } + + Ptr CreateJsonDispatchArgument( + WfLexicalScopeManager* manager, + vint& tempIndex, + Ptr block, + Ptr node, + const RpcParamModel& paramModel) + { + auto transferType = CreateRpcJsonTransferType(paramModel.typeInfo, paramModel.byref, paramModel.type.Obj()); + auto valueName = AddRpcJsonDeserializeValue(manager, tempIndex, block, node, transferType.Obj()); + if (IsSharedInterfaceType(paramModel.typeInfo)) + { + return CreateRpcUnboxExpression(paramModel.typeInfo, paramModel.type, paramModel.byref, CreateReference(valueName), CreateReference(L"_lc")); + } + return CreateReference(valueName); + } + + Ptr BuildInvokeMethodBranchJson(WfLexicalScopeManager* manager, 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; + vint tempIndex = 0; + for (vint i = 0; i < methodModel.params.Count(); i++) + { + auto&& paramModel = methodModel.params[i]; + arguments.Add(CreateJsonDispatchArgument( + manager, + tempIndex, + block, + CreateCast(CreateSharedType(L"system::JsonNode"), CreateRpcJsonSerializedArgument(i)), + paramModel)); + } + + 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)); + RpcJsonGenerationContext context; + context.manager = manager; + context.tempIndex = tempIndex; + auto nodeName = AddRpcJsonLiteral(block, context, L"Null"); + tempIndex = context.tempIndex; + AddStatement(block, CreateReturn(CreateReference(nodeName))); + } + else + { + auto transferType = CreateRpcJsonTransferType(methodModel.returnTypeInfo, methodModel.returnByref, methodModel.returnType.Obj()); + if (IsRpcByvalReturn(methodModel)) + { + AddStatement(block, CreateInferredVariableStatement(L"copiedReturnValue", CreateRpcCopyByvalExpression(invoke, CreateReference(L"_lc")))); + auto transferValue = CreateRpcJsonTransferExpression(methodModel.returnTypeInfo, methodModel.returnByref, CreateReference(L"copiedReturnValue"), CreateReference(L"_lc")); + auto nodeName = AddRpcJsonSerializeValue(manager, tempIndex, block, transferValue, transferType.Obj()); + AddRpcByvalReturnValue(block, CreateReference(nodeName), CreateReference(L"copiedReturnValue")); + } + else + { + auto transferValue = CreateRpcJsonTransferExpression(methodModel.returnTypeInfo, methodModel.returnByref, invoke, CreateReference(L"_lc")); + auto nodeName = AddRpcJsonSerializeValue(manager, tempIndex, block, transferValue, transferType.Obj()); + AddStatement(block, CreateReturn(CreateReference(nodeName))); + } + } + return block; + } + + Ptr BuildInvokeEventBranchJson(WfLexicalScopeManager* manager, 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); + vint tempIndex = 0; + for (vint i = 0; i < eventModel.params.Count(); i++) + { + auto&& paramModel = eventModel.params[i]; + invoke->arguments.Add(CreateJsonDispatchArgument( + manager, + tempIndex, + block, + CreateCast(CreateSharedType(L"system::JsonNode"), CreateRpcJsonSerializedArgument(i)), + paramModel)); + } + AddStatement(block, CreateExpressionStatement(invoke)); + return block; + } + + Ptr BuildDispatchChainJson(WfLexicalScopeManager* manager, 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 = BuildInvokeEventBranchJson(manager, 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 = BuildInvokeMethodBranchJson(manager, interfaceModel, methodModel); + switchStat->caseBranches.Add(switchCase); + } + } + } + return switchStat; + } + + Ptr GenerateObjectOpsFactoryJson(WfLexicalScopeManager* manager, const List& interfaces) + { + auto functionDecl = CreateFunctionDeclaration(L"rpcops_IRpcObjectOpsJson", 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(CreateCall(CreateReference(L"rpcjson_Serialize"), CreateRpcExceptionExpression(CreateMember(CreateReference(L"ex"), L"Message"))))); + AddStatement(block, CreateTryCatch(BuildDispatchChainJson(manager, 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(CreateCall(CreateReference(L"rpcjson_Serialize"), 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 GenerateObjectEventOpsFactoryJson(WfLexicalScopeManager* manager, const List& interfaces) + { + auto functionDecl = CreateFunctionDeclaration(L"rpcops_IRpcObjectEventOpsJson", 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(BuildDispatchChainJson(manager, 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(CreateCall(CreateReference(L"rpcjson_Serialize"), CreateReference(L"rpcEventExceptions")))); + auto returnNullBranch = CreateBlock(); + AddStatement(returnNullBranch, CreateReturn(CreateCall(CreateReference(L"rpcjson_Serialize"), 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; + } + + void AddRpcOpsArgumentsArrayJson( + WfLexicalScopeManager* manager, + Ptr block, + const List& params, + vint& tempIndex) + { + AddStatement(block, CreateVariableStatement(L"arguments", CreateSharedType(L"system::Array"), CreateConstructor())); + AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"arguments"), L"Resize"), CreateInt(params.Count())))); + + for (vint i = 0; i < params.Count(); i++) + { + auto&& paramModel = params[i]; + auto value = CreateReference(GetRpcOpsArgumentName(paramModel)); + auto transferValue = CreateRpcJsonTransferExpression(paramModel, value, CreateReference(L"_lc")); + auto transferType = CreateRpcJsonTransferType(paramModel.typeInfo, paramModel.byref, paramModel.type.Obj()); + auto nodeName = AddRpcJsonSerializeValue(manager, tempIndex, block, transferValue, transferType.Obj()); + AddStatement(block, CreateExpressionStatement(CreateCall(CreateMember(CreateReference(L"arguments"), L"Set"), CreateInt(i), CreateReference(nodeName)))); + } + } + + Ptr GenerateRpcOpsMethodImplementationJson(WfLexicalScopeManager* manager, const RpcMethodModel& methodModel) + { + auto functionDecl = CreateRpcOpsFunctionDeclaration(GetRpcOpsInvokeMethodName(methodModel), CopyType(methodModel.returnType.Obj()), WfFunctionKind::Override); + AddRpcOpsFunctionArguments(functionDecl, methodModel.params); + auto block = functionDecl->statement.Cast(); + + vint tempIndex = 0; + AddRpcOpsArgumentsArrayJson(manager, block, methodModel.params, tempIndex); + if (IsVoidType(methodModel.returnType.Obj())) + { + auto invoke = CreateRpcOpsObjectInvoke(methodModel); + AddStatement(block, CreateInferredVariableStatement(L"invokeResult", invoke)); + AddStatement(block, CreateInferredVariableStatement( + L"jsonResult", + CreateCast(CreateSharedType(L"system::JsonNode"), CreateReference(L"invokeResult")))); + AddStatement(block, CreateInferredVariableStatement( + L"methodResult", + CreateCall(CreateReference(L"rpcjson_Deserialize"), CreateReference(L"jsonResult")))); + AddRpcMethodExceptionRaise(block, CreateReference(L"methodResult")); + } + else if (IsRpcByvalReturn(methodModel)) + { + AddStatement(block, CreateInferredVariableStatement(L"objectOps", CreateRpcOpsObjectOps())); + auto invoke = CreateRpcOpsObjectInvoke(methodModel, CreateReference(L"objectOps")); + AddStatement(block, CreateInferredVariableStatement(L"invokeResult", invoke)); + AddStatement(block, CreateInferredVariableStatement( + L"byvalReturnValue", + CreateWeakCast(CreateSharedType(L"system::RpcByvalReturnValue"), CreateReference(L"invokeResult")))); + AddStatement(block, CreateVariableStatement(L"jsonResult", CreateSharedType(L"system::JsonNode"), CreateNull())); + auto exceptionBranch = CreateBlock(); + AddStatement(exceptionBranch, CreateExpressionStatement(CreateAssign( + CreateReference(L"jsonResult"), + CreateCast(CreateSharedType(L"system::JsonNode"), CreateReference(L"invokeResult"))))); + auto returnBranch = CreateBlock(); + AddStatement(returnBranch, CreateExpressionStatement(CreateAssign( + CreateReference(L"jsonResult"), + CreateCast(CreateSharedType(L"system::JsonNode"), CreateMember(CreateReference(L"byvalReturnValue"), L"value"))))); + AddStatement(block, CreateIf(CreateIsNull(CreateReference(L"byvalReturnValue")), exceptionBranch, returnBranch)); + AddStatement(block, CreateInferredVariableStatement( + L"methodResult", + CreateCall(CreateReference(L"rpcjson_Deserialize"), CreateReference(L"jsonResult")))); + AddRpcMethodExceptionRaise(block, CreateReference(L"methodResult")); + AddStatement(block, CreateInferredVariableStatement( + L"strongByvalReturnValue", + CreateCast(CreateSharedType(L"system::RpcByvalReturnValue"), CreateReference(L"byvalReturnValue")))); + auto transferType = CreateRpcJsonTransferType(methodModel.returnTypeInfo, methodModel.returnByref, methodModel.returnType.Obj()); + auto valueName = AddRpcJsonDeserializeValue(manager, tempIndex, block, CreateReference(L"jsonResult"), transferType.Obj()); + AddStatement(block, CreateInferredVariableStatement( + L"result", + IsSharedInterfaceType(methodModel.returnTypeInfo) + ? CreateRpcUnboxExpression(methodModel.returnTypeInfo, methodModel.returnType, methodModel.returnByref, CreateReference(valueName), CreateReference(L"_lc")) + : CreateReference(valueName))); + AddStatement(block, CreateExpressionStatement(CreateCall( + CreateMember(CreateReference(L"objectOps"), L"EndInvokeMethod"), + CreateMember(CreateReference(L"strongByvalReturnValue"), L"slot")))); + AddStatement(block, CreateReturn(CreateReference(L"result"))); + } + else + { + auto invoke = CreateRpcOpsObjectInvoke(methodModel); + AddStatement(block, CreateInferredVariableStatement(L"invokeResult", invoke)); + AddStatement(block, CreateInferredVariableStatement(L"jsonResult", CreateCast(CreateSharedType(L"system::JsonNode"), CreateReference(L"invokeResult")))); + AddStatement(block, CreateInferredVariableStatement( + L"methodResult", + CreateCall(CreateReference(L"rpcjson_Deserialize"), CreateReference(L"jsonResult")))); + AddRpcMethodExceptionRaise(block, CreateReference(L"methodResult")); + auto transferType = CreateRpcJsonTransferType(methodModel.returnTypeInfo, methodModel.returnByref, methodModel.returnType.Obj()); + auto valueName = AddRpcJsonDeserializeValue(manager, tempIndex, block, CreateReference(L"jsonResult"), transferType.Obj()); + if (IsSharedInterfaceType(methodModel.returnTypeInfo)) + { + AddStatement(block, CreateReturn(CreateRpcUnboxExpression(methodModel.returnTypeInfo, methodModel.returnType, methodModel.returnByref, CreateReference(valueName), CreateReference(L"_lc")))); + } + else + { + AddStatement(block, CreateReturn(CreateReference(valueName))); + } + } + + return functionDecl; + } + + Ptr GenerateRpcOpsEventImplementationJson(WfLexicalScopeManager* manager, const RpcEventModel& eventModel) + { + auto functionDecl = CreateRpcOpsFunctionDeclaration(GetRpcOpsInvokeEventName(eventModel), CreatePredefinedType(WfPredefinedTypeName::Void), WfFunctionKind::Override); + AddRpcOpsFunctionArguments(functionDecl, eventModel.params); + auto block = functionDecl->statement.Cast(); + + vint tempIndex = 0; + AddRpcOpsArgumentsArrayJson(manager, block, eventModel.params, tempIndex); + AddStatement(block, CreateInferredVariableStatement(L"invokeResult", CreateRpcOpsObjectEventInvoke(eventModel))); + AddStatement(block, CreateInferredVariableStatement( + L"jsonResult", + CreateCast(CreateSharedType(L"system::JsonNode"), CreateReference(L"invokeResult")))); + AddStatement(block, CreateInferredVariableStatement( + L"eventResult", + CreateCall(CreateReference(L"rpcjson_Deserialize"), CreateReference(L"jsonResult")))); + AddRpcEventExceptionRaise(block, CreateCast(CreateRpcEventExceptionMapType(), CreateReference(L"eventResult"))); + return functionDecl; + } + + Ptr GenerateRpcOpsFactoryJson(WfLexicalScopeManager* manager, const WString& assemblyName, const List& interfaces) + { + auto functionDecl = CreateFunctionDeclaration(L"rpcops_IOps_CreateJson", CreateSharedType(GetRpcOpsInterfaceName(assemblyName)), WfFunctionKind::Normal); + functionDecl->arguments.Add(CreateFunctionArgument(L"lc", CreateRawType(L"system::IRpcLifecycle"))); + auto newOps = CreateNewInterface(CreateSharedType(GetRpcOpsInterfaceName(assemblyName))).Cast(); + newOps->declarations.Add(CreateVariableDeclaration(L"_lc", CreateRawType(L"system::IRpcLifecycle"), CreateReference(L"lc"))); + + for (auto&& interfaceModel : interfaces) + { + for (auto&& methodModel : interfaceModel.methods) + { + newOps->declarations.Add(GenerateRpcOpsMethodImplementationJson(manager, methodModel)); + } + for (auto&& eventModel : interfaceModel.events) + { + newOps->declarations.Add(GenerateRpcOpsEventImplementationJson(manager, eventModel)); + } + } + + AddStatement(functionDecl->statement.Cast(), CreateReturn(newOps)); + return functionDecl; + } + } + + Ptr GenerateModuleRpcJson(WfLexicalScopeManager* manager, WString assemblyName) + { + using namespace rpc_generating; + + if (!manager || !manager->rpcMetadata || !manager->rpcMetadata->metadataModule) + { + return nullptr; + } + + CollectMangledNames(manager); + if (manager->errors.Count() > 0) + { + return nullptr; + } + + auto interfaces = BuildInterfaceModels(manager); + if (manager->errors.Count() > 0) + { + return nullptr; + } + + auto module = Ptr(new WfModule); + module->moduleType = WfModuleType::Module; + module->name.value = L"RpcMetadataJson"; + + AddRpcJsonDeclarations(manager, module); + module->declarations.Add(GenerateRpcSerializerFactoryJson()); + module->declarations.Add(GenerateObjectOpsFactoryJson(manager, interfaces)); + module->declarations.Add(GenerateObjectEventOpsFactoryJson(manager, interfaces)); + module->declarations.Add(GenerateRpcOpsFactoryJson(manager, assemblyName, interfaces)); + + return module; + } + } + } +} + + /*********************************************************************** .\ANALYZER\WFANALYZER_MISC.CPP ***********************************************************************/ @@ -10798,6 +15462,2277 @@ CreateTypeInfoFromMethodInfo } } +/*********************************************************************** +.\ANALYZER\WFANALYZER_VALIDATERPC.CPP +***********************************************************************/ + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + namespace rpc_compiling + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + +/*********************************************************************** +ValidateModuleRPC_Ast +***********************************************************************/ + + enum class RpcDeferredKind + { + Cached, + Dynamic, + ByvalProperty, + ByrefProperty, + ByvalMethod, + ByrefMethod, + ByvalParameter, + ByrefParameter, + }; + + struct RpcDeferredCheck + { + RpcDeferredKind kind = RpcDeferredKind::Cached; + WfAttribute* attribute = nullptr; + ITypeDescriptor* ownerTd = nullptr; + WfPropertyDeclaration* propertyDecl = nullptr; + WfFunctionDeclaration* methodDecl = nullptr; + WfFunctionArgument* parameterDecl = nullptr; + }; + + struct RpcPhase1Context + { + SortedList workflowRpcInterfaceTds; + Dictionary, WfType*> baseTypeNodeMap; + List deferredChecks; + }; + + 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 HasEarlierRpcAttribute(List>& attributes, WfAttribute* currentAttribute, const wchar_t* name) + { + for (auto attribute : attributes) + { + if (attribute.Obj() == currentAttribute) + { + break; + } + + if (IsRpcAttribute(attribute.Obj(), name)) + { + return true; + } + } + return false; + } + + ITypeDescriptor* GetClassTypeDescriptor(WfLexicalScopeManager* manager, WfClassDeclaration* classDecl) + { + if (!classDecl) + { + return nullptr; + } + return manager->declarationTypes[classDecl].Obj(); + } + + WfPropertyDeclaration* GetRpcPropertyDeclaration(WfDeclaration* declaration) + { + if (auto propertyDecl = dynamic_cast(declaration)) + { + return propertyDecl; + } + + if (auto autoPropertyDecl = dynamic_cast(declaration)) + { + for (auto expandedDeclaration : autoPropertyDecl->expandedDeclarations) + { + if (auto propertyDecl = expandedDeclaration.Cast()) + { + return propertyDecl.Obj(); + } + } + } + + return nullptr; + } + + WString GetDeclarationFullName(WfLexicalScopeManager* manager, WfDeclaration* declaration, WfClassDeclaration* ownerClassDecl) + { + if (auto classDecl = dynamic_cast(declaration)) + { + if (auto td = GetClassTypeDescriptor(manager, classDecl)) + { + return td->GetTypeName(); + } + } + + if (auto ownerTd = GetClassTypeDescriptor(manager, ownerClassDecl)) + { + if (declaration) + { + return ownerTd->GetTypeName() + L"." + declaration->name.value; + } + return ownerTd->GetTypeName(); + } + + if (declaration && declaration->name.value != L"") + { + return declaration->name.value; + } + + return L""; + } + + WString GetAttributeTargetFullName(WfLexicalScopeManager* manager, WfDeclaration* declaration, WfFunctionArgument* argument, WfClassDeclaration* ownerClassDecl) + { + auto ownerTd = GetClassTypeDescriptor(manager, ownerClassDecl); + auto ownerPrefix = ownerTd ? ownerTd->GetTypeName() + L"." : WString(); + + if (argument && declaration) + { + return ownerPrefix + declaration->name.value + L"(" + argument->name.value + L")"; + } + else if (declaration) + { + return ownerPrefix + declaration->name.value; + } + else if (argument) + { + return ownerPrefix + argument->name.value; + } + else + { + return ownerTd ? ownerTd->GetTypeName() : WString(L""); + } + } + + bool ContainsFunctionType(WfType* type) + { + class V : public Object, public WfType::IVisitor + { + public: + bool found = false; + + void Visit(WfFunctionType* node)override { found = true; } + void Visit(WfRawPointerType* node)override { node->element->Accept(this); } + void Visit(WfSharedPointerType* node)override { node->element->Accept(this); } + void Visit(WfNullableType* node)override { node->element->Accept(this); } + void Visit(WfEnumerableType* node)override { node->element->Accept(this); } + void Visit(WfMapType* node)override { if (node->key) node->key->Accept(this); node->value->Accept(this); } + void Visit(WfObservableListType* node)override { node->element->Accept(this); } + void Visit(WfChildType* node)override { node->parent->Accept(this); } + void Visit(WfPredefinedType* node)override {} + void Visit(WfTopQualifiedType* node)override {} + void Visit(WfReferenceType* node)override {} + }; + + V visitor; + type->Accept(&visitor); + return visitor.found; + } + + bool IsGenericRpcInterface(WfClassDeclaration* classDecl) + { + if (!classDecl || classDecl->kind != WfClassKind::Interface) + { + return false; + } + + for (auto baseType : classDecl->baseTypes) + { + if (ContainsFunctionType(baseType.Obj())) + { + return true; + } + } + return false; + } + + bool IsAstRpcInterface(WfClassDeclaration* classDecl) + { + return classDecl + && classDecl->kind == WfClassKind::Interface + && !IsGenericRpcInterface(classDecl) + && HasRpcAttribute(classDecl->attributes, L"Interface"); + } + + void CollectAllWorkflowRpcInterfaceTds(WfLexicalScopeManager* manager, SortedList& rpcInterfaceTds) + { + for (vint i = 0; i < manager->declarationTypes.Count(); i++) + { + auto classDecl = manager->declarationTypes.Keys()[i].Cast(); + if (!classDecl || !IsAstRpcInterface(classDecl.Obj())) + { + continue; + } + + auto td = manager->declarationTypes.Values()[i].Obj(); + if (td && !rpcInterfaceTds.Contains(td)) + { + rpcInterfaceTds.Add(td); + } + } + } + + void BuildMemberDeclarationMap(WfLexicalScopeManager* manager, Dictionary>& memberDeclMap) + { + for (vint i = 0; i < manager->declarationMemberInfos.Count(); i++) + { + auto memberInfo = manager->declarationMemberInfos.Values()[i].Obj(); + if (memberInfo && !memberDeclMap.Keys().Contains(memberInfo)) + { + memberDeclMap.Add(memberInfo, manager->declarationMemberInfos.Keys()[i]); + } + } + } + + Ptr FindFunctionArgument(WfFunctionDeclaration* functionDecl, const WString& parameterName, vint index) + { + if (!functionDecl) + { + return nullptr; + } + + for (auto argument : functionDecl->arguments) + { + if (argument->name.value == parameterName) + { + return argument; + } + } + + if (0 <= index && index < functionDecl->arguments.Count()) + { + return functionDecl->arguments[index]; + } + + return nullptr; + } + + 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 IsRpcInterfaceTd(ITypeDescriptor* td, ITypeDescriptor* rpcInterfaceAttrTd, const SortedList& rpcInterfaceTds) + { + if (!td) return false; + if (rpcInterfaceTds.Contains(td)) return true; + return HasAttribute(td, rpcInterfaceAttrTd); + } + + bool IsStrongTypedCollection(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; + } + } + + Ptr CreateRpcAttribute(const WString& name) + { + auto attribute = Ptr(new WfAttribute); + attribute->category.value = L"rpc"; + attribute->name.value = name; + return attribute; + } + + Ptr CreateRpcAttribute(const WString& name, Ptr value) + { + auto attribute = CreateRpcAttribute(name); + attribute->value = value; + return attribute; + } + + Ptr CreateRpcStringLiteral(const WString& value) + { + auto expression = Ptr(new WfStringExpression); + expression->value.value = value; + return expression; + } + + Ptr CreateRpcIntegerLiteral(vint value) + { + auto expression = Ptr(new WfIntegerExpression); + expression->value.value = itow(value); + return expression; + } + + void EnsureRpcAttribute(List>& attributes, const WString& name) + { + if (!HasRpcAttribute(attributes, name.Buffer())) + { + attributes.Add(CreateRpcAttribute(name)); + } + } + + ITypeInfo* GetStrongTypedCollectionElementType(ITypeInfo* type) + { + if (!IsStrongTypedCollection(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 IsObservableStrongTypedCollection(ITypeInfo* type) + { + if (!IsStrongTypedCollection(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, ITypeDescriptor* rpcInterfaceAttrTd, 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 + && IsRpcInterfaceTd(td, rpcInterfaceAttrTd, rpcInterfaceTds); + } + + bool IsStrongTypedCollectionContainingRpcInterface(ITypeInfo* type, ITypeDescriptor* rpcInterfaceAttrTd, const SortedList& rpcInterfaceTds) + { + auto elementType = GetStrongTypedCollectionElementType(type); + if (!elementType) return false; + return IsRpcInterfaceSharedType(elementType, rpcInterfaceAttrTd, rpcInterfaceTds) + || IsStrongTypedCollectionContainingRpcInterface(elementType, rpcInterfaceAttrTd, rpcInterfaceTds); + } + + WString GetDefaultRpcTransferAttribute(ITypeInfo* type, ITypeDescriptor* rpcInterfaceAttrTd, const SortedList& rpcInterfaceTds) + { + if (!IsStrongTypedCollection(type)) return L""; + if (IsObservableStrongTypedCollection(type) + || IsStrongTypedCollectionContainingRpcInterface(type, rpcInterfaceAttrTd, rpcInterfaceTds)) + { + return L"Byref"; + } + return L"Byval"; + } + + bool IsSerializableType(ITypeInfo* type, ITypeDescriptor* rpcInterfaceAttrTd, const SortedList& rpcInterfaceTds) + { + if (!type) return false; + switch (type->GetDecorator()) + { + case ITypeInfo::Nullable: + return IsSerializableType(type->GetElementType(), rpcInterfaceAttrTd, rpcInterfaceTds); + + case ITypeInfo::SharedPtr: + { + auto e = type->GetElementType(); + if (!e) return false; + + if (e->GetDecorator() == ITypeInfo::Generic) + { + if (!IsStrongTypedCollection(type)) return false; + for (vint i = 0; i < e->GetGenericArgumentCount(); i++) + { + if (!IsSerializableType(e->GetGenericArgument(i), rpcInterfaceAttrTd, rpcInterfaceTds)) return false; + } + return true; + } + + if (e->GetDecorator() == ITypeInfo::TypeDescriptor) + { + auto td = e->GetTypeDescriptor(); + return (td->GetTypeDescriptorFlags() & TypeDescriptorFlags::Interface) != TypeDescriptorFlags::Undefined + && IsRpcInterfaceTd(td, rpcInterfaceAttrTd, rpcInterfaceTds); + } + + return false; + } + + case ITypeInfo::TypeDescriptor: + { + auto td = type->GetTypeDescriptor(); + if (td == GetTypeDescriptor()) return false; + switch (td->GetTypeDescriptorFlags()) + { + case TypeDescriptorFlags::Primitive: + case TypeDescriptorFlags::Struct: + case TypeDescriptorFlags::FlagEnum: + case TypeDescriptorFlags::NormalEnum: + return true; + default: + return false; + } + } + + default: + return false; + } + } + + bool IsSerializableReturnType(ITypeInfo* type, ITypeDescriptor* rpcInterfaceAttrTd, const SortedList& rpcInterfaceTds) + { + if (!type) return false; + if (type->GetDecorator() == ITypeInfo::TypeDescriptor && type->GetTypeDescriptor() == GetTypeDescriptor()) return true; + return IsSerializableType(type, rpcInterfaceAttrTd, rpcInterfaceTds); + } + + ITypeDescriptor* GetReservedRpcType(ITypeInfo* type) + { + if (!type) return nullptr; + switch (type->GetDecorator()) + { + case ITypeInfo::Nullable: + case ITypeInfo::RawPtr: + return GetReservedRpcType(type->GetElementType()); + case ITypeInfo::SharedPtr: + { + auto elementType = type->GetElementType(); + if (!elementType) return nullptr; + if (elementType->GetDecorator() == ITypeInfo::Generic) + { + for (vint i = 0; i < elementType->GetGenericArgumentCount(); i++) + { + if (auto td = GetReservedRpcType(elementType->GetGenericArgument(i))) + { + return td; + } + } + return nullptr; + } + return GetReservedRpcType(elementType); + } + case ITypeInfo::TypeDescriptor: + { + auto td = type->GetTypeDescriptor(); + if (td == GetTypeDescriptor() + || td == GetTypeDescriptor()) + { + return td; + } + return nullptr; + } + default: + return nullptr; + } + } + + WString GetReservedRpcTypeName(ITypeInfo* type) + { + if (auto td = GetReservedRpcType(type)) + { + return td->GetTypeName(); + } + return L""; + } + + WString GetDeferredAttributeName(RpcDeferredKind kind) + { + switch (kind) + { + case RpcDeferredKind::Cached: return L"Cached"; + case RpcDeferredKind::Dynamic: return L"Dynamic"; + case RpcDeferredKind::ByvalProperty: + case RpcDeferredKind::ByvalMethod: + case RpcDeferredKind::ByvalParameter: return L"Byval"; + case RpcDeferredKind::ByrefProperty: + case RpcDeferredKind::ByrefMethod: + case RpcDeferredKind::ByrefParameter: return L"Byref"; + default: return L""; + } + } + + void ValidateModuleRPC_Ast(WfLexicalScopeManager* manager, Ptr module, RpcPhase1Context& context) + { + class Visitor + : public Object + , public WfDeclaration::IVisitor + , public WfVirtualCseDeclaration::IVisitor + { + public: + WfLexicalScopeManager* manager; + RpcPhase1Context& context; + WfClassDeclaration* currentClassDecl = nullptr; + + Visitor(WfLexicalScopeManager* _manager, RpcPhase1Context& _context) + :manager(_manager) + , context(_context) + { + } + + void VisitDeclaration(Ptr declaration) + { + ProcessAttributes(declaration->attributes, declaration.Obj(), nullptr); + declaration->Accept(this); + } + + void ProcessAttributes(List>& attributes, WfDeclaration* declaration, WfFunctionArgument* argument) + { + for (auto attribute : attributes) + { + auto name = attribute->name.value; + if (attribute->category.value != L"rpc") + { + continue; + } + + if (name == L"Interface") + { + auto classDecl = dynamic_cast(declaration); + if (!classDecl || classDecl->kind != WfClassKind::Interface || IsGenericRpcInterface(classDecl)) + { + manager->errors.Add(WfErrors::RpcInterfaceCanOnlyApplyToInterface(attribute.Obj(), GetDeclarationFullName(manager, declaration, currentClassDecl))); + continue; + } + + auto td = manager->declarationTypes[classDecl].Obj(); + if (td && !context.workflowRpcInterfaceTds.Contains(td)) + { + context.workflowRpcInterfaceTds.Add(td); + + auto scope = manager->nodeScopes[classDecl]; + for (auto baseType : classDecl->baseTypes) + { + auto scopeName = GetScopeNameFromReferenceType(scope->parentScope.Obj(), baseType); + if (scopeName && scopeName->typeDescriptor) + { + auto key = Pair(td, scopeName->typeDescriptor); + if (!context.baseTypeNodeMap.Keys().Contains(key)) + { + context.baseTypeNodeMap.Add(key, baseType.Obj()); + } + } + } + } + } + else if (name == L"Ctor") + { + auto classDecl = dynamic_cast(declaration); + if (!classDecl || !IsAstRpcInterface(classDecl)) + { + manager->errors.Add(WfErrors::RpcCtorCanOnlyApplyToRpcInterface(attribute.Obj())); + } + } + else if (name == L"Byval" || name == L"Byref") + { + auto propertyDecl = GetRpcPropertyDeclaration(declaration); + auto isProperty = propertyDecl != nullptr; + auto isMethod = dynamic_cast(declaration) != nullptr; + auto isParameter = argument != nullptr && isMethod; + if (!isProperty && !isMethod && !isParameter) + { + manager->errors.Add(WfErrors::RpcAttributeCanOnlyApplyToPropertyMethodOrParameter(attribute.Obj(), name)); + continue; + } + + if (name == L"Byref" && HasEarlierRpcAttribute(attributes, attribute.Obj(), L"Byval")) + { + manager->errors.Add(WfErrors::RpcAttributeCannotCoexistWithOther(attribute.Obj(), name, L"Byval", GetAttributeTargetFullName(manager, declaration, argument, currentClassDecl))); + continue; + } + + if (name == L"Byval" && HasEarlierRpcAttribute(attributes, attribute.Obj(), L"Byref")) + { + manager->errors.Add(WfErrors::RpcAttributeCannotCoexistWithOther(attribute.Obj(), name, L"Byref", GetAttributeTargetFullName(manager, declaration, argument, currentClassDecl))); + continue; + } + + if (!IsAstRpcInterface(currentClassDecl)) + { + manager->errors.Add(WfErrors::RpcAttributeCanOnlyBeUsedInsideRpcInterface(attribute.Obj(), name)); + continue; + } + + RpcDeferredCheck check; + check.attribute = attribute.Obj(); + check.ownerTd = GetClassTypeDescriptor(manager, currentClassDecl); + check.propertyDecl = propertyDecl; + check.methodDecl = dynamic_cast(declaration); + check.parameterDecl = argument; + check.kind = + isParameter ? (name == L"Byval" ? RpcDeferredKind::ByvalParameter : RpcDeferredKind::ByrefParameter) : + isMethod ? (name == L"Byval" ? RpcDeferredKind::ByvalMethod : RpcDeferredKind::ByrefMethod) : + (name == L"Byval" ? RpcDeferredKind::ByvalProperty : RpcDeferredKind::ByrefProperty); + context.deferredChecks.Add(check); + } + else if (name == L"Cached" || name == L"Dynamic") + { + auto propertyDecl = GetRpcPropertyDeclaration(declaration); + if (!propertyDecl) + { + manager->errors.Add(WfErrors::RpcAttributeCanOnlyApplyToProperty(attribute.Obj(), name)); + continue; + } + + if (name == L"Dynamic" && HasEarlierRpcAttribute(attributes, attribute.Obj(), L"Cached")) + { + manager->errors.Add(WfErrors::RpcAttributeCannotCoexistWithOther(attribute.Obj(), name, L"Cached", GetAttributeTargetFullName(manager, declaration, argument, currentClassDecl))); + continue; + } + + if (name == L"Cached" && HasEarlierRpcAttribute(attributes, attribute.Obj(), L"Dynamic")) + { + manager->errors.Add(WfErrors::RpcAttributeCannotCoexistWithOther(attribute.Obj(), name, L"Dynamic", GetAttributeTargetFullName(manager, declaration, argument, currentClassDecl))); + continue; + } + + RpcDeferredCheck check; + check.kind = name == L"Cached" ? RpcDeferredKind::Cached : RpcDeferredKind::Dynamic; + check.attribute = attribute.Obj(); + check.ownerTd = GetClassTypeDescriptor(manager, currentClassDecl); + check.propertyDecl = propertyDecl; + context.deferredChecks.Add(check); + } + } + } + + void Visit(WfNamespaceDeclaration* node)override + { + for (auto declaration : node->declarations) + { + VisitDeclaration(declaration); + } + } + + void Visit(WfFunctionDeclaration* node)override + { + for (auto argument : node->arguments) + { + ProcessAttributes(argument->attributes, node, argument.Obj()); + } + } + + void Visit(WfVariableDeclaration* node)override + { + } + + void Visit(WfEventDeclaration* node)override + { + } + + void Visit(WfPropertyDeclaration* node)override + { + } + + void Visit(WfStaticInitDeclaration* node)override + { + } + + void Visit(WfConstructorDeclaration* node)override + { + } + + void Visit(WfDestructorDeclaration* node)override + { + } + + void Visit(WfClassDeclaration* node)override + { + auto oldClassDecl = currentClassDecl; + currentClassDecl = node; + for (auto declaration : node->declarations) + { + VisitDeclaration(declaration); + } + currentClassDecl = oldClassDecl; + } + + void Visit(WfEnumDeclaration* node)override + { + for (auto item : node->items) + { + ProcessAttributes(item->attributes, nullptr, nullptr); + } + } + + void Visit(WfStructDeclaration* node)override + { + for (auto member : node->members) + { + ProcessAttributes(member->attributes, nullptr, nullptr); + } + } + + void Visit(WfVirtualCfeDeclaration* node)override + { + for (auto declaration : node->expandedDeclarations) + { + VisitDeclaration(declaration); + } + } + + void Visit(WfVirtualCseDeclaration* node)override + { + node->Accept((WfVirtualCseDeclaration::IVisitor*)this); + for (auto declaration : node->expandedDeclarations) + { + VisitDeclaration(declaration); + } + } + + void Visit(WfStateMachineDeclaration* node)override + { + } + }; + + Visitor visitor(manager, context); + for (auto declaration : module->declarations) + { + visitor.VisitDeclaration(declaration); + } + } + +/*********************************************************************** +ValidateModuleRPC_Reflection +***********************************************************************/ + + void ValidateModuleRPC_Reflection(WfLexicalScopeManager* manager, const RpcPhase1Context& context) + { + auto rpcInterfaceAttrTd = GetTypeDescriptor(); + SortedList allWorkflowRpcInterfaceTds; + for (auto td : context.workflowRpcInterfaceTds) + { + if (!allWorkflowRpcInterfaceTds.Contains(td)) + { + allWorkflowRpcInterfaceTds.Add(td); + } + } + CollectAllWorkflowRpcInterfaceTds(manager, allWorkflowRpcInterfaceTds); + + Dictionary> memberDeclMap; + BuildMemberDeclarationMap(manager, memberDeclMap); + + for (auto td : context.workflowRpcInterfaceTds) + { + for (vint i = 0; i < td->GetBaseTypeDescriptorCount(); i++) + { + auto baseTd = td->GetBaseTypeDescriptor(i); + if (!IsRpcInterfaceTd(baseTd, rpcInterfaceAttrTd, allWorkflowRpcInterfaceTds)) + { + auto key = Pair(td, baseTd); + auto index = context.baseTypeNodeMap.Keys().IndexOf(key); + if (index != -1) + { + manager->errors.Add(WfErrors::RpcInterfaceBaseNotSerializable(context.baseTypeNodeMap.Values()[index], td->GetTypeName(), baseTd->GetTypeName())); + } + } + } + + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + auto propertyInfo = td->GetProperty(i); + if (propertyInfo->GetOwnerTypeDescriptor() != td) + { + continue; + } + + if (!IsSerializableType(propertyInfo->GetReturn(), rpcInterfaceAttrTd, allWorkflowRpcInterfaceTds)) + { + auto declIndex = memberDeclMap.Keys().IndexOf(propertyInfo); + if (declIndex != -1) + { + manager->errors.Add(WfErrors::RpcInterfaceMemberNotSerializable(memberDeclMap.Values()[declIndex].Obj(), td->GetTypeName(), td->GetTypeName() + L"." + propertyInfo->GetName())); + } + } + else if (auto typeName = GetReservedRpcTypeName(propertyInfo->GetReturn()); typeName != L"") + { + auto declIndex = memberDeclMap.Keys().IndexOf(propertyInfo); + if (declIndex != -1) + { + manager->errors.Add(WfErrors::RpcReservedTypeInReturnValue(memberDeclMap.Values()[declIndex].Obj(), td->GetTypeName(), td->GetTypeName() + L"." + propertyInfo->GetName(), typeName)); + } + } + } + + for (vint i = 0; i < td->GetMethodGroupCount(); i++) + { + auto group = td->GetMethodGroup(i); + if (group->GetOwnerTypeDescriptor() != td) + { + continue; + } + + for (vint j = 0; j < group->GetMethodCount(); j++) + { + auto methodInfo = group->GetMethod(j); + auto declIndex = memberDeclMap.Keys().IndexOf(methodInfo); + if (declIndex == -1) + { + continue; + } + + auto functionDecl = memberDeclMap.Values()[declIndex].Cast(); + if (!functionDecl) + { + continue; + } + + for (vint k = 0; k < methodInfo->GetParameterCount(); k++) + { + auto parameterInfo = methodInfo->GetParameter(k); + if (auto typeName = GetReservedRpcTypeName(parameterInfo->GetType()); typeName != L"") + { + if (auto argument = FindFunctionArgument(functionDecl.Obj(), parameterInfo->GetName(), k)) + { + manager->errors.Add(WfErrors::RpcReservedTypeInFunctionArgument(argument.Obj(), td->GetTypeName(), td->GetTypeName() + L"." + methodInfo->GetName() + L"(" + parameterInfo->GetName() + L")", typeName)); + } + } + else if (!IsSerializableType(parameterInfo->GetType(), rpcInterfaceAttrTd, allWorkflowRpcInterfaceTds)) + { + if (auto argument = FindFunctionArgument(functionDecl.Obj(), parameterInfo->GetName(), k)) + { + manager->errors.Add(WfErrors::RpcInterfaceMemberNotSerializable(argument.Obj(), td->GetTypeName(), td->GetTypeName() + L"." + methodInfo->GetName() + L"(" + parameterInfo->GetName() + L")")); + } + } + } + + if (auto typeName = GetReservedRpcTypeName(methodInfo->GetReturn()); typeName != L"") + { + manager->errors.Add(WfErrors::RpcReservedTypeInReturnValue(functionDecl.Obj(), td->GetTypeName(), td->GetTypeName() + L"." + methodInfo->GetName(), typeName)); + } + else if (!IsSerializableReturnType(methodInfo->GetReturn(), rpcInterfaceAttrTd, allWorkflowRpcInterfaceTds)) + { + manager->errors.Add(WfErrors::RpcInterfaceMemberNotSerializable(functionDecl.Obj(), td->GetTypeName(), td->GetTypeName() + L"." + methodInfo->GetName())); + } + } + } + + for (vint i = 0; i < td->GetEventCount(); i++) + { + auto eventInfo = td->GetEvent(i); + if (eventInfo->GetOwnerTypeDescriptor() != td) + { + continue; + } + + Ptr eventDecl; + auto declIndex = memberDeclMap.Keys().IndexOf(eventInfo); + if (declIndex != -1) + { + eventDecl = memberDeclMap.Values()[declIndex].Cast(); + } + auto handlerType = eventInfo->GetHandlerType(); + if (handlerType && handlerType->GetDecorator() == ITypeInfo::SharedPtr) + { + auto genericType = handlerType->GetElementType(); + if (genericType && genericType->GetDecorator() == ITypeInfo::Generic) + { + for (vint j = 1; j < genericType->GetGenericArgumentCount(); j++) + { + if (auto typeName = GetReservedRpcTypeName(genericType->GetGenericArgument(j)); typeName != L"") + { + if (eventDecl && j - 1 < eventDecl->arguments.Count()) + { + manager->errors.Add(WfErrors::RpcReservedTypeInEventArgument(eventDecl->arguments[j - 1].Obj(), td->GetTypeName(), td->GetTypeName() + L"." + eventInfo->GetName() + L"(" + itow(j - 1) + L")", typeName)); + } + } + } + } + } + } + } + + for (auto&& check : context.deferredChecks) + { + auto attributeName = GetDeferredAttributeName(check.kind); + switch (check.kind) + { + case RpcDeferredKind::Cached: + case RpcDeferredKind::Dynamic: + if (!IsRpcInterfaceTd(check.ownerTd, rpcInterfaceAttrTd, allWorkflowRpcInterfaceTds)) + { + manager->errors.Add(WfErrors::RpcAttributeCanOnlyBeUsedInsideRpcInterface(check.attribute, attributeName)); + } + break; + default: + { + ITypeInfo* targetType = nullptr; + WString memberName; + + switch (check.kind) + { + case RpcDeferredKind::ByvalProperty: + case RpcDeferredKind::ByrefProperty: + { + auto propertyInfo = manager->declarationMemberInfos[check.propertyDecl].Cast(); + targetType = propertyInfo ? propertyInfo->GetReturn() : nullptr; + if (propertyInfo && check.ownerTd) + { + memberName = check.ownerTd->GetTypeName() + L"." + propertyInfo->GetName(); + } + } + break; + case RpcDeferredKind::ByvalMethod: + case RpcDeferredKind::ByrefMethod: + { + auto methodInfo = manager->declarationMemberInfos[check.methodDecl].Cast(); + targetType = methodInfo ? methodInfo->GetReturn() : nullptr; + if (methodInfo && check.ownerTd) + { + memberName = check.ownerTd->GetTypeName() + L"." + methodInfo->GetName(); + } + } + break; + case RpcDeferredKind::ByvalParameter: + case RpcDeferredKind::ByrefParameter: + { + auto methodInfo = manager->declarationMemberInfos[check.methodDecl].Cast(); + if (methodInfo) + { + for (vint i = 0; i < methodInfo->GetParameterCount(); i++) + { + auto parameterInfo = methodInfo->GetParameter(i); + if (parameterInfo->GetName() == check.parameterDecl->name.value) + { + targetType = parameterInfo->GetType(); + if (check.ownerTd) + { + memberName = check.ownerTd->GetTypeName() + L"." + methodInfo->GetName() + L"(" + parameterInfo->GetName() + L")"; + } + break; + } + } + } + } + break; + default: + break; + } + + if (!IsStrongTypedCollection(targetType)) + { + manager->errors.Add(WfErrors::RpcAttributeRequiresStrongTypedCollection(check.attribute, attributeName, memberName)); + } + } + break; + } + } + } + +/*********************************************************************** +ValidateModuleRPC_GenerateMetadata +***********************************************************************/ + + bool IsGeneratedRpcIdAttribute(const WString& category, const WString& name) + { + return category == L"rpc" && (name == L"IdString" || name == L"IdNumber"); + } + + void GenerateAttributesFromBag(IAttributeBag* bag, List>& attributes) + { + if (!bag) return; + for (vint i = 0; i < bag->GetAttributeCount(); i++) + { + auto attrInfo = bag->GetAttribute(i); + auto attrTd = attrInfo->GetAttributeType(); + if (!attrTd) continue; + + WString typeName = attrTd->GetTypeName(); + const wchar_t* reading = typeName.Buffer(); + const wchar_t* simpleName = reading; + while (true) + { + auto delimiter = wcsstr(simpleName, L"::"); + if (!delimiter) break; + simpleName = delimiter + 2; + } + + if (wcsncmp(simpleName, L"att_", 4) != 0) continue; + auto afterAtt = simpleName + 4; + auto underscore = wcschr(afterAtt, L'_'); + if (!underscore) continue; + + auto attr = Ptr(new WfAttribute); + attr->category.value = WString::CopyFrom(afterAtt, vint(underscore - afterAtt)); + attr->name.value = underscore + 1; + if (IsGeneratedRpcIdAttribute(attr->category.value, attr->name.value)) + { + continue; + } + attributes.Add(attr); + } + } + + void AddOrderedRpcId(WfRpcMetadata* metadata, const WString& fullName) + { + if (!metadata->orderedIds.Contains(fullName)) + { + metadata->orderedIds.Add(fullName); + } + } + + void AddGeneratedRpcIdAttributes(WfRpcMetadata* metadata, const WString& fullName, List>& attributes) + { + auto id = metadata->orderedIds.IndexOf(fullName); + CHECK_ERROR(id != -1, L"RPC metadata ID list does not contain a generated RPC full name."); + attributes.Add(CreateRpcAttribute(L"IdString", CreateRpcStringLiteral(fullName))); + attributes.Add(CreateRpcAttribute(L"IdNumber", CreateRpcIntegerLiteral(id))); + } + + void AddGeneratedRpcIdAttributes(WfRpcMetadata* metadata) + { + for (vint i = 0; i < metadata->typeNames.Count(); i++) + { + AddGeneratedRpcIdAttributes(metadata, metadata->typeNames.Keys()[i], metadata->typeNames.Values()[i]->attributes); + } + for (vint i = 0; i < metadata->methodNames.Count(); i++) + { + AddGeneratedRpcIdAttributes(metadata, metadata->methodNames.Keys()[i], metadata->methodNames.Values()[i]->attributes); + } + for (vint i = 0; i < metadata->eventNames.Count(); i++) + { + AddGeneratedRpcIdAttributes(metadata, metadata->eventNames.Keys()[i], metadata->eventNames.Values()[i]->attributes); + } + } + + void CollectSerializableTypesFromTypeInfo( + ITypeInfo* typeInfo, + SortedList& collectedEnums, + SortedList& collectedStructs, + List& structVisitOrder, + const SortedList& rpcInterfaceTds) + { + if (!typeInfo) return; + switch (typeInfo->GetDecorator()) + { + case ITypeInfo::SharedPtr: + { + auto e = typeInfo->GetElementType(); + if (!e) return; + if (e->GetDecorator() == ITypeInfo::Generic) + { + for (vint i = 0; i < e->GetGenericArgumentCount(); i++) + { + CollectSerializableTypesFromTypeInfo(e->GetGenericArgument(i), collectedEnums, collectedStructs, structVisitOrder, rpcInterfaceTds); + } + } + } + break; + case ITypeInfo::TypeDescriptor: + { + auto td = typeInfo->GetTypeDescriptor(); + if (!td) return; + switch (td->GetTypeDescriptorFlags()) + { + case TypeDescriptorFlags::FlagEnum: + case TypeDescriptorFlags::NormalEnum: + if (!collectedEnums.Contains(td)) + { + collectedEnums.Add(td); + } + break; + case TypeDescriptorFlags::Struct: + if (!collectedStructs.Contains(td)) + { + collectedStructs.Add(td); + // Recursively collect types used by struct members + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + CollectSerializableTypesFromTypeInfo(td->GetProperty(i)->GetReturn(), collectedEnums, collectedStructs, structVisitOrder, rpcInterfaceTds); + } + structVisitOrder.Add(td); + } + break; + default: + break; + } + } + break; + default: + break; + } + } + + void CollectTypesFromInterface( + ITypeDescriptor* td, + SortedList& collectedEnums, + SortedList& collectedStructs, + List& structVisitOrder, + const SortedList& rpcInterfaceTds) + { + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + auto propertyInfo = td->GetProperty(i); + if (propertyInfo->GetOwnerTypeDescriptor() != td) continue; + CollectSerializableTypesFromTypeInfo(propertyInfo->GetReturn(), collectedEnums, collectedStructs, structVisitOrder, rpcInterfaceTds); + } + + for (vint i = 0; i < td->GetMethodGroupCount(); i++) + { + auto group = td->GetMethodGroup(i); + if (group->GetOwnerTypeDescriptor() != td) continue; + for (vint j = 0; j < group->GetMethodCount(); j++) + { + auto methodInfo = group->GetMethod(j); + CollectSerializableTypesFromTypeInfo(methodInfo->GetReturn(), collectedEnums, collectedStructs, structVisitOrder, rpcInterfaceTds); + for (vint k = 0; k < methodInfo->GetParameterCount(); k++) + { + CollectSerializableTypesFromTypeInfo(methodInfo->GetParameter(k)->GetType(), collectedEnums, collectedStructs, structVisitOrder, rpcInterfaceTds); + } + } + } + + for (vint i = 0; i < td->GetEventCount(); i++) + { + auto eventInfo = td->GetEvent(i); + if (eventInfo->GetOwnerTypeDescriptor() != td) continue; + auto handlerType = eventInfo->GetHandlerType(); + if (handlerType && handlerType->GetDecorator() == ITypeInfo::SharedPtr) + { + auto genericType = handlerType->GetElementType(); + if (genericType && genericType->GetDecorator() == ITypeInfo::Generic) + { + for (vint j = 1; j < genericType->GetGenericArgumentCount(); j++) + { + CollectSerializableTypesFromTypeInfo(genericType->GetGenericArgument(j), collectedEnums, collectedStructs, structVisitOrder, rpcInterfaceTds); + } + } + } + } + } + + Ptr GenerateEnumDecl(ITypeDescriptor* td) + { + auto enumType = td->GetEnumType(); + if (!enumType) return nullptr; + + auto decl = Ptr(new WfEnumDeclaration); + List fragments; + GetTypeFragments(td, fragments); + decl->name.value = fragments[fragments.Count() - 1]; + decl->kind = enumType->IsFlagEnum() ? WfEnumKind::Flag : WfEnumKind::Normal; + + // Collect items sorted by value + List> items; + for (vint i = 0; i < enumType->GetItemCount(); i++) + { + items.Add({ enumType->GetItemName(i), enumType->GetItemValue(i) }); + } + if (items.Count() > 1) + { + Sort(&items[0], items.Count(), [](const Pair& a, const Pair& b) + { + return (a.value <=> b.value); + }); + } + + if (enumType->IsFlagEnum()) + { + // Build a map from power-of-2 values to item names + Dictionary powerOf2Names; + + // First pass: add constant items (0 and powers of 2) + for (auto&& [name, value] : items) + { + if (value == 0 || (value != 0 && (value & (value - 1)) == 0)) + { + auto item = Ptr(new WfEnumItem); + item->name.value = name; + item->kind = WfEnumItemKind::Constant; + item->number.value = u64tow(value); + decl->items.Add(item); + powerOf2Names.Add(value, name); + } + } + + // Second pass: add intersection items (composite values) + for (auto&& [name, value] : items) + { + if (value != 0 && (value & (value - 1)) != 0) + { + auto item = Ptr(new WfEnumItem); + item->name.value = name; + item->kind = WfEnumItemKind::Intersection; + for (vint bit = 0; bit < 64; bit++) + { + auto mask = (vuint64_t)1 << bit; + if (value & mask) + { + auto nameIndex = powerOf2Names.Keys().IndexOf(mask); + if (nameIndex != -1) + { + auto intersection = Ptr(new WfEnumItemIntersection); + intersection->name.value = powerOf2Names.Values()[nameIndex]; + item->intersections.Add(intersection); + } + } + } + decl->items.Add(item); + } + } + } + else + { + for (auto&& [name, value] : items) + { + auto item = Ptr(new WfEnumItem); + item->name.value = name; + item->kind = WfEnumItemKind::Constant; + item->number.value = u64tow(value); + decl->items.Add(item); + } + } + return decl; + } + + Ptr GenerateStructDecl(ITypeDescriptor* td) + { + auto decl = Ptr(new WfStructDeclaration); + List fragments; + GetTypeFragments(td, fragments); + decl->name.value = fragments[fragments.Count() - 1]; + + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + auto propertyInfo = td->GetProperty(i); + auto member = Ptr(new WfStructMember); + member->name.value = propertyInfo->GetName(); + member->type = GetTypeFromTypeInfo(propertyInfo->GetReturn()); + decl->members.Add(member); + } + return decl; + } + + Ptr GenerateInterfaceDecl(ITypeDescriptor* td, ITypeDescriptor* rpcInterfaceAttrTd, const SortedList& rpcInterfaceTds) + { + auto decl = Ptr(new WfClassDeclaration); + Dictionary getterTransferAttributes; + Dictionary setterTransferAttributes; + List fragments; + GetTypeFragments(td, fragments); + decl->name.value = fragments[fragments.Count() - 1]; + decl->kind = WfClassKind::Interface; + + // Determine constructor type from reflection + if (auto ctorGroup = td->GetConstructorGroup()) + { + if (ctorGroup->GetMethodCount() > 0) + { + auto ctorReturn = ctorGroup->GetMethod(0)->GetReturn(); + if (ctorReturn && ctorReturn->GetDecorator() == ITypeInfo::RawPtr) + { + decl->constructorType = WfConstructorType::RawPtr; + } + else + { + decl->constructorType = WfConstructorType::SharedPtr; + } + } + } + + // Generate attributes from reflection + GenerateAttributesFromBag(td, decl->attributes); + + // Generate base types from reflection (only RPC interfaces, skip implicit IDescriptable) + for (vint i = 0; i < td->GetBaseTypeDescriptorCount(); i++) + { + auto baseTd = td->GetBaseTypeDescriptor(i); + if (!IsRpcInterfaceTd(baseTd, rpcInterfaceAttrTd, rpcInterfaceTds)) continue; + + List baseFragments; + GetTypeFragments(baseTd, baseFragments); + + Ptr parentType; + for (auto fragment : baseFragments) + { + if (!parentType) + { + auto type = Ptr(new WfTopQualifiedType); + type->name.value = fragment; + parentType = type; + } + else + { + auto type = Ptr(new WfChildType); + type->parent = parentType; + type->name.value = fragment; + parentType = type; + } + } + if (parentType) + { + decl->baseTypes.Add(parentType); + } + } + + // Generate properties from reflection + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + auto propertyInfo = td->GetProperty(i); + if (propertyInfo->GetOwnerTypeDescriptor() != td) continue; + + auto propDecl = Ptr(new WfPropertyDeclaration); + propDecl->name.value = propertyInfo->GetName(); + propDecl->type = GetTypeFromTypeInfo(propertyInfo->GetReturn()); + + if (auto getter = propertyInfo->GetGetter()) + { + propDecl->getter.value = getter->GetName(); + } + if (auto setter = propertyInfo->GetSetter()) + { + propDecl->setter.value = setter->GetName(); + } + if (auto valueChangedEvent = propertyInfo->GetValueChangedEvent()) + { + propDecl->valueChangedEvent.value = valueChangedEvent->GetName(); + } + + GenerateAttributesFromBag(propertyInfo, propDecl->attributes); + if (!HasRpcAttribute(propDecl->attributes, L"Cached") && !HasRpcAttribute(propDecl->attributes, L"Dynamic")) + { + EnsureRpcAttribute(propDecl->attributes, L"Cached"); + } + + auto transferAttribute = GetDefaultRpcTransferAttribute(propertyInfo->GetReturn(), rpcInterfaceAttrTd, rpcInterfaceTds); + if (transferAttribute != L"") + { + if (HasRpcAttribute(propDecl->attributes, L"Byref")) + { + transferAttribute = L"Byref"; + } + else if (HasRpcAttribute(propDecl->attributes, L"Byval")) + { + transferAttribute = L"Byval"; + } + + if (propDecl->getter.value != L"") + { + auto getterIndex = getterTransferAttributes.Keys().IndexOf(propDecl->getter.value); + if (getterIndex == -1) + { + getterTransferAttributes.Add(propDecl->getter.value, transferAttribute); + } + else + { + getterTransferAttributes.Set(propDecl->getter.value, transferAttribute); + } + } + + if (propDecl->setter.value != L"") + { + auto setterIndex = setterTransferAttributes.Keys().IndexOf(propDecl->setter.value); + if (setterIndex == -1) + { + setterTransferAttributes.Add(propDecl->setter.value, transferAttribute); + } + else + { + setterTransferAttributes.Set(propDecl->setter.value, transferAttribute); + } + } + } + decl->declarations.Add(propDecl); + } + + // Generate events from reflection + for (vint i = 0; i < td->GetEventCount(); i++) + { + auto eventInfo = td->GetEvent(i); + if (eventInfo->GetOwnerTypeDescriptor() != td) continue; + + auto eventDecl = Ptr(new WfEventDeclaration); + eventDecl->name.value = eventInfo->GetName(); + + // Extract event argument types from handler type + auto handlerType = eventInfo->GetHandlerType(); + if (handlerType && handlerType->GetDecorator() == ITypeInfo::SharedPtr) + { + auto genericType = handlerType->GetElementType(); + if (genericType && genericType->GetDecorator() == ITypeInfo::Generic) + { + for (vint j = 1; j < genericType->GetGenericArgumentCount(); j++) + { + auto argType = GetTypeFromTypeInfo(genericType->GetGenericArgument(j)); + if (argType) + { + eventDecl->arguments.Add(argType); + } + } + } + } + + GenerateAttributesFromBag(eventInfo, eventDecl->attributes); + decl->declarations.Add(eventDecl); + } + + // Generate methods from reflection + for (vint i = 0; i < td->GetMethodGroupCount(); i++) + { + auto group = td->GetMethodGroup(i); + if (group->GetOwnerTypeDescriptor() != td) continue; + + for (vint j = 0; j < group->GetMethodCount(); j++) + { + auto methodInfo = group->GetMethod(j); + if (methodInfo->GetOwnerProperty()) continue; + + auto funcDecl = Ptr(new WfFunctionDeclaration); + funcDecl->name.value = methodInfo->GetName(); + funcDecl->anonymity = WfFunctionAnonymity::Named; + funcDecl->functionKind = WfFunctionKind::Normal; + funcDecl->returnType = GetTypeFromTypeInfo(methodInfo->GetReturn()); + + for (vint k = 0; k < methodInfo->GetParameterCount(); k++) + { + auto parameterInfo = methodInfo->GetParameter(k); + auto argument = Ptr(new WfFunctionArgument); + argument->name.value = parameterInfo->GetName(); + argument->type = GetTypeFromTypeInfo(parameterInfo->GetType()); + GenerateAttributesFromBag(parameterInfo, argument->attributes); + if (!HasRpcAttribute(argument->attributes, L"Byref") && !HasRpcAttribute(argument->attributes, L"Byval")) + { + WString transferAttribute; + if (k == 0) + { + auto setterIndex = setterTransferAttributes.Keys().IndexOf(methodInfo->GetName()); + if (setterIndex != -1) + { + transferAttribute = setterTransferAttributes.Values()[setterIndex]; + } + } + if (transferAttribute == L"") + { + transferAttribute = GetDefaultRpcTransferAttribute(parameterInfo->GetType(), rpcInterfaceAttrTd, rpcInterfaceTds); + } + if (transferAttribute != L"") + { + EnsureRpcAttribute(argument->attributes, transferAttribute); + } + } + funcDecl->arguments.Add(argument); + } + + GenerateAttributesFromBag(methodInfo, funcDecl->attributes); + if (!HasRpcAttribute(funcDecl->attributes, L"Byref") && !HasRpcAttribute(funcDecl->attributes, L"Byval")) + { + WString transferAttribute; + auto getterIndex = getterTransferAttributes.Keys().IndexOf(methodInfo->GetName()); + if (getterIndex != -1) + { + transferAttribute = getterTransferAttributes.Values()[getterIndex]; + } + if (transferAttribute == L"") + { + transferAttribute = GetDefaultRpcTransferAttribute(methodInfo->GetReturn(), rpcInterfaceAttrTd, rpcInterfaceTds); + } + if (transferAttribute != L"") + { + EnsureRpcAttribute(funcDecl->attributes, transferAttribute); + } + } + decl->declarations.Add(funcDecl); + } + } + + return decl; + } + + Ptr EnsureNamespace( + List>& rootDeclarations, + Dictionary>& namespaceMap, + const List& fragments) + { + if (fragments.Count() <= 1) + { + return nullptr; + } + + WString currentPath; + Ptr currentNs; + List>* currentList = &rootDeclarations; + + for (vint i = 0; i < fragments.Count() - 1; i++) + { + if (currentPath.Length() > 0) + { + currentPath = currentPath + L"::" + fragments[i]; + } + else + { + currentPath = fragments[i]; + } + + auto index = namespaceMap.Keys().IndexOf(currentPath); + if (index != -1) + { + currentNs = namespaceMap.Values()[index]; + currentList = ¤tNs->declarations; + } + else + { + auto ns = Ptr(new WfNamespaceDeclaration); + ns->name.value = fragments[i]; + currentList->Add(ns); + namespaceMap.Add(currentPath, ns); + currentNs = ns; + currentList = &ns->declarations; + } + } + + return currentNs; + } + + void AddDeclToModule( + List>& rootDeclarations, + Dictionary>& namespaceMap, + ITypeDescriptor* td, + Ptr decl) + { + List fragments; + GetTypeFragments(td, fragments); + + auto ns = EnsureNamespace(rootDeclarations, namespaceMap, fragments); + if (ns) + { + ns->declarations.Add(decl); + } + else + { + rootDeclarations.Add(decl); + } + } + + void CollectOrderedRpcInterfaces( + WfLexicalScopeManager* manager, + const List>& declarations, + const SortedList& rpcInterfaceTds, + List& orderedInterfaces) + { + for (auto decl : declarations) + { + if (auto classDecl = decl.Cast()) + { + auto td = GetClassTypeDescriptor(manager, classDecl.Obj()); + if (td && rpcInterfaceTds.Contains(td) && !orderedInterfaces.Contains(td)) + { + orderedInterfaces.Add(td); + } + CollectOrderedRpcInterfaces(manager, classDecl->declarations, rpcInterfaceTds, orderedInterfaces); + } + else if (auto nsDecl = decl.Cast()) + { + CollectOrderedRpcInterfaces(manager, nsDecl->declarations, rpcInterfaceTds, orderedInterfaces); + } + } + } + + WfClassDeclaration* FindRpcInterfaceDeclaration(WfLexicalScopeManager* manager, ITypeDescriptor* td) + { + for (vint i = 0; i < manager->declarationTypes.Count(); i++) + { + if (manager->declarationTypes.Values()[i].Obj() == td) + { + if (auto classDecl = manager->declarationTypes.Keys()[i].Cast()) + { + return classDecl.Obj(); + } + } + } + return nullptr; + } + + WfFunctionDeclaration* GetGeneratedMethodByOccurrence(WfClassDeclaration* interfaceDecl, const WString& name, vint occurrence) + { + vint index = 0; + for (auto decl : interfaceDecl->declarations) + { + if (auto methodDecl = decl.Cast()) + { + if (methodDecl->name.value == name) + { + if (index++ == occurrence) + { + return methodDecl.Obj(); + } + } + } + } + return nullptr; + } + + WfEventDeclaration* GetGeneratedEventByOccurrence(WfClassDeclaration* interfaceDecl, const WString& name, vint occurrence) + { + vint index = 0; + for (auto decl : interfaceDecl->declarations) + { + if (auto eventDecl = decl.Cast()) + { + if (eventDecl->name.value == name) + { + if (index++ == occurrence) + { + return eventDecl.Obj(); + } + } + } + } + return nullptr; + } + + WString MakeRpcMethodFullName(const WString& typeFullName, WfFunctionDeclaration* methodDecl, bool appendArgNames) + { + auto name = typeFullName + L"." + methodDecl->name.value; + if (appendArgNames) + { + name += L"("; + for (vint i = 0; i < methodDecl->arguments.Count(); i++) + { + if (i > 0) + { + name += L","; + } + name += methodDecl->arguments[i]->name.value; + } + name += L")"; + } + return name; + } + + void ValidateModuleRPC_GenerateMetadata(WfLexicalScopeManager* manager, Ptr module, const RpcPhase1Context& context) + { + auto rpcInterfaceAttrTd = GetTypeDescriptor(); + SortedList allRpcInterfaceTds; + for (auto td : context.workflowRpcInterfaceTds) + { + if (!allRpcInterfaceTds.Contains(td)) + { + allRpcInterfaceTds.Add(td); + } + } + CollectAllWorkflowRpcInterfaceTds(manager, allRpcInterfaceTds); + + // Collect all enum and struct types used by RPC interfaces + SortedList collectedEnums; + SortedList collectedStructs; + List structVisitOrder; + + for (auto td : context.workflowRpcInterfaceTds) + { + CollectTypesFromInterface(td, collectedEnums, collectedStructs, structVisitOrder, context.workflowRpcInterfaceTds); + } + + // Sort enums by name + List sortedEnums; + for (auto td : collectedEnums) + { + sortedEnums.Add(td); + } + if (sortedEnums.Count() > 1) + { + Sort(&sortedEnums[0], sortedEnums.Count(), [](ITypeDescriptor* a, ITypeDescriptor* b) + { + return wcscmp(a->GetTypeName().Buffer(), b->GetTypeName().Buffer()) <=> 0; + }); + } + + // Collect RPC interfaces in AST order + List orderedInterfaces; + CollectOrderedRpcInterfaces(manager, module->declarations, context.workflowRpcInterfaceTds, orderedInterfaces); + + // Build the metadata module + auto metadataModule = Ptr(new WfModule); + metadataModule->moduleType = WfModuleType::Module; + metadataModule->name.value = L"RpcMetadata"; + manager->rpcMetadata = Ptr(new WfRpcMetadata); + + List> rootDeclarations; + Dictionary> namespaceMap; + + // Add enums (sorted by name) + for (auto td : sortedEnums) + { + auto decl = GenerateEnumDecl(td); + if (decl) + { + AddDeclToModule(rootDeclarations, namespaceMap, td, decl); + } + } + + // Add structs (sorted by visiting order - dependency correct) + for (auto td : structVisitOrder) + { + auto decl = GenerateStructDecl(td); + if (decl) + { + AddDeclToModule(rootDeclarations, namespaceMap, td, decl); + } + } + + // Add interfaces (sorted by AST order) + for (auto td : orderedInterfaces) + { + auto decl = GenerateInterfaceDecl(td, rpcInterfaceAttrTd, allRpcInterfaceTds); + if (decl) + { + AddDeclToModule(rootDeclarations, namespaceMap, td, decl); + + auto typeFullName = td->GetTypeName(); + if (manager->rpcMetadata->typeNames.Keys().Contains(typeFullName)) + { + manager->errors.Add(WfErrors::RpcGeneratedNameConflict(decl.Obj(), L"type", typeFullName)); + } + else + { + manager->rpcMetadata->typeNames.Add(typeFullName, decl.Obj()); + manager->rpcMetadata->typeFullNames.Add(typeFullName); + AddOrderedRpcId(manager->rpcMetadata.Obj(), typeFullName); + } + + auto sourceDecl = FindRpcInterfaceDeclaration(manager, td); + if (!sourceDecl) + { + continue; + } + + List orderedMethods; + List generatedMethods; + List orderedEvents; + List generatedEvents; + Dictionary methodNameCounters; + Dictionary eventNameCounters; + + auto collectSourceMember = [&](WfDeclaration* memberDecl) + { + if (auto methodDecl = dynamic_cast(memberDecl)) + { + auto name = methodDecl->name.value; + auto nameIndex = methodNameCounters.Keys().IndexOf(name); + auto occurrence = nameIndex == -1 ? 0 : methodNameCounters.Values()[nameIndex]; + auto generatedMethod = GetGeneratedMethodByOccurrence(decl.Obj(), name, occurrence); + if (generatedMethod) + { + orderedMethods.Add(methodDecl); + generatedMethods.Add(generatedMethod); + } + + if (nameIndex == -1) + { + methodNameCounters.Add(name, 1); + } + else + { + methodNameCounters.Set(name, occurrence + 1); + } + } + else if (auto eventDecl = dynamic_cast(memberDecl)) + { + auto name = eventDecl->name.value; + auto nameIndex = eventNameCounters.Keys().IndexOf(name); + auto occurrence = nameIndex == -1 ? 0 : eventNameCounters.Values()[nameIndex]; + auto generatedEvent = GetGeneratedEventByOccurrence(decl.Obj(), name, occurrence); + if (generatedEvent) + { + orderedEvents.Add(eventDecl); + generatedEvents.Add(generatedEvent); + } + + if (nameIndex == -1) + { + eventNameCounters.Add(name, 1); + } + else + { + eventNameCounters.Set(name, occurrence + 1); + } + } + }; + + for (auto memberDecl : sourceDecl->declarations) + { + collectSourceMember(memberDecl.Obj()); + if (auto virtualCfeDecl = memberDecl.Cast()) + { + for (auto expandedDecl : virtualCfeDecl->expandedDeclarations) + { + collectSourceMember(expandedDecl.Obj()); + } + } + } + + SortedList processedMethodBaseNames; + for (vint i = 0; i < orderedMethods.Count(); i++) + { + auto baseName = MakeRpcMethodFullName(typeFullName, orderedMethods[i], false); + if (processedMethodBaseNames.Contains(baseName)) + { + continue; + } + processedMethodBaseNames.Add(baseName); + + List methodIndexes; + List candidateNames; + for (vint j = 0; j < orderedMethods.Count(); j++) + { + if (MakeRpcMethodFullName(typeFullName, orderedMethods[j], false) == baseName) + { + methodIndexes.Add(j); + candidateNames.Add(MakeRpcMethodFullName(typeFullName, orderedMethods[j], true)); + } + } + + if (methodIndexes.Count() == 1) + { + candidateNames[0] = baseName; + } + else + { + List duplicateCounts; + for (vint j = 0; j < candidateNames.Count(); j++) + { + vint duplicateCount = 0; + for (vint k = 0; k < candidateNames.Count(); k++) + { + if (candidateNames[j] == candidateNames[k]) + { + duplicateCount++; + } + } + duplicateCounts.Add(duplicateCount); + } + + Dictionary duplicateIndexes; + for (vint j = 0; j < candidateNames.Count(); j++) + { + if (duplicateCounts[j] <= 1) + { + continue; + } + + auto duplicateName = candidateNames[j]; + auto duplicateIndex = duplicateIndexes.Keys().IndexOf(duplicateName); + auto occurrence = duplicateIndex == -1 ? 1 : duplicateIndexes.Values()[duplicateIndex] + 1; + if (duplicateIndex == -1) + { + duplicateIndexes.Add(duplicateName, occurrence); + } + else + { + duplicateIndexes.Set(duplicateName, occurrence); + } + candidateNames[j] = duplicateName + L"." + itow(occurrence); + } + } + + for (vint j = 0; j < methodIndexes.Count(); j++) + { + auto finalName = candidateNames[j]; + auto generatedMethod = generatedMethods[methodIndexes[j]]; + if (manager->rpcMetadata->methodNames.Keys().Contains(finalName)) + { + manager->errors.Add(WfErrors::RpcGeneratedNameConflict(generatedMethod, L"method", finalName)); + } + else + { + manager->rpcMetadata->methodNames.Add(finalName, generatedMethod); + manager->rpcMetadata->methodFullNames.Add(finalName); + AddOrderedRpcId(manager->rpcMetadata.Obj(), finalName); + } + } + } + + for (vint i = 0; i < orderedEvents.Count(); i++) + { + auto finalName = typeFullName + L"." + orderedEvents[i]->name.value; + auto generatedEvent = generatedEvents[i]; + if (manager->rpcMetadata->eventNames.Keys().Contains(finalName)) + { + manager->errors.Add(WfErrors::RpcGeneratedNameConflict(generatedEvent, L"event", finalName)); + } + else + { + manager->rpcMetadata->eventNames.Add(finalName, generatedEvent); + manager->rpcMetadata->eventFullNames.Add(finalName); + AddOrderedRpcId(manager->rpcMetadata.Obj(), finalName); + } + } + } + } + + AddGeneratedRpcIdAttributes(manager->rpcMetadata.Obj()); + + for (auto decl : rootDeclarations) + { + metadataModule->declarations.Add(decl); + } + + manager->rpcMetadata->metadataModule = metadataModule; + } + } + +/*********************************************************************** +PopulateAttributesOnTypeDescriptors +***********************************************************************/ + + namespace attribute_populating + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + + Value EvaluateAttributeLiteralExpression(WfLexicalScopeManager* manager, Ptr expr, ITypeDescriptor* argumentTd) + { + if (auto literalExpr = expr.Cast()) + { + switch (literalExpr->value) + { + case WfLiteralValue::True: return BoxValue(true); + case WfLiteralValue::False: return BoxValue(false); + default: return Value(); + } + } + else if (auto stringExpr = expr.Cast()) + { + Value output; + argumentTd->GetSerializableType()->Deserialize(stringExpr->value.value, output); + return output; + } + else if (auto intExpr = expr.Cast()) + { + Value output; + argumentTd->GetSerializableType()->Deserialize(intExpr->value.value, output); + return output; + } + else if (auto floatExpr = expr.Cast()) + { + Value output; + argumentTd->GetSerializableType()->Deserialize(floatExpr->value.value, output); + return output; + } + else if (auto typeOfExpr = expr.Cast()) + { + auto scope = manager->nodeScopes[typeOfExpr.Obj()].Obj(); + auto type = CreateTypeInfoFromType(scope, typeOfExpr->type, false); + auto td = type->GetTypeDescriptor(); + if (argumentTd->GetSerializableType()) + { + Value output; + argumentTd->GetSerializableType()->Deserialize(td->GetTypeName(), output); + return output; + } + return BoxValue(td); + } + else + { + auto&& result = manager->expressionResolvings[expr.Obj()]; + if (auto enumType = result.type->GetTypeDescriptor()->GetEnumType()) + { + auto refExpr = expr.Cast(); + auto childExpr = expr.Cast(); + WString name = refExpr ? refExpr->name.value : (childExpr ? childExpr->name.value : WString::Empty); + vint index = enumType->IndexOfItem(name); + if (index != -1) + { + return enumType->ToEnum(enumType->GetItemValue(index)); + } + } + return Value(); + } + } + + void PopulateAttributesOnBag( + WfLexicalScopeManager* manager, + TypeDescriptorImplBase* td, + IMemberInfo* memberInfo, + List>& atts + ) + { + for (auto att : atts) + { + auto info = manager->ResolveWorkflowAttribute(att->category.value, att->name.value); + if (!info.exists || !info.attributeType) continue; + + auto attInfo = Ptr(new AttributeInfoImpl(info.attributeType)); + if (info.hasArgument && att->value) + { + auto valueTypeTd = info.argumentType->GetTypeDescriptor(); + auto boxedValue = EvaluateAttributeLiteralExpression(manager, att->value, valueTypeTd); + attInfo->AddValue(valueTypeTd, boxedValue); + } + td->RegisterAttribute(memberInfo, attInfo); + } + } + } + + void PopulateAttributesOnTypeDescriptors(WfLexicalScopeManager* manager) + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + + for (auto [decl, index] : indexed(manager->declarationTypes.Keys())) + { + auto td = manager->declarationTypes.Values()[index]; + auto tdImpl = dynamic_cast(td.Obj()); + if (!tdImpl) continue; + + // Type-level attributes + attribute_populating::PopulateAttributesOnBag(manager, tdImpl, nullptr, decl->attributes); + + // Member attributes for class/interface + if (auto classDecl = decl.Cast()) + { + for (auto memberDecl : classDecl->declarations) + { + vint memberIndex = manager->declarationMemberInfos.Keys().IndexOf(memberDecl.Obj()); + if (memberIndex != -1) + { + auto memberInfoPtr = manager->declarationMemberInfos.Values()[memberIndex]; + if (memberDecl->attributes.Count() > 0) + { + attribute_populating::PopulateAttributesOnBag(manager, tdImpl, memberInfoPtr.Obj(), memberDecl->attributes); + } + + // Function argument attributes + if (auto funcDecl = memberDecl.Cast()) + { + if (auto methodInfo = dynamic_cast(memberInfoPtr.Obj())) + { + for (vint k = 0; k < funcDecl->arguments.Count() && k < methodInfo->GetParameterCount(); k++) + { + auto& argAttrs = funcDecl->arguments[k]->attributes; + if (argAttrs.Count() > 0) + { + auto paramInfo = methodInfo->GetParameter(k); + attribute_populating::PopulateAttributesOnBag(manager, tdImpl, paramInfo, argAttrs); + } + } + } + } + } + else if (auto autoPropDecl = memberDecl.Cast()) + { + auto propInfo = td->GetPropertyByName(autoPropDecl->name.value, false); + if (propInfo && memberDecl->attributes.Count() > 0) + { + attribute_populating::PopulateAttributesOnBag(manager, tdImpl, propInfo, memberDecl->attributes); + } + } + } + } + + // Member attributes for struct + if (auto structDecl = decl.Cast()) + { + for (auto member : structDecl->members) + { + if (member->attributes.Count() == 0) continue; + auto propInfo = td->GetPropertyByName(member->name.value, false); + if (!propInfo) continue; + attribute_populating::PopulateAttributesOnBag(manager, tdImpl, propInfo, member->attributes); + } + } + } + } + +/*********************************************************************** +ValidateModuleRPC +***********************************************************************/ + + void ValidateModuleRPC(WfLexicalScopeManager* manager, Ptr module) + { + rpc_compiling::RpcPhase1Context context; + + // Phase 1 collects workflow-defined RPC interfaces and enqueues attribute occurrences for phase 2. + rpc_compiling::ValidateModuleRPC_Ast(manager, module, context); + + // Phase 2 uses reflection (ITypeDescriptor/ITypeInfo) to validate the remaining rules. + rpc_compiling::ValidateModuleRPC_Reflection(manager, context); + + // Phase 3 generates rpc metadata module. + if (context.workflowRpcInterfaceTds.Count() > 0 && manager->errors.Count() == 0) + { + rpc_compiling::ValidateModuleRPC_GenerateMetadata(manager, module, context); + if (manager->rpcMetadata) + { + manager->rpcMetadata->dts = GenerateDtsFromRpcMetadata(manager); + } + } + } + + namespace rpc_metadata_copying + { + using namespace collections; + using namespace reflection; + using namespace reflection::description; + + class ClearExistingTypesVisitor : public empty_visitor::DeclarationVisitor + { + private: + List fragments; + bool removeDeclaration = false; + + WString GetFullName(const WString& name) + { + WString fullName; + for (auto fragment : fragments) + { + if (fullName != L"") + { + fullName += L"::"; + } + fullName += fragment; + } + + if (fullName != L"") + { + fullName += L"::"; + } + fullName += name; + return fullName; + } + + bool IsExistingType(const WString& name) + { + return reflection::description::GetTypeDescriptor(GetFullName(name)) != nullptr; + } + + void VisitNestedType(const WString& name, List>& declarations) + { + if (IsExistingType(name)) + { + removeDeclaration = true; + return; + } + + fragments.Add(name); + Clear(declarations); + fragments.RemoveAt(fragments.Count() - 1); + removeDeclaration = false; + } + + protected: + void Dispatch(WfVirtualCfeDeclaration* node)override + { + removeDeclaration = false; + } + + void Dispatch(WfVirtualCseDeclaration* node)override + { + removeDeclaration = false; + } + + public: + void Clear(List>& declarations) + { + for (vint i = 0; i < declarations.Count();) + { + removeDeclaration = false; + declarations[i]->Accept(this); + if (removeDeclaration) + { + declarations.RemoveAt(i); + } + else + { + i++; + } + } + } + + void Visit(WfNamespaceDeclaration* node)override + { + fragments.Add(node->name.value); + Clear(node->declarations); + fragments.RemoveAt(fragments.Count() - 1); + removeDeclaration = false; + } + + void Visit(WfClassDeclaration* node)override + { + VisitNestedType(node->name.value, node->declarations); + } + + void Visit(WfEnumDeclaration* node)override + { + removeDeclaration = IsExistingType(node->name.value); + } + + void Visit(WfStructDeclaration* node)override + { + removeDeclaration = IsExistingType(node->name.value); + } + }; + } + + Ptr CopyAndClearRpcMetadata(Ptr module) + { + auto copiedModule = CopyModule(module, false); + rpc_metadata_copying::ClearExistingTypesVisitor visitor; + visitor.Clear(copiedModule->declarations); + return copiedModule; + } + + } + } +} + + /*********************************************************************** .\ANALYZER\WFANALYZER_VALIDATESCOPENAME.CPP ***********************************************************************/ @@ -11643,7 +18578,6 @@ ValidateSemantic(ClassMember) void Visit(WfDestructorDeclaration* node)override { ValidateDeclarationSemantic(manager, node); - ValidateStatementSemantic(manager, node->statement); } void Visit(WfClassDeclaration* node)override @@ -11715,23 +18649,20 @@ ValidateSemantic(Declaration) { for (auto attribute : attributes) { - auto key = Pair(attribute->category.value, attribute->name.value); - vint index = manager->attributes.Keys().IndexOf(key); - if (index == -1) + auto info = manager->ResolveWorkflowAttribute(attribute->category.value, attribute->name.value); + if (!info.exists) { manager->errors.Add(WfErrors::AttributeNotExists(attribute.Obj())); + continue; } - else + + if (attribute->value) { - auto expectedType = manager->attributes.Values()[index]; - if (attribute->value) - { - ValidateConstantExpression(manager, attribute->value, expectedType); - } - else if (expectedType->GetTypeDescriptor() != description::GetTypeDescriptor()) - { - manager->errors.Add(WfErrors::AttributeMissValue(attribute.Obj())); - } + ValidateConstantExpression(manager, attribute->value, info.argumentType); + } + else if (info.hasArgument) + { + manager->errors.Add(WfErrors::AttributeMissValue(attribute.Obj())); } } } @@ -11786,6 +18717,7 @@ ValidateSemantic(Declaration) void Visit(WfDestructorDeclaration* node)override { + ValidateStatementSemantic(manager, node->statement); } void Visit(WfClassDeclaration* node)override @@ -12145,7 +19077,7 @@ ValidateSemantic(Expression) if ( lastConfigScope->parentScope != currentScope || - !lastConfigScope->ownerNode.Cast() || + (!lastConfigScope->ownerNode.Cast() && !lastConfigScope->ownerNode.Cast()) || (lastConfigScope->ownerNodeSource && lastConfigScope->ownerNodeSource != currentScope->ownerNode) ) { @@ -13546,7 +20478,7 @@ ValidateSemantic(Expression) WfLexicalScopeManager* manager; List> overrideFunctions; List> variableSymbols; - WfFunctionDeclaration* lastFunction = nullptr; + WfDeclaration* lastDecl = nullptr; NewInterfaceExpressionVisitor(WfLexicalScopeManager* _manager) :manager(_manager) @@ -13568,7 +20500,7 @@ ValidateSemantic(Expression) void Visit(WfFunctionDeclaration* node)override { - lastFunction = node; + lastDecl = node; if (node->functionKind == WfFunctionKind::Override) { overrideFunctions.Add(Ptr(node)); @@ -13587,6 +20519,11 @@ ValidateSemantic(Expression) ); } + void Visit(WfDestructorDeclaration* node)override + { + lastDecl = node; + } + void Execute(WfNewInterfaceExpression* node) { for (auto memberDecl : node->declarations) @@ -13694,14 +20631,14 @@ ValidateSemantic(Expression) NewInterfaceExpressionVisitor declVisitor(manager); declVisitor.Execute(node); - if (declVisitor.lastFunction) + if (auto lastCaptureNode = declVisitor.lastDecl) { for (auto func : declVisitor.overrideFunctions) { implementMethods.Add(func->name.value, func); } - auto capture = manager->lambdaCaptures[declVisitor.lastFunction]; + auto capture = manager->lambdaCaptures[lastCaptureNode]; List> readonlySymbols; CopyFrom(readonlySymbols, From(capture->symbols).Except(declVisitor.variableSymbols)); CopyFrom(capture->symbols, declVisitor.variableSymbols); @@ -15432,6 +22369,11 @@ ValidateStructure(Declaration) ValidateStructureContext context; ValidateStatementStructure(manager, &context, node->statement); } + else if (dynamic_cast(surroundingLambda)) + { + ValidateStructureContext context; + ValidateStatementStructure(manager, &context, node->statement); + } else { manager->errors.Add(WfErrors::WrongDeclaration(node)); @@ -16040,9 +22982,21 @@ ValidateStructure(Expression) void Visit(WfNewInterfaceExpression* node)override { ValidateTypeStructure(manager, node->type); + WfDestructorDeclaration* dtor = nullptr; for (auto memberDecl : node->declarations) { ValidateDeclarationStructure(manager, memberDecl, nullptr, node); + if (auto dtorDecl = memberDecl.Cast()) + { + if (!dtor) + { + dtor = dtorDecl.Obj(); + } + else + { + manager->errors.Add(WfErrors::TooManyDestructor(dtorDecl.Obj(), node)); + } + } } } @@ -18515,6 +25469,26 @@ namespace vl Expression Helpers ***********************************************************************/ + void WriteWStringLiteralUnmanaged(stream::StreamWriter& writer, const WString& value) + { + writer.WriteString(L"::vl::WString::Unmanaged(L\""); + for (vint i = 0; i < value.Length(); i++) + { + auto c = value[i]; + switch (c) + { + case L'\\': writer.WriteString(L"\\\\"); break; + case L'\'': writer.WriteString(L"\\\'"); break; + case L'\"': writer.WriteString(L"\\\""); break; + case L'\r': writer.WriteString(L"\\r"); break; + case L'\n': writer.WriteString(L"\\n"); break; + case L'\t': writer.WriteString(L"\\t"); break; + default: writer.WriteChar(c); + } + } + writer.WriteString(L"\")"); + } + template void WriteBoxValue(WfCppConfig* config, stream::StreamWriter& writer, ITypeInfo* type, const T& writeExpression) { @@ -19065,6 +26039,27 @@ WfGenerateExpressionVisitor return; } } + else if (symbol->creatorNode.Cast()) + { + if (auto closureInfo = GetClosureInfo(node, (forLambdaArgument ? nullptr : symbol))) + { + //if (closureInfo->symbols.Values().Contains(symbol.Obj())) + //{ + // writer.WriteString(L"this->"); + // writer.WriteString(config->ConvertName(symbol->name)); + // return; + //} + //else + if (closureInfo->ctorArgumentSymbols.Values().Contains(symbol.Obj())) + { + writer.WriteString(L"__vwsnctor_"); + writer.WriteString(config->ConvertName(symbol->name)); + return; + } + } + writer.WriteString(config->ConvertName(symbol->name)); + return; + } writer.WriteString(config->ConvertName(symbol->name)); } @@ -19605,22 +26600,7 @@ WfGenerateExpressionVisitor void Visit(WfStringExpression* node)override { - writer.WriteString(L"::vl::WString::Unmanaged(L\""); - for (vint i = 0; i < node->value.value.Length(); i++) - { - auto c = node->value.value[i]; - switch (c) - { - case L'\\': writer.WriteString(L"\\\\"); break; - case L'\'': writer.WriteString(L"\\\'"); break; - case L'\"': writer.WriteString(L"\\\""); break; - case L'\r': writer.WriteString(L"\\r"); break; - case L'\n': writer.WriteString(L"\\n"); break; - case L'\t': writer.WriteString(L"\\t"); break; - default: writer.WriteChar(c); - } - } - writer.WriteString(L"\")"); + WriteWStringLiteralUnmanaged(writer, node->value.value); } void Visit(WfUnaryExpression* node)override @@ -22986,6 +29966,94 @@ namespace vl writer.WriteLine(L")"); } + auto WriteInterfaceProxyInvoke = [&](IMethodInfo* methodInfo, ITypeDescriptor* td, vint methodCount) + { + auto methodName = ConvertName(methodInfo->GetName()); + auto parameterCount = methodInfo->GetParameterCount(); + if (methodCount == 1) + { + if (methodInfo->GetReturn()->GetTypeDescriptor() == description::GetTypeDescriptor()) + { + writer.WriteString(L"\t\t\t\t\tINVOKE_INTERFACE_PROXY"); + } + else + { + writer.WriteString(L"\t\t\t\t\tINVOKEGET_INTERFACE_PROXY"); + } + + if (parameterCount > 0) + { + writer.WriteString(L"("); + writer.WriteString(methodName); + for (vint k = 0; k < parameterCount; k++) + { + writer.WriteString(L", "); + writer.WriteString(ConvertName(methodInfo->GetParameter(k)->GetName())); + } + writer.WriteLine(L");"); + } + else + { + writer.WriteString(L"_NOPARAMS("); + writer.WriteString(methodName); + writer.WriteLine(L");"); + } + return; + } + + writer.WriteLine(L"\t\t\t\t\tstatic ITypeDescriptor* _interface_proxy_typeDescriptor = nullptr;"); + writer.WriteLine(L"\t\t\t\t\tstatic IMethodInfo* _interface_proxy_methodInfo = nullptr;"); + writer.WriteLine(L"\t\t\t\t\tif (_interface_proxy_typeDescriptor != static_cast(this)->GetTypeDescriptor())"); + writer.WriteLine(L"\t\t\t\t\t{"); + writer.WriteLine(L"\t\t\t\t\t\t_interface_proxy_typeDescriptor = static_cast(this)->GetTypeDescriptor();"); + writer.WriteLine(L"\t\t\t\t\t\tCHECK_ERROR(_interface_proxy_typeDescriptor != nullptr, L\"Internal error: The type of this interface has not been registered.\");"); + writer.WriteLine(L"\t\t\t\t\t\tauto impl = dynamic_cast(_interface_proxy_typeDescriptor);"); + writer.WriteLine(L"\t\t\t\t\t\tCHECK_ERROR(impl != nullptr, L\"Internal error: BEGIN_INTERFACE_PROXY is the only correct way to register an interface with a proxy.\");"); + writer.WriteString(L"\t\t\t\t\t\tauto _interface_proxy_method = ("); + writer.WriteString(ConvertFunctionType(methodInfo, L"(_interface_proxy_InterfaceType::*)")); + writer.WriteString(L") &_interface_proxy_InterfaceType::"); + writer.WriteString(methodName); + writer.WriteLine(L";"); + writer.WriteLine(L"\t\t\t\t\t\tMethodPointerBinaryDataRetriver binaryData(_interface_proxy_method);"); + writer.WriteLine(L"\t\t\t\t\t\t_interface_proxy_methodInfo = impl->GetIndexedMethodInfo(binaryData.GetBinaryData());"); + writer.WriteLine(L"\t\t\t\t\t}"); + + if (methodInfo->GetReturn()->GetTypeDescriptor() == description::GetTypeDescriptor()) + { + writer.WriteString(L"\t\t\t\t\tproxy->Invoke(_interface_proxy_methodInfo, "); + } + else + { + writer.WriteString(L"\t\t\t\t\treturn UnboxParameter<"); + writer.WriteString(ConvertType(methodInfo->GetReturn())); + writer.WriteString(L">(proxy->Invoke(_interface_proxy_methodInfo, "); + } + + if (parameterCount > 0) + { + writer.WriteString(L"IValueList::Create(collections::From((collections::Array&)(Value_xs()"); + for (vint k = 0; k < parameterCount; k++) + { + writer.WriteString(L", "); + writer.WriteString(ConvertName(methodInfo->GetParameter(k)->GetName())); + } + writer.WriteString(L")))"); + } + else + { + writer.WriteString(L"IValueList::Create()"); + } + + if (methodInfo->GetReturn()->GetTypeDescriptor() == description::GetTypeDescriptor()) + { + writer.WriteLine(L");"); + } + else + { + writer.WriteLine(L")).Ref();"); + } + }; + vint methodGroupCount = td->GetMethodGroupCount(); for (vint i = 0; i < methodGroupCount; i++) { @@ -23000,34 +30068,7 @@ namespace vl WriteFunctionHeader(writer, methodInfo, ConvertName(methodInfo->GetName()), true); writer.WriteLine(L" override"); writer.WriteLine(L"\t\t\t\t{"); - - if (methodInfo->GetReturn()->GetTypeDescriptor() == description::GetTypeDescriptor()) - { - writer.WriteString(L"\t\t\t\t\tINVOKE_INTERFACE_PROXY"); - } - else - { - writer.WriteString(L"\t\t\t\t\tINVOKEGET_INTERFACE_PROXY"); - } - - if (methodInfo->GetParameterCount() > 0) - { - writer.WriteString(L"("); - writer.WriteString(ConvertName(methodInfo->GetName())); - vint parameterCount = methodInfo->GetParameterCount(); - for (vint k = 0; k < parameterCount; k++) - { - writer.WriteString(L", "); - writer.WriteString(ConvertName(methodInfo->GetParameter(k)->GetName())); - } - writer.WriteLine(L");"); - } - else - { - writer.WriteString(L"_NOPARAMS("); - writer.WriteString(ConvertName(methodInfo->GetName())); - writer.WriteLine(L");"); - } + WriteInterfaceProxyInvoke(methodInfo, td, methodCount); writer.WriteLine(L"\t\t\t\t}"); } @@ -23061,6 +30102,26 @@ namespace vl List tds; LoadTypes(this, tds); + Dictionary> typeDecls; + for (auto [decl, index] : indexed(manager->declarationTypes.Keys())) + { + auto td = manager->declarationTypes.Values()[index].Obj(); + if (!typeDecls.Keys().Contains(td)) + { + typeDecls.Add(td, decl); + } + } + + Dictionary> memberDecls; + for (auto [decl, index] : indexed(manager->declarationMemberInfos.Keys())) + { + auto memberInfo = manager->declarationMemberInfos.Values()[index].Obj(); + if (!memberDecls.Keys().Contains(memberInfo)) + { + memberDecls.Add(memberInfo, decl); + } + } + writer.WriteLine(L"namespace vl"); writer.WriteLine(L"{"); writer.WriteLine(L"\tnamespace reflection"); @@ -23084,6 +30145,108 @@ namespace vl writer.WriteLine(L"#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA"); writer.WriteLine(L"#define _ ,"); + + auto FindTypeDecl = [&](ITypeDescriptor* td) -> Ptr + { + if (auto index = typeDecls.Keys().IndexOf(td); index != -1) + { + return typeDecls.Values()[index]; + } + return nullptr; + }; + + auto FindMemberDecl = [&](IMemberInfo* memberInfo) -> Ptr + { + if (auto index = memberDecls.Keys().IndexOf(memberInfo); index != -1) + { + return memberDecls.Values()[index]; + } + return nullptr; + }; + + auto ResolveAttributeTd = [&](Ptr att) + { + return manager->ResolveWorkflowAttribute(att->category.value, att->name.value); + }; + + auto WriteAttributeMacro = [&](const wchar_t* indent, const wchar_t* macroName, Ptr att, const wchar_t* paramName) + { + auto info = ResolveAttributeTd(att); + if (!info.exists || info.attributeType == nullptr) return; + + writer.WriteString(indent); + writer.WriteString(macroName); + writer.WriteString(L"("); + + if (paramName) + { + writer.WriteString(L"L\""); + writer.WriteString(ConvertName(paramName)); + writer.WriteString(L"\", "); + } + + writer.WriteString(ConvertType(info.attributeType)); + if (info.hasArgument) + { + auto value = attributeEvaluator->GetAttributeValue(att); + writer.WriteString(L", "); + if (value.type == runtime::WfInsType::String) + { + WriteWStringLiteralUnmanaged(writer, value.stringValue); + } + else if (value.type == runtime::WfInsType::Unknown && value.typeDescriptor != nullptr) + { + writer.WriteString(L"::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L\""); + writer.WriteString(value.typeDescriptor->GetTypeName()); + writer.WriteString(L"\"))"); + } + else + { + CHECK_FAIL(L"Attribute argument must be a string or ITypeDescriptor*."); + } + } + + writer.WriteLine(L")"); + }; + + auto WriteDeclarationAttributes = [&](const wchar_t* indent, const wchar_t* macroName, Ptr decl) + { + if (!decl) return; + for (auto att : decl->attributes) + { + WriteAttributeMacro(indent, macroName, att, nullptr); + } + }; + + auto WriteArgumentAttributes = [&](const wchar_t* indent, Ptr arg) + { + if (!arg) return; + for (auto att : arg->attributes) + { + WriteAttributeMacro(indent, L"ATTRIBUTE_PARAMETER", att, arg->name.value.Buffer()); + } + }; + + auto FindFunctionArg = [&](WfFunctionDeclaration* functionDecl, const WString& name) -> Ptr + { + return From(functionDecl->arguments) + .Where([&](Ptr arg) + { + return arg->name.value == name; + }) + .First(Ptr()); + }; + + auto FindCtorArg = [&](WfConstructorDeclaration* ctorDecl, const WString& name) -> Ptr + { + return From(ctorDecl->arguments) + .Where([&](Ptr arg) + { + return arg->name.value == name; + }) + .First(Ptr()); + }; + for (auto td : tds) { switch (td->GetTypeDescriptorFlags()) @@ -23119,13 +30282,16 @@ namespace vl writer.WriteString(L"\t\t\tBEGIN_STRUCT_MEMBER("); writer.WriteString(ConvertType(td)); writer.WriteLine(L")"); + WriteDeclarationAttributes(L"\t\t\t\t", L"ATTRIBUTE_TYPE", FindTypeDecl(td)); vint count = td->GetPropertyCount(); for (vint i = 0; i < count; i++) { + auto propertyInfo = td->GetProperty(i); writer.WriteString(L"\t\t\t\tSTRUCT_MEMBER("); - writer.WriteString(ConvertName(td->GetProperty(i)->GetName())); + writer.WriteString(ConvertName(propertyInfo->GetName())); writer.WriteLine(L")"); + WriteDeclarationAttributes(L"\t\t\t\t", L"ATTRIBUTE_MEMBER", FindMemberDecl(propertyInfo)); } writer.WriteString(L"\t\t\tEND_STRUCT_MEMBER("); @@ -23146,6 +30312,7 @@ namespace vl } writer.WriteString(ConvertType(td)); writer.WriteLine(L")"); + WriteDeclarationAttributes(L"\t\t\t\t", L"ATTRIBUTE_TYPE", FindTypeDecl(td)); vint baseCount = td->GetBaseTypeDescriptorCount(); for (vint i = 0; i < baseCount; i++) @@ -23157,11 +30324,12 @@ namespace vl if (td->GetTypeDescriptorFlags() == TypeDescriptorFlags::Class) { - auto methodGroup = td->GetConstructorGroup(); - vint methodCount = methodGroup->GetMethodCount(); + auto ctorGroup = td->GetConstructorGroup(); + vint methodCount = ctorGroup->GetMethodCount(); for (vint j = 0; j < methodCount; j++) { - auto methodInfo = methodGroup->GetMethod(j); + auto methodInfo = ctorGroup->GetMethod(j); + auto memberDecl = FindMemberDecl(methodInfo); vint parameterCount = methodInfo->GetParameterCount(); writer.WriteString(L"\t\t\t\tCLASS_MEMBER_CONSTRUCTOR("); @@ -23196,6 +30364,15 @@ namespace vl { writer.WriteLine(L", NO_PARAMETER)"); } + + WriteDeclarationAttributes(L"\t\t\t\t", L"ATTRIBUTE_MEMBER", memberDecl); + if (auto ctorDecl = memberDecl.Cast()) + { + for (vint k = 0; k < parameterCount; k++) + { + WriteArgumentAttributes(L"\t\t\t\t", FindCtorArg(ctorDecl.Obj(), methodInfo->GetParameter(k)->GetName())); + } + } } } @@ -23207,6 +30384,7 @@ namespace vl for (vint j = 0; j < methodCount; j++) { auto methodInfo = methodGroup->GetMethod(j); + auto memberDecl = FindMemberDecl(methodInfo); if (methodInfo->IsStatic()) { writer.WriteString(L"\t\t\t\tCLASS_MEMBER_STATIC_METHOD"); @@ -23249,6 +30427,15 @@ namespace vl writer.WriteString(ConvertFunctionType(methodInfo, typeDecorator)); } writer.WriteLine(L")"); + + WriteDeclarationAttributes(L"\t\t\t\t", L"ATTRIBUTE_MEMBER", memberDecl); + if (auto functionDecl = memberDecl.Cast()) + { + for (vint k = 0; k < parameterCount; k++) + { + WriteArgumentAttributes(L"\t\t\t\t", FindFunctionArg(functionDecl.Obj(), methodInfo->GetParameter(k)->GetName())); + } + } } } @@ -23259,6 +30446,7 @@ namespace vl writer.WriteString(L"\t\t\t\tCLASS_MEMBER_EVENT("); writer.WriteString(ConvertName(eventInfo->GetName())); writer.WriteLine(L")"); + WriteDeclarationAttributes(L"\t\t\t\t", L"ATTRIBUTE_MEMBER", FindMemberDecl(eventInfo)); } vint propertyCount = td->GetPropertyCount(); @@ -23292,26 +30480,23 @@ namespace vl writer.WriteLine(L")"); } } + else if (auto setter = propertyInfo->GetSetter()) + { + writer.WriteString(L"\t\t\t\tCLASS_MEMBER_PROPERTY("); + writer.WriteString(ConvertName(propertyInfo->GetName())); + writer.WriteString(L", "); + writer.WriteString(ConvertName(getter->GetName())); + writer.WriteString(L", "); + writer.WriteString(ConvertName(setter->GetName())); + writer.WriteLine(L")"); + } else { - if (auto setter = propertyInfo->GetSetter()) - { - writer.WriteString(L"\t\t\t\tCLASS_MEMBER_PROPERTY("); - writer.WriteString(ConvertName(propertyInfo->GetName())); - writer.WriteString(L", "); - writer.WriteString(ConvertName(getter->GetName())); - writer.WriteString(L", "); - writer.WriteString(ConvertName(setter->GetName())); - writer.WriteLine(L")"); - } - else - { - writer.WriteString(L"\t\t\t\tCLASS_MEMBER_PROPERTY_READONLY("); - writer.WriteString(ConvertName(propertyInfo->GetName())); - writer.WriteString(L", "); - writer.WriteString(ConvertName(getter->GetName())); - writer.WriteLine(L")"); - } + writer.WriteString(L"\t\t\t\tCLASS_MEMBER_PROPERTY_READONLY("); + writer.WriteString(ConvertName(propertyInfo->GetName())); + writer.WriteString(L", "); + writer.WriteString(ConvertName(getter->GetName())); + writer.WriteLine(L")"); } } else @@ -23320,6 +30505,8 @@ namespace vl writer.WriteString(ConvertName(propertyInfo->GetName())); writer.WriteLine(L")"); } + + WriteDeclarationAttributes(L"\t\t\t\t", L"ATTRIBUTE_MEMBER", FindMemberDecl(propertyInfo)); } if (td->GetTypeDescriptorFlags() == TypeDescriptorFlags::Interface) @@ -23388,6 +30575,7 @@ namespace vl } } + /*********************************************************************** .\CPP\WFCPP_WRITESTRUCT.CPP ***********************************************************************/ @@ -24000,14 +31188,17 @@ WfAttributeEvaluator auto attributeAssembly = Ptr(new WfAssembly); WfCodegenContext context(attributeAssembly, manager); - auto typeInfo = manager->attributes[{att->category.value, att->name.value}]; - GenerateExpressionInstructions(context, att->value, typeInfo); + auto info = manager->ResolveWorkflowAttribute(att->category.value, att->name.value); + CHECK_ERROR(info.exists, L"WfAttributeEvaluator::GetAttributeValue(...)#Attribute not resolved."); + + GenerateExpressionInstructions(context, att->value, info.argumentType); CHECK_ERROR(attributeAssembly->instructions.Count() == 1, L"WfAttributeEvaluator::GetAttributeValue(Ptr)#Internal error, attribute argument generates unexpected instructions."); auto& ins = attributeAssembly->instructions[0]; CHECK_ERROR(ins.code == WfInsCode::LoadValue, L"WfAttributeEvaluator::GetAttributeValue(Ptr)#Internal error, attribute argument generates unexpected instructions."); - attributeValues.Add(att, ins.valueParameter); - return ins.valueParameter; + auto value = ins.valueParameter; + attributeValues.Add(att, value); + return value; } /*********************************************************************** @@ -24153,6 +31344,7 @@ WfCodegenContext } } + /*********************************************************************** .\EMITTER\WFEMITTER_ASSEMBLY.CPP ***********************************************************************/ @@ -24996,6 +32188,33 @@ GenerateInstructions(Closure) GenerateFunctionInstructions(context, scope, meta, returnType, 0, argumentSymbols, capturedSymbols, node->body, node); } + void GenerateClosureInstructions_Destructor(WfCodegenContext& context, vint functionIndex, WfDestructorDeclaration* node) + { + auto scope = context.manager->nodeScopes[node].Obj(); + auto meta = context.assembly->functions[functionIndex]; + + List> argumentSymbols, capturedSymbols; + { + vint index = context.manager->lambdaCaptures.Keys().IndexOf(node); + if (index != -1) + { + auto capture = context.manager->lambdaCaptures.Values()[index]; + for (auto symbol : capture->symbols) + { + meta->capturedVariableNames.Add(L"" + symbol->name); + capturedSymbols.Add(symbol); + } + } + + vint count = context.GetThisStackCount(scope); + for (vint i = 0; i < count; i++) + { + meta->capturedVariableNames.Add(L"" + itow(i)); + } + } + GenerateFunctionInstructions(context, scope, meta, nullptr, nullptr, argumentSymbols, capturedSymbols, node->statement, node); + } + void GenerateClosureInstructions(WfCodegenContext& context, Ptr functionContext) { for (vint i = 0; i < functionContext->closuresToCodegen.Count(); i++) @@ -25015,6 +32234,10 @@ GenerateInstructions(Closure) { GenerateClosureInstructions_Function(context, functionIndex, closure.functionDeclaration, true); } + else if (closure.destructorDeclaration) + { + GenerateClosureInstructions_Destructor(context, functionIndex, closure.destructorDeclaration); + } } } @@ -26094,7 +33317,8 @@ GenerateInstructions(Expression) List> variableSymbols; List> closureFunctions; List> overrideFunctions; - WfFunctionDeclaration* firstFunction = nullptr; + WfDeclaration* firstDecl = nullptr; + WfDestructorDeclaration* destructorDecl = nullptr; NewInterfaceExpressionVisitor(WfCodegenContext& _context) :context(_context) @@ -26116,9 +33340,9 @@ GenerateInstructions(Expression) void Visit(WfFunctionDeclaration* node)override { - if (!firstFunction) + if (!firstDecl) { - firstFunction = node; + firstDecl = node; } if (node->functionKind == WfFunctionKind::Normal) @@ -26136,6 +33360,15 @@ GenerateInstructions(Expression) variableCount++; } + void Visit(WfDestructorDeclaration* node)override + { + if (!firstDecl) + { + firstDecl = node; + } + destructorDecl = node; + } + void Execute(WfNewInterfaceExpression* node) { for (auto memberDecl : node->declarations) @@ -26143,9 +33376,9 @@ GenerateInstructions(Expression) memberDecl->Accept(this); } - if (firstFunction != nullptr && variableCount > 0) + if (firstDecl != nullptr && variableCount > 0) { - auto capture = context.manager->lambdaCaptures.Get(firstFunction); + auto capture = context.manager->lambdaCaptures.Get(firstDecl); CopyFrom(variableSymbols, From(capture->symbols).Take(variableCount)); } } @@ -26168,7 +33401,8 @@ GenerateInstructions(Expression) NewInterfaceExpressionVisitor declVisitor(context); declVisitor.Execute(node); - if (declVisitor.firstFunction != nullptr) + auto firstCaptureNode = declVisitor.firstDecl; + if (firstCaptureNode != nullptr) { for (vint i = 0; i < declVisitor.variableCount; i++) { @@ -26176,7 +33410,7 @@ GenerateInstructions(Expression) GenerateExpressionInstructions(context, var->expression); } - auto capture = context.manager->lambdaCaptures.Get(declVisitor.firstFunction); + auto capture = context.manager->lambdaCaptures.Get(firstCaptureNode); for (vint i = declVisitor.variableCount; i < capture->symbols.Count(); i++) { GenerateLoadSymbolInstructions(context, capture->symbols[i].Obj(), node); @@ -26211,13 +33445,30 @@ GenerateInstructions(Expression) return L"name.value + L"<" + result.type->GetTypeDescriptor()->GetTypeName() + L">(" + itow(index + declVisitor.closureFunctions.Count()) + L")> in " + context.functionContext->function->name; }); } + + if (declVisitor.destructorDecl) + { + INSTRUCTION(Ins::LoadValue({})); + WfCodegenLambdaContext lc; + lc.destructorDeclaration = declVisitor.destructorDecl; + auto functionIndex = AddClosure(context, lc, [=, this, &declVisitor](vint index) + { + return L"GetTypeDescriptor()->GetTypeName() + L">(" + itow(index) + L")> in " + context.functionContext->function->name; + }); + INSTRUCTION(Ins::LoadFunction(functionIndex)); + } } else { INSTRUCTION(Ins::LoadValue({})); INSTRUCTION(Ins::CreateClosureContext(1)); } - INSTRUCTION(Ins::CreateInterface(result.constructorInfo, declVisitor.overrideFunctions.Count() * 2)); + vint methodCount = declVisitor.overrideFunctions.Count() * 2; + if (declVisitor.destructorDecl) + { + methodCount += 2; + } + INSTRUCTION(Ins::CreateInterface(result.constructorInfo, methodCount)); } void Visit(WfVirtualCfeExpression* node)override diff --git a/Import/VlppWorkflowCompiler.h b/Import/VlppWorkflowCompiler.h index 5d36b537..0c1ce82b 100644 --- a/Import/VlppWorkflowCompiler.h +++ b/Import/VlppWorkflowCompiler.h @@ -5037,6 +5037,20 @@ Scope Manager collections::Dictionary stateIds; }; + struct WfRpcMetadata + { + vl::Ptr metadataModule; + vl::WString dts; + vl::collections::Dictionary typeNames; + vl::collections::Dictionary methodNames; + vl::collections::Dictionary eventNames; + + vl::collections::List typeFullNames; + vl::collections::List methodFullNames; + vl::collections::List eventFullNames; + vl::collections::SortedList orderedIds; + }; + /// /// CPU architecture /// @@ -5059,7 +5073,14 @@ Scope Manager typedef collections::List> ModuleList; typedef collections::List ModuleCodeList; typedef collections::Pair AttributeKey; - typedef collections::Dictionary> AttributeTypeMap; + + struct ResolvedWorkflowAttribute + { + bool exists = false; + bool hasArgument = false; + Ptr argumentType; + ITypeDescriptor* attributeType = nullptr; + }; typedef collections::Dictionary> TypeNameMap; @@ -5098,10 +5119,14 @@ Scope Manager workflow::Parser& workflowParser; Ptr workflowParserHandler; - AttributeTypeMap attributes; + protected: + collections::Dictionary resolvedAttributes; + + public: Ptr globalName; // root scope TypeNameMap typeNames; // ITypeDescriptor* to scope name map + Ptr rpcMetadata; // rpc metadata module and generated lookup tables vint usedTempVars = 0; ParsingErrorList errors; // compile errors @@ -5132,6 +5157,8 @@ Scope Manager /// The target CPU architecture. WfLexicalScopeManager(workflow::Parser& _workflowParser, WfCpuArchitecture _cpuArchitecture); ~WfLexicalScopeManager(); + ResolvedWorkflowAttribute ResolveWorkflowAttribute(const WString& category, const WString& name); + WString GetWorkflowAttributeTypeName(const WString& category, const WString& name); /// Add a Workflow module. Syntax errors can be found at . /// The source code of a workflow module. @@ -5160,7 +5187,8 @@ Scope Manager /// Perform semantic analyzing for added modules. /// The same to the argument in . /// The callback to receive progress information (optional). - void Rebuild(bool keepTypeDescriptorNames, IWfCompilerCallback* callback = nullptr); + /// Set to false to skip RPC metadata validation and generation. + void Rebuild(bool keepTypeDescriptorNames, IWfCompilerCallback* callback = nullptr, bool validateRpc = true); bool ResolveMember(ITypeDescriptor* typeDescriptor, const WString& name, bool preferStatic, collections::SortedList& searchedTypes, collections::List& results); bool ResolveName(WfLexicalScope* scope, const WString& name, collections::List& results); @@ -5315,6 +5343,83 @@ Semantic Analyzing extern Ptr GetEnumerableExpressionItemType(WfLexicalScopeManager* manager, WfExpression* expression, Ptr expectedType); extern Ptr GetEnumerableExpressionItemType(WfLexicalScopeManager* manager, Ptr expression, Ptr expectedType); +/*********************************************************************** +RPC Analyzing +***********************************************************************/ + + namespace rpc_generating + { + struct RpcParamModel + { + WString name; + Ptr type; + reflection::description::ITypeInfo* typeInfo = nullptr; + bool byref = false; + }; + + enum class RpcMethodKind + { + Normal, + PropertyGetter, + PropertySetter, + }; + + struct RpcPropertyModel + { + WString name; + Ptr type; + reflection::description::ITypeInfo* typeInfo = nullptr; + bool byref = false; + bool cached = false; + WString getterName; + WString setterName; + WString valueChangedEvent; + }; + + struct RpcMethodModel + { + WString fullName; + WString name; + Ptr returnType; + reflection::description::ITypeInfo* returnTypeInfo = nullptr; + bool returnByref = false; + RpcMethodKind kind = RpcMethodKind::Normal; + vint methodId = -1; + collections::List params; + }; + + struct RpcEventModel + { + WString fullName; + WString name; + vint eventId = -1; + collections::List params; + }; + + struct RpcInterfaceModel + { + WString fullName; + WString interfaceName; + vint typeId = -1; + bool ctor = false; + WfClassDeclaration* interfaceDecl = nullptr; + collections::List baseFullNames; + collections::List properties; + collections::List methods; + collections::List events; + }; + + extern WString MangleRpcFullName(const WString& fullName); + extern reflection::description::ITypeDescriptor* FindRpcTypeDescriptor(WfLexicalScopeManager* manager, const WString& fullName); + } + + extern void PopulateAttributesOnTypeDescriptors(WfLexicalScopeManager* manager); + extern void ValidateModuleRPC(WfLexicalScopeManager* manager, Ptr module); + extern Ptr CopyAndClearRpcMetadata(Ptr module); + extern WString GenerateDtsFromRpcMetadata(WfLexicalScopeManager* manager); + extern Ptr GenerateModuleRpc(WfLexicalScopeManager* manager, WString assemblyName); + extern Ptr GenerateModuleRpcJson(WfLexicalScopeManager* manager, WString assemblyName); + /*********************************************************************** Expanding Virtual Nodes ***********************************************************************/ @@ -5537,9 +5642,30 @@ Error Messages static glr::ParsingError WrongBaseConstructorCall(WfBaseConstructorCall* node, reflection::description::ITypeDescriptor* type); static glr::ParsingError DuplicatedBaseConstructorCall(WfBaseConstructorCall* node, reflection::description::ITypeDescriptor* type); static glr::ParsingError TooManyDestructor(WfDestructorDeclaration* node, WfClassDeclaration* classDecl); + static glr::ParsingError TooManyDestructor(WfDestructorDeclaration* node, WfNewInterfaceExpression* newInterfaceExpr); static glr::ParsingError AutoPropertyShouldBeInitialized(WfAutoPropertyDeclaration* node); static glr::ParsingError AutoPropertyCannotBeInitializedInInterface(WfAutoPropertyDeclaration* node, WfClassDeclaration* classDecl); + // H: RPC attribute checking + static glr::ParsingError RpcInterfaceCanOnlyApplyToInterface(WfAttribute* node, const WString& fullName); + static glr::ParsingError RpcInterfaceBaseNotSerializable(WfType* node, const WString& interfaceFullName, const WString& baseFullName); + static glr::ParsingError RpcInterfaceMemberNotSerializable(WfDeclaration* node, const WString& interfaceFullName, const WString& memberName); + static glr::ParsingError RpcInterfaceMemberNotSerializable(WfFunctionArgument* node, const WString& interfaceFullName, const WString& memberName); + static glr::ParsingError RpcCtorCanOnlyApplyToRpcInterface(WfAttribute* node); + static glr::ParsingError RpcAttributeCanOnlyApplyToPropertyMethodOrParameter(WfAttribute* node, const WString& attributeName); + static glr::ParsingError RpcAttributeCanOnlyBeUsedInsideRpcInterface(WfAttribute* node, const WString& attributeName); + static glr::ParsingError RpcAttributeRequiresStrongTypedCollection(WfAttribute* node, const WString& attributeName, const WString& memberName); + static glr::ParsingError RpcAttributeCanOnlyApplyToProperty(WfAttribute* node, const WString& attributeName); + static glr::ParsingError RpcAttributeCannotCoexistWithOther(WfAttribute* node, const WString& attributeName, const WString& otherAttributeName, const WString& memberName); + static glr::ParsingError RpcGeneratedNameConflict(WfDeclaration* node, const WString& category, const WString& generatedName); + static glr::ParsingError RpcReservedTypeInReturnValue(WfDeclaration* node, const WString& interfaceFullName, const WString& memberName, const WString& typeName); + static glr::ParsingError RpcReservedTypeInFunctionArgument(WfFunctionArgument* node, const WString& interfaceFullName, const WString& memberName, const WString& typeName); + static glr::ParsingError RpcReservedTypeInEventArgument(WfType* node, const WString& interfaceFullName, const WString& memberName, const WString& typeName); + static glr::ParsingError RpcWrapperGenerationRequiresPropertyMode(WfPropertyDeclaration* node, const WString& memberName); + static glr::ParsingError RpcWrapperGenerationRequiresCollectionReturnTransfer(WfFunctionDeclaration* node, const WString& memberName); + static glr::ParsingError RpcWrapperGenerationRequiresCollectionParameterTransfer(WfFunctionArgument* node, const WString& memberName); + static glr::ParsingError RpcMangledNameConflict(WfDeclaration* node, const WString& mangledName, const WString& previousFullName, const WString& currentFullName); + // CPP: C++ code generation error static glr::ParsingError CppUnableToDecideClassOrder(WfClassDeclaration* node, collections::List& tds); static glr::ParsingError CppUnableToSeparateCustomFile(WfClassDeclaration* node, collections::List& tds); @@ -5550,6 +5676,52 @@ Error Messages #endif + +/*********************************************************************** +.\ANALYZER\WFANALYZER_GENERATERPC.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Workflow::Analyzer::RPC Generator Helpers + +Interfaces: +**********************************************************************/ + +#ifndef VCZH_WORKFLOW_ANALYZER_WFANALYZER_GENERATERPC +#define VCZH_WORKFLOW_ANALYZER_WFANALYZER_GENERATERPC + + +namespace vl +{ + namespace workflow + { + namespace analyzer + { + namespace rpc_generating + { + extern Ptr CreateIf(Ptr condition, Ptr trueBranch, Ptr falseBranch = nullptr); + extern Ptr CreateFunctionDeclaration(const WString& name, Ptr returnType, WfFunctionKind kind, WfFunctionAnonymity anonymity = WfFunctionAnonymity::Named); + + template + Ptr CreateCall(Ptr function, TArgs... arguments) + { + auto expression = Ptr(new WfCallExpression); + expression->function = function; + if constexpr (sizeof...(arguments) > 0) + { + (expression->arguments.Add(arguments), ...); + } + return expression; + } + } + } + } +} + +#endif + + /*********************************************************************** .\EMITTER\WFEMITTER.H ***********************************************************************/ @@ -5601,6 +5773,7 @@ Code Generation WfFunctionDeclaration* functionDeclaration = 0; WfFunctionExpression* functionExpression = 0; WfOrderedLambdaExpression* orderedLambdaExpression = 0; + WfDestructorDeclaration* destructorDeclaration = 0; }; enum class WfCodegenScopeType @@ -5948,6 +6121,7 @@ WfCppConfig::Write }; extern void GenerateExpression(WfCppConfig* config, stream::StreamWriter& writer, Ptr node, reflection::description::ITypeInfo* expectedType, bool useReturnValue = true); + extern void WriteWStringLiteralUnmanaged(stream::StreamWriter& writer, const WString& value); extern void GenerateStatement(WfCppConfig* config, Ptr functionRecord, stream::StreamWriter& writer, Ptr node, const WString& prefix, const WString& prefixDelta, reflection::description::ITypeInfo* returnType); extern void GenerateClassMemberDecl(WfCppConfig* config, stream::StreamWriter& writer, const WString& className, Ptr memberDecl, const WString& prefix, bool forClassExpr); extern bool GenerateClassMemberImpl(WfCppConfig* config, stream::StreamWriter& writer, WfClassDeclaration* classDef, const WString& classBaseName, const WString& className, const WString& classFullName, Ptr memberDecl, const WString& prefix); @@ -5999,3 +6173,4 @@ GenerateCppFiles } #endif + diff --git a/Import/VlppWorkflowLibrary.cpp b/Import/VlppWorkflowLibrary.cpp index 5c3d60fe..892a621c 100644 --- a/Import/VlppWorkflowLibrary.cpp +++ b/Import/VlppWorkflowLibrary.cpp @@ -1033,6 +1033,39 @@ TypeName IMPL_TYPE_INFO_RENAME(vl::reflection::description::AsyncCoroutine, system::AsyncCoroutine) IMPL_TYPE_INFO_RENAME(vl::reflection::description::StateMachine, system::StateMachine) IMPL_TYPE_INFO_RENAME(vl::reflection::description::Versioning, system::Versioning) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcObjectReference, system::RpcObjectReference) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcException, system::RpcException) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByvalReturnValue, system::RpcByvalReturnValue) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcSerializer, system::IRpcSerializer) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcListOps, system::IRpcListOps) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcListEventOps, system::IRpcListEventOps) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcObjectOps, system::IRpcObjectOps) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcObjectEventOps, system::IRpcObjectEventOps) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcOperations, system::IRpcOperations) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcDispatcher, system::IRpcDispatcher) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcController, system::IRpcController) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcLifecycle, system::IRpcLifecycle) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::IRpcWrapperBase, system::IRpcWrapperBase) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByrefEnumerator, system::RpcByrefEnumerator) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByrefEnumerable, system::RpcByrefEnumerable) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByrefReadonlyList, system::RpcByrefReadonlyList) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByrefList, system::RpcByrefList) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByrefArray, system::RpcByrefArray) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByrefObservableList, system::RpcByrefObservableList) + IMPL_TYPE_INFO_RENAME(vl::rpc_controller::RpcByrefDictionary, system::RpcByrefDictionary) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_cpp_File, system::workflow_attributes::att_cpp_File) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_cpp_UserImpl, system::workflow_attributes::att_cpp_UserImpl) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_cpp_Private, system::workflow_attributes::att_cpp_Private) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_cpp_Protected, system::workflow_attributes::att_cpp_Protected) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_cpp_Friend, system::workflow_attributes::att_cpp_Friend) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_Interface, system::workflow_attributes::att_rpc_Interface) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_Ctor, system::workflow_attributes::att_rpc_Ctor) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_Byval, system::workflow_attributes::att_rpc_Byval) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_Byref, system::workflow_attributes::att_rpc_Byref) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_Cached, system::workflow_attributes::att_rpc_Cached) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_Dynamic, system::workflow_attributes::att_rpc_Dynamic) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_IdString, system::workflow_attributes::att_rpc_IdString) + IMPL_TYPE_INFO_RENAME(vl::__vwsn::att_rpc_IdNumber, system::workflow_attributes::att_rpc_IdNumber) #endif @@ -1044,6 +1077,213 @@ WfLoadLibraryTypes #define _ , + template + class CustomMethodInfoImplWithReturn {}; + + template + class CustomMethodInfoImplWithReturn : public CustomMethodInfoImpl + { + public: + CustomMethodInfoImplWithReturn(const wchar_t* parameterNames[], R(__thiscall TClass::* _method)(TArgs...), const wchar_t* _invokeTemplate, const wchar_t* _closureTemplate, Ptr _returnInfo) + : CustomMethodInfoImpl(parameterNames, _method, _invokeTemplate, _closureTemplate) + { + this->returnInfo = _returnInfo; + } + }; + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_cpp_File) + STRUCT_MEMBER(argument) + END_STRUCT_MEMBER(vl::__vwsn::att_cpp_File) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_cpp_UserImpl) + END_STRUCT_MEMBER(vl::__vwsn::att_cpp_UserImpl) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_cpp_Private) + END_STRUCT_MEMBER(vl::__vwsn::att_cpp_Private) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_cpp_Protected) + END_STRUCT_MEMBER(vl::__vwsn::att_cpp_Protected) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_cpp_Friend) + STRUCT_MEMBER(argument) + END_STRUCT_MEMBER(vl::__vwsn::att_cpp_Friend) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_Interface) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_Interface) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_Ctor) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_Ctor) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_Byval) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_Byval) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_Byref) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_Byref) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_Cached) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_Cached) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_Dynamic) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_Dynamic) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_IdString) + STRUCT_MEMBER(argument) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_IdString) + + BEGIN_STRUCT_MEMBER(vl::__vwsn::att_rpc_IdNumber) + STRUCT_MEMBER(argument) + END_STRUCT_MEMBER(vl::__vwsn::att_rpc_IdNumber) + + BEGIN_STRUCT_MEMBER(vl::rpc_controller::RpcObjectReference) + STRUCT_MEMBER(clientId) + STRUCT_MEMBER(objectId) + STRUCT_MEMBER(typeId) + END_STRUCT_MEMBER(vl::rpc_controller::RpcObjectReference) + + BEGIN_STRUCT_MEMBER(vl::rpc_controller::RpcException) + STRUCT_MEMBER(message) + END_STRUCT_MEMBER(vl::rpc_controller::RpcException) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByvalReturnValue) + CLASS_MEMBER_CONSTRUCTOR(Ptr(), NO_PARAMETER) + CLASS_MEMBER_FIELD(value) + CLASS_MEMBER_FIELD(slot) + END_CLASS_MEMBER(vl::rpc_controller::RpcByvalReturnValue) + + BEGIN_INTERFACE_MEMBER(vl::rpc_controller::IRpcSerializer) + CLASS_MEMBER_METHOD(Serialize, { L"value" }) + CLASS_MEMBER_METHOD(Deserialize, { L"value" }) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcSerializer) + + BEGIN_INTERFACE_MEMBER(vl::rpc_controller::IRpcListOps) + CLASS_MEMBER_METHOD(EnumCreate, { L"ref" }) + CLASS_MEMBER_METHOD(EnumNext, { L"enumerator" }) + CLASS_MEMBER_METHOD(EnumGetCurrent, { L"enumerator" }) + + CLASS_MEMBER_METHOD(ListGetCount, { L"ref" }) + CLASS_MEMBER_METHOD(ListGet, { L"ref" _ L"index" }) + CLASS_MEMBER_METHOD(ListSet, { L"ref" _ L"index" _ L"value" }) + CLASS_MEMBER_METHOD(ListAdd, { L"ref" _ L"value" }) + CLASS_MEMBER_METHOD(ListInsert, { L"ref" _ L"index" _ L"value" }) + CLASS_MEMBER_METHOD(ListRemoveAt, { L"ref" _ L"index" }) + CLASS_MEMBER_METHOD(ListClear, { L"ref" }) + CLASS_MEMBER_METHOD(ListContains, { L"ref" _ L"value" }) + CLASS_MEMBER_METHOD(ListIndexOf, { L"ref" _ L"value" }) + + CLASS_MEMBER_METHOD(DictGetCount, { L"ref" }) + CLASS_MEMBER_METHOD(DictGet, { L"ref" _ L"key" }) + CLASS_MEMBER_METHOD(DictSet, { L"ref" _ L"key" _ L"value" }) + CLASS_MEMBER_METHOD(DictRemove, { L"ref" _ L"key" }) + CLASS_MEMBER_METHOD(DictClear, { L"ref" }) + CLASS_MEMBER_METHOD(DictContainsKey, { L"ref" _ L"key" }) + CLASS_MEMBER_METHOD(DictGetKeys, { L"ref" }) + CLASS_MEMBER_METHOD(DictGetValues, { L"ref" }) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcListOps) + + BEGIN_INTERFACE_MEMBER(vl::rpc_controller::IRpcListEventOps) + CLASS_MEMBER_METHOD(OnItemChanged, { L"ref" _ L"index" _ L"oldCount" _ L"newCount" }) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcListEventOps) + + BEGIN_INTERFACE_MEMBER(vl::rpc_controller::IRpcObjectOps) + CLASS_MEMBER_METHOD(InvokeMethod, { L"ref" _ L"methodId" _ L"arguments" }) + CLASS_MEMBER_METHOD(EndInvokeMethod, { L"slot" }) + CLASS_MEMBER_METHOD(ObjectHold, { L"ref" _ L"remoteClientId" _ L"hold" }) + CLASS_MEMBER_METHOD(RegisterService, { L"typeId" _ L"service" }) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcObjectOps) + + BEGIN_INTERFACE_MEMBER(vl::rpc_controller::IRpcObjectEventOps) + CLASS_MEMBER_METHOD(InvokeEvent, { L"ref" _ L"eventId" _ L"arguments" }) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcObjectEventOps) + + BEGIN_INTERFACE_MEMBER_NOPROXY(vl::rpc_controller::IRpcOperations) + CLASS_MEMBER_PROPERTY_READONLY_FAST(ListOps) + CLASS_MEMBER_PROPERTY_READONLY_FAST(ObjectOps) + CLASS_MEMBER_PROPERTY_READONLY_FAST(ListEventOps) + CLASS_MEMBER_PROPERTY_READONLY_FAST(ObjectEventOps) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcOperations) + + BEGIN_INTERFACE_MEMBER_NOPROXY(vl::rpc_controller::IRpcDispatcher) + CLASS_MEMBER_METHOD(Finalize, NO_PARAMETER) + CLASS_MEMBER_METHOD(IsRegisteredService, { L"ref" }) + CLASS_MEMBER_METHOD(RegisterService, { L"typeId" _ L"ref" }) + CLASS_MEMBER_METHOD(RequestService, { L"typeId" }) + CLASS_MEMBER_METHOD(BroadcastFromClient_ListEventOps, { L"selfClientId" }) + CLASS_MEMBER_METHOD(BroadcastFromClient_ObjectEventOps, { L"selfClientId" }) + CLASS_MEMBER_METHOD(SendToClient_ListOps, { L"targetClientId" }) + CLASS_MEMBER_METHOD(SendToClient_ObjectOps, { L"targetClientId" }) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcDispatcher) + + BEGIN_INTERFACE_MEMBER_NOPROXY(vl::rpc_controller::IRpcController) + CLASS_MEMBER_BASE(vl::rpc_controller::IRpcOperations) + CLASS_MEMBER_METHOD(Finalize, NO_PARAMETER) + CLASS_MEMBER_METHOD(SetEventSuppressedFlag, { L"ref" _ L"eventId" _ L"suppressed" }) + CLASS_MEMBER_METHOD(GetEventSuppressedFlag, { L"ref" _ L"eventId" }) + CLASS_MEMBER_METHOD(SetItemChangedSuppressedFlag, { L"ref" _ L"suppressed" }) + CLASS_MEMBER_METHOD(GetItemChangedSuppressedFlag, { L"ref" }) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcController) + + BEGIN_INTERFACE_MEMBER_NOPROXY(vl::rpc_controller::IRpcLifecycle) + CLASS_MEMBER_METHOD(Finalize, NO_PARAMETER) + CLASS_MEMBER_PROPERTY_READONLY_FAST(ClientId) + CLASS_MEMBER_PROPERTY_READONLY_FAST(Dispatcher) + CLASS_MEMBER_PROPERTY_READONLY_FAST(Controller) + CLASS_MEMBER_PROPERTY_READONLY_FAST(Serializer) + CLASS_MEMBER_METHOD(RefToPtr, { L"ref" }) + CLASS_MEMBER_METHOD(PtrToRef, { L"obj" }) + CLASS_MEMBER_METHOD(LocalObjectHold, { L"ref" _ L"remoteClientId" }) + CLASS_MEMBER_METHOD(LocalObjectUnhold, { L"ref" _ L"remoteClientId" }) + CLASS_MEMBER_METHOD(RegisterService, { L"fullName" _ L"service" }) + CLASS_MEMBER_METHOD(RequestService, { L"fullName" }) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(RpcBoxByref, { L"trivial" _ L"lc" }, vl::rpc_controller::RpcObjectReference(*)(vl::Ptr, vl::rpc_controller::IRpcLifecycle*), vl::rpc_controller::RpcBoxByref) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(RpcUnboxByref, { L"serializable" _ L"lc" }, vl::Ptr(*)(vl::rpc_controller::RpcObjectReference, vl::rpc_controller::IRpcLifecycle*), vl::rpc_controller::RpcUnboxByref) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(RpcCopyByval, { L"trivial" _ L"lc" }, Value(*)(const Value&, vl::rpc_controller::IRpcLifecycle*), vl::rpc_controller::RpcCopyByval) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(RpcBoxByval, { L"trivial" _ L"lc" }, Value(*)(const Value&, vl::rpc_controller::IRpcLifecycle*), vl::rpc_controller::RpcBoxByval) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(RpcUnboxByval, { L"serializable" _ L"lc" }, vl::Ptr(*)(const Value&, vl::rpc_controller::IRpcLifecycle*), vl::rpc_controller::RpcUnboxByval) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(ReadMethodException, { L"value" }, void(*)(const Value&), vl::rpc_controller::ReadMethodException) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(ReadEventException, { L"exceptions" }, void(*)(vl::rpc_controller::RpcEventExceptionMap), vl::rpc_controller::ReadEventException) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(JsonSerializePredefinedTypes, { L"value" _ L"rpcjson_Serialize" }, vl::Ptr(*)(const Value&, const vl::rpc_controller::RpcJsonSerializeCallback&), vl::rpc_controller::JsonSerializePredefinedTypes) + CLASS_MEMBER_STATIC_EXTERNALMETHOD(JsonDeserializePredefinedTypes, { L"value" _ L"rpcjson_Deserialize" }, Value(*)(const Value&, const vl::rpc_controller::RpcJsonDeserializeCallback&), vl::rpc_controller::JsonDeserializePredefinedTypes) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcLifecycle) + + BEGIN_INTERFACE_MEMBER(vl::rpc_controller::IRpcWrapperBase) + CLASS_MEMBER_METHOD(DisconnectFromLifecycle, NO_PARAMETER) + END_INTERFACE_MEMBER(vl::rpc_controller::IRpcWrapperBase) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByrefEnumerator) + CLASS_MEMBER_BASE(vl::reflection::description::IValueEnumerator) + CLASS_MEMBER_BASE(vl::rpc_controller::IRpcWrapperBase) + END_CLASS_MEMBER(vl::rpc_controller::RpcByrefEnumerator) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByrefEnumerable) + CLASS_MEMBER_BASE(vl::reflection::description::IValueEnumerable) + CLASS_MEMBER_BASE(vl::rpc_controller::IRpcWrapperBase) + END_CLASS_MEMBER(vl::rpc_controller::RpcByrefEnumerable) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByrefReadonlyList) + CLASS_MEMBER_BASE(vl::reflection::description::IValueReadonlyList) + CLASS_MEMBER_BASE(vl::rpc_controller::IRpcWrapperBase) + END_CLASS_MEMBER(vl::rpc_controller::RpcByrefReadonlyList) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByrefList) + CLASS_MEMBER_BASE(vl::rpc_controller::RpcByrefReadonlyList) + CLASS_MEMBER_BASE(vl::reflection::description::IValueList) + END_CLASS_MEMBER(vl::rpc_controller::RpcByrefList) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByrefArray) + CLASS_MEMBER_BASE(vl::reflection::description::IValueArray) + CLASS_MEMBER_BASE(vl::rpc_controller::IRpcWrapperBase) + END_CLASS_MEMBER(vl::rpc_controller::RpcByrefArray) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByrefObservableList) + CLASS_MEMBER_BASE(vl::reflection::description::IValueObservableList) + CLASS_MEMBER_BASE(vl::rpc_controller::IRpcWrapperBase) + END_CLASS_MEMBER(vl::rpc_controller::RpcByrefObservableList) + + BEGIN_CLASS_MEMBER(vl::rpc_controller::RpcByrefDictionary) + CLASS_MEMBER_BASE(vl::reflection::description::IValueDictionary) + CLASS_MEMBER_BASE(vl::rpc_controller::IRpcWrapperBase) + END_CLASS_MEMBER(vl::rpc_controller::RpcByrefDictionary) + BEGIN_CLASS_MEMBER(Sys) CLASS_MEMBER_STATIC_METHOD(Int32ToInt, { L"value" }) CLASS_MEMBER_STATIC_METHOD(Int64ToInt, { L"value" }) @@ -1276,3 +1516,2225 @@ WfLoadLibraryTypes } } + +/*********************************************************************** +.\RPC\WFLIBRARYRPC.CPP +***********************************************************************/ + +namespace vl +{ + namespace rpc_controller + { + using namespace reflection::description; + + Value BoxRpcObjectReference(RpcObjectReference ref) + { + return Value::From(Ptr(new IValueType::TypedBox(ref)), nullptr); + } + + Value BoxRpcException(RpcException exception) + { + return Value::From(Ptr(new IValueType::TypedBox(exception)), nullptr); + } + + RpcEventExceptionMap CreateRpcEventExceptionMap() + { + return IValueDictionary::Create(); + } + + void MergeRpcEventExceptionMap(RpcEventExceptionMap target, RpcEventExceptionMap source) + { + if (!source) return; + auto keys = source->GetKeys(); + for (vint i = 0; i < keys->GetCount(); i++) + { + auto key = keys->Get(i); + target->Set(key, source->Get(key)); + } + } + + Value BoxRpcEventExceptionMap(RpcEventExceptionMap exceptions) + { + return exceptions ? BoxValue(exceptions) : Value(); + } + + RpcEventExceptionMap UnboxRpcEventExceptionMap(const Value& value) + { + return value.IsNull() ? nullptr : UnboxValue(value); + } + } +} + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCCONTROLLER.CPP +***********************************************************************/ + +namespace vl +{ + namespace rpc_controller + { + using namespace collections; + +/*********************************************************************** +* RpcControllerDefault +***********************************************************************/ + + RpcControllerDefault::RpcControllerDefault() + { + } + + RpcControllerDefault::~RpcControllerDefault() + { + } + + void RpcControllerDefault::Register(Ptr _objectCallback, Ptr _eventCallback, Ptr _listCallback, Ptr _listEventCallback) + { + objectCallback = _objectCallback; + eventCallback = _eventCallback; + listCallback = _listCallback; + listEventCallback = _listEventCallback; + } + + IRpcListOps* RpcControllerDefault::GetListOps() + { + return listCallback.Obj(); + } + + IRpcObjectOps* RpcControllerDefault::GetObjectOps() + { + return objectCallback.Obj(); + } + + IRpcListEventOps* RpcControllerDefault::GetListEventOps() + { + return listEventCallback.Obj(); + } + + IRpcObjectEventOps* RpcControllerDefault::GetObjectEventOps() + { + return eventCallback.Obj(); + } + + void RpcControllerDefault::Finalize() + { + } + + template + void RpcControllerDefault::SetSuppressedFlag(Dictionary& flags, const TKey& key, bool suppressed) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcControllerDefault::SetSuppressedFlag(collections::Dictionary&, const TKey&, bool)#" + auto index = flags.Keys().IndexOf(key); + if (suppressed) + { + if (index == -1) + { + flags.Add(key, 1); + } + else + { + flags.Set(key, flags.Values()[index] + 1); + } + } + else + { + CHECK_ERROR(index != -1, ERROR_MESSAGE_PREFIX L"Suppression counter is not set."); + auto count = flags.Values()[index] - 1; + CHECK_ERROR(count >= 0, ERROR_MESSAGE_PREFIX L"Suppression counter is negative."); + if (count == 0) + { + flags.Remove(key); + } + else + { + flags.Set(key, count); + } + } +#undef ERROR_MESSAGE_PREFIX + } + + template + bool RpcControllerDefault::GetSuppressedFlag(const Dictionary& flags, const TKey& key) + { + auto index = flags.Keys().IndexOf(key); + return index != -1 && flags.Values()[index] > 0; + } + + void RpcControllerDefault::SetEventSuppressedFlag(RpcObjectReference ref, vint eventId, bool suppressed) + { + SetSuppressedFlag(eventSuppressedFlags, { ref,eventId }, suppressed); + } + + bool RpcControllerDefault::GetEventSuppressedFlag(RpcObjectReference ref, vint eventId) + { + return GetSuppressedFlag(eventSuppressedFlags, { ref,eventId }); + } + + void RpcControllerDefault::SetItemChangedSuppressedFlag(RpcObjectReference ref, bool suppressed) + { + SetSuppressedFlag(itemChangedSuppressedFlags, ref, suppressed); + } + + bool RpcControllerDefault::GetItemChangedSuppressedFlag(RpcObjectReference ref) + { + return GetSuppressedFlag(itemChangedSuppressedFlags, ref); + } + } +} + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCJSON.CPP +***********************************************************************/ + +namespace vl +{ + namespace rpc_controller + { + using namespace collections; + using namespace glr::json; + using namespace reflection; + using namespace reflection::description; + + namespace + { + Ptr CreateJsonLiteral(JsonLiteralValue value) + { + auto node = Ptr(new JsonLiteral); + node->value = value; + return node; + } + + Ptr CreateJsonString(const WString& value) + { + auto node = Ptr(new JsonString); + node->content.value = value; + return node; + } + + Ptr CreateJsonNumber(const WString& value) + { + auto node = Ptr(new JsonNumber); + node->content.value = value; + return node; + } + + Ptr CreateJsonArray() + { + return Ptr(new JsonArray); + } + + Ptr CreateJsonObject() + { + return Ptr(new JsonObject); + } + + void AddJsonObjectField(Ptr object, const WString& name, Ptr value) + { + auto field = Ptr(new JsonObjectField); + field->name.value = name; + field->value = value; + object->fields.Add(field); + } + + Ptr GetJsonObjectField(Ptr object, const WString& name) + { + for (auto field : object->fields) + { + if (field->name.value == name) + { + return field->value; + } + } + auto message = L"JSON object field not found: " + name; + CHECK_FAIL(message.Buffer()); + } + + Ptr FindJsonObjectField(Ptr object, const WString& name) + { + for (auto field : object->fields) + { + if (field->name.value == name) + { + return field->value; + } + } + return nullptr; + } + + WString GetJsonString(Ptr node) + { + auto stringNode = node.Cast(); + CHECK_ERROR(stringNode, L"JSON string is expected."); + return stringNode->content.value; + } + + WString GetJsonNumber(Ptr node) + { + auto numberNode = node.Cast(); + CHECK_ERROR(numberNode, L"JSON number is expected."); + return numberNode->content.value; + } + + Ptr CreateUnknownTuple(const WString& keyword, Ptr value) + { + auto array = CreateJsonArray(); + array->items.Add(CreateJsonString(keyword)); + array->items.Add(value); + return Ptr(array); + } + + template + bool TrySerializeNumberPrimitive(const Value& value, const WString& keyword, Ptr& result) + { + auto primitive = __vwsn::UnboxWeak>(value); + if (primitive) + { + result = CreateUnknownTuple(keyword, CreateJsonNumber(__vwsn::ToString(primitive.Value()))); + return true; + } + return false; + } + + template + bool TrySerializeStringPrimitive(const Value& value, const WString& keyword, Ptr& result) + { + auto primitive = __vwsn::UnboxWeak>(value); + if (primitive) + { + result = CreateUnknownTuple(keyword, CreateJsonString(__vwsn::ToString(primitive.Value()))); + return true; + } + return false; + } + + Ptr SerializeCollection(const WString& keyword, Ptr enumerable, const RpcJsonSerializeCallback& rpcjson_Serialize) + { + auto object = CreateJsonObject(); + AddJsonObjectField(object, WString::Unmanaged(L"$"), CreateJsonString(keyword)); + auto values = CreateJsonArray(); + auto enumerator = enumerable->CreateEnumerator(); + while (enumerator->Next()) + { + values->items.Add(rpcjson_Serialize(enumerator->GetCurrent())); + } + AddJsonObjectField(object, WString::Unmanaged(L"values"), values); + return Ptr(object); + } + + Ptr SerializeMap(Ptr dictionary, const RpcJsonSerializeCallback& rpcjson_Serialize) + { + auto object = CreateJsonObject(); + AddJsonObjectField(object, WString::Unmanaged(L"$"), CreateJsonString(WString::Unmanaged(L"map"))); + auto values = CreateJsonArray(); + auto keys = dictionary->GetKeys(); + for (vint i = 0; i < keys->GetCount(); i++) + { + auto key = keys->Get(i); + auto pair = CreateJsonArray(); + pair->items.Add(rpcjson_Serialize(key)); + pair->items.Add(rpcjson_Serialize(dictionary->Get(key))); + values->items.Add(pair); + } + AddJsonObjectField(object, WString::Unmanaged(L"values"), values); + return Ptr(object); + } + + Ptr TrySerializeCollectionTypes(const Value& value, const RpcJsonSerializeCallback& rpcjson_Serialize) + { + if (auto observableList = __vwsn::UnboxWeak>(value)) + { + return SerializeCollection(WString::Unmanaged(L"oblist"), observableList, rpcjson_Serialize); + } + if (auto dictionary = __vwsn::UnboxWeak>(value)) + { + return SerializeMap(dictionary, rpcjson_Serialize); + } + if (auto readonlyDictionary = __vwsn::UnboxWeak>(value)) + { + return SerializeMap(readonlyDictionary, rpcjson_Serialize); + } + if (auto list = __vwsn::UnboxWeak>(value)) + { + return SerializeCollection(WString::Unmanaged(L"list"), list, rpcjson_Serialize); + } + if (auto readonlyList = __vwsn::UnboxWeak>(value)) + { + return SerializeCollection(WString::Unmanaged(L"list"), readonlyList, rpcjson_Serialize); + } + if (auto enumerable = __vwsn::UnboxWeak>(value)) + { + return SerializeCollection(WString::Unmanaged(L"list"), enumerable, rpcjson_Serialize); + } + return nullptr; + } + + Ptr TrySerializeRpcTypes(const Value& value) + { + if (auto ref = __vwsn::UnboxWeak>(value)) + { + auto object = CreateJsonObject(); + AddJsonObjectField(object, WString::Unmanaged(L"$"), CreateJsonString(WString::Unmanaged(L"system::RpcObjectReference"))); + AddJsonObjectField(object, WString::Unmanaged(L"clientId"), CreateJsonNumber(__vwsn::ToString(ref.Value().clientId))); + AddJsonObjectField(object, WString::Unmanaged(L"objectId"), CreateJsonNumber(__vwsn::ToString(ref.Value().objectId))); + AddJsonObjectField(object, WString::Unmanaged(L"typeId"), CreateJsonNumber(__vwsn::ToString(ref.Value().typeId))); + return Ptr(object); + } + if (auto exception = __vwsn::UnboxWeak>(value)) + { + auto object = CreateJsonObject(); + AddJsonObjectField(object, WString::Unmanaged(L"$"), CreateJsonString(WString::Unmanaged(L"system::RpcException"))); + AddJsonObjectField(object, WString::Unmanaged(L"message"), CreateJsonString(exception.Value().message)); + return Ptr(object); + } + return nullptr; + } + + Value DeserializeList(Ptr object, bool observable, const RpcJsonDeserializeCallback& rpcjson_Deserialize) + { + auto values = GetJsonObjectField(object, WString::Unmanaged(L"values")).Cast(); + CHECK_ERROR(values, L"JSON array is expected."); + if (observable) + { + auto result = IValueObservableList::Create(); + for (auto item : values->items) + { + result->Add(rpcjson_Deserialize(item)); + } + return BoxValue(result); + } + else + { + auto result = IValueList::Create(); + for (auto item : values->items) + { + result->Add(rpcjson_Deserialize(item)); + } + return BoxValue(result); + } + } + + Value DeserializeMap(Ptr object, const RpcJsonDeserializeCallback& rpcjson_Deserialize) + { + auto values = GetJsonObjectField(object, WString::Unmanaged(L"values")).Cast(); + CHECK_ERROR(values, L"JSON array is expected."); + auto result = IValueDictionary::Create(); + for (auto item : values->items) + { + auto pair = item.Cast(); + CHECK_ERROR(pair, L"JSON array is expected."); + result->Set(rpcjson_Deserialize(pair->items[0]), rpcjson_Deserialize(pair->items[1])); + } + return BoxValue(result); + } + + Value TryDeserializeRpcTypes(Ptr object, const WString& keyword) + { + if (keyword == L"system::RpcObjectReference") + { + return BoxRpcObjectReference(RpcObjectReference{ + __vwsn::Parse(GetJsonNumber(GetJsonObjectField(object, WString::Unmanaged(L"clientId")))), + __vwsn::Parse(GetJsonNumber(GetJsonObjectField(object, WString::Unmanaged(L"objectId")))), + __vwsn::Parse(GetJsonNumber(GetJsonObjectField(object, WString::Unmanaged(L"typeId")))), + }); + } + if (keyword == L"system::RpcException") + { + return BoxRpcException(RpcException{ + GetJsonString(GetJsonObjectField(object, WString::Unmanaged(L"message"))), + }); + } + return {}; + } + } + + Ptr JsonSerializePredefinedTypes(const Value& value, const RpcJsonSerializeCallback& rpcjson_Serialize) + { + if (value.IsNull()) + { + return CreateJsonLiteral(JsonLiteralValue::Null); + } + + if (auto primitive = __vwsn::UnboxWeak>(value)) + { + return CreateJsonLiteral(primitive.Value() ? JsonLiteralValue::True : JsonLiteralValue::False); + } + + if (auto primitive = __vwsn::UnboxWeak>(value)) + { + return CreateJsonString(primitive.Value()); + } + + Ptr result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"UInt8"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"UInt16"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"UInt32"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"UInt64"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"Int8"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"Int16"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"Int32"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"Int64"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"Single"), result)) return result; + if (TrySerializeNumberPrimitive(value, WString::Unmanaged(L"Double"), result)) return result; + if (TrySerializeStringPrimitive(value, WString::Unmanaged(L"Char"), result)) return result; + if (TrySerializeStringPrimitive(value, WString::Unmanaged(L"DateTime"), result)) return result; + if (TrySerializeStringPrimitive(value, WString::Unmanaged(L"Locale"), result)) return result; + + if (auto rpcType = TrySerializeRpcTypes(value)) + { + return rpcType; + } + + if (auto collection = TrySerializeCollectionTypes(value, rpcjson_Serialize)) + { + return collection; + } + + CHECK_FAIL(L"Unsupported RPC JSON serialization value."); + } + + Value JsonDeserializePredefinedTypes(const Value& value, const RpcJsonDeserializeCallback& rpcjson_Deserialize) + { + if (value.IsNull()) + { + return {}; + } + + auto node = UnboxValue>(value); + if (!node) + { + return {}; + } + + if (auto literal = node.Cast()) + { + switch (literal->value) + { + case JsonLiteralValue::Null: + return {}; + case JsonLiteralValue::True: + return BoxValue(true); + case JsonLiteralValue::False: + return BoxValue(false); + default: + CHECK_FAIL(L"Unsupported JSON literal."); + } + } + + if (auto stringNode = node.Cast()) + { + return BoxValue(stringNode->content.value); + } + + if (auto numberNode = node.Cast()) + { + return BoxValue(numberNode->content.value); + } + + if (auto array = node.Cast()) + { + if (array->items.Count() == 2) + { + if (auto keywordNode = array->items[0].Cast()) + { + auto keyword = keywordNode->content.value; + auto item = array->items[1]; + if (keyword == L"UInt8") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"UInt16") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"UInt32") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"UInt64") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"Int8") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"Int16") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"Int32") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"Int64") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"Single") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"Double") return BoxValue(__vwsn::Parse(GetJsonNumber(item))); + if (keyword == L"Char") return BoxValue(__vwsn::Parse(GetJsonString(item))); + if (keyword == L"DateTime") return BoxValue(__vwsn::Parse(GetJsonString(item))); + if (keyword == L"Locale") return BoxValue(__vwsn::Parse(GetJsonString(item))); + } + } + + auto result = IValueList::Create(); + for (auto item : array->items) + { + result->Add(rpcjson_Deserialize(item)); + } + return BoxValue(result); + } + + if (auto object = node.Cast()) + { + if (auto keywordNode = FindJsonObjectField(object, WString::Unmanaged(L"$"))) + { + auto keyword = GetJsonString(keywordNode); + if (auto value = TryDeserializeRpcTypes(object, keyword); !value.IsNull()) return value; + if (keyword == L"list") return DeserializeList(object, false, rpcjson_Deserialize); + if (keyword == L"oblist") return DeserializeList(object, true, rpcjson_Deserialize); + if (keyword == L"map") return DeserializeMap(object, rpcjson_Deserialize); + CHECK_FAIL(L"Unknown RPC JSON object schema."); + } + + auto result = IValueDictionary::Create(); + for (auto field : object->fields) + { + result->Set(BoxValue(field->name.value), rpcjson_Deserialize(field->value)); + } + return BoxValue(result); + } + + CHECK_FAIL(L"Unsupported RPC JSON node."); + } + } +} + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCLIFECYCLE.CPP +***********************************************************************/ + +namespace vl +{ + namespace rpc_controller + { + using namespace reflection; + using namespace reflection::description; + using namespace collections; + + namespace + { + bool IsRpcWrapperObject(DescriptableObject* obj) + { + if (!obj) return false; + if (dynamic_cast(obj)) return true; +#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA + if (auto typeDescriptor = obj->GetTypeDescriptor()) + { + if (auto wrapperType = GetTypeDescriptor(WString::Unmanaged(L"system::IRpcWrapperBase"))) + { + return typeDescriptor->CanConvertTo(wrapperType); + } + } +#endif + return false; + } + } + + WString RpcLifecycleBase::InternalProperty_LocalObjectTracker = WString::Unmanaged(L"RpcLocalObjectTracker"); + WString RpcLifecycleBase::InternalProperty_WrapperTracker = WString::Unmanaged(L"RpcWrapperTracker"); + + RpcLocalObjectTracker::RpcLocalObjectTracker(RpcLifecycleBase* lc, RpcObjectReference r) + : lifecycle(lc), ref(r) + { + } + + RpcLocalObjectTracker::~RpcLocalObjectTracker() + { + if (lifecycle && lifecycle->IsTracked(ref.objectId)) + { + lifecycle->RemoveLocalObject(ref, false); + } + } + + void RpcLocalObjectTracker::Attach(RpcLifecycleBase* lc, RpcObjectReference r) + { + lifecycle = lc; + ref = r; + } + + void RpcLocalObjectTracker::Detach() + { + lifecycle = nullptr; + } + + RpcWrapperTracker::RpcWrapperTracker(RpcLifecycleBase* lc, RpcObjectReference r) + : lifecycle(lc), ref(r) + { + } + + RpcWrapperTracker::~RpcWrapperTracker() + { + if (lifecycle) + { + lifecycle->UntrackWrapper(ref); + } + } + + void RpcWrapperTracker::Detach() + { + lifecycle = nullptr; + } + +/*********************************************************************** +* RpcLifecycleBase (Constructor and Setup) +***********************************************************************/ + + RpcLifecycleBase::RpcLifecycleBase(vint _clientId) + : clientId(_clientId) + { + } + + RpcLifecycleBase::~RpcLifecycleBase() + { + } + + void RpcLifecycleBase::SetIdMap(const Dictionary& _idMap) + { + CopyFrom(idMap, _idMap); + } + + void RpcLifecycleBase::SetSerializer(Ptr _serializer) + { + serializer = _serializer; + } + + IRpcSerializer* RpcLifecycleBase::GetSerializer() + { + return serializer.Obj(); + } + + void RpcLifecycleBase::RegisterWrapperFactory(UniversalWrapperFactory factory) + { + universalWrapperFactory = factory; + } + + void RpcLifecycleBase::DisconnectWrappersForFinalize() + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::DisconnectWrappersForFinalize()#" + for (auto [ref, properties] : wrapperProperties) + { + if (properties.root) + { + auto trackerObj = properties.root->GetInternalProperty(InternalProperty_WrapperTracker); + CHECK_ERROR(trackerObj, ERROR_MESSAGE_PREFIX L"Wrapper tracker missing."); + auto tracker = trackerObj.Cast(); + CHECK_ERROR(tracker, ERROR_MESSAGE_PREFIX L"Invalid wrapper tracker type."); + tracker->Detach(); + properties.root->SetInternalProperty(InternalProperty_WrapperTracker, nullptr); + } + + if (properties.proxy) + { + properties.proxy->DisconnectFromLifecycle(); + } + } + wrapperProperties.Clear(); +#undef ERROR_MESSAGE_PREFIX + } + + vint RpcLifecycleBase::DecideTypeId(IDescriptable* obj)const + { + if (dynamic_cast(obj)) return RpcTypeId_IValueObservableList; + if (dynamic_cast(obj)) return RpcTypeId_IValueDictionary; + if (dynamic_cast(obj)) return RpcTypeId_IValueArray; + if (dynamic_cast(obj)) return RpcTypeId_IValueList; + if (dynamic_cast(obj)) return RpcTypeId_IValueReadonlyList; + if (dynamic_cast(obj)) return RpcTypeId_IValueEnumerator; + if (dynamic_cast(obj)) return RpcTypeId_IValueEnumerable; + + return RpcTypeId_NotFound; + } + + void RpcLifecycleBase::TrackLocalObject(RpcObjectReference ref, IDescriptable* obj) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::TrackLocalObject(RpcObjectReference, reflection::IDescriptable*)#" + auto index = localObjectProperties.Keys().IndexOf(ref.objectId); + CHECK_ERROR(index != -1, ERROR_MESSAGE_PREFIX L"Object not registered."); + auto props = localObjectProperties.Values().Get(index); + CHECK_ERROR(props->rawPtr == nullptr, ERROR_MESSAGE_PREFIX L"Object already tracked."); + + props->rawPtr = obj; + + if (auto observable = dynamic_cast(obj)) + { + auto handler = observable->ItemChanged.Add([this, ref](vint index, vint oldCount, vint newCount) + { + if (this->GetController()->GetItemChangedSuppressedFlag(ref)) + { + return; + } + auto eventResult = this->GetDispatcher()->BroadcastFromClient_ListEventOps(this->GetClientId())->OnItemChanged(ref, index, oldCount, newCount); + auto exceptions = serializer ? serializer->Deserialize(eventResult) : eventResult; + ReadEventException(UnboxRpcEventExceptionMap(exceptions)); + }); + props->eventHandler = handler; + } + + AttachLocalObjectEvents(ref, obj); + + if (auto descriptable = dynamic_cast(obj)) + { + Ptr tracker; + if (auto trackerObj = descriptable->GetInternalProperty(InternalProperty_LocalObjectTracker)) + { + tracker = trackerObj.Cast(); + CHECK_ERROR(tracker, ERROR_MESSAGE_PREFIX L"Invalid local object tracker type."); + if (tracker->GetClientId() != ref.clientId) + { + throw Exception(ERROR_MESSAGE_PREFIX L"Object already tracked by a different client."); + } + CHECK_ERROR(!tracker->IsTracked(), ERROR_MESSAGE_PREFIX L"Object already tracked."); + } + else + { + tracker = Ptr(new RpcLocalObjectTracker(this, ref)); + descriptable->SetInternalProperty(InternalProperty_LocalObjectTracker, tracker); + } + + tracker->Attach(this, ref); + } +#undef ERROR_MESSAGE_PREFIX + } + + void RpcLifecycleBase::UntrackLocalObject(RpcObjectReference ref, bool clearInternalProperty) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::UntrackLocalObject(RpcObjectReference, bool)#" + auto index = localObjectProperties.Keys().IndexOf(ref.objectId); + CHECK_ERROR(index != -1, ERROR_MESSAGE_PREFIX L"Object not registered."); + auto props = localObjectProperties.Values().Get(index); + + if (props->eventHandler) + { + if (auto observable = dynamic_cast(props->rawPtr)) + { + observable->ItemChanged.Remove(props->eventHandler); + } + props->eventHandler = nullptr; + } + + auto rawPtr = props->rawPtr; + props->rawPtr = nullptr; + + if (clearInternalProperty && rawPtr) + { + if (auto descriptable = dynamic_cast(rawPtr)) + { + if (auto trackerObj = descriptable->GetInternalProperty(InternalProperty_LocalObjectTracker)) + { + auto tracker = trackerObj.Cast(); + CHECK_ERROR(tracker, ERROR_MESSAGE_PREFIX L"Invalid local object tracker type."); + tracker->Detach(); + descriptable->SetInternalProperty(InternalProperty_LocalObjectTracker, nullptr); + } + } + } + + props->ownedPtr = nullptr; +#undef ERROR_MESSAGE_PREFIX + } + + void RpcLifecycleBase::RemoveLocalObject(RpcObjectReference ref, bool clearInternalProperty) + { + if (localObjectProperties.Keys().Contains(ref.objectId)) + { + UntrackLocalObject(ref, clearInternalProperty); + localObjectProperties.Remove(ref.objectId); + } + } + + bool RpcLifecycleBase::IsTracked(vint objectId)const + { + auto index = localObjectProperties.Keys().IndexOf(objectId); + return index != -1 && localObjectProperties.Values().Get(index)->rawPtr != nullptr; + } + + void RpcLifecycleBase::TrackWrapper(DescriptableObject* root, IRpcWrapperBase* proxy, RpcObjectReference ref) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::TrackWrapper(reflection::DescriptableObject*, IRpcWrapperBase*, RpcObjectReference)#" + CHECK_ERROR(root != nullptr, ERROR_MESSAGE_PREFIX L"Wrapper does not implement DescriptableObject."); + CHECK_ERROR(proxy != nullptr, ERROR_MESSAGE_PREFIX L"Wrapper is null."); +#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA + root = root->SafeGetAggregationRoot(); +#endif + CHECK_ERROR(root->GetInternalProperty(InternalProperty_WrapperTracker) == nullptr, ERROR_MESSAGE_PREFIX L"Wrapper already tracked."); + + auto tracker = Ptr(new RpcWrapperTracker(this, ref)); + root->SetInternalProperty(InternalProperty_WrapperTracker, tracker); + + RpcWrapperProperties properties; + properties.root = root; + properties.proxy = proxy; + CHECK_ERROR(!wrapperProperties.Keys().Contains(ref), ERROR_MESSAGE_PREFIX L"Reference already tracked."); + wrapperProperties.Set(ref, properties); +#undef ERROR_MESSAGE_PREFIX + } + + void RpcLifecycleBase::UntrackWrapper(RpcObjectReference ref) + { + wrapperProperties.Remove(ref); + } + + bool RpcLifecycleBase::TryGetTrackedWrapperRef(DescriptableObject* obj, RpcObjectReference& ref)const + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::TryGetTrackedWrapperRef(reflection::DescriptableObject*, RpcObjectReference&)const#" + auto wrapperRoot = obj; +#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA + if (wrapperRoot) + { + wrapperRoot = wrapperRoot->SafeGetAggregationRoot(); + } +#endif + + if (wrapperRoot) + { + if (auto trackerObj = wrapperRoot->GetInternalProperty(InternalProperty_WrapperTracker)) + { + auto tracker = trackerObj.Cast(); + CHECK_ERROR(tracker, ERROR_MESSAGE_PREFIX L"Invalid internal property type."); + CHECK_ERROR(tracker->GetLifecycle() == this, ERROR_MESSAGE_PREFIX L"Wrapper registered to a different lifecycle."); + ref = tracker->GetRef(); + return true; + } + } + return false; +#undef ERROR_MESSAGE_PREFIX + } + + IRpcWrapperBase* RpcLifecycleBase::GetTrackedWrapper(RpcObjectReference ref)const + { + if (auto index = wrapperProperties.Keys().IndexOf(ref); index != -1) + { + return wrapperProperties.Values()[index].proxy; + } + return nullptr; + } + + Ptr RpcLifecycleBase::CreateCallerProxy(RpcObjectReference ref, IRpcSerializer* serializer) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::CreateCallerProxy(RpcObjectReference)#" + IRpcLifecycle* lc = this; + Ptr wrapper; + + switch (ref.typeId) + { + case RpcTypeId_IValueEnumerable: + wrapper = Ptr(new RpcByrefEnumerable(lc, ref, serializer)); + break; + case RpcTypeId_IValueEnumerator: + wrapper = Ptr(new RpcByrefEnumerator(lc, ref, serializer)); + break; + case RpcTypeId_IValueArray: + wrapper = Ptr(new RpcByrefArray(lc, ref, serializer)); + break; + case RpcTypeId_IValueReadonlyList: + wrapper = Ptr(new RpcByrefReadonlyList(lc, ref, serializer)); + break; + case RpcTypeId_IValueList: + wrapper = Ptr(new RpcByrefList(lc, ref, serializer)); + break; + case RpcTypeId_IValueObservableList: + wrapper = Ptr(new RpcByrefObservableList(lc, ref, serializer)); + break; + case RpcTypeId_IValueDictionary: + wrapper = Ptr(new RpcByrefDictionary(lc, ref, serializer)); + break; + default: + CHECK_ERROR(universalWrapperFactory, ERROR_MESSAGE_PREFIX L"No wrapper factory registered."); + wrapper = universalWrapperFactory(ref, this); + CHECK_ERROR(wrapper, ERROR_MESSAGE_PREFIX L"Wrapper factory returned null."); + break; + } + + auto descriptable = dynamic_cast(wrapper.Obj()); + CHECK_ERROR(descriptable, ERROR_MESSAGE_PREFIX L"Wrapper does not implement IDescriptable."); + auto root = dynamic_cast(descriptable); + TrackWrapper(root, wrapper.Obj(), ref); + return Ptr(descriptable); +#undef ERROR_MESSAGE_PREFIX + } + +/*********************************************************************** +* RpcLifecycleBase (IRpcLifecycle) +***********************************************************************/ + + void RpcLifecycleBase::Finalize() + { + DisconnectWrappersForFinalize(); + while (localObjectProperties.Count() > 0) + { + auto props = localObjectProperties.Values().Get(localObjectProperties.Count() - 1); + RemoveLocalObject(props->ref, true); + } + controller.Finalize(); + } + + vint RpcLifecycleBase::GetClientId() + { + return clientId; + } + + IRpcDispatcher* RpcLifecycleBase::GetDispatcher() + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::GetDispatcher()#" + CHECK_ERROR(dispatcher, ERROR_MESSAGE_PREFIX L"No dispatcher registered."); + return dispatcher; +#undef ERROR_MESSAGE_PREFIX + } + + RpcControllerDefault* RpcLifecycleBase::GetController() + { + return &controller; + } + + void RpcLifecycleBase::LocalObjectHold(RpcObjectReference ref, vint remoteClientId) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::LocalObjectHold(RpcObjectReference, vint)#" + CHECK_ERROR(ref.clientId == clientId, ERROR_MESSAGE_PREFIX L"Ref is not local."); + auto index = localObjectProperties.Keys().IndexOf(ref.objectId); + CHECK_ERROR(index != -1, ERROR_MESSAGE_PREFIX L"Object not registered."); + auto props = localObjectProperties.Values().Get(index); + if (!props->interestedClients.Contains(remoteClientId)) + { + props->interestedClients.Add(remoteClientId); + } +#undef ERROR_MESSAGE_PREFIX + } + + void RpcLifecycleBase::LocalObjectUnhold(RpcObjectReference ref, vint remoteClientId) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::LocalObjectUnhold(RpcObjectReference, vint)#" + CHECK_ERROR(ref.clientId == clientId, ERROR_MESSAGE_PREFIX L"Ref is not local."); + auto index = localObjectProperties.Keys().IndexOf(ref.objectId); + CHECK_ERROR(index != -1, ERROR_MESSAGE_PREFIX L"Object not registered."); + auto props = localObjectProperties.Values().Get(index); + CHECK_ERROR(props->interestedClients.Contains(remoteClientId), ERROR_MESSAGE_PREFIX L"Client does not hold this object."); + props->interestedClients.Remove(remoteClientId); + if (props->interestedClients.Count() == 0) + { + RemoveLocalObject(ref, true); + } +#undef ERROR_MESSAGE_PREFIX + } + + void RpcLifecycleBase::RegisterService(const WString& fullName, Ptr service) + { + auto index = idMap.Keys().IndexOf(fullName); + if (index == -1) + { + CHECK_FAIL(L"Unknown RPC type id."); + } + controller.GetObjectOps()->RegisterService(idMap.Values()[index], service); + } + + Ptr RpcLifecycleBase::RequestService(const WString& fullName) + { + if (idMap.Keys().Contains(fullName)) + { + auto typeId = idMap.Get(fullName); + auto ref = GetDispatcher()->RequestService(typeId); + return RefToPtr(ref); + } + + return nullptr; + } + + Ptr RpcLifecycleBase::RefToPtr(RpcObjectReference ref) + { + return RefToPtr(ref, serializer.Obj()); + } + + Ptr RpcLifecycleBase::RefToPtr(RpcObjectReference ref, IRpcSerializer* serializer) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::RefToPtr(RpcObjectReference)#" + if (ref.clientId == clientId) + { + auto index = localObjectProperties.Keys().IndexOf(ref.objectId); + CHECK_ERROR(index != -1, ERROR_MESSAGE_PREFIX L"Object not registered."); + auto props = localObjectProperties.Values().Get(index); + CHECK_ERROR(props->rawPtr != nullptr, ERROR_MESSAGE_PREFIX L"Object not tracked."); + return Ptr(props->rawPtr); + } + else + { + if (auto index = wrapperProperties.Keys().IndexOf(ref); index != -1) + { + auto proxy = wrapperProperties.Values()[index].proxy; + auto descriptable = dynamic_cast(proxy); + CHECK_ERROR(descriptable, ERROR_MESSAGE_PREFIX L"Wrapper does not implement IDescriptable."); + return Ptr(descriptable); + } + + return CreateCallerProxy(ref, serializer); + } +#undef ERROR_MESSAGE_PREFIX + } + + RpcObjectReference RpcLifecycleBase::PtrToRef(Ptr obj) + { +#define ERROR_MESSAGE_PREFIX L"vl::rpc_controller::RpcLifecycleBase::PtrToRef(Ptr)#" + CHECK_ERROR(obj, ERROR_MESSAGE_PREFIX L"A value is required."); + + if (auto descObj = dynamic_cast(obj.Obj())) + { + RpcObjectReference wrapperRef; + if (TryGetTrackedWrapperRef(descObj, wrapperRef)) + { + return wrapperRef; + } + + if (IsRpcWrapperObject(descObj)) + { + CHECK_FAIL(ERROR_MESSAGE_PREFIX L"Wrapper tracker lookup unexpectedly failed."); + } + } + + if (auto descObj = dynamic_cast(obj.Obj())) + { + if (auto trackerObj = descObj->GetInternalProperty(InternalProperty_LocalObjectTracker)) + { + auto tracker = trackerObj.Cast(); + CHECK_ERROR(tracker, ERROR_MESSAGE_PREFIX L"Invalid internal property type."); + if (tracker->GetClientId() != clientId) + { + throw Exception(ERROR_MESSAGE_PREFIX L"Object registered to a different lifecycle."); + } + if (tracker->IsTracked()) + { + CHECK_ERROR(tracker->GetLifecycle() == this, ERROR_MESSAGE_PREFIX L"Object tracker registered to an invalid lifecycle instance."); + return tracker->GetRef(); + } + } + } + + auto typeId = DecideTypeId(obj.Obj()); + CHECK_ERROR(typeId != RpcTypeId_NotFound, ERROR_MESSAGE_PREFIX L"DecideTypeId returned RpcTypeId_NotFound (unknown type)."); + auto ref = RpcObjectReference{ clientId, ++nextObjectId, typeId }; + CHECK_ERROR(!localObjectProperties.Keys().Contains(ref.objectId), ERROR_MESSAGE_PREFIX L"Object ID already registered."); + auto props = Ptr(new RpcLocalObjectProperties); + props->ref = ref; + props->ownedPtr = obj; + localObjectProperties.Set(ref.objectId, props); + + TrackLocalObject(ref, obj.Obj()); + return ref; +#undef ERROR_MESSAGE_PREFIX + } + } +} + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCWRAPPERS.CPP +***********************************************************************/ + +namespace vl +{ + using namespace collections; + + namespace rpc_controller + { + using namespace reflection; + using namespace reflection::description; + + namespace + { + bool IsRpcObjectReferenceValue(const Value& value) + { + return value.GetValueType() == Value::BoxedValue && value.GetBoxedValue().Cast>(); + } + + RpcObjectReference GetRpcObjectReference(const Value& value) + { + auto boxed = value.GetBoxedValue().Cast>(); + CHECK_ERROR(boxed, L"RpcObjectReference is expected."); + return boxed->value; + } + + bool IsNullRpcObjectReference(RpcObjectReference ref) + { + return ref.clientId == RpcClientId_Invalid + && ref.objectId == RpcObjectId_Invalid + && ref.typeId == RpcTypeId_NotFound; + } + + IRpcWrapperBase* CastRpcWrapperBase(IDescriptable* obj) + { + if (!obj) return nullptr; + if (auto wrapper = dynamic_cast(obj)) return wrapper; + return obj->SafeAggregationCast(); + } + + template + TInterface* CastRpcInterface(IDescriptable* obj) + { + if (!obj) return nullptr; + if (auto proxy = dynamic_cast(obj)) return proxy; + return obj->SafeAggregationCast(); + } + + template + bool ContainsKey(const Dictionary& xs, const K& key) + { + return xs.Keys().Contains(key); + } + + template + Ptr CreateTrackedProxy(IRpcLifecycle* lc, RpcObjectReference ref, IRpcSerializer* serializer) + { + auto obj = [&]() + { + if (auto lifecycle = dynamic_cast(lc)) + { + return lifecycle->RefToPtr(ref, serializer); + } + return lc->RefToPtr(ref); + }(); + CHECK_ERROR(obj, L"RPC proxy creation returned null."); + if (auto wrapper = Ptr(CastRpcWrapperBase(obj.Obj()))) + { + auto proxy = Ptr(CastRpcInterface(obj.Obj())); + CHECK_ERROR(proxy, L"RPC proxy creation returned an unexpected type."); + return proxy; + } + return Ptr(new TWrapper(lc, ref, serializer)); + } + + void SetRemoteObjectHold(IRpcLifecycle* lc, RpcObjectReference ref, bool hold) + { + lc->GetDispatcher()->SendToClient_ObjectOps(ref.clientId)->ObjectHold(ref, lc->GetClientId(), hold); + } + + IRpcListOps* GetRemoteListOps(IRpcLifecycle* lc, RpcObjectReference ref) + { + return lc->GetDispatcher()->SendToClient_ListOps(ref.clientId); + } + + Value SerializeValue(IRpcSerializer* serializer, const Value& value) + { + return serializer ? serializer->Serialize(value) : value; + } + + Value DeserializeValue(IRpcSerializer* serializer, const Value& value) + { + return serializer ? serializer->Deserialize(value) : value; + } + + extern Value RpcBoxValueByref(const Value& trivial, IRpcLifecycle* lc); + extern Value RpcUnboxValueByref(const Value& serializable, IRpcLifecycle* lc); + extern Value RpcCopyValueByvalInternal(const Value& trivial, Dictionary& visited); + extern Value RpcBoxValueByvalInternal(const Value& trivial, IRpcLifecycle* lc, Dictionary& visited); + extern Value RpcUnboxValueByvalInternal(const Value& serializable, IRpcLifecycle* lc, Dictionary& visited); + + } + +/*********************************************************************** +* RpcByrefEnumerator +***********************************************************************/ + + RpcByrefEnumerator::RpcByrefEnumerator(IRpcLifecycle* lc, RpcObjectReference enumeratorRef, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + , ref(enumeratorRef) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + SetRemoteObjectHold(lifecycle, ref, true); + } + + RpcByrefEnumerator::~RpcByrefEnumerator() + { + if (lifecycle) SetRemoteObjectHold(lifecycle, ref, false); + } + + void RpcByrefEnumerator::DisconnectFromLifecycle() + { + lifecycle = nullptr; + } + + Value RpcByrefEnumerator::GetCurrent() + { + return RpcUnboxValueByref(DeserializeValue(serializer, GetRemoteListOps(lifecycle, ref)->EnumGetCurrent(ref)), lifecycle); + } + + vint RpcByrefEnumerator::GetIndex() + { + return index; + } + + bool RpcByrefEnumerator::Next() + { + if (GetRemoteListOps(lifecycle, ref)->EnumNext(ref)) + { + index++; + return true; + } + return false; + } + + RpcByrefEnumerable::RpcByrefEnumerable(IRpcLifecycle* lc, RpcObjectReference enumerableRef, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + , ref(enumerableRef) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + SetRemoteObjectHold(lifecycle, ref, true); + } + + RpcByrefEnumerable::~RpcByrefEnumerable() + { + if (lifecycle) SetRemoteObjectHold(lifecycle, ref, false); + } + + void RpcByrefEnumerable::DisconnectFromLifecycle() + { + lifecycle = nullptr; + } + + Ptr RpcByrefEnumerable::CreateEnumerator() + { + return CreateTrackedProxy(lifecycle, GetRemoteListOps(lifecycle, ref)->EnumCreate(ref), serializer); + } + +/*********************************************************************** +* RpcByrefReadonlyList +***********************************************************************/ + + RpcByrefReadonlyList::RpcByrefReadonlyList(IRpcLifecycle* lc, RpcObjectReference listRef, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + , ref(listRef) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + SetRemoteObjectHold(lifecycle, ref, true); + } + + RpcByrefReadonlyList::~RpcByrefReadonlyList() + { + if (lifecycle) SetRemoteObjectHold(lifecycle, ref, false); + } + + void RpcByrefReadonlyList::DisconnectFromLifecycle() + { + lifecycle = nullptr; + } + + Ptr RpcByrefReadonlyList::CreateEnumerator() + { + return CreateTrackedProxy(lifecycle, GetRemoteListOps(lifecycle, ref)->EnumCreate(ref), serializer); + } + + vint RpcByrefReadonlyList::GetCount() + { + return GetRemoteListOps(lifecycle, ref)->ListGetCount(ref); + } + + Value RpcByrefReadonlyList::Get(vint index) + { + return RpcUnboxValueByref(DeserializeValue(serializer, GetRemoteListOps(lifecycle, ref)->ListGet(ref, index)), lifecycle); + } + + bool RpcByrefReadonlyList::Contains(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListContains(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + vint RpcByrefReadonlyList::IndexOf(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListIndexOf(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + +/*********************************************************************** +* RpcByrefList +***********************************************************************/ + + RpcByrefList::RpcByrefList(IRpcLifecycle* lc, RpcObjectReference listRef, IRpcSerializer* _serializer) + : RpcByrefReadonlyList(lc, listRef, _serializer) + { + } + + RpcByrefList::~RpcByrefList() + { + } + + Ptr RpcByrefList::CreateEnumerator() + { + return RpcByrefReadonlyList::CreateEnumerator(); + } + + vint RpcByrefList::GetCount() + { + return RpcByrefReadonlyList::GetCount(); + } + + Value RpcByrefList::Get(vint index) + { + return RpcByrefReadonlyList::Get(index); + } + + bool RpcByrefList::Contains(const Value& value) + { + return RpcByrefReadonlyList::Contains(value); + } + + vint RpcByrefList::IndexOf(const Value& value) + { + return RpcByrefReadonlyList::IndexOf(value); + } + + void RpcByrefList::Set(vint index, const Value& value) + { + GetRemoteListOps(lifecycle, ref)->ListSet(ref, index, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + vint RpcByrefList::Add(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListAdd(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + vint RpcByrefList::Insert(vint index, const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListInsert(ref, index, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + bool RpcByrefList::Remove(const Value& value) + { + auto index = IndexOf(value); + return index == -1 ? false : GetRemoteListOps(lifecycle, ref)->ListRemoveAt(ref, index); + } + + bool RpcByrefList::RemoveAt(vint index) + { + return GetRemoteListOps(lifecycle, ref)->ListRemoveAt(ref, index); + } + + void RpcByrefList::Clear() + { + GetRemoteListOps(lifecycle, ref)->ListClear(ref); + } + +/*********************************************************************** +* RpcByrefArray +***********************************************************************/ + + RpcByrefArray::RpcByrefArray(IRpcLifecycle* lc, RpcObjectReference arrayRef, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + , ref(arrayRef) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + SetRemoteObjectHold(lifecycle, ref, true); + } + + RpcByrefArray::~RpcByrefArray() + { + if (lifecycle) SetRemoteObjectHold(lifecycle, ref, false); + } + + void RpcByrefArray::DisconnectFromLifecycle() + { + lifecycle = nullptr; + } + + Ptr RpcByrefArray::CreateEnumerator() + { + return CreateTrackedProxy(lifecycle, GetRemoteListOps(lifecycle, ref)->EnumCreate(ref), serializer); + } + + vint RpcByrefArray::GetCount() + { + return GetRemoteListOps(lifecycle, ref)->ListGetCount(ref); + } + + Value RpcByrefArray::Get(vint index) + { + return RpcUnboxValueByref(DeserializeValue(serializer, GetRemoteListOps(lifecycle, ref)->ListGet(ref, index)), lifecycle); + } + + bool RpcByrefArray::Contains(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListContains(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + vint RpcByrefArray::IndexOf(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListIndexOf(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + void RpcByrefArray::Set(vint index, const Value& value) + { + GetRemoteListOps(lifecycle, ref)->ListSet(ref, index, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + void RpcByrefArray::Resize(vint size) + { + auto count = GetCount(); + if (size > count) CHECK_FAIL(L"RpcByrefArray::Resize cannot grow."); + for (vint i = count - 1; i >= size; i--) + { + GetRemoteListOps(lifecycle, ref)->ListRemoveAt(ref, i); + } + } + +/*********************************************************************** +* RpcByrefObservableList +***********************************************************************/ + + RpcByrefObservableList::RpcByrefObservableList(IRpcLifecycle* lc, RpcObjectReference listRef, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + , ref(listRef) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + SetRemoteObjectHold(lifecycle, ref, true); + } + + RpcByrefObservableList::~RpcByrefObservableList() + { + if (lifecycle) SetRemoteObjectHold(lifecycle, ref, false); + } + + void RpcByrefObservableList::DisconnectFromLifecycle() + { + lifecycle = nullptr; + } + + Ptr RpcByrefObservableList::CreateEnumerator() + { + return CreateTrackedProxy(lifecycle, GetRemoteListOps(lifecycle, ref)->EnumCreate(ref), serializer); + } + + vint RpcByrefObservableList::GetCount() + { + return GetRemoteListOps(lifecycle, ref)->ListGetCount(ref); + } + + Value RpcByrefObservableList::Get(vint index) + { + return RpcUnboxValueByref(DeserializeValue(serializer, GetRemoteListOps(lifecycle, ref)->ListGet(ref, index)), lifecycle); + } + + bool RpcByrefObservableList::Contains(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListContains(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + vint RpcByrefObservableList::IndexOf(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListIndexOf(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + void RpcByrefObservableList::Set(vint index, const Value& value) + { + GetRemoteListOps(lifecycle, ref)->ListSet(ref, index, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + vint RpcByrefObservableList::Add(const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListAdd(ref, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + vint RpcByrefObservableList::Insert(vint index, const Value& value) + { + return GetRemoteListOps(lifecycle, ref)->ListInsert(ref, index, SerializeValue(serializer, RpcBoxValueByref(value, lifecycle))); + } + + bool RpcByrefObservableList::Remove(const Value& value) + { + auto index = IndexOf(value); + return index == -1 ? false : GetRemoteListOps(lifecycle, ref)->ListRemoveAt(ref, index); + } + + bool RpcByrefObservableList::RemoveAt(vint index) + { + return GetRemoteListOps(lifecycle, ref)->ListRemoveAt(ref, index); + } + + void RpcByrefObservableList::Clear() + { + GetRemoteListOps(lifecycle, ref)->ListClear(ref); + } + +/*********************************************************************** +* RpcByrefDictionary +***********************************************************************/ + + RpcByrefDictionary::RpcByrefDictionary(IRpcLifecycle* lc, RpcObjectReference dictRef, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + , ref(dictRef) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + SetRemoteObjectHold(lifecycle, ref, true); + } + + RpcByrefDictionary::~RpcByrefDictionary() + { + if (lifecycle) SetRemoteObjectHold(lifecycle, ref, false); + } + + void RpcByrefDictionary::DisconnectFromLifecycle() + { + lifecycle = nullptr; + } + + Ptr RpcByrefDictionary::GetKeys() + { + return CreateTrackedProxy(lifecycle, GetRemoteListOps(lifecycle, ref)->DictGetKeys(ref), serializer); + } + + Ptr RpcByrefDictionary::GetValues() + { + return CreateTrackedProxy(lifecycle, GetRemoteListOps(lifecycle, ref)->DictGetValues(ref), serializer); + } + + vint RpcByrefDictionary::GetCount() + { + return GetRemoteListOps(lifecycle, ref)->DictGetCount(ref); + } + + Value RpcByrefDictionary::Get(const Value& key) + { + auto serializedKey = SerializeValue(serializer, RpcBoxValueByref(key, lifecycle)); + auto serializedValue = GetRemoteListOps(lifecycle, ref)->DictGet(ref, serializedKey); + return RpcUnboxValueByref(DeserializeValue(serializer, serializedValue), lifecycle); + } + + void RpcByrefDictionary::Set(const Value& key, const Value& value) + { + auto serializedKey = SerializeValue(serializer, RpcBoxValueByref(key, lifecycle)); + auto serializedValue = SerializeValue(serializer, RpcBoxValueByref(value, lifecycle)); + GetRemoteListOps(lifecycle, ref)->DictSet(ref, serializedKey, serializedValue); + } + + bool RpcByrefDictionary::Remove(const Value& key) + { + return GetRemoteListOps(lifecycle, ref)->DictRemove(ref, SerializeValue(serializer, RpcBoxValueByref(key, lifecycle))); + } + + void RpcByrefDictionary::Clear() + { + GetRemoteListOps(lifecycle, ref)->DictClear(ref); + } + +/*********************************************************************** +* RpcCalleeListOps +***********************************************************************/ + + RpcCalleeListOps::RpcCalleeListOps(IRpcLifecycle* lc, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + } + + RpcObjectReference RpcCalleeListOps::EnumCreate(RpcObjectReference ref) + { + auto obj = lifecycle->RefToPtr(ref); + Ptr enumerator; + if (auto xs = Ptr(obj.Obj()->SafeAggregationCast())) + { + enumerator = xs->CreateEnumerator(); + } + else + { + CHECK_FAIL(L"RpcCalleeListOps::EnumCreate cannot find the target collection."); + return {}; + } + + return lifecycle->PtrToRef(enumerator); + } + + bool RpcCalleeListOps::EnumNext(RpcObjectReference enumerator) + { + auto obj = lifecycle->RefToPtr(enumerator); + auto e = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(e, L"RpcCalleeListOps::EnumNext cannot find the target enumerator."); + return e->Next(); + } + + Value RpcCalleeListOps::EnumGetCurrent(RpcObjectReference enumerator) + { + auto obj = lifecycle->RefToPtr(enumerator); + auto e = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(e, L"RpcCalleeListOps::EnumGetCurrent cannot find the target enumerator."); + return SerializeValue(serializer, RpcBoxValueByref(e->GetCurrent(), lifecycle)); + } + + vint RpcCalleeListOps::ListGetCount(RpcObjectReference ref) + { + auto obj = lifecycle->RefToPtr(ref); + if (auto roList = Ptr(obj.Obj()->SafeAggregationCast())) + return roList->GetCount(); + CHECK_FAIL(L"RpcCalleeListOps::ListGetCount cannot find the target list."); + return 0; + } + + Value RpcCalleeListOps::ListGet(RpcObjectReference ref, vint index) + { + auto obj = lifecycle->RefToPtr(ref); + if (auto roList = Ptr(obj.Obj()->SafeAggregationCast())) + return SerializeValue(serializer, RpcBoxValueByref(roList->Get(index), lifecycle)); + CHECK_FAIL(L"RpcCalleeListOps::ListGet cannot find the target list."); + return {}; + } + + void RpcCalleeListOps::ListSet(RpcObjectReference ref, vint index, const Value& value) + { + auto trivial = RpcUnboxValueByref(DeserializeValue(serializer, value), lifecycle); + auto obj = lifecycle->RefToPtr(ref); + if (auto array = Ptr(obj.Obj()->SafeAggregationCast())) + { + array->Set(index, trivial); + return; + } + if (auto list = Ptr(obj.Obj()->SafeAggregationCast())) + { + list->Set(index, trivial); + return; + } + CHECK_FAIL(L"RpcCalleeListOps::ListSet cannot find the target list."); + } + + vint RpcCalleeListOps::ListAdd(RpcObjectReference ref, const Value& value) + { + auto trivial = RpcUnboxValueByref(DeserializeValue(serializer, value), lifecycle); + auto obj = lifecycle->RefToPtr(ref); + if (auto list = Ptr(obj.Obj()->SafeAggregationCast())) + return list->Add(trivial); + CHECK_FAIL(L"RpcCalleeListOps::ListAdd cannot find a writable list."); + return -1; + } + + vint RpcCalleeListOps::ListInsert(RpcObjectReference ref, vint index, const Value& value) + { + auto trivial = RpcUnboxValueByref(DeserializeValue(serializer, value), lifecycle); + auto obj = lifecycle->RefToPtr(ref); + if (auto list = Ptr(obj.Obj()->SafeAggregationCast())) + return list->Insert(index, trivial); + CHECK_FAIL(L"RpcCalleeListOps::ListInsert cannot find a writable list."); + return -1; + } + + bool RpcCalleeListOps::ListRemoveAt(RpcObjectReference ref, vint index) + { + auto obj = lifecycle->RefToPtr(ref); + if (auto array = Ptr(obj.Obj()->SafeAggregationCast())) + { + CHECK_ERROR(index == array->GetCount() - 1, L"RpcCalleeListOps::ListRemoveAt only supports tail removal for arrays."); + array->Resize(index); + return true; + } + if (auto list = Ptr(obj.Obj()->SafeAggregationCast())) + return list->RemoveAt(index); + CHECK_FAIL(L"RpcCalleeListOps::ListRemoveAt cannot find the target list."); + return false; + } + + void RpcCalleeListOps::ListClear(RpcObjectReference ref) + { + auto obj = lifecycle->RefToPtr(ref); + if (auto array = Ptr(obj.Obj()->SafeAggregationCast())) + { + array->Resize(0); + return; + } + if (auto list = Ptr(obj.Obj()->SafeAggregationCast())) + { + list->Clear(); + return; + } + CHECK_FAIL(L"RpcCalleeListOps::ListClear cannot find the target list."); + } + + bool RpcCalleeListOps::ListContains(RpcObjectReference ref, const Value& value) + { + auto trivial = RpcUnboxValueByref(DeserializeValue(serializer, value), lifecycle); + auto obj = lifecycle->RefToPtr(ref); + if (auto roList = Ptr(obj.Obj()->SafeAggregationCast())) + return roList->Contains(trivial); + CHECK_FAIL(L"RpcCalleeListOps::ListContains cannot find the target list."); + return false; + } + + vint RpcCalleeListOps::ListIndexOf(RpcObjectReference ref, const Value& value) + { + auto trivial = RpcUnboxValueByref(DeserializeValue(serializer, value), lifecycle); + auto obj = lifecycle->RefToPtr(ref); + if (auto roList = Ptr(obj.Obj()->SafeAggregationCast())) + return roList->IndexOf(trivial); + CHECK_FAIL(L"RpcCalleeListOps::ListIndexOf cannot find the target list."); + return -1; + } + + vint RpcCalleeListOps::DictGetCount(RpcObjectReference ref) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictGetCount cannot find the target dictionary."); + return dict->GetCount(); + } + + Value RpcCalleeListOps::DictGet(RpcObjectReference ref, const Value& key) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictGet cannot find the target dictionary."); + auto trivialKey = RpcUnboxValueByref(DeserializeValue(serializer, key), lifecycle); + return SerializeValue(serializer, RpcBoxValueByref(dict->Get(trivialKey), lifecycle)); + } + + void RpcCalleeListOps::DictSet(RpcObjectReference ref, const Value& key, const Value& value) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictSet cannot find the target dictionary."); + auto trivialKey = RpcUnboxValueByref(DeserializeValue(serializer, key), lifecycle); + auto trivialValue = RpcUnboxValueByref(DeserializeValue(serializer, value), lifecycle); + dict->Set(trivialKey, trivialValue); + } + + bool RpcCalleeListOps::DictRemove(RpcObjectReference ref, const Value& key) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictRemove cannot find the target dictionary."); + return dict->Remove(RpcUnboxValueByref(DeserializeValue(serializer, key), lifecycle)); + } + + void RpcCalleeListOps::DictClear(RpcObjectReference ref) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictClear cannot find the target dictionary."); + dict->Clear(); + } + + bool RpcCalleeListOps::DictContainsKey(RpcObjectReference ref, const Value& key) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictContainsKey cannot find the target dictionary."); + return dict->GetKeys()->Contains(RpcUnboxValueByref(DeserializeValue(serializer, key), lifecycle)); + } + + RpcObjectReference RpcCalleeListOps::DictGetKeys(RpcObjectReference ref) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictGetKeys cannot find the target dictionary."); + return lifecycle->PtrToRef(dict->GetKeys()); + } + + RpcObjectReference RpcCalleeListOps::DictGetValues(RpcObjectReference ref) + { + auto obj = lifecycle->RefToPtr(ref); + auto dict = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(dict, L"RpcCalleeListOps::DictGetValues cannot find the target dictionary."); + return lifecycle->PtrToRef(dict->GetValues()); + } + +/*********************************************************************** +* RpcCalleeListEventBridge +***********************************************************************/ + + RpcCalleeListEventBridge::RpcCalleeListEventBridge(IRpcLifecycle* lc, IRpcSerializer* _serializer) + : lifecycle(lc) + , serializer(_serializer) + { + if (!lifecycle) CHECK_FAIL(L"Invalid IRpcLifecycle."); + } + + Value RpcCalleeListEventBridge::OnItemChanged(RpcObjectReference ref, vint index, vint oldCount, vint newCount) + { + auto controller = lifecycle->GetController(); + auto obj = lifecycle->RefToPtr(ref); + auto observable = Ptr(obj.Obj()->SafeAggregationCast()); + CHECK_ERROR(observable, L"RpcCalleeListEventBridge::OnItemChanged cannot find the target observable list."); + controller->SetItemChangedSuppressedFlag(ref, true); + RpcEventExceptionMap exceptions; + try + { + observable->ItemChanged(index, oldCount, newCount); + } + catch (const Exception& ex) + { + exceptions = CreateRpcEventExceptionMap(); + exceptions->Set(BoxValue(lifecycle->GetClientId()), BoxRpcException(RpcException{ ex.Message() })); + } + catch (...) + { + controller->SetItemChangedSuppressedFlag(ref, false); + throw; + } + controller->SetItemChangedSuppressedFlag(ref, false); + return SerializeValue(serializer, BoxRpcEventExceptionMap(exceptions)); + } + +/*********************************************************************** +* Helpers +***********************************************************************/ + + RpcObjectReference RpcBoxByref(Ptr trivial, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (!trivial) return {}; + return lc->PtrToRef(trivial); + } + + Ptr RpcUnboxByref(RpcObjectReference serializable, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (IsNullRpcObjectReference(serializable)) return nullptr; + return lc->RefToPtr(serializable); + } + + namespace + { + Value RpcBoxValueByref(const Value& trivial, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (trivial.IsNull()) return trivial; + + if (trivial.GetValueType() == Value::SharedPtr) + { + if (auto raw = trivial.GetRawPtr()) + { + if (auto obj = dynamic_cast(raw)) + { + return BoxValue(RpcBoxByref(Ptr(obj), lc)); + } + } + } + + return trivial; + } + + Value RpcUnboxValueByref(const Value& serializable, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (serializable.IsNull()) return serializable; + + if (IsRpcObjectReferenceValue(serializable)) + { + auto ref = GetRpcObjectReference(serializable); + auto obj = RpcUnboxByref(ref, lc); + return obj ? BoxValue(obj) : Value{}; + } + + return serializable; + } + } + + namespace + { + template + Ptr TryGetValueInterface(const Value& value) + { + if (auto raw = value.GetRawPtr()) + { + return Ptr(dynamic_cast(raw)); + } + return nullptr; + } + + Value RpcCopyValueByvalInternal(const Value& trivial, Dictionary& visited) + { + if (trivial.IsNull()) return trivial; + if (trivial.GetValueType() == Value::SharedPtr) + { + if (auto roDict = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval copying does not support cycles."); + visited.Add(key, true); + + auto dict = IValueDictionary::Create(); + auto keys = roDict->GetKeys(); + for (vint i = 0; i < keys->GetCount(); i++) + { + auto dictKey = keys->Get(i); + dict->Set( + RpcCopyValueByvalInternal(dictKey, visited), + RpcCopyValueByvalInternal(roDict->Get(dictKey), visited) + ); + } + visited.Remove(key); + return BoxValue(dict); + } + + if (auto obsList = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval copying does not support cycles."); + visited.Add(key, true); + + auto list = IValueObservableList::Create(); + for (vint i = 0; i < obsList->GetCount(); i++) + { + list->Add(RpcCopyValueByvalInternal(obsList->Get(i), visited)); + } + visited.Remove(key); + return BoxValue(list); + } + + if (auto array = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval copying does not support cycles."); + visited.Add(key, true); + + auto list = IValueArray::Create(); + list->Resize(array->GetCount()); + for (vint i = 0; i < array->GetCount(); i++) + { + list->Set(i, RpcCopyValueByvalInternal(array->Get(i), visited)); + } + visited.Remove(key); + return BoxValue(list); + } + + if (auto roList = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval copying does not support cycles."); + visited.Add(key, true); + + auto list = IValueList::Create(); + for (vint i = 0; i < roList->GetCount(); i++) + { + list->Add(RpcCopyValueByvalInternal(roList->Get(i), visited)); + } + visited.Remove(key); + return BoxValue(list); + } + } + return trivial; + } + + Value RpcBoxValueByvalInternal(const Value& trivial, IRpcLifecycle* lc, Dictionary& visited) + { + if (trivial.IsNull()) return trivial; + if (trivial.GetValueType() == Value::SharedPtr) + { + if (auto roDict = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval boxing does not support cycles."); + visited.Add(key, true); + + auto dict = IValueDictionary::Create(); + auto keys = roDict->GetKeys(); + for (vint i = 0; i < keys->GetCount(); i++) + { + auto dictKey = keys->Get(i); + dict->Set( + RpcBoxValueByvalInternal(dictKey, lc, visited), + RpcBoxValueByvalInternal(roDict->Get(dictKey), lc, visited) + ); + } + visited.Remove(key); + return BoxValue(dict); + } + + if (auto obsList = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval boxing does not support cycles."); + visited.Add(key, true); + + auto list = IValueObservableList::Create(); + for (vint i = 0; i < obsList->GetCount(); i++) + { + list->Add(RpcBoxValueByvalInternal(obsList->Get(i), lc, visited)); + } + visited.Remove(key); + return BoxValue(list); + } + + if (auto array = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval boxing does not support cycles."); + visited.Add(key, true); + + auto list = IValueArray::Create(); + list->Resize(array->GetCount()); + for (vint i = 0; i < array->GetCount(); i++) + { + list->Set(i, RpcBoxValueByvalInternal(array->Get(i), lc, visited)); + } + visited.Remove(key); + return BoxValue(list); + } + + if (auto roList = TryGetValueInterface(trivial)) + { + auto key = static_cast(trivial.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval boxing does not support cycles."); + visited.Add(key, true); + + auto list = IValueList::Create(); + for (vint i = 0; i < roList->GetCount(); i++) + { + list->Add(RpcBoxValueByvalInternal(roList->Get(i), lc, visited)); + } + visited.Remove(key); + return BoxValue(list); + } + + if (auto raw = trivial.GetRawPtr()) + { + if (auto obj = dynamic_cast(raw)) + { + auto ref = lc->PtrToRef(Ptr(obj)); + return BoxValue(ref); + } + } + } + return trivial; + } + } + + Value RpcCopyByval(const Value& trivial, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (trivial.IsNull()) return {}; + Dictionary visited; + return RpcCopyValueByvalInternal(trivial, visited); + } + + Value RpcBoxByval(Ptr trivial, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (!trivial) return {}; + return RpcBoxByval(BoxValue(trivial), lc); + } + + Value RpcBoxByval(const Value& trivial, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (trivial.IsNull()) return {}; + Dictionary visited; + return RpcBoxValueByvalInternal(trivial, lc, visited); + } + + namespace + { + Value RpcUnboxValueByvalInternal(const Value& serializable, IRpcLifecycle* lc, Dictionary& visited) + { + if (serializable.IsNull()) return serializable; + + if (IsRpcObjectReferenceValue(serializable)) + { + auto ref = GetRpcObjectReference(serializable); + auto obj = RpcUnboxByref(ref, lc); + return obj ? BoxValue(obj) : Value{}; + } + + if (serializable.GetValueType() == Value::SharedPtr) + { + if (auto roDict = TryGetValueInterface(serializable)) + { + auto key = static_cast(serializable.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval unboxing does not support cycles."); + visited.Add(key, true); + + auto dict = IValueDictionary::Create(); + auto keys = roDict->GetKeys(); + for (vint i = 0; i < keys->GetCount(); i++) + { + auto dictKey = keys->Get(i); + dict->Set( + RpcUnboxValueByvalInternal(dictKey, lc, visited), + RpcUnboxValueByvalInternal(roDict->Get(dictKey), lc, visited) + ); + } + visited.Remove(key); + return BoxValue(dict); + } + + if (auto obsList = TryGetValueInterface(serializable)) + { + auto key = static_cast(serializable.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval unboxing does not support cycles."); + visited.Add(key, true); + + auto list = IValueObservableList::Create(); + for (vint i = 0; i < obsList->GetCount(); i++) + { + list->Add(RpcUnboxValueByvalInternal(obsList->Get(i), lc, visited)); + } + visited.Remove(key); + return BoxValue(list); + } + + if (auto array = TryGetValueInterface(serializable)) + { + auto key = static_cast(serializable.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval unboxing does not support cycles."); + visited.Add(key, true); + + auto list = IValueArray::Create(); + list->Resize(array->GetCount()); + for (vint i = 0; i < array->GetCount(); i++) + { + list->Set(i, RpcUnboxValueByvalInternal(array->Get(i), lc, visited)); + } + visited.Remove(key); + return BoxValue(list); + } + + if (auto roList = TryGetValueInterface(serializable)) + { + auto key = static_cast(serializable.GetRawPtr()); + if (ContainsKey(visited, key)) CHECK_FAIL(L"Byval unboxing does not support cycles."); + visited.Add(key, true); + + auto list = IValueList::Create(); + for (vint i = 0; i < roList->GetCount(); i++) + { + list->Add(RpcUnboxValueByvalInternal(roList->Get(i), lc, visited)); + } + visited.Remove(key); + return BoxValue(list); + } + } + return serializable; + } + } + + Ptr RpcUnboxByval(const Value& serializable, IRpcLifecycle* lc) + { + if (!lc) CHECK_FAIL(L"IRpcLifecycle cannot be null."); + if (serializable.IsNull()) return nullptr; + Dictionary visited; + auto trivial = RpcUnboxValueByvalInternal(serializable, lc, visited); + if (auto raw = trivial.GetRawPtr()) + { + if (auto obj = dynamic_cast(raw)) + { + return Ptr(obj); + } + } + + CHECK_FAIL(L"Interface value or null is expected."); + return nullptr; + } + + void ReadMethodException(const Value& value) + { + if (value.GetValueType() == Value::BoxedValue) + { + if (auto boxed = value.GetBoxedValue().Cast>()) + { + throw Exception(boxed->value.message); + } + } + } + + void ReadEventException(RpcEventExceptionMap exceptions) + { + if (!exceptions || exceptions->GetCount() == 0) return; + + WString message; + auto keys = exceptions->GetKeys(); + for (vint i = 0; i < keys->GetCount(); i++) + { + auto key = keys->Get(i); + auto exception = UnboxValue(exceptions->Get(key)); + message += itow(UnboxValue(key)) + L":" + exception.message + L";"; + } + throw Exception(message); + } + } +} + diff --git a/Import/VlppWorkflowLibrary.h b/Import/VlppWorkflowLibrary.h index a4906e87..482daa26 100644 --- a/Import/VlppWorkflowLibrary.h +++ b/Import/VlppWorkflowLibrary.h @@ -6,6 +6,7 @@ DEVELOPER: Zihan Chen(vczh) #include "VlppOS.h" #include "Vlpp.h" #include "VlppRegex.h" +#include "VlppGlrParser.h" /*********************************************************************** .\WFLIBRARYPREDEFINED.H @@ -446,6 +447,81 @@ MISC } } +namespace vl +{ + namespace __vwsn + { + struct att_cpp_File + { + WString argument; + auto operator<=>(const att_cpp_File&) const = default; + }; + + struct att_cpp_UserImpl + { + auto operator<=>(const att_cpp_UserImpl&) const = default; + }; + + struct att_cpp_Private + { + auto operator<=>(const att_cpp_Private&) const = default; + }; + + struct att_cpp_Protected + { + auto operator<=>(const att_cpp_Protected&) const = default; + }; + + struct att_cpp_Friend + { + reflection::description::ITypeDescriptor* argument = nullptr; + auto operator<=>(const att_cpp_Friend&) const = default; + }; + + struct att_rpc_Interface + { + auto operator<=>(const att_rpc_Interface&) const = default; + }; + + struct att_rpc_Ctor + { + auto operator<=>(const att_rpc_Ctor&) const = default; + }; + + struct att_rpc_Byval + { + auto operator<=>(const att_rpc_Byval&) const = default; + }; + + struct att_rpc_Byref + { + auto operator<=>(const att_rpc_Byref&) const = default; + }; + + struct att_rpc_Cached + { + auto operator<=>(const att_rpc_Cached&) const = default; + }; + + struct att_rpc_Dynamic + { + auto operator<=>(const att_rpc_Dynamic&) const = default; + }; + + struct att_rpc_IdString + { + WString argument; + auto operator<=>(const att_rpc_IdString&) const = default; + }; + + struct att_rpc_IdNumber + { + vint argument = 0; + auto operator<=>(const att_rpc_IdNumber&) const = default; + }; + } +} + #endif @@ -580,6 +656,7 @@ namespace vl TTo* RawPtrCast(TFrom* pointer) { if (!pointer) return nullptr; + if (auto converted = dynamic_cast(pointer)) return converted; return pointer->template SafeAggregationCast(); } @@ -587,6 +664,7 @@ namespace vl Ptr SharedPtrCast(TFrom* pointer) { if (!pointer) return nullptr; + if (auto converted = dynamic_cast(pointer)) return Ptr(converted); return Ptr(pointer->template SafeAggregationCast()); } @@ -618,7 +696,17 @@ namespace vl static T* Unbox(const reflection::description::Value& value) { if (value.IsNull()) return nullptr; - return value.GetRawPtr()->SafeAggregationCast(); + auto rawPtr = value.GetRawPtr(); + if (!rawPtr) return nullptr; + if (auto converted = dynamic_cast(rawPtr)) return converted; + try + { + return rawPtr->SafeAggregationCast(); + } + catch (const Exception&) + { + return nullptr; + } } }; @@ -628,7 +716,17 @@ namespace vl static Ptr Unbox(const reflection::description::Value& value) { if (value.IsNull()) return nullptr; - return Ptr(value.GetRawPtr()->SafeAggregationCast()); + auto rawPtr = value.GetRawPtr(); + if (!rawPtr) return nullptr; + if (auto converted = dynamic_cast(rawPtr)) return Ptr(converted); + try + { + return Ptr(rawPtr->SafeAggregationCast()); + } + catch (const Exception&) + { + return nullptr; + } } }; @@ -822,6 +920,675 @@ namespace vl #endif + +/*********************************************************************** +.\RPC\WFLIBRARYRPC.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::RPC + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_RPC +#define VCZH_WORKFLOW_LIBRARY_RPC + + +namespace vl +{ + namespace rpc_controller + { + class IRpcSerializer; + + constexpr vint RpcTypeId_NotFound = -100; + constexpr vint RpcClientId_Invalid = -1; + constexpr vint RpcObjectId_Invalid = -1; + + struct RpcObjectReference + { + vint clientId = RpcClientId_Invalid; + vint objectId = RpcObjectId_Invalid; + vint typeId = RpcTypeId_NotFound; + + auto operator<=>(const RpcObjectReference&) const = default; + }; + + struct RpcException + { + WString message; + + auto operator<=>(const RpcException&) const = default; + }; + + using RpcEventExceptionMap = Ptr; + + extern reflection::description::Value BoxRpcObjectReference(RpcObjectReference ref); + extern reflection::description::Value BoxRpcException(RpcException exception); + extern RpcEventExceptionMap CreateRpcEventExceptionMap(); + extern void MergeRpcEventExceptionMap(RpcEventExceptionMap target, RpcEventExceptionMap source); + extern reflection::description::Value BoxRpcEventExceptionMap(RpcEventExceptionMap exceptions); + extern RpcEventExceptionMap UnboxRpcEventExceptionMap(const reflection::description::Value& value); + + class RpcByvalReturnValue + : public Object + , public reflection::Description + { + public: + reflection::description::Value value; + vint slot = -1; + }; + + inline constexpr vint RpcTypeId_IValueEnumerable = -1; + inline constexpr vint RpcTypeId_IValueEnumerator = -2; + inline constexpr vint RpcTypeId_IValueArray = -3; + inline constexpr vint RpcTypeId_IValueList = -4; + inline constexpr vint RpcTypeId_IValueObservableList = -5; + inline constexpr vint RpcTypeId_IValueDictionary = -6; + inline constexpr vint RpcTypeId_IValueReadonlyList = -7; + +/*********************************************************************** +* Interfaces (Operations) +***********************************************************************/ + + class IRpcListOps + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual RpcObjectReference EnumCreate(RpcObjectReference ref) = 0; + virtual bool EnumNext(RpcObjectReference enumerator) = 0; + virtual reflection::description::Value EnumGetCurrent(RpcObjectReference enumerator) = 0; + + virtual vint ListGetCount(RpcObjectReference ref) = 0; + virtual reflection::description::Value ListGet(RpcObjectReference ref, vint index) = 0; + virtual void ListSet(RpcObjectReference ref, vint index, const reflection::description::Value& value) = 0; + virtual vint ListAdd(RpcObjectReference ref, const reflection::description::Value& value) = 0; + virtual vint ListInsert(RpcObjectReference ref, vint index, const reflection::description::Value& value) = 0; + virtual bool ListRemoveAt(RpcObjectReference ref, vint index) = 0; + virtual void ListClear(RpcObjectReference ref) = 0; + virtual bool ListContains(RpcObjectReference ref, const reflection::description::Value& value) = 0; + virtual vint ListIndexOf(RpcObjectReference ref, const reflection::description::Value& value) = 0; + + virtual vint DictGetCount(RpcObjectReference ref) = 0; + virtual reflection::description::Value DictGet(RpcObjectReference ref, const reflection::description::Value& key) = 0; + virtual void DictSet(RpcObjectReference ref, const reflection::description::Value& key, const reflection::description::Value& value) = 0; + virtual bool DictRemove(RpcObjectReference ref, const reflection::description::Value& key) = 0; + virtual void DictClear(RpcObjectReference ref) = 0; + virtual bool DictContainsKey(RpcObjectReference ref, const reflection::description::Value& key) = 0; + virtual RpcObjectReference DictGetKeys(RpcObjectReference ref) = 0; + virtual RpcObjectReference DictGetValues(RpcObjectReference ref) = 0; + }; + + class IRpcObjectOps + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual reflection::description::Value InvokeMethod(RpcObjectReference ref, vint methodId, Ptr arguments) = 0; + virtual void EndInvokeMethod(vint slot) = 0; + virtual void ObjectHold(RpcObjectReference ref, vint remoteClientId, bool hold) = 0; + virtual void RegisterService(vint typeId, Ptr service) = 0; + }; + + class IRpcListEventOps + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual reflection::description::Value OnItemChanged(RpcObjectReference ref, vint index, vint oldCount, vint newCount) = 0; + }; + + class IRpcObjectEventOps + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual reflection::description::Value InvokeEvent(RpcObjectReference ref, vint eventId, Ptr arguments) = 0; + }; + +/*********************************************************************** +* Interfaces (Lifecycle) +***********************************************************************/ + + class IRpcOperations + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual IRpcListOps* GetListOps() = 0; + virtual IRpcObjectOps* GetObjectOps() = 0; + virtual IRpcListEventOps* GetListEventOps() = 0; + virtual IRpcObjectEventOps* GetObjectEventOps() = 0; + }; + + class IRpcDispatcher + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual void Finalize() = 0; + virtual bool IsRegisteredService(RpcObjectReference ref) = 0; + virtual void RegisterService(vint typeId, RpcObjectReference ref) = 0; + virtual RpcObjectReference RequestService(vint typeId) = 0; + + virtual IRpcListEventOps* BroadcastFromClient_ListEventOps(vint selfClientId) = 0; + virtual IRpcObjectEventOps* BroadcastFromClient_ObjectEventOps(vint selfClientId) = 0; + virtual IRpcListOps* SendToClient_ListOps(vint targetClientId) = 0; + virtual IRpcObjectOps* SendToClient_ObjectOps(vint targetClientId) = 0; + }; + + class IRpcController + : public virtual IRpcOperations + , public reflection::Description + { + public: + virtual void Finalize() = 0; + virtual void SetEventSuppressedFlag(RpcObjectReference ref, vint eventId, bool suppressed) = 0; + virtual bool GetEventSuppressedFlag(RpcObjectReference ref, vint eventId) = 0; + virtual void SetItemChangedSuppressedFlag(RpcObjectReference ref, bool suppressed) = 0; + virtual bool GetItemChangedSuppressedFlag(RpcObjectReference ref) = 0; + }; + + class IRpcLifecycle + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual void Finalize() = 0; + virtual vint GetClientId() = 0; + virtual IRpcDispatcher* GetDispatcher() = 0; + virtual IRpcController* GetController() = 0; + virtual IRpcSerializer* GetSerializer() = 0; + virtual Ptr RefToPtr(RpcObjectReference ref) = 0; + virtual RpcObjectReference PtrToRef(Ptr obj) = 0; + virtual void LocalObjectHold(RpcObjectReference ref, vint remoteClientId) = 0; + virtual void LocalObjectUnhold(RpcObjectReference ref, vint remoteClientId) = 0; + virtual void RegisterService(const WString& fullName, Ptr service) = 0; + virtual Ptr RequestService(const WString& fullName) = 0; + }; + + class IRpcWrapperBase + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual void DisconnectFromLifecycle() = 0; + }; + +/*********************************************************************** +* Helpers +***********************************************************************/ + + extern RpcObjectReference RpcBoxByref (Ptr trivial, IRpcLifecycle* lc); + extern Ptr RpcUnboxByref (RpcObjectReference serializable, IRpcLifecycle* lc); + extern reflection::description::Value RpcCopyByval (const reflection::description::Value& trivial, IRpcLifecycle* lc); + extern reflection::description::Value RpcBoxByval (Ptr trivial, IRpcLifecycle* lc); + extern reflection::description::Value RpcBoxByval (const reflection::description::Value& trivial, IRpcLifecycle* lc); + extern Ptr RpcUnboxByval (const reflection::description::Value& serializable, IRpcLifecycle* lc); + extern void ReadMethodException(const reflection::description::Value& value); + extern void ReadEventException(RpcEventExceptionMap exceptions); + } +} + +#endif + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCCONTROLLER.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::RPC + +Interfaces: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_RPC_CONTROLLER +#define VCZH_WORKFLOW_LIBRARY_RPC_CONTROLLER + + +namespace vl +{ + namespace rpc_controller + { + struct RpcEventSuppressionKey + { + RpcObjectReference ref; + vint eventId = 0; + + auto operator<=>(const RpcEventSuppressionKey&) const = default; + }; + + class RpcControllerDefault : public Object, public IRpcController + { + protected: + Ptr objectCallback; + Ptr eventCallback; + Ptr listCallback; + Ptr listEventCallback; + collections::Dictionary eventSuppressedFlags; + collections::Dictionary itemChangedSuppressedFlags; + + template + static void SetSuppressedFlag(collections::Dictionary& flags, const TKey& key, bool suppressed); + + template + static bool GetSuppressedFlag(const collections::Dictionary& flags, const TKey& key); + + public: + + RpcControllerDefault(); + ~RpcControllerDefault(); + + void Register(Ptr objectCallback, Ptr eventCallback, Ptr listCallback, Ptr listEventCallback); + + // IRpcController + + IRpcListOps* GetListOps()override; + IRpcObjectOps* GetObjectOps()override; + IRpcListEventOps* GetListEventOps()override; + IRpcObjectEventOps* GetObjectEventOps()override; + + void Finalize()override; + void SetEventSuppressedFlag(RpcObjectReference ref, vint eventId, bool suppressed)override; + bool GetEventSuppressedFlag(RpcObjectReference ref, vint eventId)override; + void SetItemChangedSuppressedFlag(RpcObjectReference ref, bool suppressed)override; + bool GetItemChangedSuppressedFlag(RpcObjectReference ref)override; + }; + } +} + +#endif + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCJSON.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::RPC + +JSON Helpers: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_RPC_JSON +#define VCZH_WORKFLOW_LIBRARY_RPC_JSON + + +namespace vl +{ + namespace rpc_controller + { + using RpcJsonSerializeCallback = Func(const reflection::description::Value&)>; + using RpcJsonDeserializeCallback = Func)>; + + extern Ptr JsonSerializePredefinedTypes(const reflection::description::Value& value, const RpcJsonSerializeCallback& rpcjson_Serialize); + extern reflection::description::Value JsonDeserializePredefinedTypes(const reflection::description::Value& value, const RpcJsonDeserializeCallback& rpcjson_Deserialize); + } +} + +#endif + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCLIFECYCLE.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::RPC + +Lifecycle: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_RPC_LIFECYCLE +#define VCZH_WORKFLOW_LIBRARY_RPC_LIFECYCLE + + +namespace vl +{ + namespace rpc_controller + { + class IRpcSerializer; + class RpcLifecycleBase; + + class RpcLocalObjectTracker : public Object + { + friend class RpcLifecycleBase; + private: + RpcLifecycleBase* lifecycle = nullptr; + RpcObjectReference ref; + public: + RpcLocalObjectTracker(RpcLifecycleBase* lc, RpcObjectReference r); + ~RpcLocalObjectTracker(); + void Attach(RpcLifecycleBase* lc, RpcObjectReference r); + void Detach(); + RpcObjectReference GetRef() const { return ref; } + vint GetClientId() const { return ref.clientId; } + RpcLifecycleBase* GetLifecycle() const { return lifecycle; } + bool IsTracked() const { return lifecycle != nullptr; } + }; + + class RpcWrapperTracker : public Object + { + friend class RpcLifecycleBase; + private: + RpcLifecycleBase* lifecycle = nullptr; + RpcObjectReference ref; + public: + RpcWrapperTracker(RpcLifecycleBase* lc, RpcObjectReference r); + ~RpcWrapperTracker(); + void Detach(); + RpcObjectReference GetRef() const { return ref; } + RpcLifecycleBase* GetLifecycle() const { return lifecycle; } + }; + + struct RpcLocalObjectProperties : public Object + { + RpcObjectReference ref; + collections::SortedList interestedClients; + reflection::IDescriptable* rawPtr = nullptr; + Ptr ownedPtr; + Ptr eventHandler; + }; + + class RpcLifecycleBase : public Object, public IRpcLifecycle + { + friend class RpcLocalObjectTracker; + friend class RpcWrapperTracker; + public: + using UniversalWrapperFactory = Func(RpcObjectReference, IRpcLifecycle*)>; + private: + struct RpcWrapperProperties + { + reflection::DescriptableObject* root = nullptr; + IRpcWrapperBase* proxy = nullptr; + }; + using LocalProperties = collections::Dictionary>; + using WrapperProperties = collections::Dictionary; + private: + RpcControllerDefault controller; + vint clientId = RpcClientId_Invalid; + vint nextObjectId = RpcObjectId_Invalid; + LocalProperties localObjectProperties; + static WString InternalProperty_LocalObjectTracker; + static WString InternalProperty_WrapperTracker; + UniversalWrapperFactory universalWrapperFactory; + WrapperProperties wrapperProperties; + + void TrackWrapper(reflection::DescriptableObject* root, IRpcWrapperBase* proxy, RpcObjectReference ref); + void UntrackWrapper(RpcObjectReference ref); + bool TryGetTrackedWrapperRef(reflection::DescriptableObject* obj, RpcObjectReference& ref)const; + IRpcWrapperBase* GetTrackedWrapper(RpcObjectReference ref)const; + void TrackLocalObject(RpcObjectReference ref, reflection::IDescriptable* obj); + void UntrackLocalObject(RpcObjectReference ref, bool clearInternalProperty); + void RemoveLocalObject(RpcObjectReference ref, bool clearInternalProperty); + bool IsTracked(vint objectId)const; + Ptr CreateCallerProxy(RpcObjectReference ref, IRpcSerializer* serializer); + void DisconnectWrappersForFinalize(); + protected: + IRpcDispatcher* dispatcher = nullptr; + collections::Dictionary idMap; + Ptr serializer; + + virtual vint DecideTypeId(reflection::IDescriptable* obj)const; + virtual void AttachLocalObjectEvents(RpcObjectReference ref, reflection::IDescriptable* obj) = 0; + public: + RpcLifecycleBase(vint _clientId); + ~RpcLifecycleBase(); + + void SetIdMap(const collections::Dictionary& _idMap); + void RegisterWrapperFactory(UniversalWrapperFactory factory); + void SetSerializer(Ptr _serializer); + IRpcSerializer* GetSerializer() override; + + // IRpcLifecycle + + void Finalize()override; + vint GetClientId()override; + IRpcDispatcher* GetDispatcher()override; + RpcControllerDefault* GetController()override; + void LocalObjectHold(RpcObjectReference ref, vint remoteClientId)override; + void LocalObjectUnhold(RpcObjectReference ref, vint remoteClientId)override; + void RegisterService(const WString& fullName, Ptr service)override; + Ptr RequestService(const WString& fullName)override; + Ptr RefToPtr(RpcObjectReference ref)override; + Ptr RefToPtr(RpcObjectReference ref, IRpcSerializer* serializer); + RpcObjectReference PtrToRef(Ptr obj)override; + }; + } +} + +#endif + + +/*********************************************************************** +.\RPC\WFLIBRARYRPCWRAPPERS.H +***********************************************************************/ +/*********************************************************************** +Vczh Library++ 3.0 +Developer: Zihan Chen(vczh) +Framework::RPC + +Collection Wrappers: +***********************************************************************/ + +#ifndef VCZH_WORKFLOW_LIBRARY_RPC_WRAPPERS +#define VCZH_WORKFLOW_LIBRARY_RPC_WRAPPERS + + +namespace vl +{ + namespace rpc_controller + { + +/*********************************************************************** +* Serialization +***********************************************************************/ + + class IRpcSerializer + : public virtual reflection::IDescriptable + , public reflection::Description + { + public: + virtual reflection::description::Value Serialize(const reflection::description::Value& value) = 0; + virtual reflection::description::Value Deserialize(const reflection::description::Value& value) = 0; + }; + +/*********************************************************************** +* Collection Caller Wrappers +***********************************************************************/ + + class RpcByrefEnumerator : public Object, public reflection::Description, public reflection::description::IValueEnumerator, public virtual IRpcWrapperBase + { + private: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + RpcObjectReference ref; + vint index = -1; + public: + RpcByrefEnumerator(IRpcLifecycle* lc, RpcObjectReference enumeratorRef, IRpcSerializer* _serializer); + ~RpcByrefEnumerator(); + + void DisconnectFromLifecycle()override; + reflection::description::Value GetCurrent()override; + vint GetIndex()override; + bool Next()override; + }; + + class RpcByrefEnumerable : public Object, public reflection::Description, public reflection::description::IValueEnumerable, public virtual IRpcWrapperBase + { + private: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + RpcObjectReference ref; + public: + RpcByrefEnumerable(IRpcLifecycle* lc, RpcObjectReference enumerableRef, IRpcSerializer* _serializer); + ~RpcByrefEnumerable(); + + void DisconnectFromLifecycle()override; + Ptr CreateEnumerator()override; + }; + + class RpcByrefReadonlyList : public Object, public reflection::Description, public virtual reflection::description::IValueReadonlyList, public virtual IRpcWrapperBase + { + protected: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + RpcObjectReference ref; + public: + RpcByrefReadonlyList(IRpcLifecycle* lc, RpcObjectReference listRef, IRpcSerializer* _serializer); + ~RpcByrefReadonlyList(); + + void DisconnectFromLifecycle()override; + Ptr CreateEnumerator()override; + vint GetCount()override; + reflection::description::Value Get(vint index)override; + bool Contains(const reflection::description::Value& value)override; + vint IndexOf(const reflection::description::Value& value)override; + }; + + class RpcByrefList : public RpcByrefReadonlyList, public reflection::Description, public virtual reflection::description::IValueList + { + public: + RpcByrefList(IRpcLifecycle* lc, RpcObjectReference listRef, IRpcSerializer* _serializer); + ~RpcByrefList()override; + + Ptr CreateEnumerator()override; + vint GetCount()override; + reflection::description::Value Get(vint index)override; + bool Contains(const reflection::description::Value& value)override; + vint IndexOf(const reflection::description::Value& value)override; + void Set(vint index, const reflection::description::Value& value)override; + vint Add(const reflection::description::Value& value)override; + vint Insert(vint index, const reflection::description::Value& value)override; + bool Remove(const reflection::description::Value& value)override; + bool RemoveAt(vint index)override; + void Clear()override; + }; + + class RpcByrefArray : public Object, public reflection::Description, public reflection::description::IValueArray, public virtual IRpcWrapperBase + { + private: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + RpcObjectReference ref; + public: + RpcByrefArray(IRpcLifecycle* lc, RpcObjectReference arrayRef, IRpcSerializer* _serializer); + ~RpcByrefArray(); + + void DisconnectFromLifecycle()override; + Ptr CreateEnumerator()override; + vint GetCount()override; + reflection::description::Value Get(vint index)override; + bool Contains(const reflection::description::Value& value)override; + vint IndexOf(const reflection::description::Value& value)override; + void Set(vint index, const reflection::description::Value& value)override; + void Resize(vint size)override; + }; + + class RpcByrefObservableList : public Object, public reflection::Description, public reflection::description::IValueObservableList, public virtual IRpcWrapperBase + { + private: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + RpcObjectReference ref; + public: + RpcByrefObservableList(IRpcLifecycle* lc, RpcObjectReference listRef, IRpcSerializer* _serializer); + ~RpcByrefObservableList(); + + void DisconnectFromLifecycle()override; + Ptr CreateEnumerator()override; + vint GetCount()override; + reflection::description::Value Get(vint index)override; + bool Contains(const reflection::description::Value& value)override; + vint IndexOf(const reflection::description::Value& value)override; + void Set(vint index, const reflection::description::Value& value)override; + vint Add(const reflection::description::Value& value)override; + vint Insert(vint index, const reflection::description::Value& value)override; + bool Remove(const reflection::description::Value& value)override; + bool RemoveAt(vint index)override; + void Clear()override; + }; + + class RpcByrefDictionary : public Object, public reflection::Description, public reflection::description::IValueDictionary, public virtual IRpcWrapperBase + { + private: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + RpcObjectReference ref; + public: + RpcByrefDictionary(IRpcLifecycle* lc, RpcObjectReference dictRef, IRpcSerializer* _serializer); + ~RpcByrefDictionary(); + + void DisconnectFromLifecycle()override; + Ptr GetKeys()override; + Ptr GetValues()override; + vint GetCount()override; + reflection::description::Value Get(const reflection::description::Value& key)override; + void Set(const reflection::description::Value& key, const reflection::description::Value& value)override; + bool Remove(const reflection::description::Value& key)override; + void Clear()override; + }; + +/*********************************************************************** +* Collection Callee Wrappers +***********************************************************************/ + + class RpcCalleeListOps : public Object, public IRpcListOps + { + private: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + + public: + RpcCalleeListOps(IRpcLifecycle* lc, IRpcSerializer* _serializer); + + RpcObjectReference EnumCreate(RpcObjectReference ref)override; + bool EnumNext(RpcObjectReference enumerator)override; + reflection::description::Value EnumGetCurrent(RpcObjectReference enumerator)override; + + vint ListGetCount(RpcObjectReference ref)override; + reflection::description::Value ListGet(RpcObjectReference ref, vint index)override; + void ListSet(RpcObjectReference ref, vint index, const reflection::description::Value& value)override; + vint ListAdd(RpcObjectReference ref, const reflection::description::Value& value)override; + vint ListInsert(RpcObjectReference ref, vint index, const reflection::description::Value& value)override; + bool ListRemoveAt(RpcObjectReference ref, vint index)override; + void ListClear(RpcObjectReference ref)override; + bool ListContains(RpcObjectReference ref, const reflection::description::Value& value)override; + vint ListIndexOf(RpcObjectReference ref, const reflection::description::Value& value)override; + + vint DictGetCount(RpcObjectReference ref)override; + reflection::description::Value DictGet(RpcObjectReference ref, const reflection::description::Value& key)override; + void DictSet(RpcObjectReference ref, const reflection::description::Value& key, const reflection::description::Value& value)override; + bool DictRemove(RpcObjectReference ref, const reflection::description::Value& key)override; + void DictClear(RpcObjectReference ref)override; + bool DictContainsKey(RpcObjectReference ref, const reflection::description::Value& key)override; + RpcObjectReference DictGetKeys(RpcObjectReference ref)override; + RpcObjectReference DictGetValues(RpcObjectReference ref)override; + }; + + class RpcCalleeListEventBridge : public Object, public IRpcListEventOps + { + private: + IRpcLifecycle* lifecycle = nullptr; + IRpcSerializer* serializer = nullptr; + + public: + RpcCalleeListEventBridge(IRpcLifecycle* lc, IRpcSerializer* _serializer); + + reflection::description::Value OnItemChanged(RpcObjectReference ref, vint index, vint oldCount, vint newCount)override; + }; + } +} + +#endif + + /*********************************************************************** .\WFLIBRARYREFLECTION.H ***********************************************************************/ @@ -850,6 +1617,21 @@ Predefined Types #ifndef VCZH_DEBUG_NO_REFLECTION +#define WORKFLOW_LIBRARY_ATTRIBUTE_TYPES(F)\ + F(vl::__vwsn::att_cpp_File)\ + F(vl::__vwsn::att_cpp_UserImpl)\ + F(vl::__vwsn::att_cpp_Private)\ + F(vl::__vwsn::att_cpp_Protected)\ + F(vl::__vwsn::att_cpp_Friend)\ + F(vl::__vwsn::att_rpc_Interface)\ + F(vl::__vwsn::att_rpc_Ctor)\ + F(vl::__vwsn::att_rpc_Byval)\ + F(vl::__vwsn::att_rpc_Byref)\ + F(vl::__vwsn::att_rpc_Cached)\ + F(vl::__vwsn::att_rpc_Dynamic)\ + F(vl::__vwsn::att_rpc_IdString)\ + F(vl::__vwsn::att_rpc_IdNumber)\ + #define WORKFLOW_LIBRARY_TYPES(F)\ F(Sys) \ F(Math) \ @@ -869,6 +1651,27 @@ Predefined Types F(AsyncCoroutine) \ F(StateMachine) \ F(Versioning) \ + F(vl::rpc_controller::RpcObjectReference)\ + F(vl::rpc_controller::RpcException)\ + F(vl::rpc_controller::RpcByvalReturnValue)\ + F(vl::rpc_controller::IRpcSerializer)\ + F(vl::rpc_controller::IRpcListOps)\ + F(vl::rpc_controller::IRpcListEventOps)\ + F(vl::rpc_controller::IRpcObjectOps)\ + F(vl::rpc_controller::IRpcObjectEventOps)\ + F(vl::rpc_controller::IRpcOperations)\ + F(vl::rpc_controller::IRpcDispatcher)\ + F(vl::rpc_controller::IRpcController)\ + F(vl::rpc_controller::IRpcLifecycle)\ + F(vl::rpc_controller::IRpcWrapperBase)\ + F(vl::rpc_controller::RpcByrefEnumerator)\ + F(vl::rpc_controller::RpcByrefEnumerable)\ + F(vl::rpc_controller::RpcByrefReadonlyList)\ + F(vl::rpc_controller::RpcByrefList)\ + F(vl::rpc_controller::RpcByrefArray)\ + F(vl::rpc_controller::RpcByrefObservableList)\ + F(vl::rpc_controller::RpcByrefDictionary)\ + WORKFLOW_LIBRARY_ATTRIBUTE_TYPES(F)\ WORKFLOW_LIBRARY_TYPES(DECL_TYPE_INFO) @@ -883,6 +1686,163 @@ Interface Implementation Proxy (Implement) #pragma warning(push) #pragma warning(disable:4250) + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::rpc_controller::IRpcSerializer) + vl::reflection::description::Value Serialize(const vl::reflection::description::Value& value)override + { + INVOKEGET_INTERFACE_PROXY(Serialize, value); + } + + vl::reflection::description::Value Deserialize(const vl::reflection::description::Value& value)override + { + INVOKEGET_INTERFACE_PROXY(Deserialize, value); + } + END_INTERFACE_PROXY(vl::rpc_controller::IRpcSerializer) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::rpc_controller::IRpcListOps) + vl::rpc_controller::RpcObjectReference EnumCreate(vl::rpc_controller::RpcObjectReference ref)override + { + INVOKEGET_INTERFACE_PROXY(EnumCreate, ref); + } + + bool EnumNext(vl::rpc_controller::RpcObjectReference enumerator)override + { + INVOKEGET_INTERFACE_PROXY(EnumNext, enumerator); + } + + vl::reflection::description::Value EnumGetCurrent(vl::rpc_controller::RpcObjectReference enumerator)override + { + INVOKEGET_INTERFACE_PROXY(EnumGetCurrent, enumerator); + } + + vl::vint ListGetCount(vl::rpc_controller::RpcObjectReference ref)override + { + INVOKEGET_INTERFACE_PROXY(ListGetCount, ref); + } + + vl::reflection::description::Value ListGet(vl::rpc_controller::RpcObjectReference ref, vl::vint index)override + { + INVOKEGET_INTERFACE_PROXY(ListGet, ref, index); + } + + void ListSet(vl::rpc_controller::RpcObjectReference ref, vl::vint index, const vl::reflection::description::Value& value)override + { + INVOKE_INTERFACE_PROXY(ListSet, ref, index, value); + } + + vl::vint ListAdd(vl::rpc_controller::RpcObjectReference ref, const vl::reflection::description::Value& value)override + { + INVOKEGET_INTERFACE_PROXY(ListAdd, ref, value); + } + + vl::vint ListInsert(vl::rpc_controller::RpcObjectReference ref, vl::vint index, const vl::reflection::description::Value& value)override + { + INVOKEGET_INTERFACE_PROXY(ListInsert, ref, index, value); + } + + bool ListRemoveAt(vl::rpc_controller::RpcObjectReference ref, vl::vint index)override + { + INVOKEGET_INTERFACE_PROXY(ListRemoveAt, ref, index); + } + + void ListClear(vl::rpc_controller::RpcObjectReference ref)override + { + INVOKE_INTERFACE_PROXY(ListClear, ref); + } + + bool ListContains(vl::rpc_controller::RpcObjectReference ref, const vl::reflection::description::Value& value)override + { + INVOKEGET_INTERFACE_PROXY(ListContains, ref, value); + } + + vl::vint ListIndexOf(vl::rpc_controller::RpcObjectReference ref, const vl::reflection::description::Value& value)override + { + INVOKEGET_INTERFACE_PROXY(ListIndexOf, ref, value); + } + + vl::vint DictGetCount(vl::rpc_controller::RpcObjectReference ref)override + { + INVOKEGET_INTERFACE_PROXY(DictGetCount, ref); + } + + vl::reflection::description::Value DictGet(vl::rpc_controller::RpcObjectReference ref, const vl::reflection::description::Value& key)override + { + INVOKEGET_INTERFACE_PROXY(DictGet, ref, key); + } + + void DictSet(vl::rpc_controller::RpcObjectReference ref, const vl::reflection::description::Value& key, const vl::reflection::description::Value& value)override + { + INVOKE_INTERFACE_PROXY(DictSet, ref, key, value); + } + + bool DictRemove(vl::rpc_controller::RpcObjectReference ref, const vl::reflection::description::Value& key)override + { + INVOKEGET_INTERFACE_PROXY(DictRemove, ref, key); + } + + void DictClear(vl::rpc_controller::RpcObjectReference ref)override + { + INVOKE_INTERFACE_PROXY(DictClear, ref); + } + + bool DictContainsKey(vl::rpc_controller::RpcObjectReference ref, const vl::reflection::description::Value& key)override + { + INVOKEGET_INTERFACE_PROXY(DictContainsKey, ref, key); + } + + vl::rpc_controller::RpcObjectReference DictGetKeys(vl::rpc_controller::RpcObjectReference ref)override + { + INVOKEGET_INTERFACE_PROXY(DictGetKeys, ref); + } + + vl::rpc_controller::RpcObjectReference DictGetValues(vl::rpc_controller::RpcObjectReference ref)override + { + INVOKEGET_INTERFACE_PROXY(DictGetValues, ref); + } + END_INTERFACE_PROXY(vl::rpc_controller::IRpcListOps) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::rpc_controller::IRpcObjectOps) + vl::reflection::description::Value InvokeMethod(vl::rpc_controller::RpcObjectReference ref, vl::vint methodId, vl::Ptr arguments)override + { + INVOKEGET_INTERFACE_PROXY(InvokeMethod, ref, methodId, arguments); + } + + void EndInvokeMethod(vl::vint slot)override + { + INVOKE_INTERFACE_PROXY(EndInvokeMethod, slot); + } + + void ObjectHold(vl::rpc_controller::RpcObjectReference ref, vl::vint remoteClientId, bool hold)override + { + INVOKE_INTERFACE_PROXY(ObjectHold, ref, remoteClientId, hold); + } + + void RegisterService(vl::vint typeId, vl::Ptr service)override + { + INVOKE_INTERFACE_PROXY(RegisterService, typeId, service); + } + END_INTERFACE_PROXY(vl::rpc_controller::IRpcObjectOps) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::rpc_controller::IRpcListEventOps) + vl::reflection::description::Value OnItemChanged(vl::rpc_controller::RpcObjectReference ref, vl::vint index, vl::vint oldCount, vl::vint newCount)override + { + INVOKEGET_INTERFACE_PROXY(OnItemChanged, ref, index, oldCount, newCount); + } + END_INTERFACE_PROXY(vl::rpc_controller::IRpcListEventOps) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::rpc_controller::IRpcObjectEventOps) + vl::reflection::description::Value InvokeEvent(vl::rpc_controller::RpcObjectReference ref, vl::vint eventId, vl::Ptr arguments)override + { + INVOKEGET_INTERFACE_PROXY(InvokeEvent, ref, eventId, arguments); + } + END_INTERFACE_PROXY(vl::rpc_controller::IRpcObjectEventOps) + + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(vl::rpc_controller::IRpcWrapperBase) + void DisconnectFromLifecycle()override + { + INVOKE_INTERFACE_PROXY_NOPARAMS(DisconnectFromLifecycle); + } + END_INTERFACE_PROXY(vl::rpc_controller::IRpcWrapperBase) + BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(ICoroutine) void Resume(bool raiseException, Ptr output)override diff --git a/Import/VlppWorkflowRuntime.cpp b/Import/VlppWorkflowRuntime.cpp index ef119b2b..267ddcf4 100644 --- a/Import/VlppWorkflowRuntime.cpp +++ b/Import/VlppWorkflowRuntime.cpp @@ -53,7 +53,7 @@ WfRuntimeCallStackInfo { if (!cache) { - if (!context) + if (context) { Dictionary map; for (auto [name, index] : indexed(names)) @@ -1446,6 +1446,77 @@ Serialization (TypeImpl) //---------------------------------------------------- + static void IOAttributeBag(WfReader& reader, TypeDescriptorImplBase* td, IMemberInfo* memberInfo) + { + vint attCount = 0; + reader << attCount; + for (vint i = 0; i < attCount; i++) + { + WString attTypeName; + reader << attTypeName; + auto attTd = GetTypeDescriptor(attTypeName); + auto attInfo = Ptr(new AttributeInfoImpl(attTd)); + + vint valueCount = 0; + reader << valueCount; + for (vint j = 0; j < valueCount; j++) + { + WString valueTypeName; + WString serializedData; + reader << valueTypeName << serializedData; + auto valueTd = GetTypeDescriptor(valueTypeName); + Value value; + if (auto serializableType = valueTd->GetSerializableType()) + { + serializableType->Deserialize(serializedData, value); + value = Value::From(value.GetBoxedValue(), valueTd); + } + else + { + auto rawTd = GetTypeDescriptor(serializedData); + value = BoxValue(rawTd); + } + attInfo->AddValue(valueTd, value); + } + + td->RegisterAttribute(memberInfo, attInfo); + } + } + + static void IOAttributeBag(WfWriter& writer, IAttributeBag* bag) + { + vint attCount = bag->GetAttributeCount(); + writer << attCount; + for (vint i = 0; i < attCount; i++) + { + auto attInfo = bag->GetAttribute(i); + WString attTypeName = attInfo->GetAttributeType()->GetTypeName(); + writer << attTypeName; + + vint valueCount = attInfo->GetAttributeValueCount(); + writer << valueCount; + for (vint j = 0; j < valueCount; j++) + { + auto valueTd = attInfo->GetAttributeValueType(j); + auto value = attInfo->GetAttributeValue(j); + WString valueTypeName = valueTd->GetTypeName(); + WString serializedData; + if (auto serializableType = valueTd->GetSerializableType()) + { + serializableType->Serialize(value, serializedData); + } + else + { + auto rawTd = UnboxValue(value); + if (rawTd) serializedData = rawTd->GetTypeName(); + } + writer << valueTypeName << serializedData; + } + } + } + + //---------------------------------------------------- + static void IOMethodBase(WfReader& reader, WfMethodBase* info) { Ptr type; @@ -1676,6 +1747,43 @@ Serialization (TypeImpl) td->AddMember(info); } } + + // attributes + { + // type-level attributes + IOAttributeBag(reader, td, nullptr); + + // constructor attributes + if (auto group = td->GetConstructorGroup()) + { + for (vint i = 0; i < group->GetMethodCount(); i++) + { + IOAttributeBag(reader, td, group->GetMethod(i)); + } + } + + // method attributes + for (vint i = 0; i < td->GetMethodGroupCount(); i++) + { + auto group = td->GetMethodGroup(i); + for (vint j = 0; j < group->GetMethodCount(); j++) + { + IOAttributeBag(reader, td, group->GetMethod(j)); + } + } + + // event attributes + for (vint i = 0; i < td->GetEventCount(); i++) + { + IOAttributeBag(reader, td, td->GetEvent(i)); + } + + // property attributes + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + IOAttributeBag(reader, td, td->GetProperty(i)); + } + } } static void IOCustomType(WfWriter& writer, WfCustomType* td, bool isClass) @@ -1790,6 +1898,43 @@ Serialization (TypeImpl) IOType(writer, propInfo->GetReturn()); } } + + // attributes + { + // type-level attributes + IOAttributeBag(writer, td); + + // constructor attributes + if (auto group = td->GetConstructorGroup()) + { + for (vint i = 0; i < group->GetMethodCount(); i++) + { + IOAttributeBag(writer, group->GetMethod(i)); + } + } + + // method attributes + for (vint i = 0; i < td->GetMethodGroupCount(); i++) + { + auto group = td->GetMethodGroup(i); + for (vint j = 0; j < group->GetMethodCount(); j++) + { + IOAttributeBag(writer, group->GetMethod(j)); + } + } + + // event attributes + for (vint i = 0; i < td->GetEventCount(); i++) + { + IOAttributeBag(writer, td->GetEvent(i)); + } + + // property attributes + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + IOAttributeBag(writer, td->GetProperty(i)); + } + } } //---------------------------------------------------- @@ -1837,6 +1982,18 @@ Serialization (TypeImpl) field->SetReturn(typeInfo); td->AddMember(field); } + + // attributes + { + // type-level attributes + IOAttributeBag(reader, td, nullptr); + + // field attributes + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + IOAttributeBag(reader, td, td->GetProperty(i)); + } + } } static void IOStruct(WfWriter& writer, WfStruct* td) @@ -1854,6 +2011,18 @@ Serialization (TypeImpl) ITypeInfo* typeInfo = prop->GetReturn(); IOType(writer, typeInfo); } + + // attributes + { + // type-level attributes + IOAttributeBag(writer, td); + + // field attributes + for (vint i = 0; i < td->GetPropertyCount(); i++) + { + IOAttributeBag(writer, td->GetProperty(i)); + } + } } //---------------------------------------------------- @@ -2481,6 +2650,15 @@ WfRuntimeLambda WfRuntimeInterfaceInstance ***********************************************************************/ + WfRuntimeInterfaceInstance::~WfRuntimeInterfaceInstance() + { + if (destructorFunctionIndex != -1) + { + auto arguments = IValueList::Create(); + WfRuntimeLambda::Invoke(Ptr(globalContext), capturedVariables, destructorFunctionIndex, arguments); + } + } + Value WfRuntimeInterfaceInstance::Invoke(IMethodInfo* methodInfo, Ptr arguments) { vint index = functions.Keys().IndexOf(methodInfo); @@ -3866,9 +4044,16 @@ WfRuntimeThreadContext { CONTEXT_ACTION(PopValue(value), L"failed to pop a value from the stack."); CONTEXT_ACTION(PopValue(key), L"failed to pop a value from the stack."); - auto name = UnboxValue(key); - auto func = UnboxValue(value); - proxy->functions.Add(name, func); + if (key.IsNull()) + { + proxy->destructorFunctionIndex = UnboxValue(value); + } + else + { + auto name = UnboxValue(key); + auto func = UnboxValue(value); + proxy->functions.Add(name, func); + } } CONTEXT_ACTION(PopValue(operand), L"failed to pop a value from the stack."); diff --git a/Import/VlppWorkflowRuntime.h b/Import/VlppWorkflowRuntime.h index 4174804e..def06ac1 100644 --- a/Import/VlppWorkflowRuntime.h +++ b/Import/VlppWorkflowRuntime.h @@ -1089,7 +1089,9 @@ InterfaceInstance WfRuntimeGlobalContext* globalContext = nullptr; Ptr capturedVariables; FunctionMap functions; + vint destructorFunctionIndex = -1; + ~WfRuntimeInterfaceInstance(); Value Invoke(IMethodInfo* methodInfo, Ptr arguments)override; }; } diff --git a/Tools/Executables/GlrParserGen/Main.cpp b/Tools/Executables/GlrParserGen/Main.cpp index ac2024bd..35dee30e 100644 --- a/Tools/Executables/GlrParserGen/Main.cpp +++ b/Tools/Executables/GlrParserGen/Main.cpp @@ -380,6 +380,7 @@ int main(int argc, char* argv[]) { files.Remove(astOutput->jsonH); files.Remove(astOutput->jsonCpp); + files.Remove(astOutput->jsonDts); } else if (utility == L"Builder") { diff --git a/Tools/Reflection32.bin b/Tools/Reflection32.bin index d81b244fb131dd51592ba3e2a6c0eb69898cf25a..382f6b4fc2f0c676a0a32f8e49af6526bfddff70 100644 GIT binary patch literal 1042664 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

>PtKsE+BX>01D^Fh9ink-Uqr{*#9(Gbd7i$ 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

nt(KpUtbgA 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 delta 114412 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 YpDenbb2uy3xZ{jJsS`5f9kmAk1Ns~4fdBvi diff --git a/Tutorial/Console_Workflow/W05_StaticRun/W05_StaticRun.vcxproj b/Tutorial/Console_Workflow/W05_StaticRun/W05_StaticRun.vcxproj index 9da9f8e9..6bc44084 100644 --- a/Tutorial/Console_Workflow/W05_StaticRun/W05_StaticRun.vcxproj +++ b/Tutorial/Console_Workflow/W05_StaticRun/W05_StaticRun.vcxproj @@ -156,6 +156,7 @@ + @@ -179,6 +180,12 @@ true + + /bigobj %(AdditionalOptions) + /bigobj %(AdditionalOptions) + /bigobj %(AdditionalOptions) + /bigobj %(AdditionalOptions) + /bigobj %(AdditionalOptions) /bigobj %(AdditionalOptions) @@ -218,4 +225,4 @@ - \ No newline at end of file + diff --git a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp index 3b7f573f..e3e20bd7 100644 --- a/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_ControlTemplate/BlackSkin/UI/FullControlTest/Source/DemoReflection.cpp @@ -154,51 +154,85 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::AnimationTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::AnimationTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::AnimationTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::AnimationTabPage*(), NO_PARAMETER) CLASS_MEMBER_STATIC_METHOD(BallAnimation, { L"container" _ L"ball" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_STATIC_METHOD(BallAnimationWithDelay, { L"container" _ L"ball" _ L"delay" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(PerformGradientAnimation, { L"target" }) CLASS_MEMBER_STATIC_METHOD(WaitingAnimation, { L"container" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(counter) CLASS_MEMBER_FIELD(gradientColorDef) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(lastGradientAnimation) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::AnimationTabPage) BEGIN_CLASS_MEMBER(::demo::AnimationTabPageConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::AnimationTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_AnimationTabPage_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_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(animationBackground) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(buttonStartAnimation) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::AnimationTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::CategoryDisplayer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryDisplayerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::CategoryDisplayerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryDisplayer*(), NO_PARAMETER) @@ -206,6 +240,7 @@ namespace vl CLASS_MEMBER_METHOD(SetCategory, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(CategoryChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Category) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Category, GetCategory, SetCategory, CategoryChanged) END_CLASS_MEMBER(::demo::CategoryDisplayer) @@ -213,17 +248,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryDisplayerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryDisplayer_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(::demo::CategoryDisplayerConstructor) BEGIN_CLASS_MEMBER(::demo::CategoryEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::CategoryEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryEditor*(), NO_PARAMETER) @@ -234,18 +279,25 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryEditor_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(comboBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::CategoryEditorConstructor) BEGIN_CLASS_MEMBER(::demo::CategoryItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::CategoryItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryItemTemplate*(::demo::MyCategory), { L"__vwsn_ctor_parameter_SelectedCategory" }) CLASS_MEMBER_METHOD(GetSelectedCategory, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_SelectedCategory) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(SelectedCategory, GetSelectedCategory) END_CLASS_MEMBER(::demo::CategoryItemTemplate) @@ -253,13 +305,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryItemTemplate_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(SelectedCategory) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::CategoryItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::CategoryVisualizer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryVisualizerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridVisualizerTemplate) CLASS_MEMBER_BASE(::demo::CategoryVisualizerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryVisualizer*(), NO_PARAMETER) @@ -269,9 +327,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryVisualizerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryVisualizer_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(::demo::CategoryVisualizerConstructor) BEGIN_CLASS_MEMBER(::demo::ColorAnimation) @@ -291,10 +353,15 @@ namespace vl CLASS_MEMBER_EVENT(CurrentChanged) CLASS_MEMBER_EVENT(EndChanged) CLASS_MEMBER_FIELD(__vwsn_ani_int_) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_ani_int_Thickness) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Begin) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Current) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_End) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Begin, GetBegin, SetBegin, BeginChanged) CLASS_MEMBER_PROPERTY_EVENT(Current, GetCurrent, SetCurrent, CurrentChanged) CLASS_MEMBER_PROPERTY_EVENT(End, GetEnd, SetEnd, EndChanged) @@ -319,9 +386,13 @@ namespace vl CLASS_MEMBER_EVENT(ThicknessChanged) CLASS_MEMBER_EVENT(TopChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Bottom) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Shadow) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Thickness) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Top) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Bottom, GetBottom, SetBottom, BottomChanged) CLASS_MEMBER_PROPERTY_EVENT(Shadow, GetShadow, SetShadow, ShadowChanged) CLASS_MEMBER_PROPERTY_EVENT(Thickness, GetThickness, SetThickness, ThicknessChanged) @@ -329,6 +400,7 @@ namespace vl END_CLASS_MEMBER(::demo::ColorDef) BEGIN_CLASS_MEMBER(::demo::DataGridTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DataGridTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::DataGridTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DataGridTabPage*(), NO_PARAMETER) @@ -340,36 +412,65 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DataGridTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DataGridTabPage_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_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(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dataGrid) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dateFilter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DataGridTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::DateEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DateEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::DateEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DateEditor*(), NO_PARAMETER) @@ -379,43 +480,66 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DateEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DateEditor_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(comboBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DateEditorConstructor) BEGIN_CLASS_MEMBER(::demo::DateFilter) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DateFilterConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::DateFilterConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DateFilter*(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_METHOD(GetFilter, NO_PARAMETER) CLASS_MEMBER_METHOD(SetFilter, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(UpdateFilter, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Filter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(Filter, GetFilter) CLASS_MEMBER_FIELD(callback) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::DateFilter) BEGIN_CLASS_MEMBER(::demo::DateFilterConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DateFilterConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DateFilter_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(checkFrom) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkTo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dateFrom) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dateTo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DateFilterConstructor) BEGIN_CLASS_MEMBER(::demo::DatePickerTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DatePickerTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::DatePickerTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DatePickerTabPage*(), NO_PARAMETER) @@ -425,30 +549,55 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DatePickerTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DatePickerTabPage_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_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(dc1) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dc2) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dp1) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dp2) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DatePickerTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::DialogStringsInjection) @@ -458,6 +607,7 @@ namespace vl END_CLASS_MEMBER(::demo::DialogStringsInjection) BEGIN_CLASS_MEMBER(::demo::DocumentBoxSubTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DocumentBoxSubTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::DocumentBoxSubTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DocumentBoxSubTabPage*(), NO_PARAMETER) @@ -465,6 +615,7 @@ namespace vl CLASS_MEMBER_METHOD(SetTextBoxAcceptTabInput, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(TextBoxAcceptTabInputChanged) CLASS_MEMBER_FIELD(__vwsn_prop_TextBoxAcceptTabInput) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(TextBoxAcceptTabInput, GetTextBoxAcceptTabInput, SetTextBoxAcceptTabInput, TextBoxAcceptTabInputChanged) END_CLASS_MEMBER(::demo::DocumentBoxSubTabPage) @@ -472,20 +623,34 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DocumentBoxSubTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DocumentBoxSubTabPage_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(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DocumentBoxSubTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::DocumentEditorBase) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"DocumentEditorBase")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DocumentEditorBaseConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::DocumentEditorBaseConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DocumentEditorBase*(), NO_PARAMETER) @@ -495,26 +660,42 @@ namespace vl CLASS_MEMBER_METHOD(GetHasEditableSelection, NO_PARAMETER) CLASS_MEMBER_METHOD(GetHasEditableSelectionInSingleParagraph, NO_PARAMETER) CLASS_MEMBER_METHOD(GetMenuContainer, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(GetToolstripContainer, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(HasEditableCursor, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(HasEditableHyperlink, { L"forEdit" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(LoadAsPrivateFormat, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveAsHTML, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveAsPrivateFormat, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveAsRTF, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveDocument, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SelectAlignmentCommand, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(SetAlignment, { L"alignment" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetEditMode, { L"editMode" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetEditModeCommand, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(SetHasEditableSelection, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetHasEditableSelectionInSingleParagraph, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(EditModeCommandChanged) CLASS_MEMBER_EVENT(HasEditableSelectionChanged) CLASS_MEMBER_EVENT(HasEditableSelectionInSingleParagraphChanged) CLASS_MEMBER_FIELD(__vwsn_prop_EditModeCommand) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_HasEditableSelection) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_HasEditableSelectionInSingleParagraph) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT_READONLY(EditModeCommand, GetEditModeCommand, EditModeCommandChanged) CLASS_MEMBER_PROPERTY_EVENT(HasEditableSelection, GetHasEditableSelection, SetHasEditableSelection, HasEditableSelectionChanged) CLASS_MEMBER_PROPERTY_EVENT(HasEditableSelectionInSingleParagraph, GetHasEditableSelectionInSingleParagraph, SetHasEditableSelectionInSingleParagraph, HasEditableSelectionInSingleParagraphChanged) @@ -526,63 +707,111 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DocumentEditorBaseConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DocumentEditorBase_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(commandAlignCenter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandAlignDefault) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandAlignLeft) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandAlignRight) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandBackColor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandBold) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandColor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandCopy) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandCut) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandDelete) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandEditHyperlink) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandEditable) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandFont) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandInsertImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandItalic) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandLoadPrivate) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandPaste) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandRedo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandRemoveHyperlink) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSaveHtml) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSavePrivate) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSaveRtf) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSelect) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSelectable) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandStrike) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandUnderline) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandUndo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandViewOnly) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogColor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogFont) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogMessage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogNotImpl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogOpen) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogOpenDoc) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogQueryClose) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogSaveDoc) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogSaveDocPrivate) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(document) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(menuContainer) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(toolstripContainer) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DocumentEditorBaseConstructor) BEGIN_CLASS_MEMBER(::demo::DocumentEditorRibbon) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DocumentEditorRibbonConstructor"))) CLASS_MEMBER_BASE(::demo::DocumentEditorBase) CLASS_MEMBER_BASE(::demo::DocumentEditorRibbonConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DocumentEditorRibbon*(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_METHOD(GenerateStyleGroups, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(GetAlignCenterSelected, NO_PARAMETER) CLASS_MEMBER_METHOD(GetAlignLeftSelected, NO_PARAMETER) CLASS_MEMBER_METHOD(GetAlignRightSelected, NO_PARAMETER) CLASS_MEMBER_METHOD(GetStyleGroups, NO_PARAMETER) CLASS_MEMBER_METHOD(SelectStyleName, { L"styleName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetAlignCenterSelected, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetAlignLeftSelected, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetAlignRightSelected, { L"__vwsn_value_" }) @@ -592,9 +821,13 @@ namespace vl CLASS_MEMBER_EVENT(AlignRightSelectedChanged) CLASS_MEMBER_EVENT(StyleGroupsChanged) CLASS_MEMBER_FIELD(__vwsn_prop_AlignCenterSelected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_AlignLeftSelected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_AlignRightSelected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_StyleGroups) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(AlignCenterSelected, GetAlignCenterSelected, SetAlignCenterSelected, AlignCenterSelectedChanged) CLASS_MEMBER_PROPERTY_EVENT(AlignLeftSelected, GetAlignLeftSelected, SetAlignLeftSelected, AlignLeftSelectedChanged) CLASS_MEMBER_PROPERTY_EVENT(AlignRightSelected, GetAlignRightSelected, SetAlignRightSelected, AlignRightSelectedChanged) @@ -605,110 +838,213 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DocumentEditorRibbonConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DocumentEditorRibbon_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_74) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_75) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_76) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_77) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_78) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_79) + 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_80) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_81) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_82) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_83) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_84) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_85) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_86) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_87) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_88) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_89) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_9) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_90) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_91) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_92) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_93) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_94) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_95) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(buttonHome) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogMessage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(styleGallery) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(toolstripHome) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DocumentEditorRibbonConstructor) BEGIN_CLASS_MEMBER(::demo::DocumentEditorToolstrip) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DocumentEditorToolstripConstructor"))) CLASS_MEMBER_BASE(::demo::DocumentEditorBase) CLASS_MEMBER_BASE(::demo::DocumentEditorToolstripConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DocumentEditorToolstrip*(), NO_PARAMETER) @@ -718,87 +1054,167 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DocumentEditorToolstripConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DocumentEditorToolstrip_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_74) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_75) + 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(buttonAlignment) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DocumentEditorToolstripConstructor) BEGIN_CLASS_MEMBER(::demo::ElementTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ElementTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::ElementTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ElementTabPage*(), NO_PARAMETER) @@ -808,65 +1224,123 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ElementTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ElementTabPage_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + 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(::demo::ElementTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::EmbeddedControlsSubTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::EmbeddedControlsSubTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::EmbeddedControlsSubTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::EmbeddedControlsSubTabPage*(), NO_PARAMETER) @@ -876,139 +1350,259 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EmbeddedControlsSubTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_EmbeddedControlsSubTabPage_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_74) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_75) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_76) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_77) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_78) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_79) + 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_80) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_81) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_82) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_83) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_84) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_9) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboRun) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogStart) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(docViewer) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::EmbeddedControlsSubTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::EnglishNumbersController) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::EnglishNumbersControllerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::EnglishNumbersControllerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::EnglishNumbersController*(), NO_PARAMETER) CLASS_MEMBER_METHOD(GetItemsToBind, NO_PARAMETER) CLASS_MEMBER_METHOD(NumberToText, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(NumberToText_0to999, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(NumberToText_1To99, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetItemsToBind, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(ToText_11to19, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(ToText_1to9, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_ItemsToBind) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ItemsToBind, GetItemsToBind) CLASS_MEMBER_FIELD(counter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::EnglishNumbersController) BEGIN_CLASS_MEMBER(::demo::EnglishNumbersControllerConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EnglishNumbersControllerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_EnglishNumbersController_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_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(::demo::EnglishNumbersControllerConstructor) BEGIN_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::EnglishNumbersControllerTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::EnglishNumbersControllerTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::EnglishNumbersControllerTabPage*(), NO_PARAMETER) @@ -1016,9 +1610,13 @@ namespace vl CLASS_MEMBER_METHOD(GetContentComposition, NO_PARAMETER) CLASS_MEMBER_METHOD(GetItemsToBind, NO_PARAMETER) CLASS_MEMBER_METHOD(SetContentComposition, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(SetItemsToBind, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_prop_ContentComposition) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_ItemsToBind) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ContentComposition, GetContentComposition) CLASS_MEMBER_PROPERTY_READONLY(ItemsToBind, GetItemsToBind) END_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPage) @@ -1027,15 +1625,23 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EnglishNumbersControllerTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_EnglishNumbersControllerTabPage_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(content) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(controller) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::GenderDisplayer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderDisplayerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::GenderDisplayerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderDisplayer*(), NO_PARAMETER) @@ -1043,6 +1649,7 @@ namespace vl CLASS_MEMBER_METHOD(SetGender, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(GenderChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Gender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Gender, GetGender, SetGender, GenderChanged) END_CLASS_MEMBER(::demo::GenderDisplayer) @@ -1050,12 +1657,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderDisplayerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderDisplayer_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(::demo::GenderDisplayerConstructor) BEGIN_CLASS_MEMBER(::demo::GenderEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::GenderEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderEditor*(), NO_PARAMETER) @@ -1066,18 +1678,25 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderEditor_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(comboBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::GenderEditorConstructor) BEGIN_CLASS_MEMBER(::demo::GenderItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::GenderItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderItemTemplate*(::demo::MyGender), { L"__vwsn_ctor_parameter_SelectedGender" }) CLASS_MEMBER_METHOD(GetSelectedGender, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_SelectedGender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(SelectedGender, GetSelectedGender) END_CLASS_MEMBER(::demo::GenderItemTemplate) @@ -1085,13 +1704,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderItemTemplate_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(SelectedGender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::GenderItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::GenderVisualizer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderVisualizerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridVisualizerTemplate) CLASS_MEMBER_BASE(::demo::GenderVisualizerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderVisualizer*(), NO_PARAMETER) @@ -1101,12 +1726,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderVisualizerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderVisualizer_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(::demo::GenderVisualizerConstructor) BEGIN_CLASS_MEMBER(::demo::HyperlinkWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::HyperlinkWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::HyperlinkWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::HyperlinkWindow*(), NO_PARAMETER) @@ -1114,6 +1744,7 @@ namespace vl CLASS_MEMBER_METHOD(SetUrl, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(UrlChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Url) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Url, GetUrl, SetUrl, UrlChanged) END_CLASS_MEMBER(::demo::HyperlinkWindow) @@ -1121,22 +1752,39 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::HyperlinkWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_HyperlinkWindow_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(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textUrl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::HyperlinkWindowConstructor) BEGIN_INTERFACE_MEMBER(::demo::IStringResourceStrings) @@ -1156,6 +1804,7 @@ namespace vl END_INTERFACE_MEMBER(::demo::IStringResourceStrings) BEGIN_CLASS_MEMBER(::demo::ListViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ListViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::ListViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ListViewTabPage*(), NO_PARAMETER) @@ -1167,38 +1816,69 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ListViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ListViewTabPage_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_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(bindableListView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(listView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ListViewTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocaleSelector) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocaleSelectorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::LocaleSelectorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocaleSelector*(), NO_PARAMETER) @@ -1209,15 +1889,23 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocaleSelectorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocaleSelector_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(comboLocales) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(listLocales) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocaleSelectorConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedColorDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedColorDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedColorDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedColorDialogTabPage*(), NO_PARAMETER) @@ -1227,16 +1915,25 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedColorDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedColorDialogTabPage_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(background) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialog) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedColorDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedDialogsTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedDialogsTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedDialogsTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedDialogsTabPage*(), NO_PARAMETER) @@ -1246,23 +1943,39 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedDialogsTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedDialogsTabPage_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(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedDialogsTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedFileDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedFileDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedFileDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedFileDialogTabPage*(), NO_PARAMETER) @@ -1273,76 +1986,145 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedFileDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedFileDialogTabPage_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + 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(chkFileDialogAddToRecent) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogAllowMultipleSelection) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogDereferenceLinks) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogDirectoryMustExist) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogFileMustExist) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogPromptCreateFile) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogPromptOverwriteFile) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogShowNetworkButton) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogShowReadOnlyCheckBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogOpen) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogSave) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(lstFiles) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtDefaultExtension) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtDirectory) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtFileName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtFilter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtFilterIndex) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtTitle) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedFileDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedFontDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedFontDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedFontDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedFontDialogTabPage*(), NO_PARAMETER) @@ -1352,18 +2134,29 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedFontDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedFontDialogTabPage_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(checkEffect) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialog) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(label) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedFontDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedMessageDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedMessageDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedMessageDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedMessageDialogTabPage*(), NO_PARAMETER) @@ -1382,46 +2175,85 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedMessageDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedMessageDialogTabPage_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_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(comboDefaultButton) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboInput) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialog) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(lblOutput) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtText) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtTitle) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedMessageDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedStringsTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedStringsTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedStringsTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedStringsTabPage*(), NO_PARAMETER) @@ -1429,6 +2261,7 @@ namespace vl CLASS_MEMBER_METHOD(SetStrings, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(StringsChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Strings) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Strings, GetStrings, SetStrings, StringsChanged) CLASS_MEMBER_FIELD(currency) CLASS_MEMBER_FIELD(dateTime) @@ -1439,31 +2272,56 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedStringsTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedStringsTabPage_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_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(::demo::LocalizedStringsTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -1474,87 +2332,169 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + 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(checkBorder) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkFrame) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkMax) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkMin) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkSizeBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkTitle) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogGlobalShortcut) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogLocalShortcut) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(editorRibbon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(editorToolstrip) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_ENUM_ITEM(::demo::MyCategory) @@ -1584,12 +2524,19 @@ namespace vl CLASS_MEMBER_METHOD(SetSmallImage, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetWebsite, { L"__vwsn_value_" }) CLASS_MEMBER_FIELD(__vwsn_prop_Birthday) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Category) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Gender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_LargeImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Name) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_SmallImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Website) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY(Birthday, GetBirthday, SetBirthday) CLASS_MEMBER_PROPERTY(Category, GetCategory, SetCategory) CLASS_MEMBER_PROPERTY(Gender, GetGender, SetGender) @@ -1612,12 +2559,15 @@ namespace vl CLASS_MEMBER_METHOD(SetChecked, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetName, { L"__vwsn_value_" }) CLASS_MEMBER_FIELD(__vwsn_prop_Checked) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Name) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY(Checked, GetChecked, SetChecked) CLASS_MEMBER_PROPERTY(Name, GetName, SetName) END_CLASS_MEMBER(::demo::MyTextItem) BEGIN_CLASS_MEMBER(::demo::RefreshBindableDataGridTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RefreshBindableDataGridTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RefreshBindableDataGridTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RefreshBindableDataGridTabPage*(), NO_PARAMETER) @@ -1629,39 +2579,71 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RefreshBindableDataGridTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RefreshBindableDataGridTabPage_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_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(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dataGrid) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RefreshBindableDataGridTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::RefreshBindableListViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RefreshBindableListViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RefreshBindableListViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RefreshBindableListViewTabPage*(), NO_PARAMETER) @@ -1673,38 +2655,69 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RefreshBindableListViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RefreshBindableListViewTabPage_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_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(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(listView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RefreshBindableListViewTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::RefreshBindableTextListTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RefreshBindableTextListTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RefreshBindableTextListTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RefreshBindableTextListTabPage*(), NO_PARAMETER) @@ -1715,24 +2728,41 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RefreshBindableTextListTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RefreshBindableTextListTabPage_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(buttonRead) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RefreshBindableTextListTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::RefreshBindableTreeViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RefreshBindableTreeViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RefreshBindableTreeViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RefreshBindableTreeViewTabPage*(), NO_PARAMETER) @@ -1744,19 +2774,33 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RefreshBindableTreeViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RefreshBindableTreeViewTabPage_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_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) CLASS_MEMBER_FIELD(treeView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RefreshBindableTreeViewTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::RefreshItem) @@ -1774,6 +2818,7 @@ namespace vl CLASS_MEMBER_METHOD(GetSub3, NO_PARAMETER) CLASS_MEMBER_METHOD(GetTitle, NO_PARAMETER) CLASS_MEMBER_METHOD(SetChildren, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(SetDoNotUse, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetLargeImage, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetName, { L"__vwsn_value_" }) @@ -1784,15 +2829,25 @@ namespace vl CLASS_MEMBER_METHOD(SetSub3, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetTitle, { L"__vwsn_value_" }) CLASS_MEMBER_FIELD(__vwsn_prop_Children) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_DoNotUse) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_LargeImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Name) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Selected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_SmallImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Sub1) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Sub2) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Sub3) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Title) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(Children, GetChildren) CLASS_MEMBER_PROPERTY(DoNotUse, GetDoNotUse, SetDoNotUse) CLASS_MEMBER_PROPERTY(LargeImage, GetLargeImage, SetLargeImage) @@ -1806,6 +2861,7 @@ namespace vl END_CLASS_MEMBER(::demo::RefreshItem) BEGIN_CLASS_MEMBER(::demo::RefreshListViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RefreshListViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RefreshListViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RefreshListViewTabPage*(), NO_PARAMETER) @@ -1815,40 +2871,73 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RefreshListViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RefreshListViewTabPage_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_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(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(listView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RefreshListViewTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::RefreshTextListTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RefreshTextListTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RefreshTextListTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RefreshTextListTabPage*(), NO_PARAMETER) @@ -1858,26 +2947,45 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RefreshTextListTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RefreshTextListTabPage_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(buttonRead) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RefreshTextListTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::RefreshTreeViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RefreshTreeViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RefreshTreeViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RefreshTreeViewTabPage*(), NO_PARAMETER) @@ -1887,33 +2995,55 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RefreshTreeViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RefreshTreeViewTabPage_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_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) CLASS_MEMBER_FIELD(treeView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RefreshTreeViewTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::RepeatItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RepeatItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::RepeatItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RepeatItemTemplate*(::vl::Ptr<::demo::MyTextItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::RepeatItemTemplate) @@ -1921,13 +3051,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RepeatItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RepeatItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RepeatItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::RepeatTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::RepeatTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::RepeatTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::RepeatTabPage*(), NO_PARAMETER) @@ -1937,50 +3073,93 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::RepeatTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_RepeatTabPage_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_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(hTracker) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(repeatFlowTabPage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(repeatStackTabPage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(sharedSizeFlowTabPage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(sharedSizeListTabPage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::RepeatTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::ResponsiveGroupControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ResponsiveGroupControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::ResponsiveGroupControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ResponsiveGroupControl*(), NO_PARAMETER) @@ -1990,52 +3169,97 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ResponsiveGroupControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ResponsiveGroupControl_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_39) + 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_40) + 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(responsive) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ResponsiveGroupControlConstructor) BEGIN_CLASS_MEMBER(::demo::ResponsiveStackControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ResponsiveStackControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::ResponsiveStackControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ResponsiveStackControl*(), NO_PARAMETER) @@ -2045,52 +3269,97 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ResponsiveStackControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ResponsiveStackControl_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_39) + 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_40) + 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(responsive) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ResponsiveStackControlConstructor) BEGIN_CLASS_MEMBER(::demo::ResponsiveTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ResponsiveTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::ResponsiveTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ResponsiveTabPage*(), NO_PARAMETER) @@ -2100,26 +3369,45 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ResponsiveTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ResponsiveTabPage_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_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(::demo::ResponsiveTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::ResponsiveViewControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ResponsiveViewControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::ResponsiveViewControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ResponsiveViewControl*(), NO_PARAMETER) @@ -2129,53 +3417,95 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ResponsiveViewControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ResponsiveViewControl_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_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(documentBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(responsive) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ResponsiveViewControlConstructor) BEGIN_CLASS_MEMBER(::demo::SharedSizeItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::SharedSizeItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::SharedSizeItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::SharedSizeItemTemplate*(::vl::Ptr<::demo::MyTextItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::SharedSizeItemTemplate) @@ -2183,19 +3513,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::SharedSizeItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_SharedSizeItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::SharedSizeItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::SharedSizeTextItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::SharedSizeTextItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::SharedSizeTextItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::SharedSizeTextItemTemplate*(::vl::Ptr<::demo::MyTextItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::SharedSizeTextItemTemplate) @@ -2203,10 +3541,15 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::SharedSizeTextItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_SharedSizeTextItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::SharedSizeTextItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::StringResource) @@ -2233,12 +3576,14 @@ namespace vl END_CLASS_MEMBER(::demo::StyleItem) BEGIN_CLASS_MEMBER(::demo::StyleItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::StyleItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::StyleItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::StyleItemTemplate*(::vl::Ptr<::demo::StyleItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::StyleItemTemplate) @@ -2246,21 +3591,35 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::StyleItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_StyleItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(containerControl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(styleLabel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::StyleItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::SubWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::SubWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::SubWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::SubWindow*(), NO_PARAMETER) @@ -2271,27 +3630,47 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::SubWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_SubWindow_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(checkBorder) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkFrame) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkMax) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkMin) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkSizeBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkTitle) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::SubWindowConstructor) BEGIN_CLASS_MEMBER(::demo::TestWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TestWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::TestWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TestWindow*(), NO_PARAMETER) @@ -2301,19 +3680,31 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TestWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TestWindow_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(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TestWindowConstructor) BEGIN_CLASS_MEMBER(::demo::TextBoxSubTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TextBoxSubTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::TextBoxSubTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TextBoxSubTabPage*(), NO_PARAMETER) @@ -2321,6 +3712,7 @@ namespace vl CLASS_MEMBER_METHOD(SetTextBoxAcceptTabInput, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(TextBoxAcceptTabInputChanged) CLASS_MEMBER_FIELD(__vwsn_prop_TextBoxAcceptTabInput) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(TextBoxAcceptTabInput, GetTextBoxAcceptTabInput, SetTextBoxAcceptTabInput, TextBoxAcceptTabInputChanged) END_CLASS_MEMBER(::demo::TextBoxSubTabPage) @@ -2328,46 +3720,73 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TextBoxSubTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TextBoxSubTabPage_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(::demo::TextBoxSubTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::TextBoxTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TextBoxTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::TextBoxTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TextBoxTabPage*(), NO_PARAMETER) CLASS_MEMBER_METHOD(UpdateFont, { L"newFont" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_EVENT(OnMakeFontLarger) CLASS_MEMBER_EVENT(OnMakeFontSmaller) CLASS_MEMBER_FIELD(flag) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TextBoxTabPage) BEGIN_CLASS_MEMBER(::demo::TextBoxTabPageConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TextBoxTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TextBoxTabPage_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(d1) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(d2) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(t1) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(t2) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TextBoxTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::TextEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TextEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::TextEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TextEditor*(), NO_PARAMETER) @@ -2377,12 +3796,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TextEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TextEditor_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) CLASS_MEMBER_FIELD(textBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TextEditorConstructor) BEGIN_CLASS_MEMBER(::demo::TextListTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TextListTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::TextListTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TextListTabPage*(), NO_PARAMETER) @@ -2394,56 +3818,105 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TextListTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TextListTabPage_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + 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(bindableTextList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(mutexGroupController) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TextListTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::TreeViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TreeViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::TreeViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TreeViewTabPage*(), NO_PARAMETER) @@ -2455,62 +3928,119 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TreeViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TreeViewTabPage_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + 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(bindableTreeView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(treeView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TreeViewTabPageConstructor) #undef _ diff --git a/Tutorial/GacUI_ControlTemplate/WindowSkin/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_ControlTemplate/WindowSkin/UI/Source/DemoReflection.cpp index b094278f..37eb5e9f 100644 --- a/Tutorial/GacUI_ControlTemplate/WindowSkin/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_ControlTemplate/WindowSkin/UI/Source/DemoReflection.cpp @@ -36,35 +36,60 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(buttonNewWindow_Clicked, { L"sender" _ L"arguments" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(checkFrame_SelectionChanged, { L"sender" _ L"arguments" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(buttonNewWindow) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkBorder) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkFrame) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkMax) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkMin) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkSizeBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkTitle) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoReflection.cpp index 7c4de63f..b8248af7 100644 --- a/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/AddressBook/UI/Source/DemoReflection.cpp @@ -94,12 +94,15 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(ClearViewSelection, NO_PARAMETER) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -107,62 +110,117 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandBigIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandDeleteContact) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandDeleteFolder) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandDetail) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandEditContact) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandInformation) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandNewContact) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandNewFolder) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSmallIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandTile) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(listViewContacts) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(treeViewFolders) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::NewContactWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::NewContactWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::NewContactWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::NewContactWindow*(), NO_PARAMETER) @@ -171,6 +229,7 @@ namespace vl CLASS_MEMBER_METHOD(SetForEdit, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(ForEditChanged) CLASS_MEMBER_FIELD(__vwsn_prop_ForEdit) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(ForEdit, GetForEdit, SetForEdit, ForEditChanged) CLASS_MEMBER_FIELD(Ready) CLASS_MEMBER_FIELD(contact) @@ -180,38 +239,69 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::NewContactWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_NewContactWindow_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_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(datePickerBirthday) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxAddress) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxPhone) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::NewContactWindowConstructor) BEGIN_CLASS_MEMBER(::demo::NewFolderWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::NewFolderWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::NewFolderWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::NewFolderWindow*(), NO_PARAMETER) @@ -219,6 +309,7 @@ namespace vl CLASS_MEMBER_METHOD(SetFolderName, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(FolderNameChanged) CLASS_MEMBER_FIELD(__vwsn_prop_FolderName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(FolderName, GetFolderName, SetFolderName, FolderNameChanged) CLASS_MEMBER_FIELD(Ready) END_CLASS_MEMBER(::demo::NewFolderWindow) @@ -227,20 +318,35 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::NewFolderWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_NewFolderWindow_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) CLASS_MEMBER_FIELD(textBoxName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::NewFolderWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/Animation/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/Animation/UI/Source/DemoReflection.cpp index 2bddeae1..a7b05f25 100644 --- a/Tutorial/GacUI_Controls/Animation/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/Animation/UI/Source/DemoReflection.cpp @@ -54,10 +54,15 @@ namespace vl CLASS_MEMBER_EVENT(CurrentChanged) CLASS_MEMBER_EVENT(EndChanged) CLASS_MEMBER_FIELD(__vwsn_ani_int_) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_ani_int_Thickness) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Begin) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Current) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_End) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Begin, GetBegin, SetBegin, BeginChanged) CLASS_MEMBER_PROPERTY_EVENT(Current, GetCurrent, SetCurrent, CurrentChanged) CLASS_MEMBER_PROPERTY_EVENT(End, GetEnd, SetEnd, EndChanged) @@ -82,9 +87,13 @@ namespace vl CLASS_MEMBER_EVENT(ThicknessChanged) CLASS_MEMBER_EVENT(TopChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Bottom) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Shadow) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Thickness) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Top) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Bottom, GetBottom, SetBottom, BottomChanged) CLASS_MEMBER_PROPERTY_EVENT(Shadow, GetShadow, SetShadow, ShadowChanged) CLASS_MEMBER_PROPERTY_EVENT(Thickness, GetThickness, SetThickness, ThicknessChanged) @@ -92,46 +101,76 @@ namespace vl END_CLASS_MEMBER(::demo::ColorDef) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_STATIC_METHOD(BallAnimation, { L"container" _ L"ball" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_STATIC_METHOD(BallAnimationWithDelay, { L"container" _ L"ball" _ L"delay" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(PerformGradientAnimation, { L"target" }) CLASS_MEMBER_STATIC_METHOD(WaitingAnimation, { L"container" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(counter) CLASS_MEMBER_FIELD(gradientColorDef) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(lastGradientAnimation) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(animationBackground) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/CalculatorAndStateMachine/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/CalculatorAndStateMachine/UI/Source/DemoReflection.cpp index 45b14e45..4458c4da 100644 --- a/Tutorial/GacUI_Controls/CalculatorAndStateMachine/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/CalculatorAndStateMachine/UI/Source/DemoReflection.cpp @@ -40,6 +40,7 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::description::StateMachine) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::Calculator>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_state_CreateCoroutine, { L"__vwsn_state_startState" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(Add, NO_PARAMETER) CLASS_MEMBER_METHOD(Calculate, NO_PARAMETER) CLASS_MEMBER_METHOD(Clear, NO_PARAMETER) @@ -52,19 +53,24 @@ namespace vl CLASS_MEMBER_METHOD(Update, { L"value" }) CLASS_MEMBER_EVENT(ValueChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Value) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_stateip_Digit_i) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_statesp_Integer_newNumber) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Value, GetValue, SetValue, ValueChanged) CLASS_MEMBER_FIELD(op) CLASS_MEMBER_FIELD(valueFirst) END_CLASS_MEMBER(::demo::Calculator) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::Calculator>), { L"__vwsn_ctor_parameter_calculator" }) CLASS_MEMBER_METHOD(Getcalculator, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_calculator) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(calculator, Getcalculator) END_CLASS_MEMBER(::demo::MainWindow) @@ -72,57 +78,109 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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(calculator) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoReflection.cpp index 0b48a8d7..2492045f 100644 --- a/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/ColorPicker/UI/Source/DemoReflection.cpp @@ -42,11 +42,13 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::ColorComboItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ColorComboItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::ColorComboItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ColorComboItemTemplate*(::vl::Ptr<::demo::IColorItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::ColorComboItemTemplate) @@ -54,21 +56,31 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ColorComboItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ColorComboItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ColorComboItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::ColorListItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ColorListItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::ColorListItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ColorListItemTemplate*(::vl::Ptr<::demo::IColorItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::ColorListItemTemplate) @@ -76,9 +88,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ColorListItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ColorListItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ColorListItemTemplateConstructor) BEGIN_INTERFACE_MEMBER(::demo::IColorItem) @@ -96,11 +112,13 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -108,16 +126,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/ColorPicker2/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/ColorPicker2/UI/Source/DemoReflection.cpp index e3f67714..b8cff42a 100644 --- a/Tutorial/GacUI_Controls/ColorPicker2/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/ColorPicker2/UI/Source/DemoReflection.cpp @@ -40,11 +40,13 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::ColorBomboItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ColorBomboItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::ColorBomboItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ColorBomboItemTemplate*(::vl::Ptr<::demo::IColorItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::ColorBomboItemTemplate) @@ -52,16 +54,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ColorBomboItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ColorBomboItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ColorBomboItemTemplateConstructor) BEGIN_INTERFACE_MEMBER(::demo::IColorItem) @@ -85,11 +98,13 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -97,22 +112,39 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboColor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/ContainersAndButtons/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/ContainersAndButtons/UI/Source/DemoReflection.cpp index aa953036..f8d0fd99 100644 --- a/Tutorial/GacUI_Controls/ContainersAndButtons/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/ContainersAndButtons/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,83 +46,161 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_74) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_75) + 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(radioGroup) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoReflection.cpp index 28be50eb..c6fc89e6 100644 --- a/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/DataGrid/UI/Source/DemoReflection.cpp @@ -61,6 +61,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::CategoryDisplayer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryDisplayerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::CategoryDisplayerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryDisplayer*(), NO_PARAMETER) @@ -68,6 +69,7 @@ namespace vl CLASS_MEMBER_METHOD(SetCategory, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(CategoryChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Category) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Category, GetCategory, SetCategory, CategoryChanged) END_CLASS_MEMBER(::demo::CategoryDisplayer) @@ -75,17 +77,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryDisplayerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryDisplayer_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(::demo::CategoryDisplayerConstructor) BEGIN_CLASS_MEMBER(::demo::CategoryEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::CategoryEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryEditor*(), NO_PARAMETER) @@ -96,18 +108,25 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryEditor_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(comboBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::CategoryEditorConstructor) BEGIN_CLASS_MEMBER(::demo::CategoryItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::CategoryItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryItemTemplate*(::demo::MyCategory), { L"__vwsn_ctor_parameter_SelectedCategory" }) CLASS_MEMBER_METHOD(GetSelectedCategory, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_SelectedCategory) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(SelectedCategory, GetSelectedCategory) END_CLASS_MEMBER(::demo::CategoryItemTemplate) @@ -115,13 +134,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryItemTemplate_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(SelectedCategory) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::CategoryItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::CategoryVisualizer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::CategoryVisualizerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridVisualizerTemplate) CLASS_MEMBER_BASE(::demo::CategoryVisualizerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::CategoryVisualizer*(), NO_PARAMETER) @@ -131,12 +156,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::CategoryVisualizerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_CategoryVisualizer_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(::demo::CategoryVisualizerConstructor) BEGIN_CLASS_MEMBER(::demo::DateEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DateEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::DateEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DateEditor*(), NO_PARAMETER) @@ -146,43 +176,66 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DateEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DateEditor_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(comboBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DateEditorConstructor) BEGIN_CLASS_MEMBER(::demo::DateFilter) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DateFilterConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::DateFilterConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DateFilter*(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_METHOD(GetFilter, NO_PARAMETER) CLASS_MEMBER_METHOD(SetFilter, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(UpdateFilter, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Filter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(Filter, GetFilter) CLASS_MEMBER_FIELD(callback) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::DateFilter) BEGIN_CLASS_MEMBER(::demo::DateFilterConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DateFilterConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DateFilter_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(checkFrom) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkTo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dateFrom) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dateTo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DateFilterConstructor) BEGIN_CLASS_MEMBER(::demo::GenderDisplayer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderDisplayerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::GenderDisplayerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderDisplayer*(), NO_PARAMETER) @@ -190,6 +243,7 @@ namespace vl CLASS_MEMBER_METHOD(SetGender, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(GenderChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Gender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Gender, GetGender, SetGender, GenderChanged) END_CLASS_MEMBER(::demo::GenderDisplayer) @@ -197,12 +251,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderDisplayerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderDisplayer_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(::demo::GenderDisplayerConstructor) BEGIN_CLASS_MEMBER(::demo::GenderEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::GenderEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderEditor*(), NO_PARAMETER) @@ -213,18 +272,25 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderEditor_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(comboBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::GenderEditorConstructor) BEGIN_CLASS_MEMBER(::demo::GenderItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::GenderItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderItemTemplate*(::demo::MyGender), { L"__vwsn_ctor_parameter_SelectedGender" }) CLASS_MEMBER_METHOD(GetSelectedGender, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_SelectedGender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(SelectedGender, GetSelectedGender) END_CLASS_MEMBER(::demo::GenderItemTemplate) @@ -232,13 +298,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderItemTemplate_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(SelectedGender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::GenderItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::GenderVisualizer) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::GenderVisualizerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridVisualizerTemplate) CLASS_MEMBER_BASE(::demo::GenderVisualizerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::GenderVisualizer*(), NO_PARAMETER) @@ -248,12 +320,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::GenderVisualizerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_GenderVisualizer_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(::demo::GenderVisualizerConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -264,31 +341,57 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dataGrid) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dateFilter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_ENUM_ITEM(::demo::MyCategory) @@ -318,12 +421,19 @@ namespace vl CLASS_MEMBER_METHOD(SetSmallImage, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetWebsite, { L"__vwsn_value_" }) CLASS_MEMBER_FIELD(__vwsn_prop_Birthday) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Category) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Gender) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_LargeImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Name) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_SmallImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Website) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY(Birthday, GetBirthday, SetBirthday) CLASS_MEMBER_PROPERTY(Category, GetCategory, SetCategory) CLASS_MEMBER_PROPERTY(Gender, GetGender, SetGender) @@ -339,6 +449,7 @@ namespace vl END_ENUM_ITEM(::demo::MyGender) BEGIN_CLASS_MEMBER(::demo::TextEditor) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TextEditorConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiGridEditorTemplate) CLASS_MEMBER_BASE(::demo::TextEditorConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TextEditor*(), NO_PARAMETER) @@ -348,9 +459,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TextEditorConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TextEditor_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) CLASS_MEMBER_FIELD(textBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TextEditorConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/Dialogs/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/Dialogs/UI/Source/DemoReflection.cpp index 149e23d1..a3b06e27 100644 --- a/Tutorial/GacUI_Controls/Dialogs/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/Dialogs/UI/Source/DemoReflection.cpp @@ -44,6 +44,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::LocalizedColorDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedColorDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedColorDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedColorDialogTabPage*(), NO_PARAMETER) @@ -53,16 +54,25 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedColorDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedColorDialogTabPage_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(background) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialog) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedColorDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedFileDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedFileDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedFileDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedFileDialogTabPage*(), NO_PARAMETER) @@ -73,76 +83,145 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedFileDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedFileDialogTabPage_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + 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(chkFileDialogAddToRecent) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogAllowMultipleSelection) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogDereferenceLinks) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogDirectoryMustExist) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogFileMustExist) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogPromptCreateFile) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogPromptOverwriteFile) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogShowNetworkButton) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(chkFileDialogShowReadOnlyCheckBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogOpen) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogSave) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(lstFiles) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtDefaultExtension) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtDirectory) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtFileName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtFilter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtFilterIndex) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtTitle) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedFileDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedFontDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedFontDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedFontDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedFontDialogTabPage*(), NO_PARAMETER) @@ -152,18 +231,29 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedFontDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedFontDialogTabPage_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(checkEffect) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialog) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(label) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedFontDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::LocalizedMessageDialogTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::LocalizedMessageDialogTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::LocalizedMessageDialogTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::LocalizedMessageDialogTabPage*(), NO_PARAMETER) @@ -182,46 +272,85 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::LocalizedMessageDialogTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_LocalizedMessageDialogTabPage_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_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(comboDefaultButton) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboInput) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialog) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(lblOutput) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtText) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(txtTitle) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::LocalizedMessageDialogTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -231,14 +360,23 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBaseReflection.cpp b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBaseReflection.cpp index 0c9aa640..333dd4e9 100644 --- a/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBaseReflection.cpp +++ b/Tutorial/GacUI_Controls/DocumentEditor/UI/Source/EditorBaseReflection.cpp @@ -38,6 +38,8 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::DocumentEditorBase) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"DocumentEditorBase")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DocumentEditorBaseConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::DocumentEditorBaseConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DocumentEditorBase*(), NO_PARAMETER) @@ -47,26 +49,42 @@ namespace vl CLASS_MEMBER_METHOD(GetHasEditableSelection, NO_PARAMETER) CLASS_MEMBER_METHOD(GetHasEditableSelectionInSingleParagraph, NO_PARAMETER) CLASS_MEMBER_METHOD(GetMenuContainer, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(GetToolstripContainer, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(HasEditableCursor, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(HasEditableHyperlink, { L"forEdit" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(LoadAsPrivateFormat, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveAsHTML, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveAsPrivateFormat, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveAsRTF, { L"fileName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_METHOD(SaveDocument, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SelectAlignmentCommand, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(SetAlignment, { L"alignment" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetEditMode, { L"editMode" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetEditModeCommand, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(SetHasEditableSelection, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetHasEditableSelectionInSingleParagraph, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(EditModeCommandChanged) CLASS_MEMBER_EVENT(HasEditableSelectionChanged) CLASS_MEMBER_EVENT(HasEditableSelectionInSingleParagraphChanged) CLASS_MEMBER_FIELD(__vwsn_prop_EditModeCommand) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_HasEditableSelection) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_HasEditableSelectionInSingleParagraph) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT_READONLY(EditModeCommand, GetEditModeCommand, EditModeCommandChanged) CLASS_MEMBER_PROPERTY_EVENT(HasEditableSelection, GetHasEditableSelection, SetHasEditableSelection, HasEditableSelectionChanged) CLASS_MEMBER_PROPERTY_EVENT(HasEditableSelectionInSingleParagraph, GetHasEditableSelectionInSingleParagraph, SetHasEditableSelectionInSingleParagraph, HasEditableSelectionInSingleParagraphChanged) @@ -78,53 +96,99 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DocumentEditorBaseConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DocumentEditorBase_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(commandAlignCenter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandAlignDefault) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandAlignLeft) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandAlignRight) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandBackColor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandBold) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandColor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandCopy) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandCut) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandDelete) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandEditHyperlink) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandEditable) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandFont) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandInsertImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandItalic) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandLoadPrivate) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandPaste) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandRedo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandRemoveHyperlink) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSaveHtml) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSavePrivate) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSaveRtf) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSelect) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandSelectable) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandStrike) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandUnderline) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandUndo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandViewOnly) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogColor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogFont) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogMessage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogNotImpl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogOpen) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogOpenDoc) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogQueryClose) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogSaveDoc) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogSaveDocPrivate) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(document) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(menuContainer) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(toolstripContainer) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DocumentEditorBaseConstructor) BEGIN_CLASS_MEMBER(::demo::HyperlinkWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::HyperlinkWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::HyperlinkWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::HyperlinkWindow*(), NO_PARAMETER) @@ -132,6 +196,7 @@ namespace vl CLASS_MEMBER_METHOD(SetUrl, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(UrlChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Url) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Url, GetUrl, SetUrl, UrlChanged) END_CLASS_MEMBER(::demo::HyperlinkWindow) @@ -139,22 +204,39 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::HyperlinkWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_HyperlinkWindow_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(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textUrl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::HyperlinkWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonReflection.cpp b/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonReflection.cpp index d2fd38af..e2c2895c 100644 --- a/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonReflection.cpp +++ b/Tutorial/GacUI_Controls/DocumentEditorRibbon/UI/Source/EditorRibbonReflection.cpp @@ -42,16 +42,19 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::DocumentEditorRibbon) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DocumentEditorRibbonConstructor"))) CLASS_MEMBER_BASE(::demo::DocumentEditorBase) CLASS_MEMBER_BASE(::demo::DocumentEditorRibbonConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DocumentEditorRibbon*(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_METHOD(GenerateStyleGroups, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(GetAlignCenterSelected, NO_PARAMETER) CLASS_MEMBER_METHOD(GetAlignLeftSelected, NO_PARAMETER) CLASS_MEMBER_METHOD(GetAlignRightSelected, NO_PARAMETER) CLASS_MEMBER_METHOD(GetStyleGroups, NO_PARAMETER) CLASS_MEMBER_METHOD(SelectStyleName, { L"styleName" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetAlignCenterSelected, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetAlignLeftSelected, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetAlignRightSelected, { L"__vwsn_value_" }) @@ -61,9 +64,13 @@ namespace vl CLASS_MEMBER_EVENT(AlignRightSelectedChanged) CLASS_MEMBER_EVENT(StyleGroupsChanged) CLASS_MEMBER_FIELD(__vwsn_prop_AlignCenterSelected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_AlignLeftSelected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_AlignRightSelected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_StyleGroups) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(AlignCenterSelected, GetAlignCenterSelected, SetAlignCenterSelected, AlignCenterSelectedChanged) CLASS_MEMBER_PROPERTY_EVENT(AlignLeftSelected, GetAlignLeftSelected, SetAlignLeftSelected, AlignLeftSelectedChanged) CLASS_MEMBER_PROPERTY_EVENT(AlignRightSelected, GetAlignRightSelected, SetAlignRightSelected, AlignRightSelectedChanged) @@ -74,110 +81,213 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DocumentEditorRibbonConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DocumentEditorRibbon_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_74) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_75) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_76) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_77) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_78) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_79) + 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_80) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_81) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_82) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_83) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_84) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_85) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_86) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_87) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_88) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_89) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_9) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_90) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_91) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_92) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_93) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_94) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_95) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(buttonHome) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialogMessage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(styleGallery) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(toolstripHome) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DocumentEditorRibbonConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -187,9 +297,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(editor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::StyleGroup) @@ -207,12 +321,14 @@ namespace vl END_CLASS_MEMBER(::demo::StyleItem) BEGIN_CLASS_MEMBER(::demo::StyleItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::StyleItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::StyleItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::StyleItemTemplate*(::vl::Ptr<::demo::StyleItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::StyleItemTemplate) @@ -220,18 +336,31 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::StyleItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_StyleItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(containerControl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(styleLabel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::StyleItemTemplateConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/DocumentEditorToolstrip/UI/Source/EditorToolstripReflection.cpp b/Tutorial/GacUI_Controls/DocumentEditorToolstrip/UI/Source/EditorToolstripReflection.cpp index d9512435..216d1b8e 100644 --- a/Tutorial/GacUI_Controls/DocumentEditorToolstrip/UI/Source/EditorToolstripReflection.cpp +++ b/Tutorial/GacUI_Controls/DocumentEditorToolstrip/UI/Source/EditorToolstripReflection.cpp @@ -38,6 +38,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::DocumentEditorToolstrip) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DocumentEditorToolstripConstructor"))) CLASS_MEMBER_BASE(::demo::DocumentEditorBase) CLASS_MEMBER_BASE(::demo::DocumentEditorToolstripConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DocumentEditorToolstrip*(), NO_PARAMETER) @@ -47,87 +48,167 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DocumentEditorToolstripConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DocumentEditorToolstrip_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_74) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_75) + 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(buttonAlignment) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DocumentEditorToolstripConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -137,9 +218,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(editor) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/GlobalHotKey/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/GlobalHotKey/UI/Source/DemoReflection.cpp index 3556ea2a..95d61072 100644 --- a/Tutorial/GacUI_Controls/GlobalHotKey/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/GlobalHotKey/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,25 +46,45 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(commandGlobal) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(dialog) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(menuRightClick) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoReflection.cpp index 0938e479..23b0bb33 100644 --- a/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/ListControls/UI/Source/DemoReflection.cpp @@ -43,6 +43,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::ListViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ListViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::ListViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ListViewTabPage*(), NO_PARAMETER) @@ -53,35 +54,63 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ListViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ListViewTabPage_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_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(bindableListView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(listView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ListViewTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -91,13 +120,21 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::MyTextItem) @@ -108,12 +145,15 @@ namespace vl CLASS_MEMBER_METHOD(SetChecked, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetName, { L"__vwsn_value_" }) CLASS_MEMBER_FIELD(__vwsn_prop_Checked) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Name) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY(Checked, GetChecked, SetChecked) CLASS_MEMBER_PROPERTY(Name, GetName, SetName) END_CLASS_MEMBER(::demo::MyTextItem) BEGIN_CLASS_MEMBER(::demo::TextListTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TextListTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::TextListTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TextListTabPage*(), NO_PARAMETER) @@ -125,38 +165,69 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TextListTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TextListTabPage_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_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(bindableTextList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(comboView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TextListTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::TreeViewTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TreeViewTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::TreeViewTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TreeViewTabPage*(), NO_PARAMETER) @@ -168,59 +239,113 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TreeViewTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TreeViewTabPage_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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(bindableTreeView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(treeView) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::TreeViewTabPageConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/Localization/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/Localization/UI/Source/DemoReflection.cpp index f05b62e2..63682617 100644 --- a/Tutorial/GacUI_Controls/Localization/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/Localization/UI/Source/DemoReflection.cpp @@ -55,6 +55,7 @@ namespace vl END_INTERFACE_MEMBER(::demo::IStringResourceStrings) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -63,6 +64,7 @@ namespace vl CLASS_MEMBER_METHOD(SetStrings, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(StringsChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Strings) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Strings, GetStrings, SetStrings, StringsChanged) CLASS_MEMBER_FIELD(currency) CLASS_MEMBER_FIELD(dateTime) @@ -73,32 +75,59 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(comboLocales) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(listLocales) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::StringInjectionResource) diff --git a/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.cpp index 990e98b8..a5f214c8 100644 --- a/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,37 +46,69 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(checkList) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(menuItems) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp index c46a67aa..659bf448 100644 --- a/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/ProgressAndAsync/UI/Source/DemoReflection.cpp @@ -50,11 +50,13 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -62,18 +64,31 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(buttonDownload) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(progressBar) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textResult) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/QueryService/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/QueryService/UI/Source/DemoReflection.cpp index e8b1cfda..53af1b8f 100644 --- a/Tutorial/GacUI_Controls/QueryService/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/QueryService/UI/Source/DemoReflection.cpp @@ -48,42 +48,60 @@ namespace vl END_INTERFACE_MEMBER(::IDemoService) BEGIN_CLASS_MEMBER(::demo::DemoServiceControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::DemoServiceControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::DemoServiceControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::DemoServiceControl*(), NO_PARAMETER) CLASS_MEMBER_FIELD(demoService) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::DemoServiceControl) BEGIN_CLASS_MEMBER(::demo::DemoServiceControlConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::DemoServiceControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_DemoServiceControl_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) CLASS_MEMBER_FIELD(textBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::DemoServiceControlConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_FIELD(demoService) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/TriplePhaseImageButton/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/TriplePhaseImageButton/UI/Source/DemoReflection.cpp index 3f5dc1c3..e73bbffc 100644 --- a/Tutorial/GacUI_Controls/TriplePhaseImageButton/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/TriplePhaseImageButton/UI/Source/DemoReflection.cpp @@ -47,6 +47,7 @@ namespace vl END_ENUM_ITEM(::TripleState) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -56,17 +57,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(button) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::TriplePhaseButton) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TriplePhaseButtonConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::TriplePhaseButtonConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TriplePhaseButton*(), NO_PARAMETER) @@ -80,8 +91,11 @@ namespace vl CLASS_MEMBER_EVENT(PartialImageChanged) CLASS_MEMBER_EVENT(StateChanged) CLASS_MEMBER_FIELD(__vwsn_prop_CheckedImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_PartialImage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_State) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(CheckedImage, GetCheckedImage, SetCheckedImage, CheckedImageChanged) CLASS_MEMBER_PROPERTY_EVENT(PartialImage, GetPartialImage, SetPartialImage, PartialImageChanged) CLASS_MEMBER_PROPERTY_EVENT(State, GetState, SetState, StateChanged) @@ -91,12 +105,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TriplePhaseButtonConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TriplePhaseButton_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(::demo::TriplePhaseButtonConstructor) BEGIN_CLASS_MEMBER(::demo::TriplePhaseImageButtonTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::TriplePhaseImageButtonTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiButtonTemplate) CLASS_MEMBER_BASE(::demo::TriplePhaseImageButtonTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::TriplePhaseImageButtonTemplate*(), NO_PARAMETER) @@ -106,14 +125,23 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::TriplePhaseImageButtonTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_TriplePhaseImageButtonTemplate_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(::demo::TriplePhaseImageButtonTemplateConstructor) #undef _ diff --git a/Tutorial/GacUI_Controls/Win11ToolstripMenu/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/Win11ToolstripMenu/UI/Source/DemoReflection.cpp index cc4c4a51..ce3c8f33 100644 --- a/Tutorial/GacUI_Controls/Win11ToolstripMenu/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Controls/Win11ToolstripMenu/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,35 +46,65 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(commandCopy) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandCut) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandDelete) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandExportHtml) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandExportPrivate) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandExportRtf) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandPaste) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandRedo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(commandUndo) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(menuEdit) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_HelloWorlds/CppXml/UI/Source/HelloWorldReflection.cpp b/Tutorial/GacUI_HelloWorlds/CppXml/UI/Source/HelloWorldReflection.cpp index 957e36cf..4e4a519e 100644 --- a/Tutorial/GacUI_HelloWorlds/CppXml/UI/Source/HelloWorldReflection.cpp +++ b/Tutorial/GacUI_HelloWorlds/CppXml/UI/Source/HelloWorldReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::helloworld::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"helloworld::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::helloworld::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::helloworld::MainWindow*(), NO_PARAMETER) @@ -45,9 +46,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::helloworld::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_helloworld_MainWindow_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) END_CLASS_MEMBER(::helloworld::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_HelloWorlds/MVVM/UI/Source/HelloWorldReflection.cpp b/Tutorial/GacUI_HelloWorlds/MVVM/UI/Source/HelloWorldReflection.cpp index 36371b71..89dca9d9 100644 --- a/Tutorial/GacUI_HelloWorlds/MVVM/UI/Source/HelloWorldReflection.cpp +++ b/Tutorial/GacUI_HelloWorlds/MVVM/UI/Source/HelloWorldReflection.cpp @@ -37,6 +37,8 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::helloworld::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"helloworld::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::helloworld::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::helloworld::MainWindow*(::vl::Ptr<::vm::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) @@ -44,9 +46,13 @@ namespace vl CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_METHOD(SetHasLoggedIn, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(buttonSignUp_Clicked, { L"sender" _ L"arguments" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_EVENT(HasLoggedInChanged) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_HasLoggedIn) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(HasLoggedIn, GetHasLoggedIn, SetHasLoggedIn, HasLoggedInChanged) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::helloworld::MainWindow) @@ -55,32 +61,59 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::helloworld::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_helloworld_MainWindow_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_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(buttonCancel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(buttonSignUp) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxPassword) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxUserName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::helloworld::MainWindowConstructor) BEGIN_INTERFACE_MEMBER(::vm::IViewModel) diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x64 index 37dfa659398c37e47def2d62b8d1231107fe8fff..ac036ba7c90094c5db4c401d9137c0c65c215ac9 100644 GIT binary patch delta 459 zcmca{gmKpi#tplen7k4c{G#l%oc!|m#FCPt z%%swi)M6_uAUi&}pdj9@C^I!Lg%PSv35kYjFG@|zNlh-v%+Is33aKnebxAEwF3Kz@ z$uClbss_;+sX0I^CjVwq-kia5VD6&kF#t3wT|2DI81V#Y>>>q*P delta 31 pcmV+)0O0?+$N|{I0kFCP0%%{eyaKEPli&vkvl<7U0kiN4N?P0O47&gT diff --git a/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 b/Tutorial/GacUI_HelloWorlds/UIRes/Xml.bin.x86 index 8cf1f1290c049267a009a75f6e6337246d04ca6d..4cc4beb702bf4ff25d4451f578c1afcf1376a718 100644 GIT binary patch delta 459 zcmca{gmKpi#tplen7k4c{G#l%oc!|m#FCPt z%%swi)M6_uAUi&}pdj9@C^I!Lg%PSv35kYjFG@|zNlh-v%+Is33aKnebxAEwF3Kz@ z$uClbss_;+sX0I^CjVwq-kia5VD6&kF#t3wT|2DI81V#Y>>>q*P delta 31 pcmV+)0O0?+$N|{I0kFCP0%%{eyaKEPli&vkvl<7U0kiN4N?P0O47&gT diff --git a/Tutorial/GacUI_Layout/Alignment/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/Alignment/UI/Source/DemoReflection.cpp index bb601b98..bcccf571 100644 --- a/Tutorial/GacUI_Layout/Alignment/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/Alignment/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,14 +46,23 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Layout/Flow/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/Flow/UI/Source/DemoReflection.cpp index 5edfe954..ab98abc5 100644 --- a/Tutorial/GacUI_Layout/Flow/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/Flow/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,85 +46,165 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + 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(flowLayout) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(groupAlignment) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(groupAxis) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(groupBoxAlignment) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(groupBoxAxis) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Layout/Responsive1/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/Responsive1/UI/Source/DemoReflection.cpp index 761a1300..0095df3c 100644 --- a/Tutorial/GacUI_Layout/Responsive1/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/Responsive1/UI/Source/DemoReflection.cpp @@ -42,6 +42,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -51,27 +52,47 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::ResponsiveGroupControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ResponsiveGroupControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::ResponsiveGroupControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ResponsiveGroupControl*(), NO_PARAMETER) @@ -81,52 +102,97 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ResponsiveGroupControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ResponsiveGroupControl_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_39) + 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_40) + 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(responsive) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ResponsiveGroupControlConstructor) BEGIN_CLASS_MEMBER(::demo::ResponsiveStackControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ResponsiveStackControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::ResponsiveStackControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ResponsiveStackControl*(), NO_PARAMETER) @@ -136,52 +202,97 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ResponsiveStackControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ResponsiveStackControl_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_39) + 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_40) + 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(responsive) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ResponsiveStackControlConstructor) BEGIN_CLASS_MEMBER(::demo::ResponsiveViewControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::ResponsiveViewControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::ResponsiveViewControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::ResponsiveViewControl*(), NO_PARAMETER) @@ -191,45 +302,85 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::ResponsiveViewControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_ResponsiveViewControl_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_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(documentBox) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(responsive) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::ResponsiveViewControlConstructor) #undef _ diff --git a/Tutorial/GacUI_Layout/Responsive2/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/Responsive2/UI/Source/DemoReflection.cpp index 81c1fa3f..8613b32f 100644 --- a/Tutorial/GacUI_Layout/Responsive2/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/Responsive2/UI/Source/DemoReflection.cpp @@ -46,6 +46,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::AccountButtonTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::AccountButtonTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiSelectableButtonTemplate) CLASS_MEMBER_BASE(::demo::AccountButtonTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::AccountButtonTemplate*(), NO_PARAMETER) @@ -53,6 +54,7 @@ namespace vl CLASS_MEMBER_METHOD(SetViewModel, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(ViewModelChanged) CLASS_MEMBER_FIELD(__vwsn_prop_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(ViewModel, GetViewModel, SetViewModel, ViewModelChanged) END_CLASS_MEMBER(::demo::AccountButtonTemplate) @@ -60,18 +62,31 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::AccountButtonTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_AccountButtonTemplate_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_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(::demo::AccountButtonTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::AccountButtonViewModel) @@ -87,19 +102,24 @@ namespace vl CLASS_MEMBER_EVENT(ImageChanged) CLASS_MEMBER_EVENT(NameChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Controller) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Image) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Name) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Controller, GetController, SetController, ControllerChanged) CLASS_MEMBER_PROPERTY_EVENT(Image, GetImage, SetImage, ImageChanged) CLASS_MEMBER_PROPERTY_EVENT(Name, GetName, SetName, NameChanged) END_CLASS_MEMBER(::demo::AccountButtonViewModel) BEGIN_CLASS_MEMBER(::demo::AccountItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::AccountItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::AccountItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::AccountItemTemplate*(::vl::Ptr<::demo::AccountButtonViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::AccountItemTemplate) @@ -107,18 +127,25 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::AccountItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_AccountItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::AccountItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::AccountMenuItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::AccountMenuItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::AccountMenuItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::AccountMenuItemTemplate*(::vl::Ptr<::demo::AccountButtonViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::AccountMenuItemTemplate) @@ -126,13 +153,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::AccountMenuItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_AccountMenuItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::AccountMenuItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -145,36 +178,61 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(accountController) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(videoContainer) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::VideoItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::VideoItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::VideoItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::VideoItemTemplate*(::vl::Ptr<::demo::VideoViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::VideoItemTemplate) @@ -182,17 +240,29 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::VideoItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_VideoItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::VideoItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::VideoViewModel) @@ -208,8 +278,11 @@ namespace vl CLASS_MEMBER_EVENT(FontChanged) CLASS_MEMBER_EVENT(TitleChanged) CLASS_MEMBER_FIELD(__vwsn_prop_Author) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Font) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Title) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(Author, GetAuthor, SetAuthor, AuthorChanged) CLASS_MEMBER_PROPERTY_EVENT(Font, GetFont, SetFont, FontChanged) CLASS_MEMBER_PROPERTY_EVENT(Title, GetTitle, SetTitle, TitleChanged) diff --git a/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoReflection.cpp index 998f056f..8f18bd60 100644 --- a/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/RichTextEmbedding/UI/Source/DemoReflection.cpp @@ -42,11 +42,13 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -54,60 +56,115 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + 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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(documentViewer) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Layout/SharedSize/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/SharedSize/UI/Source/DemoReflection.cpp index 0b2581fb..e48c6dee 100644 --- a/Tutorial/GacUI_Layout/SharedSize/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/SharedSize/UI/Source/DemoReflection.cpp @@ -45,47 +45,77 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::EnglishNumbersController) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::EnglishNumbersControllerConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::EnglishNumbersControllerConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::EnglishNumbersController*(), NO_PARAMETER) CLASS_MEMBER_METHOD(GetItemsToBind, NO_PARAMETER) CLASS_MEMBER_METHOD(NumberToText, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(NumberToText_0to999, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(NumberToText_1To99, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(SetItemsToBind, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(ToText_11to19, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_METHOD(ToText_1to9, { L"i" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_ItemsToBind) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ItemsToBind, GetItemsToBind) CLASS_MEMBER_FIELD(counter) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::EnglishNumbersController) BEGIN_CLASS_MEMBER(::demo::EnglishNumbersControllerConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EnglishNumbersControllerConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_EnglishNumbersController_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_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(::demo::EnglishNumbersControllerConstructor) BEGIN_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPage) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::EnglishNumbersControllerTabPageConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::demo::EnglishNumbersControllerTabPageConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::EnglishNumbersControllerTabPage*(), NO_PARAMETER) @@ -93,9 +123,13 @@ namespace vl CLASS_MEMBER_METHOD(GetContentComposition, NO_PARAMETER) CLASS_MEMBER_METHOD(GetItemsToBind, NO_PARAMETER) CLASS_MEMBER_METHOD(SetContentComposition, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_METHOD(SetItemsToBind, { L"__vwsn_value_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_prop_ContentComposition) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_ItemsToBind) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ContentComposition, GetContentComposition) CLASS_MEMBER_PROPERTY_READONLY(ItemsToBind, GetItemsToBind) END_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPage) @@ -104,15 +138,23 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::EnglishNumbersControllerTabPageConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_EnglishNumbersControllerTabPage_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(content) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(controller) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::EnglishNumbersControllerTabPageConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -122,20 +164,35 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(sharedSizeFlowTabPage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(sharedSizeListTabPage) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::MyTextItem) @@ -146,17 +203,21 @@ namespace vl CLASS_MEMBER_METHOD(SetChecked, { L"__vwsn_value_" }) CLASS_MEMBER_METHOD(SetName, { L"__vwsn_value_" }) CLASS_MEMBER_FIELD(__vwsn_prop_Checked) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_FIELD(__vwsn_prop_Name) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY(Checked, GetChecked, SetChecked) CLASS_MEMBER_PROPERTY(Name, GetName, SetName) END_CLASS_MEMBER(::demo::MyTextItem) BEGIN_CLASS_MEMBER(::demo::SharedSizeItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::SharedSizeItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiControlTemplate) CLASS_MEMBER_BASE(::demo::SharedSizeItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::SharedSizeItemTemplate*(::vl::Ptr<::demo::MyTextItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::SharedSizeItemTemplate) @@ -164,19 +225,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::SharedSizeItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_SharedSizeItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::SharedSizeItemTemplateConstructor) BEGIN_CLASS_MEMBER(::demo::SharedSizeTextItemTemplate) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::SharedSizeTextItemTemplateConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::templates::GuiTextListItemTemplate) CLASS_MEMBER_BASE(::demo::SharedSizeTextItemTemplateConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::SharedSizeTextItemTemplate*(::vl::Ptr<::demo::MyTextItem>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::SharedSizeTextItemTemplate) @@ -184,10 +253,15 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::SharedSizeTextItemTemplateConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_SharedSizeTextItemTemplate_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::SharedSizeTextItemTemplateConstructor) #undef _ diff --git a/Tutorial/GacUI_Layout/Stack/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/Stack/UI/Source/DemoReflection.cpp index 58f6cfe7..f146333d 100644 --- a/Tutorial/GacUI_Layout/Stack/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/Stack/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,31 +46,57 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(groupStackDirection) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(stackLayout) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Layout/Table/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/Table/UI/Source/DemoReflection.cpp index 54e35144..4fbe5d4b 100644 --- a/Tutorial/GacUI_Layout/Table/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/Table/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,38 +46,71 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Layout/TableSplitter/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Layout/TableSplitter/UI/Source/DemoReflection.cpp index e77a1596..46196828 100644 --- a/Tutorial/GacUI_Layout/TableSplitter/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Layout/TableSplitter/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,105 +46,205 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_39) + 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_40) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_41) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_42) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_43) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_44) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_45) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_46) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_47) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_48) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_49) + 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_50) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_51) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_52) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_53) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_54) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_55) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_56) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_57) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_58) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_59) + 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_60) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_61) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_62) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_63) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_64) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_65) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_66) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_67) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_68) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_69) + 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_70) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_71) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_72) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_73) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_74) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_75) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_76) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_77) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_78) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_79) + 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_80) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_81) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_82) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_83) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_84) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_85) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_86) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_87) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_88) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_89) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_9) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_90) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_91) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_92) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_93) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_94) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_95) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(__vwsn_precompile_96) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkBorder) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(table) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Windows/Direct2DClock/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Windows/Direct2DClock/UI/Source/DemoReflection.cpp index a49c2e78..387a7a78 100644 --- a/Tutorial/GacUI_Windows/Direct2DClock/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Windows/Direct2DClock/UI/Source/DemoReflection.cpp @@ -36,19 +36,26 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER) CLASS_MEMBER_METHOD(InstallAnimationControl, NO_PARAMETER) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_Initialize, { L"__vwsn_this_" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(animationBounds) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Windows/WindowIcon/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Windows/WindowIcon/UI/Source/DemoReflection.cpp index 313475d1..92194dec 100644 --- a/Tutorial/GacUI_Windows/WindowIcon/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Windows/WindowIcon/UI/Source/DemoReflection.cpp @@ -36,6 +36,8 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -43,6 +45,7 @@ namespace vl CLASS_MEMBER_METHOD(SetCustomIcon, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(CustomIconChanged) CLASS_MEMBER_FIELD(__vwsn_prop_CustomIcon) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(CustomIcon, GetCustomIcon, SetCustomIcon, CustomIconChanged) END_CLASS_MEMBER(::demo::MainWindow) @@ -50,14 +53,23 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(checkCustom) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(checkVisible) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Binding_Bind/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Binding_Bind/UI/Source/DemoReflection.cpp index 9d99aaa9..f584232c 100644 --- a/Tutorial/GacUI_Xml/Binding_Bind/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Binding_Bind/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,24 +46,43 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(textBoxA) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxB) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxC) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Binding_Eval/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Binding_Eval/UI/Source/DemoReflection.cpp index 7e9818c6..9e95f1be 100644 --- a/Tutorial/GacUI_Xml/Binding_Eval/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Binding_Eval/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,9 +46,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Binding_Format/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Binding_Format/UI/Source/DemoReflection.cpp index 3b2e5933..00ae34c0 100644 --- a/Tutorial/GacUI_Xml/Binding_Format/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Binding_Format/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,16 +46,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(textBoxName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Binding_Uri/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Binding_Uri/UI/Source/DemoReflection.cpp index e3c3f4f6..4a89098b 100644 --- a/Tutorial/GacUI_Xml/Binding_Uri/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Binding_Uri/UI/Source/DemoReflection.cpp @@ -36,26 +36,40 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(documentLabel_ActiveHyperlinkExecuted, { L"sender" _ L"arguments" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(documentLabel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Binding_ViewModel/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Binding_ViewModel/UI/Source/DemoReflection.cpp index b747c941..d0ab799d 100644 --- a/Tutorial/GacUI_Xml/Binding_ViewModel/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Binding_ViewModel/UI/Source/DemoReflection.cpp @@ -42,11 +42,13 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -54,17 +56,29 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxName) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Event_Cpp/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Event_Cpp/UI/Source/DemoReflection.cpp index 41931721..b9c3b836 100644 --- a/Tutorial/GacUI_Xml/Event_Cpp/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Event_Cpp/UI/Source/DemoReflection.cpp @@ -36,37 +36,63 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(buttonCalculate_Clicked, { L"sender" _ L"arguments" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(textBoxA) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxB) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxC) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Event_Script/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Event_Script/UI/Source/DemoReflection.cpp index 89a93744..5479874f 100644 --- a/Tutorial/GacUI_Xml/Event_Script/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Event_Script/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,27 +46,49 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(textBoxA) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxB) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxC) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Event_ViewModel/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Event_ViewModel/UI/Source/DemoReflection.cpp index 7c4cf186..2aa1dcb5 100644 --- a/Tutorial/GacUI_Xml/Event_ViewModel/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Event_ViewModel/UI/Source/DemoReflection.cpp @@ -43,11 +43,13 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -55,28 +57,51 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxA) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxB) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxC) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Instance_Control/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Instance_Control/UI/Source/DemoReflection.cpp index 3c764ae5..f4c2f158 100644 --- a/Tutorial/GacUI_Xml/Instance_Control/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Instance_Control/UI/Source/DemoReflection.cpp @@ -38,6 +38,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -47,12 +48,17 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::MyControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MyControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::MyControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MyControl*(), NO_PARAMETER) @@ -62,10 +68,15 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MyControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MyControl_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(::demo::MyControlConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Instance_MultipleWindows/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Instance_MultipleWindows/UI/Source/DemoReflection.cpp index cb949455..1cf7e0f9 100644 --- a/Tutorial/GacUI_Xml/Instance_MultipleWindows/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Instance_MultipleWindows/UI/Source/DemoReflection.cpp @@ -38,6 +38,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::AnotherWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::AnotherWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::AnotherWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::AnotherWindow*(), NO_PARAMETER) @@ -47,26 +48,39 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::AnotherWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_AnotherWindow_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) END_CLASS_MEMBER(::demo::AnotherWindowConstructor) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(buttonShowWindow_Clicked, { L"sender" _ L"arguments" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Instance_Window/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Instance_Window/UI/Source/DemoReflection.cpp index 7e9818c6..9e95f1be 100644 --- a/Tutorial/GacUI_Xml/Instance_Window/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Instance_Window/UI/Source/DemoReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,9 +46,13 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Member_Field/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Member_Field/UI/Source/DemoReflection.cpp index 495b9911..fcdf9dbe 100644 --- a/Tutorial/GacUI_Xml/Member_Field/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Member_Field/UI/Source/DemoReflection.cpp @@ -36,32 +36,53 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_File, ::vl::WString::Unmanaged(L"MainWindow")) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) CLASS_MEMBER_METHOD(buttonPaste_Clicked, { L"sender" _ L"arguments" }) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_UserImpl) CLASS_MEMBER_FIELD(integerState) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindow) BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor) CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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) CLASS_MEMBER_FIELD(textBoxA) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(textBoxB) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Member_Parameter/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Member_Parameter/UI/Source/DemoReflection.cpp index 018578da..3c4f1c6f 100644 --- a/Tutorial/GacUI_Xml/Member_Parameter/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Member_Parameter/UI/Source/DemoReflection.cpp @@ -42,11 +42,13 @@ namespace vl END_INTERFACE_MEMBER(::demo::IViewModel) BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(::vl::Ptr<::demo::IViewModel>), { L"__vwsn_ctor_parameter_ViewModel" }) CLASS_MEMBER_METHOD(GetViewModel, NO_PARAMETER) CLASS_MEMBER_FIELD(__vwsn_parameter_ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_READONLY(ViewModel, GetViewModel) END_CLASS_MEMBER(::demo::MainWindow) @@ -54,10 +56,15 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(ViewModel) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Member_Property/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Xml/Member_Property/UI/Source/DemoReflection.cpp index cfd7b2b4..845fc6c4 100644 --- a/Tutorial/GacUI_Xml/Member_Property/UI/Source/DemoReflection.cpp +++ b/Tutorial/GacUI_Xml/Member_Property/UI/Source/DemoReflection.cpp @@ -38,6 +38,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -47,13 +48,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(myControl) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MainWindowConstructor) BEGIN_CLASS_MEMBER(::demo::MyControl) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MyControlConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiCustomControl) CLASS_MEMBER_BASE(::demo::MyControlConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MyControl*(), NO_PARAMETER) @@ -61,6 +68,7 @@ namespace vl CLASS_MEMBER_METHOD(SetSelectedOption, { L"__vwsn_value_" }) CLASS_MEMBER_EVENT(SelectedOptionChanged) CLASS_MEMBER_FIELD(__vwsn_prop_SelectedOption) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Private) CLASS_MEMBER_PROPERTY_EVENT(SelectedOption, GetSelectedOption, SetSelectedOption, SelectedOptionChanged) END_CLASS_MEMBER(::demo::MyControl) @@ -68,16 +76,27 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MyControlConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MyControl_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(optionGroup) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) CLASS_MEMBER_FIELD(self) + ATTRIBUTE_MEMBER(::vl::__vwsn::att_cpp_Protected) END_CLASS_MEMBER(::demo::MyControlConstructor) #undef _ diff --git a/Tutorial/GacUI_Xml/Misc_ImportFolder/ResDerived/Source/ResDerivedReflection.cpp b/Tutorial/GacUI_Xml/Misc_ImportFolder/ResDerived/Source/ResDerivedReflection.cpp index 114566ed..2b3c7abe 100644 --- a/Tutorial/GacUI_Xml/Misc_ImportFolder/ResDerived/Source/ResDerivedReflection.cpp +++ b/Tutorial/GacUI_Xml/Misc_ImportFolder/ResDerived/Source/ResDerivedReflection.cpp @@ -36,6 +36,7 @@ namespace vl #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #define _ , BEGIN_CLASS_MEMBER(::demo::MainWindow) + ATTRIBUTE_TYPE(::vl::__vwsn::att_cpp_Friend, ::vl::reflection::description::GetTypeDescriptor(::vl::WString::Unmanaged(L"demo::MainWindowConstructor"))) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(::demo::MainWindowConstructor) CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER) @@ -45,12 +46,19 @@ namespace vl CLASS_MEMBER_BASE(::vl::reflection::DescriptableObject) CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER) CLASS_MEMBER_METHOD(__vwsn_demo_MainWindow_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(::demo::MainWindowConstructor) #undef _