/***********************************************************************
THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY
DEVELOPER: Zihan Chen(vczh)
***********************************************************************/
#include "GacUI.h"
#include "VlppWorkflowCompiler.h"
#include "VlppGlrParser.h"
#include "VlppWorkflowLibrary.h"
#include "VlppReflection.h"
#include "VlppOS.h"
#include "Vlpp.h"
#include "VlppRegex.h"
#include "VlppWorkflowRuntime.h"

/***********************************************************************
.\REFLECTION\GUIINSTANCECOMPILEDWORKFLOW.H
***********************************************************************/
/***********************************************************************
Vczh Library++ 3.0
Developer: Zihan Chen(vczh)
GacUI Reflection: Shared Script

Interfaces:
***********************************************************************/

#ifndef VCZH_PRESENTATION_REFLECTION_GUIINSTANCECOMPILEDWORKFLOW
#define VCZH_PRESENTATION_REFLECTION_GUIINSTANCECOMPILEDWORKFLOW


namespace vl
{
	namespace workflow
	{
		class WfModule;
	}

	namespace presentation
	{
		class GuiInstanceCompiledWorkflow : public Object, public Description<GuiInstanceCompiledWorkflow>
		{
		public:
			enum AssemblyType
			{
				Shared,
				InstanceClass,
				TemporaryClass,
			};

			struct ModuleRecord
			{
				Ptr<workflow::WfModule>							module;
				GuiResourceTextPos								position;
				bool											shared = false;
			};
			
			collections::List<ModuleRecord>						modules;
			Ptr<workflow::analyzer::WfLexicalScopeManager>		metadata;
			Ptr<stream::MemoryStream>							binaryToLoad;

			AssemblyType										type = AssemblyType::Shared;
			Ptr<workflow::runtime::WfAssembly>					assembly;
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
			Ptr<workflow::runtime::WfRuntimeGlobalContext>		context;
#endif

			GuiInstanceCompiledWorkflow();
			~GuiInstanceCompiledWorkflow();

			bool												Initialize(bool initializeContext, workflow::runtime::WfAssemblyLoadErrors& loadErrors);
			void												UnloadAssembly();
			void												UnloadTypes();
		};
	}
}

#endif

/***********************************************************************
.\REFLECTION\TYPEDESCRIPTORS\GUIREFLECTIONPLUGIN.H
***********************************************************************/
/***********************************************************************
Vczh Library++ 3.0
Developer: Zihan Chen(vczh)
GacUI Reflection: Basic

Interfaces:
***********************************************************************/

#ifdef VCZH_DEBUG_NO_REFLECTION
static_assert(false, "Don't use GacUIReflection.(h|cpp) if VCZH_DEBUG_NO_REFLECTION is defined.");
#endif

#ifndef VCZH_PRESENTATION_REFLECTION_GUIREFLECTIONPLUGIN
#define VCZH_PRESENTATION_REFLECTION_GUIREFLECTIONPLUGIN


namespace vl
{
	namespace reflection
	{
		namespace description
		{

#ifndef VCZH_DEBUG_NO_REFLECTION

/***********************************************************************
Type List (Basic)
***********************************************************************/

#define GUIREFLECTIONBASIC_TYPELIST(F)\
			F(presentation::helper_types::SiteValue)\
			F(presentation::helper_types::LocalizedStrings)\
			F(presentation::Color)\
			F(presentation::Alignment)\
			F(presentation::AxisDirection)\
			F(presentation::TextPos)\
			F(presentation::GridPos)\
			F(presentation::NativeCoordinate)\
			F(presentation::Point)\
			F(presentation::NativePoint)\
			F(presentation::Size)\
			F(presentation::NativeSize)\
			F(presentation::Rect)\
			F(presentation::NativeRect)\
			F(presentation::Margin)\
			F(presentation::NativeMargin)\
			F(presentation::FontProperties)\
			F(presentation::VKEY)\
			F(presentation::GlobalStringKey)\
			F(presentation::INativeImageFrame)\
			F(presentation::INativeImage)\
			F(presentation::INativeImage::FormatType)\
			F(presentation::INativeCursor)\
			F(presentation::INativeCursor::SystemCursorType)\
			F(presentation::BoolOption)\
			F(presentation::NativeWindowFrameConfig)\
			F(presentation::INativeWindow)\
			F(presentation::INativeWindow::WindowSizeState)\
			F(presentation::INativeWindow::WindowMode)\
			F(presentation::INativeDelay)\
			F(presentation::INativeDelay::ExecuteStatus)\
			F(presentation::INativeScreen)\
			F(presentation::INativeImageService)\
			F(presentation::INativeResourceService)\
			F(presentation::INativeAsyncService)\
			F(presentation::INativeClipboardReader)\
			F(presentation::INativeClipboardWriter)\
			F(presentation::INativeClipboardService)\
			F(presentation::INativeScreenService)\
			F(presentation::NativeGlobalShortcutKeyResult)\
			F(presentation::INativeInputService)\
			F(presentation::INativeDialogService::MessageBoxButtonsInput)\
			F(presentation::INativeDialogService::MessageBoxButtonsOutput)\
			F(presentation::INativeDialogService::MessageBoxDefaultButton)\
			F(presentation::INativeDialogService::MessageBoxIcons)\
			F(presentation::INativeDialogService::MessageBoxModalOptions)\
			F(presentation::INativeDialogService::ColorDialogCustomColorOptions)\
			F(presentation::INativeDialogService::FileDialogTypes)\
			F(presentation::INativeDialogService::FileDialogOptions)\
			F(presentation::INativeWindowListener::HitTestResult)\
			F(presentation::INativeController)\
			F(presentation::GuiImageData)\
			F(presentation::GuiTextData)\
			F(presentation::DocumentFontSize)\
			F(presentation::DocumentStyleProperties)\
			F(presentation::DocumentRun)\
			F(presentation::DocumentContainerRun)\
			F(presentation::DocumentContentRun)\
			F(presentation::DocumentTextRun)\
			F(presentation::DocumentInlineObjectRun)\
			F(presentation::DocumentImageRun)\
			F(presentation::DocumentEmbeddedObjectRun)\
			F(presentation::DocumentStylePropertiesRun)\
			F(presentation::DocumentStyleApplicationRun)\
			F(presentation::DocumentHyperlinkRun::Package)\
			F(presentation::DocumentHyperlinkRun)\
			F(presentation::DocumentParagraphRun)\
			F(presentation::DocumentStyle)\
			F(presentation::DocumentModel)\
			F(presentation::GuiResourceNodeBase)\
			F(presentation::GuiResourceLocation)\
			F(presentation::GuiResourceTextPos)\
			F(presentation::GuiResourceError)\
			F(presentation::GuiResourceItem)\
			F(presentation::GuiResourceFolder)\
			F(presentation::GuiResource)\
			F(presentation::GuiResourcePathResolver)\
			F(presentation::GuiResourceUsage)\
			F(presentation::IGuiResourceManager)\
			F(presentation::IMessageBoxDialogAction)\
			F(presentation::IMessageBoxDialogViewModel)\
			F(presentation::IDialogConfirmation)\
			F(presentation::IColorDialogViewModel)\
			F(presentation::ICommonFontDialogViewModel)\
			F(presentation::ISimpleFontDialogViewModel)\
			F(presentation::IFullFontDialogViewModel)\
			F(presentation::FileDialogFolderType)\
			F(presentation::IFileDialogFolder)\
			F(presentation::FileDialogFileType)\
			F(presentation::IFileDialogFile)\
			F(presentation::IFileDialogFilter)\
			F(presentation::IFileDialogViewModel)\

/***********************************************************************
Type List (Elements)
***********************************************************************/

#define GUIREFLECTIONELEMENT_EXTRA_TYPELIST(F)\
			F(presentation::elements::IGuiGraphicsElement)\
			F(presentation::elements::IGuiGraphicsParagraph)\
			F(presentation::elements::IGuiGraphicsParagraph::CaretRelativePosition)\
			F(presentation::elements::ElementShapeType)\
			F(presentation::elements::ElementShape)\
			F(presentation::elements::Gui3DSplitterElement::Direction)\
			F(presentation::elements::GuiGradientBackgroundElement::Direction)\

#define GUIREFLECTIONELEMENT_CLASS_TYPELIST(F)\
			F(presentation::elements::GuiFocusRectangleElement)\
			F(presentation::elements::GuiSolidBorderElement)\
			F(presentation::elements::Gui3DBorderElement)\
			F(presentation::elements::Gui3DSplitterElement)\
			F(presentation::elements::GuiSolidBackgroundElement)\
			F(presentation::elements::GuiGradientBackgroundElement)\
			F(presentation::elements::GuiInnerShadowElement)\
			F(presentation::elements::GuiSolidLabelElement)\
			F(presentation::elements::GuiImageFrameElement)\
			F(presentation::elements::GuiPolygonElement)\
			F(presentation::elements::GuiDocumentElement)\

#define GUIREFLECTIONELEMENT_TYPELIST(F)\
			GUIREFLECTIONELEMENT_CLASS_TYPELIST(F)\
			GUIREFLECTIONELEMENT_EXTRA_TYPELIST(F)\

/***********************************************************************
Type List (Compositions)
***********************************************************************/

#define GUIREFLECTIONCOMPOSITION_EXTRA_TYPELIST(F)\
			F(presentation::compositions::KeyDirection)\
			F(presentation::compositions::IGuiAxis)\
			F(presentation::compositions::GuiDefaultAxis)\
			F(presentation::compositions::GuiAxis)\
			F(presentation::compositions::GuiGraphicsComposition::MinSizeLimitation)\
			F(presentation::compositions::GuiStackComposition::Direction)\
			F(presentation::compositions::GuiCellOption::ComposeType)\
			F(presentation::compositions::GuiCellOption)\
			F(presentation::compositions::GuiFlowOption)\
			F(presentation::compositions::GuiFlowOption::BaselineType)\
			F(presentation::compositions::FlowAlignment)\
			F(presentation::compositions::GuiSideAlignedComposition::Direction)\
			F(presentation::compositions::ResponsiveDirection)\
			F(presentation::compositions::IGuiShortcutKeyItem)\
			F(presentation::compositions::IGuiShortcutKeyManager)\
			F(presentation::compositions::GuiShortcutKeyManager)\
			F(presentation::compositions::IGuiAltAction)\
			F(presentation::compositions::IGuiAltActionContainer)\
			F(presentation::compositions::IGuiAltActionHost)\
			F(presentation::compositions::IGuiTabAction)\
			F(presentation::compositions::GuiRepeatCompositionBase)\
			F(presentation::compositions::VirtualRepeatEnsureItemVisibleResult)\

#define GUIREFLECTIONCOMPOSITION_CLASS_TYPELIST(F)\
			F(presentation::compositions::GuiGraphicsComposition)\
			F(presentation::compositions::GuiWindowComposition)\
			F(presentation::compositions::GuiBoundsComposition)\
			F(presentation::compositions::GuiStackComposition)\
			F(presentation::compositions::GuiStackItemComposition)\
			F(presentation::compositions::GuiTableComposition)\
			F(presentation::compositions::GuiCellComposition)\
			F(presentation::compositions::GuiTableSplitterCompositionBase)\
			F(presentation::compositions::GuiRowSplitterComposition)\
			F(presentation::compositions::GuiColumnSplitterComposition)\
			F(presentation::compositions::GuiFlowComposition)\
			F(presentation::compositions::GuiFlowItemComposition)\
			F(presentation::compositions::GuiSideAlignedComposition)\
			F(presentation::compositions::GuiPartialViewComposition)\
			F(presentation::compositions::GuiSharedSizeItemComposition)\
			F(presentation::compositions::GuiSharedSizeRootComposition)\
			F(presentation::compositions::GuiNonVirtialRepeatCompositionBase)\
			F(presentation::compositions::GuiRepeatStackComposition)\
			F(presentation::compositions::GuiRepeatFlowComposition)\
			F(presentation::compositions::GuiVirtualRepeatCompositionBase)\
			F(presentation::compositions::GuiRepeatFreeHeightItemComposition)\
			F(presentation::compositions::GuiRepeatFixedHeightItemComposition)\
			F(presentation::compositions::GuiRepeatFixedSizeMultiColumnItemComposition)\
			F(presentation::compositions::GuiRepeatFixedHeightMultiColumnItemComposition)\
			F(presentation::compositions::GuiResponsiveCompositionBase)\
			F(presentation::compositions::GuiResponsiveSharedComposition)\
			F(presentation::compositions::GuiResponsiveViewComposition)\
			F(presentation::compositions::GuiResponsiveFixedComposition)\
			F(presentation::compositions::GuiResponsiveStackComposition)\
			F(presentation::compositions::GuiResponsiveGroupComposition)\
			F(presentation::compositions::GuiResponsiveContainerComposition)\

#define GUIREFLECTIONCOMPOSITION_TYPELIST(F)\
			GUIREFLECTIONCOMPOSITION_CLASS_TYPELIST(F)\
			GUIREFLECTIONCOMPOSITION_EXTRA_TYPELIST(F)\

/***********************************************************************
Type List (Events)
***********************************************************************/

#define GUIREFLECTIONEVENT_TYPELIST(F)\
			F(presentation::compositions::GuiEventArgs)\
			F(presentation::compositions::GuiRequestEventArgs)\
			F(presentation::compositions::GuiKeyEventArgs)\
			F(presentation::compositions::GuiCharEventArgs)\
			F(presentation::compositions::GuiMouseEventArgs)\
			F(presentation::compositions::ControlSignal)\
			F(presentation::compositions::GuiControlSignalEventArgs)\
			F(presentation::compositions::GuiItemEventArgs)\
			F(presentation::compositions::GuiItemMouseEventArgs)\
			F(presentation::compositions::GuiNodeEventArgs)\
			F(presentation::compositions::GuiNodeMouseEventArgs)\

/***********************************************************************
Type List (Templates)
***********************************************************************/

#define GUIREFLECTIONTEMPLATES_EXTRA_TYPELIST(F)\
			F(presentation::controls::ButtonState)\
			F(presentation::controls::ColumnSortingState)\
			F(presentation::controls::TabPageOrder)\
			F(presentation::controls::ITextBoxCommandExecutor)\
			F(presentation::controls::IScrollCommandExecutor)\
			F(presentation::controls::ITabCommandExecutor)\
			F(presentation::controls::IDatePickerCommandExecutor)\
			F(presentation::controls::IRibbonGroupCommandExecutor)\
			F(presentation::controls::IRibbonGalleryCommandExecutor)\
			F(presentation::controls::GuiComponent)\
			F(presentation::controls::IGuiAnimation)\
			F(presentation::controls::IGuiAnimationCoroutine::IImpl)\
			F(presentation::controls::IGuiAnimationCoroutine)\
			F(presentation::controls::GuiInstanceRootObject)\
			F(presentation::templates::GuiCommonScrollBehavior)\

#define GUIREFLECTIONTEMPLATES_CLASS_TYPELIST(F)\
			F(presentation::templates::GuiTemplate)\
			F(presentation::templates::GuiCommonDatePickerLook)\
			F(presentation::templates::GuiCommonScrollViewLook)\
			GUI_CORE_CONTROL_TEMPLATE_DECL(GUIREFLECTIONTEMPLATES_##F)\
			GUI_CONTROL_TEMPLATE_DECL(GUIREFLECTIONTEMPLATES_##F)\
			GUI_ITEM_TEMPLATE_DECL(GUIREFLECTIONTEMPLATES_##F)\
			F(presentation::controls::list::MainColumnVisualizerTemplate)\
			F(presentation::controls::list::SubColumnVisualizerTemplate)\
			F(presentation::controls::list::HyperlinkVisualizerTemplate)\
			F(presentation::controls::list::FocusRectangleVisualizerTemplate)\
			F(presentation::controls::list::CellBorderVisualizerTemplate)\

#define GUIREFLECTIONTEMPLATES_TYPELIST(F)\
			GUIREFLECTIONTEMPLATES_CLASS_TYPELIST(F)\
			GUIREFLECTIONTEMPLATES_EXTRA_TYPELIST(F)\

/***********************************************************************
Type List (Controls)
***********************************************************************/

#define GUIREFLECTIONCONTROLS_EXTRA_TYPELIST(F)\
			F(presentation::controls::GuiApplication)\
			F(presentation::theme::ThemeName)\
			F(presentation::theme::ITheme)\
			F(presentation::theme::ThemeTemplates)\
			F(presentation::controls::GuiDisposedFlag)\
			F(presentation::controls::GuiDialogBase)\
			F(presentation::controls::GuiMessageDialog)\
			F(presentation::controls::GuiColorDialog)\
			F(presentation::controls::GuiFontDialog)\
			F(presentation::controls::GuiFileDialogBase)\
			F(presentation::controls::GuiOpenFileDialog)\
			F(presentation::controls::GuiSaveFileDialog)\
			F(presentation::controls::GuiSelectableButton::GroupController)\
			F(presentation::controls::GuiSelectableButton::MutexGroupController)\
			F(presentation::controls::list::IItemProviderCallback)\
			F(presentation::controls::list::IItemProvider)\
			F(presentation::controls::GuiListControl::IItemArrangerCallback)\
			F(presentation::controls::GuiListControl::EnsureItemVisibleResult)\
			F(presentation::controls::GuiListControl::IItemArranger)\
			F(presentation::controls::list::ItemProviderBase)\
			F(presentation::controls::list::RangedItemArrangerBase)\
			F(presentation::controls::list::FreeHeightItemArranger)\
			F(presentation::controls::list::FixedHeightItemArranger)\
			F(presentation::controls::list::FixedSizeMultiColumnItemArranger)\
			F(presentation::controls::list::FixedHeightMultiColumnItemArranger)\
			F(presentation::controls::list::ITextItemView)\
			F(presentation::controls::list::TextItem)\
			F(presentation::controls::list::TextItemProvider)\
			F(presentation::controls::TextListView)\
			F(presentation::controls::list::IListViewItemView)\
			F(presentation::controls::list::IColumnItemViewCallback)\
			F(presentation::controls::list::IColumnItemView)\
			F(presentation::controls::list::ListViewColumnItemArranger)\
			F(presentation::controls::list::ListViewItem)\
			F(presentation::controls::list::ListViewColumn)\
			F(presentation::controls::ListViewView)\
			F(presentation::controls::list::ListViewItemProvider)\
			F(presentation::controls::IGuiMenuService)\
			F(presentation::controls::IGuiMenuService::Direction)\
			F(presentation::controls::IGuiMenuDropdownProvider)\
			F(presentation::controls::tree::INodeProviderCallback)\
			F(presentation::controls::tree::INodeProvider)\
			F(presentation::controls::tree::INodeRootProvider)\
			F(presentation::controls::tree::INodeItemView)\
			F(presentation::controls::tree::NodeItemProvider)\
			F(presentation::controls::tree::MemoryNodeProvider)\
			F(presentation::controls::tree::NodeRootProviderBase)\
			F(presentation::controls::tree::MemoryNodeRootProvider)\
			F(presentation::controls::tree::ITreeViewItemView)\
			F(presentation::controls::tree::TreeViewItem)\
			F(presentation::controls::tree::TreeViewItemRootProvider)\
			F(presentation::controls::GuiToolstripCommand)\
			F(presentation::controls::RibbonButtonSize)\
			F(presentation::controls::GalleryPos)\
			F(presentation::controls::list::GalleryGroup)\
			F(presentation::controls::list::GroupedDataSource)\
			F(presentation::controls::GuiDocumentEditMode)\
			F(presentation::controls::GuiDocumentParagraphMode)\
			F(presentation::controls::GuiDocumentConfig)\
			F(presentation::controls::GuiDocumentItem)\
			F(presentation::controls::GuiDocumentCommonInterface)\
			F(presentation::controls::list::IDataGridContext)\
			F(presentation::controls::list::IDataVisualizerFactory)\
			F(presentation::controls::list::IDataVisualizer)\
			F(presentation::controls::list::IDataEditorFactory)\
			F(presentation::controls::list::IDataEditor)\
			F(presentation::controls::list::IDataGridView)\
			F(presentation::controls::list::DataVisualizerBase)\
			F(presentation::controls::list::DataVisualizerFactory)\
			F(presentation::controls::list::DataEditorBase)\
			F(presentation::controls::list::DataEditorFactory)\
			F(presentation::controls::list::IDataProcessorCallback)\
			F(presentation::controls::list::IDataFilter)\
			F(presentation::controls::list::IDataSorter)\
			F(presentation::controls::list::DataFilterBase)\
			F(presentation::controls::list::DataMultipleFilter)\
			F(presentation::controls::list::DataAndFilter)\
			F(presentation::controls::list::DataOrFilter)\
			F(presentation::controls::list::DataNotFilter)\
			F(presentation::controls::list::DataSorterBase)\
			F(presentation::controls::list::DataMultipleSorter)\
			F(presentation::controls::list::DataReverseSorter)\
			F(presentation::controls::list::DataColumn)\
			F(presentation::controls::list::DataProvider)\
			F(presentation::controls::TextItemBindableProvider)\
			F(presentation::controls::ListViewItemBindableProvider)\
			F(presentation::controls::TreeViewItemBindableNode)\
			F(presentation::controls::TreeViewItemBindableRootProvider)\

#define GUIREFLECTIONCONTROLS_CLASS_TYPELIST(F)\
			F(presentation::controls::GuiControl)\
			F(presentation::controls::GuiCustomControl)\
			F(presentation::controls::GuiLabel)\
			F(presentation::controls::GuiButton)\
			F(presentation::controls::GuiSelectableButton)\
			F(presentation::controls::GuiScroll)\
			F(presentation::controls::GuiTabPage)\
			F(presentation::controls::GuiTab)\
			F(presentation::controls::GuiScrollView)\
			F(presentation::controls::GuiScrollContainer)\
			F(presentation::controls::GuiControlHost)\
			F(presentation::controls::GuiWindow)\
			F(presentation::controls::GuiPopup)\
			F(presentation::controls::GuiTooltip)\
			F(presentation::controls::GuiListControl)\
			F(presentation::controls::GuiSelectableListControl)\
			F(presentation::controls::GuiVirtualTextList)\
			F(presentation::controls::GuiTextList)\
			F(presentation::controls::GuiListViewColumnHeader)\
			F(presentation::controls::GuiListViewBase)\
			F(presentation::controls::GuiVirtualListView)\
			F(presentation::controls::GuiListView)\
			F(presentation::controls::GuiMenu)\
			F(presentation::controls::GuiMenuBar)\
			F(presentation::controls::GuiMenuButton)\
			F(presentation::controls::GuiVirtualTreeListControl)\
			F(presentation::controls::GuiVirtualTreeView)\
			F(presentation::controls::GuiTreeView)\
			F(presentation::controls::GuiComboBoxBase)\
			F(presentation::controls::GuiComboButton)\
			F(presentation::controls::GuiComboBoxListControl)\
			F(presentation::controls::GuiToolstripMenu)\
			F(presentation::controls::GuiToolstripMenuBar)\
			F(presentation::controls::GuiToolstripToolBar)\
			F(presentation::controls::GuiToolstripButton)\
			F(presentation::controls::GuiToolstripNestedContainer)\
			F(presentation::controls::GuiToolstripGroupContainer)\
			F(presentation::controls::GuiToolstripGroup)\
			F(presentation::controls::GuiRibbonTab)\
			F(presentation::controls::GuiRibbonTabPage)\
			F(presentation::controls::GuiRibbonGroup)\
			F(presentation::controls::GuiRibbonIconLabel)\
			F(presentation::controls::GuiRibbonButtons)\
			F(presentation::controls::GuiRibbonToolstrips)\
			F(presentation::controls::GuiRibbonGallery)\
			F(presentation::controls::GuiRibbonToolstripMenu)\
			F(presentation::controls::GuiBindableRibbonGalleryList)\
			F(presentation::controls::GuiDocumentViewer)\
			F(presentation::controls::GuiDocumentLabel)\
			F(presentation::controls::GuiMultilineTextBox)\
			F(presentation::controls::GuiSinglelineTextBox)\
			F(presentation::controls::GuiVirtualDataGrid)\
			F(presentation::controls::GuiDatePicker)\
			F(presentation::controls::GuiDateComboBox)\
			F(presentation::controls::GuiBindableTextList)\
			F(presentation::controls::GuiBindableListView)\
			F(presentation::controls::GuiBindableTreeView)\
			F(presentation::controls::GuiBindableDataGrid)\

#define GUIREFLECTIONCONTROLS_TYPELIST(F)\
			GUIREFLECTIONCONTROLS_CLASS_TYPELIST(F)\
			GUIREFLECTIONCONTROLS_EXTRA_TYPELIST(F)\

/***********************************************************************
Type List
***********************************************************************/

#define GUIREFLECTIONHELPERTYPES_TYPELIST(F)\
			F(presentation::helper_types::SiteValue)\

#define GUIREFLECTIONTEMPLATES_DECL_TYPE_INFO(NAME, BASE) DECL_TYPE_INFO(presentation::templates::NAME)

			GUIREFLECTIONBASIC_TYPELIST(DECL_TYPE_INFO)
			GUIREFLECTIONELEMENT_TYPELIST(DECL_TYPE_INFO)
			GUIREFLECTIONCOMPOSITION_TYPELIST(DECL_TYPE_INFO)
			GUIREFLECTIONEVENT_TYPELIST(DECL_TYPE_INFO)
			GUIREFLECTIONTEMPLATES_TYPELIST(DECL_TYPE_INFO)
			GUIREFLECTIONCONTROLS_TYPELIST(DECL_TYPE_INFO)

#undef GUIREFLECTIONTEMPLATES_DECL_TYPE_INFO

#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA

#pragma warning(push)
#pragma warning(disable:4250)

/***********************************************************************
GuiEventInfoImpl
***********************************************************************/

			template<typename T>
			class GuiEventInfoImpl : public EventInfoImpl, private IEventInfo::ICpp
			{
				using GuiGraphicsComposition = presentation::compositions::GuiGraphicsComposition;

				template<typename U>
				using GuiGraphicsEvent = presentation::compositions::GuiGraphicsEvent<U>;
			protected:
				typedef Func<GuiGraphicsEvent<T>*(DescriptableObject*, bool)>		EventRetriverFunction;

				EventRetriverFunction				eventRetriver;

				Ptr<IEventHandler> AttachInternal(DescriptableObject* thisObject, Ptr<IValueFunctionProxy> handler)override
				{
					GuiGraphicsEvent<T>* eventObject=eventRetriver(thisObject, true);
					auto func = [=](GuiGraphicsComposition* sender, T* arguments)
						{
							Value senderObject = BoxValue<GuiGraphicsComposition*>(sender, Description<GuiGraphicsComposition>::GetAssociatedTypeDescriptor());
							Value argumentsObject = BoxValue<T*>(arguments, Description<T>::GetAssociatedTypeDescriptor());

							auto eventArgs = IValueList::Create();
							eventArgs->Add(senderObject);
							eventArgs->Add(argumentsObject);
							handler->Invoke(eventArgs);
						};
					return __vwsn::EventAttach(*eventObject, func);
				}

				bool DetachInternal(DescriptableObject* thisObject, Ptr<IEventHandler> handler)override
				{
					GuiGraphicsEvent<T>* eventObject = eventRetriver(thisObject, false);
					if(eventObject)
					{
						return __vwsn::EventDetach(*eventObject, handler);
					}
					return false;
				}

				void InvokeInternal(DescriptableObject* thisObject, Ptr<IValueReadonlyList> arguments)override
				{
					GuiGraphicsEvent<T>* eventObject=eventRetriver(thisObject, false);
					if(eventObject)
					{
						auto sender = UnboxValue<GuiGraphicsComposition*>(arguments->Get(0), Description<GuiGraphicsComposition>::GetAssociatedTypeDescriptor());
						auto value=UnboxValue<T*>(arguments->Get(1), Description<T>::GetAssociatedTypeDescriptor());
						eventObject->ExecuteWithNewSender(*value, sender);
					}
				}

				Ptr<ITypeInfo> GetHandlerTypeInternal()override
				{
					return TypeInfoRetriver<Func<void(GuiGraphicsComposition*, T*)>>::CreateTypeInfo();
				}

			protected:
				bool								isCompositionEvent;
				
				static WString						attachTemplate;
				static WString						detachTemplate;
				static WString						invokeTemplate;

			public:
				GuiEventInfoImpl(ITypeDescriptor* _ownerTypeDescriptor, const WString& _name, const EventRetriverFunction& _eventRetriver, bool _isCompositionEvent)
					:EventInfoImpl(_ownerTypeDescriptor, _name)
					, eventRetriver(_eventRetriver)
					, isCompositionEvent(_isCompositionEvent)
				{
				}

				~GuiEventInfoImpl()
				{
				}

				IEventInfo::ICpp* GetCpp()override
				{
					return isCompositionEvent ? this : nullptr;
				}

				const WString& GetAttachTemplate()override
				{
					return attachTemplate;
				}

				const WString& GetDetachTemplate()override
				{
					return detachTemplate;
				}

				const WString& GetInvokeTemplate()override
				{
					return invokeTemplate;
				}
			};

			template<typename T>
			WString GuiEventInfoImpl<T>::attachTemplate = WString::Unmanaged(L"::vl::__vwsn::EventAttach($This->GetEventReceiver()->$Name, $Handler)");
			template<typename T>
			WString GuiEventInfoImpl<T>::detachTemplate = WString::Unmanaged(L"::vl::__vwsn::EventDetach($This->GetEventReceiver()->$Name, $Handler)");
			template<typename T>
			WString GuiEventInfoImpl<T>::invokeTemplate = WString::Unmanaged(L"::vl::__vwsn::EventInvoke($This->GetEventReceiver()->$Name, $Handler)");

			template<typename T>
			struct GuiEventArgumentTypeRetriver
			{
				typedef vint								Type;
			};

			template<typename TClass, typename TEvent>
			struct GuiEventArgumentTypeRetriver<TEvent TClass::*>
			{
				typedef typename TEvent::ArgumentType		Type;
			};

/***********************************************************************
Macros
***********************************************************************/

#define CLASS_MEMBER_GUIEVENT(EVENTNAME)\
			AddEvent(\
				Ptr(new GuiEventInfoImpl<GuiEventArgumentTypeRetriver<decltype(&ClassType::EVENTNAME)>::Type>(\
					this,\
					L ## #EVENTNAME,\
					[](DescriptableObject* thisObject, bool addEventHandler){\
						return &thisObject->SafeAggregationCast<ClassType>()->EVENTNAME;\
					},\
					false\
				))\
			);\

#define CLASS_MEMBER_GUIEVENT_COMPOSITION(EVENTNAME)\
			AddEvent(\
				Ptr(new GuiEventInfoImpl<GuiEventArgumentTypeRetriver<decltype(&GuiGraphicsEventReceiver::EVENTNAME)>::Type>(\
					this,\
					L ## #EVENTNAME,\
					[](DescriptableObject* thisObject, bool addEventHandler){\
						GuiGraphicsComposition* composition=thisObject->SafeAggregationCast<GuiGraphicsComposition>();\
						if(!addEventHandler && !composition->HasEventReceiver())\
						{\
							return (GuiGraphicsEvent<GuiEventArgumentTypeRetriver<decltype(&GuiGraphicsEventReceiver::EVENTNAME)>::Type>*)0;\
						}\
						return &composition->GetEventReceiver()->EVENTNAME;\
					},\
					true\
				))\
			);\

#define CLASS_MEMBER_PROPERTY_GUIEVENT_FAST(PROPERTYNAME)\
			CLASS_MEMBER_GUIEVENT(PROPERTYNAME##Changed)\
			CLASS_MEMBER_PROPERTY_EVENT_FAST(PROPERTYNAME, PROPERTYNAME##Changed)\

#define CLASS_MEMBER_PROPERTY_GUIEVENT_READONLY_FAST(PROPERTYNAME)\
			CLASS_MEMBER_GUIEVENT(PROPERTYNAME##Changed)\
			CLASS_MEMBER_PROPERTY_EVENT_READONLY_FAST(PROPERTYNAME, PROPERTYNAME##Changed)\

#define GUIEVENT_HANDLER_PARAMETERS {L"sender", L"arguments"}

#define CLASS_MEMBER_GUIEVENT_HANDLER(FUNCTIONNAME, ARGUMENTTYPE)\
			CLASS_MEMBER_EXTERNALMETHOD_INVOKETEMPLATE(\
				FUNCTIONNAME,\
				GUIEVENT_HANDLER_PARAMETERS,\
				void(ClassType::*)(vl::presentation::compositions::GuiGraphicsComposition*, ARGUMENTTYPE*),\
				[](ClassType* owner, vl::presentation::compositions::GuiGraphicsComposition* sender, ARGUMENTTYPE* arguments)\
				{\
					owner->FUNCTIONNAME(sender, *arguments);\
				},\
				L"[](auto owner, auto sender, auto arguments){ return owner->$Name(sender, *arguments); }($This, $Arguments)")\

/***********************************************************************
Interface Proxy (Compositions)
***********************************************************************/

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::IGuiAnimation)
				void Start()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(Start);
				}

				void Pause()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(Pause);
				}

				void Resume()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(Resume);
				}

				void Run()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(Run);
				}

				bool GetStopped()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetStopped);
				}
			END_INTERFACE_PROXY(presentation::controls::IGuiAnimation)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::compositions::IGuiAxis)
				presentation::Size RealSizeToVirtualSize(presentation::Size size)override
				{
					INVOKEGET_INTERFACE_PROXY(RealSizeToVirtualSize, size);
				}

				presentation::Size VirtualSizeToRealSize(presentation::Size size)override
				{
					INVOKEGET_INTERFACE_PROXY(VirtualSizeToRealSize, size);
				}

				presentation::Point RealPointToVirtualPoint(presentation::Size realFullSize, presentation::Point point)override
				{
					INVOKEGET_INTERFACE_PROXY(RealPointToVirtualPoint, realFullSize, point);
				}

				presentation::Point VirtualPointToRealPoint(presentation::Size realFullSize, presentation::Point point)override
				{
					INVOKEGET_INTERFACE_PROXY(VirtualPointToRealPoint, realFullSize, point);
				}

				presentation::Rect RealRectToVirtualRect(presentation::Size realFullSize, presentation::Rect rect)override
				{
					INVOKEGET_INTERFACE_PROXY(RealRectToVirtualRect, realFullSize, rect);
				}

				presentation::Rect VirtualRectToRealRect(presentation::Size realFullSize, presentation::Rect rect)override
				{
					INVOKEGET_INTERFACE_PROXY(VirtualRectToRealRect, realFullSize, rect);
				}

				presentation::Margin RealMarginToVirtualMargin(presentation::Margin margin)override
				{
					INVOKEGET_INTERFACE_PROXY(RealMarginToVirtualMargin, margin);
				}

				presentation::Margin VirtualMarginToRealMargin(presentation::Margin margin)override
				{
					INVOKEGET_INTERFACE_PROXY(VirtualMarginToRealMargin, margin);
				}

				presentation::compositions::KeyDirection RealKeyDirectionToVirtualKeyDirection(presentation::compositions::KeyDirection key)override
				{
					INVOKEGET_INTERFACE_PROXY(RealKeyDirectionToVirtualKeyDirection, key);
				}
			END_INTERFACE_PROXY(presentation::compositions::IGuiAxis)

/***********************************************************************
Interface Proxy (Controls)
***********************************************************************/

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IItemProviderCallback)

				void OnAttached(presentation::controls::list::IItemProvider* provider)override
				{
					INVOKE_INTERFACE_PROXY(OnAttached, provider);
				}

				void OnItemModified(vint start, vint count, vint newCount, bool itemReferenceUpdated)override
				{
					INVOKE_INTERFACE_PROXY(OnItemModified, start, count, newCount, itemReferenceUpdated);
				}
			END_INTERFACE_PROXY(presentation::controls::GuiListControl::IItemProviderCallback)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IItemProvider)

				bool AttachCallback(presentation::controls::list::IItemProviderCallback* value)override
				{
					INVOKEGET_INTERFACE_PROXY(AttachCallback, value);
				}

				bool DetachCallback(presentation::controls::list::IItemProviderCallback* value)override
				{
					INVOKEGET_INTERFACE_PROXY(DetachCallback, value);
				}

				void PushEditing()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(PushEditing);
				}

				bool PopEditing()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(PopEditing);
				}

				bool IsEditing()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(IsEditing);
				}

				vint Count()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Count);
				}

				WString GetTextValue(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(GetTextValue, itemIndex);
				}

				description::Value GetBindingValue(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(GetBindingValue, itemIndex);
				}

				IDescriptable* RequestView(const WString& identifier)override
				{
					INVOKEGET_INTERFACE_PROXY(RequestView, identifier);
				}
			END_INTERFACE_PROXY(presentation::controls::GuiListControl::IItemProvider)
			
			BEGIN_INTERFACE_PROXY_SHAREDPTR(presentation::controls::GuiListControl::IItemArranger,
				presentation::controls::list::IItemProviderCallback
				)

				void AttachListControl(presentation::controls::GuiListControl* value)override
				{
					INVOKE_INTERFACE_PROXY(AttachListControl, value);
				}

				void DetachListControl()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(DetachListControl);
				}

				presentation::controls::GuiListControl::IItemArrangerCallback* GetCallback()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetCallback);
				}

				void SetCallback(presentation::controls::GuiListControl::IItemArrangerCallback* value)override
				{
					INVOKE_INTERFACE_PROXY(SetCallback, value);
				}

				presentation::Size GetTotalSize()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetTotalSize);
				}

				presentation::controls::GuiListControl::ItemStyle* GetVisibleStyle(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(GetVisibleStyle, itemIndex);
				}

				vint GetVisibleIndex(presentation::controls::GuiListControl::ItemStyle* style)override
				{
					INVOKEGET_INTERFACE_PROXY(GetVisibleIndex, style);
				}

				void ReloadVisibleStyles()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(ReloadVisibleStyles);
				}

				void OnViewChanged(presentation::Rect bounds)override
				{
					INVOKE_INTERFACE_PROXY(OnViewChanged, bounds);
				}

				vint FindItemByVirtualKeyDirection(vint itemIndex, presentation::compositions::KeyDirection key)override
				{
					INVOKEGET_INTERFACE_PROXY(FindItemByVirtualKeyDirection, itemIndex, key);
				}

				presentation::controls::GuiListControl::EnsureItemVisibleResult EnsureItemVisible(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(EnsureItemVisible, itemIndex);
				}

				presentation::Size GetAdoptedSize(presentation::Size expectedSize)override
				{
					INVOKEGET_INTERFACE_PROXY(GetAdoptedSize, expectedSize);
				}
			END_INTERFACE_PROXY(presentation::controls::GuiListControl::IItemArranger)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::ITextItemView)

				bool GetChecked(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(GetChecked, itemIndex);
				}

				void SetChecked(vint itemIndex, bool value)override
				{
					INVOKE_INTERFACE_PROXY(SetChecked, itemIndex, value);
				}
			END_INTERFACE_PROXY(presentation::controls::list::ITextItemView)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IListViewItemView)

				Ptr<presentation::GuiImageData> GetSmallImage(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(GetSmallImage, itemIndex);
				}

				Ptr<presentation::GuiImageData> GetLargeImage(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(GetLargeImage, itemIndex);
				}

				WString GetText(vint itemIndex)override
				{
					INVOKEGET_INTERFACE_PROXY(GetText, itemIndex);
				}

				WString GetSubItem(vint itemIndex, vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetSubItem, itemIndex, index);
				}

				vint GetDataColumnCount()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetDataColumnCount);
				}

				vint GetDataColumn(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetDataColumn, index);
				}

				vint GetColumnCount()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetColumnCount);
				}

				WString GetColumnText(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetColumnText, index);
				}
			END_INTERFACE_PROXY(presentation::controls::list::IListViewItemView)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IColumnItemView)

				bool AttachCallback(presentation::controls::list::IColumnItemViewCallback* value)override
				{
					INVOKEGET_INTERFACE_PROXY(AttachCallback, value);
				}

				bool DetachCallback(presentation::controls::list::IColumnItemViewCallback* value)override
				{
					INVOKEGET_INTERFACE_PROXY(DetachCallback, value);
				}

				vint GetColumnSize(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetColumnSize, index);
				}

				void SetColumnSize(vint index, vint value)override
				{
					INVOKE_INTERFACE_PROXY(SetColumnSize, index, value);
				}

				presentation::controls::GuiMenu* GetDropdownPopup(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetDropdownPopup, index);
				}

				presentation::controls::ColumnSortingState GetSortingState(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetSortingState, index);
				}
			END_INTERFACE_PROXY(presentation::controls::list::IColumnItemView)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::tree::INodeProvider)

				bool GetExpanding()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetExpanding);
				}

				void SetExpanding(bool value)override
				{
					INVOKE_INTERFACE_PROXY(SetExpanding, value);
				}

				vint CalculateTotalVisibleNodes()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(CalculateTotalVisibleNodes);
				}

				void NotifyDataModified()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(NotifyDataModified);
				}

				vint GetChildCount()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetChildCount);
				}

				Ptr<presentation::controls::tree::INodeProvider> GetParent()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetParent);
				}

				Ptr<presentation::controls::tree::INodeProvider> GetChild(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetChild, index);
				}
			END_INTERFACE_PROXY(presentation::controls::tree::INodeProvider)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::tree::INodeRootProvider)

				Ptr<presentation::controls::tree::INodeProvider> GetRootNode()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetRootNode);
				}

				bool CanGetNodeByVisibleIndex()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(CanGetNodeByVisibleIndex);
				}

				Ptr<presentation::controls::tree::INodeProvider> GetNodeByVisibleIndex(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(GetNodeByVisibleIndex, index);
				}

				bool AttachCallback(presentation::controls::tree::INodeProviderCallback* value)override
				{
					INVOKEGET_INTERFACE_PROXY(AttachCallback, value);
				}

				bool DetachCallback(presentation::controls::tree::INodeProviderCallback* value)override
				{
					INVOKEGET_INTERFACE_PROXY(DetachCallback, value);
				}

				WString GetTextValue(presentation::controls::tree::INodeProvider* node)override
				{
					INVOKEGET_INTERFACE_PROXY(GetTextValue, node);
				}

				description::Value GetBindingValue(presentation::controls::tree::INodeProvider* node)override
				{
					INVOKEGET_INTERFACE_PROXY(GetBindingValue, node);
				}

				IDescriptable* RequestView(const WString& identifier)override
				{
					INVOKEGET_INTERFACE_PROXY(RequestView, identifier);
				}
			END_INTERFACE_PROXY(presentation::controls::tree::INodeRootProvider)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::tree::INodeItemView)

				Ptr<presentation::controls::tree::INodeProvider> RequestNode(vint index)override
				{
					INVOKEGET_INTERFACE_PROXY(RequestNode, index);
				}

				vint CalculateNodeVisibilityIndex(presentation::controls::tree::INodeProvider* node)override
				{
					INVOKEGET_INTERFACE_PROXY(CalculateNodeVisibilityIndex, node);
				}
			END_INTERFACE_PROXY(presentation::controls::tree::INodeItemView)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::tree::ITreeViewItemView)

				Ptr<presentation::GuiImageData> GetNodeImage(presentation::controls::tree::INodeProvider* node)override
				{
					INVOKEGET_INTERFACE_PROXY(GetNodeImage, node);
				}
			END_INTERFACE_PROXY(presentation::controls::tree::ITreeViewItemView)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IDataGridContext)

				presentation::controls::list::IItemProvider* GetItemProvider()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetItemProvider);
				}

				presentation::templates::GuiListViewTemplate* GetListViewControlTemplate()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetListViewControlTemplate);
				}

				void RequestSaveData()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(RequestSaveData);
				}

			END_INTERFACE_PROXY(presentation::controls::list::IDataGridContext)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IDataGridView)

				bool IsColumnSortable(vint column)override
				{
					INVOKEGET_INTERFACE_PROXY(IsColumnSortable, column);
				}

				void SortByColumn(vint column, bool ascending)override
				{
					INVOKE_INTERFACE_PROXY(SortByColumn, column, ascending);
				}

				vint GetSortedColumn()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetSortedColumn);
				}

				bool IsSortOrderAscending()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(IsSortOrderAscending);
				}

				vint GetCellSpan(vint row, vint column)override
				{
					INVOKEGET_INTERFACE_PROXY(GetCellSpan, row, column);
				}

				presentation::controls::list::IDataVisualizerFactory* GetCellDataVisualizerFactory(vint row, vint column)override
				{
					INVOKEGET_INTERFACE_PROXY(GetCellDataVisualizerFactory, row, column);
				}

				presentation::controls::list::IDataEditorFactory* GetCellDataEditorFactory(vint row, vint column)override
				{
					INVOKEGET_INTERFACE_PROXY(GetCellDataEditorFactory, row, column);
				}

				Value GetBindingCellValue(vint row, vint column)override
				{
					INVOKEGET_INTERFACE_PROXY(GetBindingCellValue, row, column);
				}

				void SetBindingCellValue(vint row, vint column, const Value& value)override
				{
					INVOKE_INTERFACE_PROXY(SetBindingCellValue, row, column, value);
				}
			END_INTERFACE_PROXY(presentation::controls::list::IDataGridView)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IDataProcessorCallback)

				presentation::controls::list::IItemProvider* GetItemProvider()override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(GetItemProvider);
				}

				void OnProcessorChanged()override
				{
					INVOKE_INTERFACE_PROXY_NOPARAMS(OnProcessorChanged);
				}

			END_INTERFACE_PROXY(presentation::controls::list::IDataFilterCallback)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IDataFilter)

				void SetCallback(presentation::controls::list::IDataProcessorCallback* value)override
				{
					INVOKE_INTERFACE_PROXY(SetCallback, value);
				}

				bool Filter(const Value& row)override
				{
					INVOKEGET_INTERFACE_PROXY(Filter, row);
				}
			END_INTERFACE_PROXY(presentation::controls::list::IDataFilter)

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(presentation::controls::list::IDataSorter)

				void SetCallback(presentation::controls::list::IDataProcessorCallback* value)override
				{
					INVOKE_INTERFACE_PROXY(SetCallback, value);
				}

				vint Compare(const Value& row1, const Value& row2)override
				{
					INVOKEGET_INTERFACE_PROXY(Compare, row1, row2);
				}
			END_INTERFACE_PROXY(presentation::controls::list::IDataSorter)

#pragma warning(pop)

#endif
#endif

		}
	}
}

#endif

/***********************************************************************
.\UTILITIES\FAKESERVICES\DIALOGS\SOURCE\GUIFAKEDIALOGSERVICEUIREFLECTION.H
***********************************************************************/
/***********************************************************************
!!!!!! DO NOT MODIFY !!!!!!

Source: GacUI FakeDialogServiceUI

This file is generated by Workflow compiler
https://github.com/vczh-libraries
***********************************************************************/

#ifndef VCZH_WORKFLOW_COMPILER_GENERATED_GUIFAKEDIALOGSERVICEUIREFLECTION
#define VCZH_WORKFLOW_COMPILER_GENERATED_GUIFAKEDIALOGSERVICEUIREFLECTION

#ifndef VCZH_DEBUG_NO_REFLECTION
#endif

#if defined( _MSC_VER)
#pragma warning(push)
#pragma warning(disable:4250)
#elif defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wparentheses-equality"
#elif defined(__GNUC__)
#pragma GCC diagnostic push
#endif

/***********************************************************************
Reflection
***********************************************************************/

namespace vl
{
	namespace reflection
	{
		namespace description
		{
#ifndef VCZH_DEBUG_NO_REFLECTION
			DECL_TYPE_INFO(::gaclib_controls::ColorComponentControl)
			DECL_TYPE_INFO(::gaclib_controls::ColorComponentControlConstructor)
			DECL_TYPE_INFO(::gaclib_controls::ColorDialogControl)
			DECL_TYPE_INFO(::gaclib_controls::ColorDialogControlConstructor)
			DECL_TYPE_INFO(::gaclib_controls::ColorDialogWindow)
			DECL_TYPE_INFO(::gaclib_controls::ColorDialogWindowConstructor)
			DECL_TYPE_INFO(::gaclib_controls::DialogStrings)
			DECL_TYPE_INFO(::gaclib_controls::FileDialogWindow)
			DECL_TYPE_INFO(::gaclib_controls::FileDialogWindowConstructor)
			DECL_TYPE_INFO(::gaclib_controls::FilePickerControl)
			DECL_TYPE_INFO(::gaclib_controls::FilePickerControlConstructor)
			DECL_TYPE_INFO(::gaclib_controls::FontNameControl)
			DECL_TYPE_INFO(::gaclib_controls::FontNameControlConstructor)
			DECL_TYPE_INFO(::gaclib_controls::FontSizeControl)
			DECL_TYPE_INFO(::gaclib_controls::FontSizeControlConstructor)
			DECL_TYPE_INFO(::gaclib_controls::FullFontDialogWindow)
			DECL_TYPE_INFO(::gaclib_controls::FullFontDialogWindowConstructor)
			DECL_TYPE_INFO(::gaclib_controls::IDialogStringsStrings)
			DECL_TYPE_INFO(::gaclib_controls::MessageBoxButtonTemplate)
			DECL_TYPE_INFO(::gaclib_controls::MessageBoxButtonTemplateConstructor)
			DECL_TYPE_INFO(::gaclib_controls::MessageBoxWindow)
			DECL_TYPE_INFO(::gaclib_controls::MessageBoxWindowConstructor)
			DECL_TYPE_INFO(::gaclib_controls::SimpleFontDialogWindow)
			DECL_TYPE_INFO(::gaclib_controls::SimpleFontDialogWindowConstructor)

#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA

			BEGIN_INTERFACE_PROXY_NOPARENT_SHAREDPTR(::gaclib_controls::IDialogStringsStrings)
				::vl::WString Abort() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Abort);
				}
				::vl::WString Blue() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Blue);
				}
				::vl::WString Bold() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Bold);
				}
				::vl::WString Cancel() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Cancel);
				}
				::vl::WString Color() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Color);
				}
				::vl::WString ColorDialogTitle() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(ColorDialogTitle);
				}
				::vl::WString Continue() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Continue);
				}
				::vl::WString FileDialogAskCreateFile() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogAskCreateFile);
				}
				::vl::WString FileDialogAskOverrideFile() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogAskOverrideFile);
				}
				::vl::WString FileDialogErrorEmptySelection() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogErrorEmptySelection);
				}
				::vl::WString FileDialogErrorFileExpected() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogErrorFileExpected);
				}
				::vl::WString FileDialogErrorFileNotExist() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogErrorFileNotExist);
				}
				::vl::WString FileDialogErrorFolderNotExist() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogErrorFolderNotExist);
				}
				::vl::WString FileDialogErrorMultipleSelectionNotEnabled() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogErrorMultipleSelectionNotEnabled);
				}
				::vl::WString FileDialogFileName() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogFileName);
				}
				::vl::WString FileDialogOpen() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogOpen);
				}
				::vl::WString FileDialogSave() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogSave);
				}
				::vl::WString FileDialogTextLoadingFiles() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogTextLoadingFiles);
				}
				::vl::WString FileDialogTextLoadingFolders() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FileDialogTextLoadingFolders);
				}
				::vl::WString FontColorGroup() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FontColorGroup);
				}
				::vl::WString FontColorGroup2() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FontColorGroup2);
				}
				::vl::WString FontDialogTitle() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FontDialogTitle);
				}
				::vl::WString FontEffectGroup() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FontEffectGroup);
				}
				::vl::WString FontNameGroup() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FontNameGroup);
				}
				::vl::WString FontPreviewGroup() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FontPreviewGroup);
				}
				::vl::WString FontSizeGroup() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(FontSizeGroup);
				}
				::vl::WString Green() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Green);
				}
				::vl::WString HAA() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(HAA);
				}
				::vl::WString Ignore() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Ignore);
				}
				::vl::WString Italic() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Italic);
				}
				::vl::WString No() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(No);
				}
				::vl::WString OK() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(OK);
				}
				::vl::WString Red() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Red);
				}
				::vl::WString Retry() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Retry);
				}
				::vl::WString Strikeline() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Strikeline);
				}
				::vl::WString TryAgain() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(TryAgain);
				}
				::vl::WString Underline() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Underline);
				}
				::vl::WString VAA() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(VAA);
				}
				::vl::WString Yes() override
				{
					INVOKEGET_INTERFACE_PROXY_NOPARAMS(Yes);
				}
			END_INTERFACE_PROXY(::gaclib_controls::IDialogStringsStrings)
#endif
#endif

			extern bool LoadGuiFakeDialogServiceUITypes();
		}
	}
}

#if defined( _MSC_VER)
#pragma warning(pop)
#elif defined(__clang__)
#pragma clang diagnostic pop
#elif defined(__GNUC__)
#pragma GCC diagnostic pop
#endif

#endif

