ControlTemplate/BlackSkin

This commit is contained in:
Zihan Chen
2017-01-28 13:20:16 -08:00
parent 46e9470d8f
commit 936ab5ada6
10 changed files with 15329 additions and 14157 deletions
+35 -137
View File
@@ -633,22 +633,27 @@ GuiApplicationMain
} }
GetCurrentController()->InputService()->StartTimer(); GetCurrentController()->InputService()->StartTimer();
GuiApplication app;
application=&app;
#ifndef VCZH_DEBUG_NO_REFLECTION #ifndef VCZH_DEBUG_NO_REFLECTION
GetGlobalTypeManager()->Load(); GetGlobalTypeManager()->Load();
#endif #endif
GetPluginManager()->Load(); GetPluginManager()->Load();
theme::SetCurrentTheme(theme.Obj()); theme::SetCurrentTheme(theme.Obj());
GuiMain();
{
GuiApplication app;
application = &app;
GuiMain();
}
application = nullptr;
theme::SetCurrentTheme(0); theme::SetCurrentTheme(0);
DestroyPluginManager(); DestroyPluginManager();
ThreadLocalStorage::DisposeStorages();
FinalizeGlobalStorage();
#ifndef VCZH_DEBUG_NO_REFLECTION #ifndef VCZH_DEBUG_NO_REFLECTION
DestroyGlobalTypeManager(); DestroyGlobalTypeManager();
#endif #endif
ThreadLocalStorage::DisposeStorages();
FinalizeGlobalStorage();
} }
} }
} }
@@ -24694,25 +24699,15 @@ namespace vl
using namespace reflection::description; using namespace reflection::description;
using namespace collections; using namespace collections;
#define INITIALIZE_FACTORY_FROM_TEMPLATE(VARIABLE, PROPERTY)\ #define GET_FACTORY_FROM_TEMPLATE(TEMPLATE, PROPERTY)\
controlTemplate->PROPERTY##Changed.AttachLambda([this](GuiGraphicsComposition*, GuiEventArgs&)\ return new TEMPLATE##_StyleProvider(controlTemplate->Get##PROPERTY());\
{\
this->VARIABLE = 0;\
});\
#define GET_FACTORY_FROM_TEMPLATE(TEMPLATE, VARIABLE, PROPERTY)\ #define GET_FACTORY_FROM_TEMPLATE_OPT(TEMPLATE, PROPERTY)\
if (!this->VARIABLE)\ if (controlTemplate->Get##PROPERTY() == nullptr)\
{\ {\
this->VARIABLE = CreateTemplateFactory(controlTemplate->Get##PROPERTY());\ return nullptr;\
}\ }\
return new TEMPLATE##_StyleProvider(this->VARIABLE);\ GET_FACTORY_FROM_TEMPLATE(TEMPLATE, PROPERTY)\
#define GET_FACTORY_FROM_TEMPLATE_OPT(TEMPLATE, VARIABLE, PROPERTY)\
if (controlTemplate->Get##PROPERTY() == L"")\
{\
return 0;\
}\
GET_FACTORY_FROM_TEMPLATE(TEMPLATE, VARIABLE, PROPERTY)\
/*********************************************************************** /***********************************************************************
GuiControlTemplate_StyleProvider GuiControlTemplate_StyleProvider
@@ -24880,8 +24875,6 @@ GuiWindowTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiWindowTemplate_StyleProvider::GuiWindowTemplate_StyleProvider()#An instance of GuiWindowTemplate is expected."); CHECK_FAIL(L"GuiWindowTemplate_StyleProvider::GuiWindowTemplate_StyleProvider()#An instance of GuiWindowTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(tooltipTemplateFactory, TooltipTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(shortcutKeyTemplateFactory, ShortcutKeyTemplate);
} }
GuiWindowTemplate_StyleProvider::~GuiWindowTemplate_StyleProvider() GuiWindowTemplate_StyleProvider::~GuiWindowTemplate_StyleProvider()
@@ -24987,12 +24980,12 @@ GuiWindowTemplate_StyleProvider
controls::GuiWindow::IStyleController* GuiWindowTemplate_StyleProvider::CreateTooltipStyle() controls::GuiWindow::IStyleController* GuiWindowTemplate_StyleProvider::CreateTooltipStyle()
{ {
GET_FACTORY_FROM_TEMPLATE_OPT(GuiWindowTemplate, tooltipTemplateFactory, TooltipTemplate); GET_FACTORY_FROM_TEMPLATE_OPT(GuiWindowTemplate, TooltipTemplate);
} }
controls::GuiLabel::IStyleController* GuiWindowTemplate_StyleProvider::CreateShortcutKeyStyle() controls::GuiLabel::IStyleController* GuiWindowTemplate_StyleProvider::CreateShortcutKeyStyle()
{ {
GET_FACTORY_FROM_TEMPLATE_OPT(GuiLabelTemplate, shortcutKeyTemplateFactory, ShortcutKeyTemplate); GET_FACTORY_FROM_TEMPLATE_OPT(GuiLabelTemplate, ShortcutKeyTemplate);
} }
#undef WINDOW_TEMPLATE_GET #undef WINDOW_TEMPLATE_GET
@@ -25053,7 +25046,6 @@ GuiToolstripButtonTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiButtonTemplate_StyleProvider::GuiButtonTemplate_StyleProvider()#An instance of GuiToolstripButtonTemplate is expected."); CHECK_FAIL(L"GuiButtonTemplate_StyleProvider::GuiButtonTemplate_StyleProvider()#An instance of GuiToolstripButtonTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(subMenuTemplateFactory, SubMenuTemplate);
} }
GuiToolstripButtonTemplate_StyleProvider::~GuiToolstripButtonTemplate_StyleProvider() GuiToolstripButtonTemplate_StyleProvider::~GuiToolstripButtonTemplate_StyleProvider()
@@ -25062,7 +25054,7 @@ GuiToolstripButtonTemplate_StyleProvider
controls::GuiMenu::IStyleController* GuiToolstripButtonTemplate_StyleProvider::CreateSubMenuStyleController() controls::GuiMenu::IStyleController* GuiToolstripButtonTemplate_StyleProvider::CreateSubMenuStyleController()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiMenuTemplate, subMenuTemplateFactory, SubMenuTemplate); GET_FACTORY_FROM_TEMPLATE(GuiMenuTemplate, SubMenuTemplate);
} }
void GuiToolstripButtonTemplate_StyleProvider::SetSubMenuExisting(bool value) void GuiToolstripButtonTemplate_StyleProvider::SetSubMenuExisting(bool value)
@@ -25154,9 +25146,6 @@ GuiDatePickerTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiDatePickerTemplate_StyleProvider::GuiDatePickerTemplate_StyleProvider()#An instance of GuiDatePickerTemplate is expected."); CHECK_FAIL(L"GuiDatePickerTemplate_StyleProvider::GuiDatePickerTemplate_StyleProvider()#An instance of GuiDatePickerTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(dateButtonTemplateFactory, DateButtonTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(dateTextListTemplateFactory, DateTextListTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(dateComboBoxTemplateFactory, DateComboBoxTemplate);
} }
GuiDatePickerTemplate_StyleProvider::~GuiDatePickerTemplate_StyleProvider() GuiDatePickerTemplate_StyleProvider::~GuiDatePickerTemplate_StyleProvider()
@@ -25166,12 +25155,12 @@ GuiDatePickerTemplate_StyleProvider
controls::GuiSelectableButton::IStyleController* GuiDatePickerTemplate_StyleProvider::CreateDateButtonStyle() controls::GuiSelectableButton::IStyleController* GuiDatePickerTemplate_StyleProvider::CreateDateButtonStyle()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, dateButtonTemplateFactory, DateButtonTemplate); GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, DateButtonTemplate);
} }
GuiTextListTemplate_StyleProvider* GuiDatePickerTemplate_StyleProvider::CreateTextListStyle() GuiTextListTemplate_StyleProvider* GuiDatePickerTemplate_StyleProvider::CreateTextListStyle()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiTextListTemplate, dateTextListTemplateFactory, DateTextListTemplate); GET_FACTORY_FROM_TEMPLATE(GuiTextListTemplate, DateTextListTemplate);
} }
controls::GuiTextList* GuiDatePickerTemplate_StyleProvider::CreateTextList() controls::GuiTextList* GuiDatePickerTemplate_StyleProvider::CreateTextList()
@@ -25182,7 +25171,7 @@ GuiDatePickerTemplate_StyleProvider
controls::GuiComboBoxListControl::IStyleController* GuiDatePickerTemplate_StyleProvider::CreateComboBoxStyle() controls::GuiComboBoxListControl::IStyleController* GuiDatePickerTemplate_StyleProvider::CreateComboBoxStyle()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiComboBoxTemplate, dateComboBoxTemplateFactory, DateComboBoxTemplate); GET_FACTORY_FROM_TEMPLATE(GuiComboBoxTemplate, DateComboBoxTemplate);
} }
Color GuiDatePickerTemplate_StyleProvider::GetBackgroundColor() Color GuiDatePickerTemplate_StyleProvider::GetBackgroundColor()
@@ -25211,7 +25200,6 @@ GuiDateComboBoxTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiDateComboBoxTemplate_StyleProvider::GuiDateComboBoxTemplate_StyleProvider()#An instance of GuiDateComboBoxTemplate is expected."); CHECK_FAIL(L"GuiDateComboBoxTemplate_StyleProvider::GuiDateComboBoxTemplate_StyleProvider()#An instance of GuiDateComboBoxTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(datePickerTemplateFactory, DatePickerTemplate);
} }
GuiDateComboBoxTemplate_StyleProvider::~GuiDateComboBoxTemplate_StyleProvider() GuiDateComboBoxTemplate_StyleProvider::~GuiDateComboBoxTemplate_StyleProvider()
@@ -25225,7 +25213,7 @@ GuiDateComboBoxTemplate_StyleProvider
controls::GuiDatePicker::IStyleProvider* GuiDateComboBoxTemplate_StyleProvider::CreateDatePickerStyle() controls::GuiDatePicker::IStyleProvider* GuiDateComboBoxTemplate_StyleProvider::CreateDatePickerStyle()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiDatePickerTemplate, datePickerTemplateFactory, DatePickerTemplate); GET_FACTORY_FROM_TEMPLATE(GuiDatePickerTemplate, DatePickerTemplate);
} }
/*********************************************************************** /***********************************************************************
@@ -25276,8 +25264,6 @@ GuiScrollViewTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiScrollViewTemplate_StyleProvider::GuiScrollViewTemplate_StyleProvider()#An instance of GuiScrollViewTemplate is expected."); CHECK_FAIL(L"GuiScrollViewTemplate_StyleProvider::GuiScrollViewTemplate_StyleProvider()#An instance of GuiScrollViewTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(hScrollTemplateFactory, HScrollTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(vScrollTemplateFactory, VScrollTemplate);
} }
GuiScrollViewTemplate_StyleProvider::~GuiScrollViewTemplate_StyleProvider() GuiScrollViewTemplate_StyleProvider::~GuiScrollViewTemplate_StyleProvider()
@@ -25286,12 +25272,12 @@ GuiScrollViewTemplate_StyleProvider
controls::GuiScroll::IStyleController* GuiScrollViewTemplate_StyleProvider::CreateHorizontalScrollStyle() controls::GuiScroll::IStyleController* GuiScrollViewTemplate_StyleProvider::CreateHorizontalScrollStyle()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiScrollTemplate, hScrollTemplateFactory, HScrollTemplate); GET_FACTORY_FROM_TEMPLATE(GuiScrollTemplate, HScrollTemplate);
} }
controls::GuiScroll::IStyleController* GuiScrollViewTemplate_StyleProvider::CreateVerticalScrollStyle() controls::GuiScroll::IStyleController* GuiScrollViewTemplate_StyleProvider::CreateVerticalScrollStyle()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiScrollTemplate, vScrollTemplateFactory, VScrollTemplate); GET_FACTORY_FROM_TEMPLATE(GuiScrollTemplate, VScrollTemplate);
} }
vint GuiScrollViewTemplate_StyleProvider::GetDefaultScrollSize() vint GuiScrollViewTemplate_StyleProvider::GetDefaultScrollSize()
@@ -25387,8 +25373,6 @@ GuiTextListTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiTextListTemplate_StyleProvider::GuiTextListTemplate_StyleProvider()#An instance of GuiTextListTemplate is expected."); CHECK_FAIL(L"GuiTextListTemplate_StyleProvider::GuiTextListTemplate_StyleProvider()#An instance of GuiTextListTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(backgroundTemplateFactory, BackgroundTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(bulletTemplateFactory, BulletTemplate);
} }
GuiTextListTemplate_StyleProvider::~GuiTextListTemplate_StyleProvider() GuiTextListTemplate_StyleProvider::~GuiTextListTemplate_StyleProvider()
@@ -25397,7 +25381,7 @@ GuiTextListTemplate_StyleProvider
controls::GuiSelectableButton::IStyleController* GuiTextListTemplate_StyleProvider::CreateItemBackground() controls::GuiSelectableButton::IStyleController* GuiTextListTemplate_StyleProvider::CreateItemBackground()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, backgroundTemplateFactory, BackgroundTemplate); GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, BackgroundTemplate);
} }
Color GuiTextListTemplate_StyleProvider::GetTextColor() Color GuiTextListTemplate_StyleProvider::GetTextColor()
@@ -25412,7 +25396,7 @@ GuiTextListTemplate_StyleProvider
controls::GuiSelectableButton::IStyleController* GuiTextListTemplate_StyleProvider::CreateBulletStyle() controls::GuiSelectableButton::IStyleController* GuiTextListTemplate_StyleProvider::CreateBulletStyle()
{ {
GET_FACTORY_FROM_TEMPLATE_OPT(GuiSelectableButtonTemplate, bulletTemplateFactory, BulletTemplate); GET_FACTORY_FROM_TEMPLATE_OPT(GuiSelectableButtonTemplate, BulletTemplate);
} }
/*********************************************************************** /***********************************************************************
@@ -25426,8 +25410,6 @@ GuiListViewTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiListViewTemplate_StyleProvider::GuiListViewTemplate_StyleProvider()#An instance of GuiListViewTemplate is expected."); CHECK_FAIL(L"GuiListViewTemplate_StyleProvider::GuiListViewTemplate_StyleProvider()#An instance of GuiListViewTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(backgroundTemplateFactory, BackgroundTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(columnHeaderTemplateFactory, ColumnHeaderTemplate);
} }
GuiListViewTemplate_StyleProvider::~GuiListViewTemplate_StyleProvider() GuiListViewTemplate_StyleProvider::~GuiListViewTemplate_StyleProvider()
@@ -25436,12 +25418,12 @@ GuiListViewTemplate_StyleProvider
controls::GuiSelectableButton::IStyleController* GuiListViewTemplate_StyleProvider::CreateItemBackground() controls::GuiSelectableButton::IStyleController* GuiListViewTemplate_StyleProvider::CreateItemBackground()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, backgroundTemplateFactory, BackgroundTemplate); GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, BackgroundTemplate);
} }
controls::GuiListViewColumnHeader::IStyleController* GuiListViewTemplate_StyleProvider::CreateColumnStyle() controls::GuiListViewColumnHeader::IStyleController* GuiListViewTemplate_StyleProvider::CreateColumnStyle()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiListViewColumnHeaderTemplate, columnHeaderTemplateFactory, ColumnHeaderTemplate); GET_FACTORY_FROM_TEMPLATE(GuiListViewColumnHeaderTemplate, ColumnHeaderTemplate);
} }
Color GuiListViewTemplate_StyleProvider::GetPrimaryTextColor() Color GuiListViewTemplate_StyleProvider::GetPrimaryTextColor()
@@ -25470,8 +25452,6 @@ GuiTreeViewTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiTreeViewTemplate_StyleProvider::GuiTreeViewTemplate_StyleProvider()#An instance of GuiTreeViewTemplate is expected."); CHECK_FAIL(L"GuiTreeViewTemplate_StyleProvider::GuiTreeViewTemplate_StyleProvider()#An instance of GuiTreeViewTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(backgroundTemplateFactory, BackgroundTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(expandingDecoratorTemplateFactory, ExpandingDecoratorTemplate);
} }
GuiTreeViewTemplate_StyleProvider::~GuiTreeViewTemplate_StyleProvider() GuiTreeViewTemplate_StyleProvider::~GuiTreeViewTemplate_StyleProvider()
@@ -25480,12 +25460,12 @@ GuiTreeViewTemplate_StyleProvider
controls::GuiSelectableButton::IStyleController* GuiTreeViewTemplate_StyleProvider::CreateItemBackground() controls::GuiSelectableButton::IStyleController* GuiTreeViewTemplate_StyleProvider::CreateItemBackground()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, backgroundTemplateFactory, BackgroundTemplate); GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, BackgroundTemplate);
} }
controls::GuiSelectableButton::IStyleController* GuiTreeViewTemplate_StyleProvider::CreateItemExpandingDecorator() controls::GuiSelectableButton::IStyleController* GuiTreeViewTemplate_StyleProvider::CreateItemExpandingDecorator()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, expandingDecoratorTemplateFactory, ExpandingDecoratorTemplate); GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, ExpandingDecoratorTemplate);
} }
Color GuiTreeViewTemplate_StyleProvider::GetTextColor() Color GuiTreeViewTemplate_StyleProvider::GetTextColor()
@@ -25633,22 +25613,22 @@ GuiTabTemplate_StyleProvider
controls::GuiSelectableButton::IStyleController* GuiTabTemplate_StyleProvider::CreateHeaderTemplate() controls::GuiSelectableButton::IStyleController* GuiTabTemplate_StyleProvider::CreateHeaderTemplate()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, headerTemplateFactory, HeaderTemplate); GET_FACTORY_FROM_TEMPLATE(GuiSelectableButtonTemplate, HeaderTemplate);
} }
controls::GuiButton::IStyleController* GuiTabTemplate_StyleProvider::CreateDropdownTemplate() controls::GuiButton::IStyleController* GuiTabTemplate_StyleProvider::CreateDropdownTemplate()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiButtonTemplate, dropdownTemplateFactory, DropdownTemplate); GET_FACTORY_FROM_TEMPLATE(GuiButtonTemplate, DropdownTemplate);
} }
controls::GuiMenu::IStyleController* GuiTabTemplate_StyleProvider::CreateMenuTemplate() controls::GuiMenu::IStyleController* GuiTabTemplate_StyleProvider::CreateMenuTemplate()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiMenuTemplate, menuTemplateFactory, MenuTemplate); GET_FACTORY_FROM_TEMPLATE(GuiMenuTemplate, MenuTemplate);
} }
controls::GuiToolstripButton::IStyleController* GuiTabTemplate_StyleProvider::CreateMenuItemTemplate() controls::GuiToolstripButton::IStyleController* GuiTabTemplate_StyleProvider::CreateMenuItemTemplate()
{ {
GET_FACTORY_FROM_TEMPLATE(GuiToolstripButtonTemplate, menuItemTemplateFactory, MenuItemTemplate); GET_FACTORY_FROM_TEMPLATE(GuiToolstripButtonTemplate, MenuItemTemplate);
} }
GuiTabTemplate_StyleProvider::GuiTabTemplate_StyleProvider(Ptr<GuiTemplate::IFactory> factory) GuiTabTemplate_StyleProvider::GuiTabTemplate_StyleProvider(Ptr<GuiTemplate::IFactory> factory)
@@ -25658,10 +25638,6 @@ GuiTabTemplate_StyleProvider
{ {
CHECK_FAIL(L"GuiTabTemplate_StyleProvider::GuiTabTemplate_StyleProvider()#An instance of GuiTabTemplate is expected."); CHECK_FAIL(L"GuiTabTemplate_StyleProvider::GuiTabTemplate_StyleProvider()#An instance of GuiTabTemplate is expected.");
} }
INITIALIZE_FACTORY_FROM_TEMPLATE(headerTemplateFactory, HeaderTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(dropdownTemplateFactory, DropdownTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(menuTemplateFactory, MenuTemplate);
INITIALIZE_FACTORY_FROM_TEMPLATE(menuItemTemplateFactory, MenuItemTemplate);
Initialize(); Initialize();
} }
@@ -26368,64 +26344,6 @@ GuiBindableDataEditor
Helper Functions Helper Functions
***********************************************************************/ ***********************************************************************/
#ifndef VCZH_DEBUG_NO_REFLECTION
class GuiTemplateReflectableFactory : public Object, public virtual GuiTemplate::IFactory
{
protected:
List<ITypeDescriptor*> types;
public:
GuiTemplateReflectableFactory(const List<ITypeDescriptor*>& _types)
{
CopyFrom(types, _types);
}
GuiTemplate* CreateTemplate(const description::Value& viewModel)override
{
FOREACH(ITypeDescriptor*, type, types)
{
auto group = type->GetConstructorGroup();
vint count = group->GetMethodCount();
for (vint i = 0; i < count; i++)
{
auto ctor = group->GetMethod(i);
if (ctor->GetReturn()->GetDecorator() == ITypeInfo::RawPtr && ctor->GetParameterCount() <= 1)
{
Array<Value> arguments(ctor->GetParameterCount());
if (ctor->GetParameterCount() == 1)
{
if (!viewModel.CanConvertTo(ctor->GetParameter(0)->GetType()))
{
continue;
}
arguments[0] = viewModel;
}
return dynamic_cast<GuiTemplate*>(ctor->Invoke(Value(), arguments).GetRawPtr());
}
}
}
WString message = L"Unable to create a template from types {";
FOREACH_INDEXER(ITypeDescriptor*, type, index, types)
{
if (index > 0) message += L", ";
message += type->GetTypeName();
}
message += L"} using view model: ";
if (viewModel.IsNull())
{
message += L"null.";
}
else
{
message += viewModel.GetTypeDescriptor()->GetTypeName() + L".";
}
throw ArgumentException(message);
}
};
#endif
void SplitBySemicolon(const WString& input, collections::List<WString>& fragments) void SplitBySemicolon(const WString& input, collections::List<WString>& fragments)
{ {
const wchar_t* attValue = input.Buffer(); const wchar_t* attValue = input.Buffer();
@@ -26449,30 +26367,10 @@ Helper Functions
fragments.Add(pattern); fragments.Add(pattern);
} }
} }
Ptr<GuiTemplate::IFactory> CreateTemplateFactory(const WString& typeValues)
{
#ifndef VCZH_DEBUG_NO_REFLECTION
List<ITypeDescriptor*> types;
List<WString> typeNames;
SplitBySemicolon(typeValues, typeNames);
CopyFrom(
types,
From(typeNames)
.Select<ITypeDescriptor*(*)(const WString&)>(&description::GetTypeDescriptor)
.Where([](ITypeDescriptor* type){return type != 0; })
);
return new GuiTemplateReflectableFactory(types);
#else
CHECK_FAIL(L"CreateTemplateFactory(const WString&)#This function cannot be called without reflection enabled.");
#endif
}
} }
} }
} }
#undef INITIALIZE_FACTORY_FROM_TEMPLATE
#undef GET_FACTORY_FROM_TEMPLATE #undef GET_FACTORY_FROM_TEMPLATE
#undef GET_FACTORY_FROM_TEMPLATE_OPT #undef GET_FACTORY_FROM_TEMPLATE_OPT
+19 -39
View File
@@ -18242,8 +18242,8 @@ Control Template
F(GuiWindowTemplate, bool, TitleBar)\ F(GuiWindowTemplate, bool, TitleBar)\
F(GuiWindowTemplate, bool, CustomizedBorder)\ F(GuiWindowTemplate, bool, CustomizedBorder)\
F(GuiWindowTemplate, bool, Maximized)\ F(GuiWindowTemplate, bool, Maximized)\
F(GuiWindowTemplate, WString, TooltipTemplate)\ F(GuiWindowTemplate, Ptr<GuiTemplate::IFactory>, TooltipTemplate)\
F(GuiWindowTemplate, WString, ShortcutKeyTemplate) F(GuiWindowTemplate, Ptr<GuiTemplate::IFactory>, ShortcutKeyTemplate)
GuiWindowTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) GuiWindowTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL)
}; };
@@ -18279,7 +18279,7 @@ Control Template
~GuiToolstripButtonTemplate(); ~GuiToolstripButtonTemplate();
#define GuiToolstripButtonTemplate_PROPERTIES(F)\ #define GuiToolstripButtonTemplate_PROPERTIES(F)\
F(GuiToolstripButtonTemplate, WString, SubMenuTemplate)\ F(GuiToolstripButtonTemplate, Ptr<GuiTemplate::IFactory>, SubMenuTemplate)\
F(GuiToolstripButtonTemplate, bool, SubMenuExisting)\ F(GuiToolstripButtonTemplate, bool, SubMenuExisting)\
F(GuiToolstripButtonTemplate, bool, SubMenuOpening)\ F(GuiToolstripButtonTemplate, bool, SubMenuOpening)\
F(GuiToolstripButtonTemplate, controls::GuiButton*, SubMenuHost)\ F(GuiToolstripButtonTemplate, controls::GuiButton*, SubMenuHost)\
@@ -18321,9 +18321,9 @@ Control Template
~GuiDatePickerTemplate(); ~GuiDatePickerTemplate();
#define GuiDatePickerTemplate_PROPERTIES(F)\ #define GuiDatePickerTemplate_PROPERTIES(F)\
F(GuiDatePickerTemplate, WString, DateButtonTemplate)\ F(GuiDatePickerTemplate, Ptr<GuiTemplate::IFactory>, DateButtonTemplate)\
F(GuiDatePickerTemplate, WString, DateTextListTemplate)\ F(GuiDatePickerTemplate, Ptr<GuiTemplate::IFactory>, DateTextListTemplate)\
F(GuiDatePickerTemplate, WString, DateComboBoxTemplate)\ F(GuiDatePickerTemplate, Ptr<GuiTemplate::IFactory>, DateComboBoxTemplate)\
F(GuiDatePickerTemplate, Color, BackgroundColor)\ F(GuiDatePickerTemplate, Color, BackgroundColor)\
F(GuiDatePickerTemplate, Color, PrimaryTextColor)\ F(GuiDatePickerTemplate, Color, PrimaryTextColor)\
F(GuiDatePickerTemplate, Color, SecondaryTextColor)\ F(GuiDatePickerTemplate, Color, SecondaryTextColor)\
@@ -18338,7 +18338,7 @@ Control Template
~GuiDateComboBoxTemplate(); ~GuiDateComboBoxTemplate();
#define GuiDateComboBoxTemplate_PROPERTIES(F)\ #define GuiDateComboBoxTemplate_PROPERTIES(F)\
F(GuiDateComboBoxTemplate, WString, DatePickerTemplate)\ F(GuiDateComboBoxTemplate, Ptr<GuiTemplate::IFactory>, DatePickerTemplate)\
GuiDateComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) GuiDateComboBoxTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL)
}; };
@@ -18365,8 +18365,8 @@ Control Template
~GuiScrollViewTemplate(); ~GuiScrollViewTemplate();
#define GuiScrollViewTemplate_PROPERTIES(F)\ #define GuiScrollViewTemplate_PROPERTIES(F)\
F(GuiScrollViewTemplate, WString, HScrollTemplate)\ F(GuiScrollViewTemplate, Ptr<GuiTemplate::IFactory>, HScrollTemplate)\
F(GuiScrollViewTemplate, WString, VScrollTemplate)\ F(GuiScrollViewTemplate, Ptr<GuiTemplate::IFactory>, VScrollTemplate)\
F(GuiScrollViewTemplate, vint, DefaultScrollSize)\ F(GuiScrollViewTemplate, vint, DefaultScrollSize)\
GuiScrollViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) GuiScrollViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL)
@@ -18404,8 +18404,8 @@ Control Template
~GuiTextListTemplate(); ~GuiTextListTemplate();
#define GuiTextListTemplate_PROPERTIES(F)\ #define GuiTextListTemplate_PROPERTIES(F)\
F(GuiTextListTemplate, WString, BackgroundTemplate)\ F(GuiTextListTemplate, Ptr<GuiTemplate::IFactory>, BackgroundTemplate)\
F(GuiTextListTemplate, WString, BulletTemplate)\ F(GuiTextListTemplate, Ptr<GuiTemplate::IFactory>, BulletTemplate)\
F(GuiTextListTemplate, Color, TextColor)\ F(GuiTextListTemplate, Color, TextColor)\
GuiTextListTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) GuiTextListTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL)
@@ -18418,8 +18418,8 @@ Control Template
~GuiListViewTemplate(); ~GuiListViewTemplate();
#define GuiListViewTemplate_PROPERTIES(F)\ #define GuiListViewTemplate_PROPERTIES(F)\
F(GuiListViewTemplate, WString, BackgroundTemplate)\ F(GuiListViewTemplate, Ptr<GuiTemplate::IFactory>, BackgroundTemplate)\
F(GuiListViewTemplate, WString, ColumnHeaderTemplate)\ F(GuiListViewTemplate, Ptr<GuiTemplate::IFactory>, ColumnHeaderTemplate)\
F(GuiListViewTemplate, Color, PrimaryTextColor)\ F(GuiListViewTemplate, Color, PrimaryTextColor)\
F(GuiListViewTemplate, Color, SecondaryTextColor)\ F(GuiListViewTemplate, Color, SecondaryTextColor)\
F(GuiListViewTemplate, Color, ItemSeparatorColor)\ F(GuiListViewTemplate, Color, ItemSeparatorColor)\
@@ -18434,8 +18434,8 @@ Control Template
~GuiTreeViewTemplate(); ~GuiTreeViewTemplate();
#define GuiTreeViewTemplate_PROPERTIES(F)\ #define GuiTreeViewTemplate_PROPERTIES(F)\
F(GuiTreeViewTemplate, WString, BackgroundTemplate)\ F(GuiTreeViewTemplate, Ptr<GuiTemplate::IFactory>, BackgroundTemplate)\
F(GuiTreeViewTemplate, WString, ExpandingDecoratorTemplate)\ F(GuiTreeViewTemplate, Ptr<GuiTemplate::IFactory>, ExpandingDecoratorTemplate)\
F(GuiTreeViewTemplate, Color, TextColor)\ F(GuiTreeViewTemplate, Color, TextColor)\
GuiTreeViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL) GuiTreeViewTemplate_PROPERTIES(GUI_TEMPLATE_PROPERTY_DECL)
@@ -18448,10 +18448,10 @@ Control Template
~GuiTabTemplate(); ~GuiTabTemplate();
#define GuiTabTemplate_PROPERTIES(F)\ #define GuiTabTemplate_PROPERTIES(F)\
F(GuiTabTemplate, WString, HeaderTemplate)\ F(GuiTabTemplate, Ptr<GuiTemplate::IFactory>, HeaderTemplate)\
F(GuiTabTemplate, WString, DropdownTemplate)\ F(GuiTabTemplate, Ptr<GuiTemplate::IFactory>, DropdownTemplate)\
F(GuiTabTemplate, WString, MenuTemplate)\ F(GuiTabTemplate, Ptr<GuiTemplate::IFactory>, MenuTemplate)\
F(GuiTabTemplate, WString, MenuItemTemplate)\ F(GuiTabTemplate, Ptr<GuiTemplate::IFactory>, MenuItemTemplate)\
F(GuiTabTemplate, vint, HeaderPadding)\ F(GuiTabTemplate, vint, HeaderPadding)\
F(GuiTabTemplate, compositions::GuiGraphicsComposition*, HeaderComposition)\ F(GuiTabTemplate, compositions::GuiGraphicsComposition*, HeaderComposition)\
@@ -18647,8 +18647,6 @@ Control Template
protected: protected:
GuiWindowTemplate* controlTemplate; GuiWindowTemplate* controlTemplate;
controls::GuiWindow* window; controls::GuiWindow* window;
Ptr<GuiTemplate::IFactory> tooltipTemplateFactory;
Ptr<GuiTemplate::IFactory> shortcutKeyTemplateFactory;
public: public:
GuiWindowTemplate_StyleProvider(Ptr<GuiTemplate::IFactory> factory); GuiWindowTemplate_StyleProvider(Ptr<GuiTemplate::IFactory> factory);
@@ -18709,7 +18707,6 @@ Control Template
, public Description<GuiToolstripButtonTemplate_StyleProvider> , public Description<GuiToolstripButtonTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> subMenuTemplateFactory;
GuiToolstripButtonTemplate* controlTemplate; GuiToolstripButtonTemplate* controlTemplate;
public: public:
@@ -18764,9 +18761,6 @@ Control Template
, public Description<GuiDatePickerTemplate_StyleProvider> , public Description<GuiDatePickerTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> dateButtonTemplateFactory;
Ptr<GuiTemplate::IFactory> dateTextListTemplateFactory;
Ptr<GuiTemplate::IFactory> dateComboBoxTemplateFactory;
GuiDatePickerTemplate* controlTemplate; GuiDatePickerTemplate* controlTemplate;
public: public:
@@ -18787,7 +18781,6 @@ Control Template
, public Description<GuiDateComboBoxTemplate_StyleProvider> , public Description<GuiDateComboBoxTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> datePickerTemplateFactory;
GuiDateComboBoxTemplate* controlTemplate; GuiDateComboBoxTemplate* controlTemplate;
public: public:
@@ -18822,8 +18815,6 @@ Control Template
, public Description<GuiScrollViewTemplate_StyleProvider> , public Description<GuiScrollViewTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> hScrollTemplateFactory;
Ptr<GuiTemplate::IFactory> vScrollTemplateFactory;
GuiScrollViewTemplate* controlTemplate; GuiScrollViewTemplate* controlTemplate;
public: public:
@@ -18871,8 +18862,6 @@ Control Template
, public Description<GuiTextListTemplate_StyleProvider> , public Description<GuiTextListTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> backgroundTemplateFactory;
Ptr<GuiTemplate::IFactory> bulletTemplateFactory;
GuiTextListTemplate* controlTemplate; GuiTextListTemplate* controlTemplate;
class ItemStyleProvider class ItemStyleProvider
@@ -18905,8 +18894,6 @@ Control Template
, public Description<GuiListViewTemplate_StyleProvider> , public Description<GuiListViewTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> backgroundTemplateFactory;
Ptr<GuiTemplate::IFactory> columnHeaderTemplateFactory;
GuiListViewTemplate* controlTemplate; GuiListViewTemplate* controlTemplate;
public: public:
@@ -18926,8 +18913,6 @@ Control Template
, public Description<GuiTreeViewTemplate_StyleProvider> , public Description<GuiTreeViewTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> backgroundTemplateFactory;
Ptr<GuiTemplate::IFactory> expandingDecoratorTemplateFactory;
GuiTreeViewTemplate* controlTemplate; GuiTreeViewTemplate* controlTemplate;
public: public:
@@ -18945,10 +18930,6 @@ Control Template
, public Description<GuiTabTemplate_StyleProvider> , public Description<GuiTabTemplate_StyleProvider>
{ {
protected: protected:
Ptr<GuiTemplate::IFactory> headerTemplateFactory;
Ptr<GuiTemplate::IFactory> dropdownTemplateFactory;
Ptr<GuiTemplate::IFactory> menuTemplateFactory;
Ptr<GuiTemplate::IFactory> menuItemTemplateFactory;
GuiTabTemplate* controlTemplate; GuiTabTemplate* controlTemplate;
compositions::GuiTableComposition* tabBoundsComposition; compositions::GuiTableComposition* tabBoundsComposition;
@@ -19230,7 +19211,6 @@ Helper Functions
***********************************************************************/ ***********************************************************************/
extern void SplitBySemicolon(const WString& input, collections::List<WString>& fragments); extern void SplitBySemicolon(const WString& input, collections::List<WString>& fragments);
extern Ptr<GuiTemplate::IFactory> CreateTemplateFactory(const WString& typeValues);
#pragma warning(pop) #pragma warning(pop)
} }
+202 -10
View File
@@ -210,11 +210,16 @@ IGuiInstanceLoader
return false; return false;
} }
Ptr<workflow::WfBaseConstructorCall> IGuiInstanceLoader::CreateRootInstance(const TypeInfo& typeInfo, Ptr<workflow::WfExpression> controlTemplate, collections::List<WString>& errors) Ptr<workflow::WfBaseConstructorCall> IGuiInstanceLoader::CreateRootInstance(const TypeInfo& typeInfo, ArgumentMap& arguments, collections::List<WString>& errors)
{ {
CHECK_FAIL(L"IGuiInstanceLoader::CreateControlTemplateArgument(const TypeInfo&, Ptr<workflow::WfExpression>, collections::List<WString>&)#This function is not implemented."); CHECK_FAIL(L"IGuiInstanceLoader::CreateControlTemplateArgument(const TypeInfo&, Ptr<workflow::WfExpression>, collections::List<WString>&)#This function is not implemented.");
} }
Ptr<workflow::WfStatement> IGuiInstanceLoader::InitializeRootInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors)
{
return nullptr;
}
Ptr<workflow::WfStatement> IGuiInstanceLoader::CreateInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors) Ptr<workflow::WfStatement> IGuiInstanceLoader::CreateInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors)
{ {
CHECK_FAIL(L"IGuiInstanceLoader::CreateInstance(const TypeInfo&, GlobalStringKey, ArgumentMap&, collections::List<WString>&)#This function is not implemented."); CHECK_FAIL(L"IGuiInstanceLoader::CreateInstance(const TypeInfo&, GlobalStringKey, ArgumentMap&, collections::List<WString>&)#This function is not implemented.");
@@ -4921,6 +4926,7 @@ GuiPredefinedInstanceLoadersPlugin
extern void LoadListControls(IGuiInstanceLoaderManager* manager); extern void LoadListControls(IGuiInstanceLoaderManager* manager);
extern void LoadDocumentControls(IGuiInstanceLoaderManager* manager); extern void LoadDocumentControls(IGuiInstanceLoaderManager* manager);
extern void LoadCompositions(IGuiInstanceLoaderManager* manager); extern void LoadCompositions(IGuiInstanceLoaderManager* manager);
extern void LoadTemplates(IGuiInstanceLoaderManager* manager);
class GuiPredefinedInstanceLoadersPlugin : public Object, public IGuiPlugin class GuiPredefinedInstanceLoadersPlugin : public Object, public IGuiPlugin
{ {
@@ -5029,6 +5035,7 @@ GuiPredefinedInstanceLoadersPlugin
LoadListControls(manager); LoadListControls(manager);
LoadDocumentControls(manager); LoadDocumentControls(manager);
LoadCompositions(manager); LoadCompositions(manager);
LoadTemplates(manager);
#undef ADD_VIRTUAL_TYPE_LOADER #undef ADD_VIRTUAL_TYPE_LOADER
#undef ADD_TEMPLATE_CONTROL #undef ADD_TEMPLATE_CONTROL
@@ -5251,6 +5258,190 @@ Initialization
#endif #endif
/***********************************************************************
INSTANCELOADERS\GUIINSTANCELOADER_TEMPLATES.CPP
***********************************************************************/
#ifndef VCZH_DEBUG_NO_REFLECTION
namespace vl
{
namespace presentation
{
namespace instance_loaders
{
/***********************************************************************
GuiTemplateInstanceLoader
***********************************************************************/
class GuiTemplateInstanceLoader : public Object, public IGuiInstanceLoader
{
protected:
GlobalStringKey typeName;
public:
GuiTemplateInstanceLoader()
{
typeName = GlobalStringKey::Get(description::TypeInfo<GuiTemplate>::content.typeName);
}
GlobalStringKey GetTypeName()override
{
return typeName;
}
void GetConstructorParameters(const TypeInfo& typeInfo, collections::List<GlobalStringKey>& propertyNames)override
{
List<ITypeDescriptor*> tds;
tds.Add(typeInfo.typeDescriptor);
for (vint i = 0; i < tds.Count(); i++)
{
auto td = tds[i];
vint propCount = td->GetPropertyCount();
for (vint i = 0; i < propCount; i++)
{
auto prop = td->GetProperty(i);
if (prop->IsWritable() && prop->GetReturn()->GetTypeDescriptor() == description::GetTypeDescriptor<GuiTemplate::IFactory>())
{
propertyNames.Add(GlobalStringKey::Get(prop->GetName()));
}
}
vint baseCount = td->GetBaseTypeDescriptorCount();
for (vint i = 0; i < baseCount; i++)
{
auto baseTd = td->GetBaseTypeDescriptor(i);
if (!tds.Contains(baseTd))
{
tds.Add(baseTd);
}
}
}
}
Ptr<GuiInstancePropertyInfo> GetPropertyType(const PropertyInfo& propertyInfo)override
{
if (auto prop = propertyInfo.typeInfo.typeDescriptor->GetPropertyByName(propertyInfo.propertyName.ToString(), true))
{
if (prop->IsWritable() && prop->GetReturn()->GetTypeDescriptor() == description::GetTypeDescriptor<GuiTemplate::IFactory>())
{
auto info = GuiInstancePropertyInfo::Assign(description::GetTypeDescriptor<WString>());
info->scope = GuiInstancePropertyInfo::Constructor;
info->bindable = false;
if (prop->GetOwnerTypeDescriptor() != description::GetTypeDescriptor<GuiWindowTemplate>())
{
info->required = true;
}
return info;
}
}
return IGuiInstanceLoader::GetPropertyType(propertyInfo);
}
bool CanCreate(const TypeInfo& typeInfo)override
{
if (typeInfo.typeDescriptor->CanConvertTo(description::GetTypeDescriptor<GuiTemplate>()))
{
auto group = typeInfo.typeDescriptor->GetConstructorGroup();
if (group && group->GetMethodCount() == 1)
{
auto ctor = group->GetMethod(0);
if (ctor->GetParameterCount() == 0)
{
return true;
}
}
}
return false;
}
Ptr<workflow::WfStatement> CreateInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors)override
{
if (!CanCreate(typeInfo))
{
return nullptr;
}
auto block = MakePtr<WfBlockStatement>();
{
auto createExpr = MakePtr<WfNewClassExpression>();
createExpr->type = GetTypeFromTypeInfo(MakePtr<TypeDescriptorTypeInfo>(typeInfo.typeDescriptor, TypeInfoHint::Normal).Obj());
auto refVariable = MakePtr<WfReferenceExpression>();
refVariable->name.value = variableName.ToString();
auto assignExpr = MakePtr<WfBinaryExpression>();
assignExpr->op = WfBinaryOperator::Assign;
assignExpr->first = refVariable;
assignExpr->second = createExpr;
auto assignStat = MakePtr<WfExpressionStatement>();
assignStat->expression = assignExpr;
block->statements.Add(assignStat);
}
if (auto stat = InitializeRootInstance(typeInfo, variableName, arguments, errors))
{
CopyFrom(block->statements, stat.Cast<WfBlockStatement>()->statements, true);
}
return block;
}
Ptr<workflow::WfStatement> InitializeRootInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors)
{
if (arguments.Count() > 0)
{
auto block = MakePtr<WfBlockStatement>();
using Helper = GuiTemplateControlInstanceLoader<Value, Value, GuiTemplate>;
FOREACH_INDEXER(GlobalStringKey, propKey, index, arguments.Keys())
{
List<ITypeDescriptor*> tds;
Helper::GetItemTemplateType(arguments.GetByIndex(index)[0].expression, tds, typeInfo, propKey.ToString(), errors);
auto refFactory = Helper::CreateTemplateFactory(tds, errors);
auto refVariable = MakePtr<WfReferenceExpression>();
refVariable->name.value = variableName.ToString();
auto member = MakePtr<WfMemberExpression>();
member->parent = refVariable;
member->name.value = propKey.ToString();
auto assignExpr = MakePtr<WfBinaryExpression>();
assignExpr->op = WfBinaryOperator::Assign;
assignExpr->first = member;
assignExpr->second = refFactory;
auto assignStat = MakePtr<WfExpressionStatement>();
assignStat->expression = assignExpr;
block->statements.Add(assignStat);
}
return block;
}
else
{
return nullptr;
}
}
};
/***********************************************************************
Initialization
***********************************************************************/
void LoadTemplates(IGuiInstanceLoaderManager* manager)
{
manager->SetLoader(new GuiTemplateInstanceLoader);
}
}
}
}
#endif
/*********************************************************************** /***********************************************************************
INSTANCELOADERS\GUIINSTANCELOADER_TOOLSTRIP.CPP INSTANCELOADERS\GUIINSTANCELOADER_TOOLSTRIP.CPP
***********************************************************************/ ***********************************************************************/
@@ -6734,15 +6925,7 @@ Workflow_GenerateInstanceClass
{ {
if (!beforePrecompile) if (!beforePrecompile)
{ {
Ptr<WfExpression> controlTemplate; if (auto call = resolvingResult.rootLoader->CreateRootInstance(resolvingResult.rootTypeInfo, resolvingResult.rootCtorArguments, errors))
{
vint index = resolvingResult.rootCtorArguments.Keys().IndexOf(GlobalStringKey::_ControlTemplate);
if (index != -1)
{
controlTemplate = resolvingResult.rootCtorArguments.GetByIndex(index)[0].expression;
}
}
if (auto call = resolvingResult.rootLoader->CreateRootInstance(resolvingResult.rootTypeInfo, controlTemplate, errors))
{ {
ctor->baseConstructorCalls.Add(call); ctor->baseConstructorCalls.Add(call);
} }
@@ -8012,6 +8195,15 @@ WorkflowGenerateCreatingVisitor
statements->statements.Add(stat); statements->statements.Add(stat);
} }
if (resolvingResult.rootCtorArguments.Count() > 0)
{
if (auto stat = ctorLoader->InitializeRootInstance(ctorTypeInfo, repr->instanceName, resolvingResult.rootCtorArguments, errors))
{
statements->statements.Add(stat);
}
}
FOREACH(Ptr<GuiInstanceParameter>, parameter, resolvingResult.context->parameters) FOREACH(Ptr<GuiInstanceParameter>, parameter, resolvingResult.context->parameters)
{ {
auto refInstance = MakePtr<WfReferenceExpression>(); auto refInstance = MakePtr<WfReferenceExpression>();
+15 -13
View File
@@ -509,7 +509,8 @@ Instance Loader
virtual Ptr<GuiInstancePropertyInfo> GetPropertyType(const PropertyInfo& propertyInfo); virtual Ptr<GuiInstancePropertyInfo> GetPropertyType(const PropertyInfo& propertyInfo);
virtual bool CanCreate(const TypeInfo& typeInfo); virtual bool CanCreate(const TypeInfo& typeInfo);
virtual Ptr<workflow::WfBaseConstructorCall> CreateRootInstance(const TypeInfo& typeInfo, Ptr<workflow::WfExpression> controlTemplate, collections::List<WString>& errors); virtual Ptr<workflow::WfBaseConstructorCall> CreateRootInstance(const TypeInfo& typeInfo, ArgumentMap& arguments, collections::List<WString>& errors);
virtual Ptr<workflow::WfStatement> InitializeRootInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors);
virtual Ptr<workflow::WfStatement> CreateInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors); virtual Ptr<workflow::WfStatement> CreateInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors);
virtual Ptr<workflow::WfStatement> AssignParameters(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors); virtual Ptr<workflow::WfStatement> AssignParameters(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors);
virtual Ptr<workflow::WfExpression> GetParameter(const PropertyInfo& propertyInfo, GlobalStringKey variableName, collections::List<WString>& errors); virtual Ptr<workflow::WfExpression> GetParameter(const PropertyInfo& propertyInfo, GlobalStringKey variableName, collections::List<WString>& errors);
@@ -1136,7 +1137,7 @@ GuiVrtualTypeInstanceLoader
auto controlTemplateNameExpr = argument.Cast<WfStringExpression>(); auto controlTemplateNameExpr = argument.Cast<WfStringExpression>();
if (!controlTemplateNameExpr) if (!controlTemplateNameExpr)
{ {
errors.Add(L"Precompile: The value of contructor parameter \"" + propertyName + L"\" of type \"" + controlTypeInfo.typeName.ToString() + L"\" should be a constant representing the control template type name."); errors.Add(L"Precompile: The value of contructor parameter \"" + propertyName + L"\" of type \"" + controlTypeInfo.typeName.ToString() + L"\" should be a constant representing control template type names.");
return; return;
} }
@@ -1235,21 +1236,22 @@ GuiVrtualTypeInstanceLoader
} }
} }
Ptr<workflow::WfBaseConstructorCall> CreateRootInstance(const TypeInfo& typeInfo, Ptr<workflow::WfExpression> controlTemplate, collections::List<WString>& errors)override Ptr<workflow::WfBaseConstructorCall> CreateRootInstance(const TypeInfo& typeInfo, ArgumentMap& arguments, collections::List<WString>& errors)override
{ {
auto controlType = TypeInfoRetriver<TControl>::CreateTypeInfo(); auto controlType = TypeInfoRetriver<TControl>::CreateTypeInfo();
auto index = arguments.Keys().IndexOf(GlobalStringKey::_ControlTemplate);
if (auto createStyleExpr = CreateInstance_ControlTemplate(typeInfo, controlTemplate, errors)) if (index != -1)
{ {
auto createControl = MakePtr<WfBaseConstructorCall>(); auto controlTemplate = arguments.GetByIndex(index)[0].expression;
createControl->type = GetTypeFromTypeInfo(controlType.Obj()); if (auto createStyleExpr = CreateInstance_ControlTemplate(typeInfo, controlTemplate, errors))
createControl->arguments.Add(createStyleExpr); {
return createControl; auto createControl = MakePtr<WfBaseConstructorCall>();
} createControl->type = GetTypeFromTypeInfo(controlType.Obj());
else createControl->arguments.Add(createStyleExpr);
{ return createControl;
return nullptr; }
} }
return nullptr;
} }
Ptr<workflow::WfStatement> CreateInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors)override Ptr<workflow::WfStatement> CreateInstance(const TypeInfo& typeInfo, GlobalStringKey variableName, ArgumentMap& arguments, collections::List<WString>& errors)override
+161 -133
View File
@@ -16929,10 +16929,6 @@ WfGenerateExpressionVisitor
void Visit(WfMemberExpression* node)override void Visit(WfMemberExpression* node)override
{ {
if (node->name.value == L"MyList")
{
int a = 0;
}
auto result = config->manager->expressionResolvings[node]; auto result = config->manager->expressionResolvings[node];
auto parentResult = config->manager->expressionResolvings[node->parent.Obj()]; auto parentResult = config->manager->expressionResolvings[node->parent.Obj()];
WriteReferenceTemplate(result, WriteReferenceTemplate(result,
@@ -18196,27 +18192,30 @@ namespace vl
WritePushCompileOptions(writer); WritePushCompileOptions(writer);
writer.WriteLine(L""); writer.WriteLine(L"");
if (closureInfos.Count() > 0)
{ {
Dictionary<WString, Ptr<WfExpression>> reversedClosures; Dictionary<WString, Ptr<WfExpression>> reversedLambdaExprs;
CopyFrom( Dictionary<WString, Ptr<WfNewInterfaceExpression>> reversedClassExprs;
reversedClosures, SortClosure(reversedLambdaExprs, reversedClassExprs);
From(closureInfos)
.Select([](Pair<Ptr<WfExpression>, Ptr<ClosureInfo>> pair) if (reversedLambdaExprs.Count() + reversedClassExprs.Count() > 0)
{
return Pair<WString, Ptr<WfExpression>>(pair.value->lambdaClassName, pair.key);
})
);
writer.WriteString(L"namespace ");
writer.WriteLine(assemblyNamespace);
writer.WriteLine(L"{");
FOREACH(Ptr<WfExpression>, closure, reversedClosures.Values())
{ {
WriteHeader_ClosurePreDecl(writer, closure); writer.WriteString(L"namespace ");
writer.WriteLine(assemblyNamespace);
writer.WriteLine(L"{");
FOREACH(Ptr<WfExpression>, expr, reversedLambdaExprs.Values())
{
WriteHeader_ClosurePreDecl(writer, expr);
}
FOREACH(Ptr<WfNewInterfaceExpression>, expr, reversedClassExprs.Values())
{
WriteHeader_ClosurePreDecl(writer, expr);
}
writer.WriteLine(L"}");
writer.WriteLine(L"");
} }
writer.WriteLine(L"}");
writer.WriteLine(L"");
} }
List<WString> nss; List<WString> nss;
@@ -19754,8 +19753,33 @@ namespace vl
using namespace reflection; using namespace reflection;
using namespace reflection::description; using namespace reflection::description;
void WfCppConfig::SortClosure(Dictionary<WString, Ptr<WfExpression>>& reversedLambdaExprs, Dictionary<WString, Ptr<WfNewInterfaceExpression>>& reversedClassExprs)
{
CopyFrom(
reversedLambdaExprs,
From(lambdaExprs)
.Select([](Pair<Ptr<WfExpression>, WString> pair)
{
return Pair<WString, Ptr<WfExpression>>(pair.value, pair.key);
})
);
CopyFrom(
reversedClassExprs,
From(classExprs)
.Select([](Pair<Ptr<WfNewInterfaceExpression>, WString> pair)
{
return Pair<WString, Ptr<WfNewInterfaceExpression>>(pair.value, pair.key);
})
);
}
void WfCppConfig::WriteHeader_Global(stream::StreamWriter& writer) void WfCppConfig::WriteHeader_Global(stream::StreamWriter& writer)
{ {
Dictionary<WString, Ptr<WfExpression>> reversedLambdaExprs;
Dictionary<WString, Ptr<WfNewInterfaceExpression>> reversedClassExprs;
SortClosure(reversedLambdaExprs, reversedClassExprs);
writer.WriteLine(L"/***********************************************************************"); writer.WriteLine(L"/***********************************************************************");
writer.WriteLine(L"Global Variables and Functions"); writer.WriteLine(L"Global Variables and Functions");
writer.WriteLine(L"***********************************************************************/"); writer.WriteLine(L"***********************************************************************/");
@@ -19796,30 +19820,35 @@ namespace vl
writer.WriteLine(L""); writer.WriteLine(L"");
writer.WriteLine(L"\t\tstatic " + assemblyName + L"& Instance();"); writer.WriteLine(L"\t\tstatic " + assemblyName + L"& Instance();");
writer.WriteLine(L"\t};"); writer.WriteLine(L"\t};");
if (reversedLambdaExprs.Count() + reversedClassExprs.Count() > 0)
{
writer.WriteLine(L"");
writer.WriteLine(L"/***********************************************************************");
writer.WriteLine(L"Closures");
writer.WriteLine(L"***********************************************************************/");
FOREACH(Ptr<WfExpression>, expr, reversedLambdaExprs.Values())
{
writer.WriteLine(L"");
WriteHeader_LambdaExprDecl(writer, expr);
}
FOREACH(Ptr<WfNewInterfaceExpression>, expr, reversedClassExprs.Values())
{
writer.WriteLine(L"");
WriteHeader_ClassExprDecl(writer, expr);
}
}
writer.WriteLine(L"}"); writer.WriteLine(L"}");
} }
void WfCppConfig::WriteCpp_Global(stream::StreamWriter& writer) void WfCppConfig::WriteCpp_Global(stream::StreamWriter& writer)
{ {
Dictionary<WString, Ptr<WfExpression>> reversedLambdaExprs; Dictionary<WString, Ptr<WfExpression>> reversedLambdaExprs;
CopyFrom(
reversedLambdaExprs,
From(lambdaExprs)
.Select([](Pair<Ptr<WfExpression>, WString> pair)
{
return Pair<WString, Ptr<WfExpression>>(pair.value, pair.key);
})
);
Dictionary<WString, Ptr<WfNewInterfaceExpression>> reversedClassExprs; Dictionary<WString, Ptr<WfNewInterfaceExpression>> reversedClassExprs;
CopyFrom( SortClosure(reversedLambdaExprs, reversedClassExprs);
reversedClassExprs,
From(classExprs)
.Select([](Pair<Ptr<WfNewInterfaceExpression>, WString> pair)
{
return Pair<WString, Ptr<WfNewInterfaceExpression>>(pair.value, pair.key);
})
);
writer.WriteLine(L"/***********************************************************************"); writer.WriteLine(L"/***********************************************************************");
writer.WriteLine(L"Global Variables"); writer.WriteLine(L"Global Variables");
@@ -19885,24 +19914,32 @@ namespace vl
writer.WriteLine(assemblyNamespace); writer.WriteLine(assemblyNamespace);
writer.WriteLine(L"{"); writer.WriteLine(L"{");
writer.WriteLine(L"/***********************************************************************");
writer.WriteLine(L"Global Functions");
writer.WriteLine(L"***********************************************************************/");
FOREACH(Ptr<WfFunctionDeclaration>, decl, funcDecls)
{
writer.WriteLine(L"");
writer.WriteString(L"\t");
auto returnType = WriteFunctionHeader(writer, decl, assemblyName + L"::" + ConvertName(decl->name.value), true);
writer.WriteLine(L"");
WriteFunctionBody(writer, decl->statement, L"\t", returnType);
}
writer.WriteLine(L"");
writer.WriteLine(L"\t" + assemblyName + L"& " + assemblyName + L"::Instance()");
writer.WriteLine(L"\t{");
writer.WriteLine(L"\t\treturn Get" + storageName + L"().instance;");
writer.WriteLine(L"\t}");
if (reversedLambdaExprs.Count() + reversedClassExprs.Count() > 0) if (reversedLambdaExprs.Count() + reversedClassExprs.Count() > 0)
{ {
writer.WriteLine(L"");
writer.WriteLine(L"/***********************************************************************"); writer.WriteLine(L"/***********************************************************************");
writer.WriteLine(L"Closure Definitions"); writer.WriteLine(L"Closures");
writer.WriteLine(L"***********************************************************************/"); writer.WriteLine(L"***********************************************************************/");
FOREACH(Ptr<WfExpression>, expr, reversedLambdaExprs.Values())
{
writer.WriteLine(L"");
WriteCpp_LambdaExprDecl(writer, expr);
}
FOREACH(Ptr<WfNewInterfaceExpression>, expr, reversedClassExprs.Values())
{
writer.WriteLine(L"");
WriteCpp_ClassExprDecl(writer, expr);
}
FOREACH(Ptr<WfExpression>, expr, reversedLambdaExprs.Values()) FOREACH(Ptr<WfExpression>, expr, reversedLambdaExprs.Values())
{ {
writer.WriteLine(L""); writer.WriteLine(L"");
@@ -19922,24 +19959,7 @@ namespace vl
} }
} }
} }
writer.WriteLine(L"/***********************************************************************");
writer.WriteLine(L"Global Functions");
writer.WriteLine(L"***********************************************************************/");
FOREACH(Ptr<WfFunctionDeclaration>, decl, funcDecls)
{
writer.WriteLine(L"");
writer.WriteString(L"\t");
auto returnType = WriteFunctionHeader(writer, decl, assemblyName + L"::" + ConvertName(decl->name.value), true);
writer.WriteLine(L"");
WriteFunctionBody(writer, decl->statement, L"\t", returnType);
}
writer.WriteLine(L"");
writer.WriteLine(L"\t" + assemblyName + L"& " + assemblyName + L"::Instance()");
writer.WriteLine(L"\t{");
writer.WriteLine(L"\t\treturn Get" + storageName + L"().instance;");
writer.WriteLine(L"\t}");
writer.WriteLine(L"}"); writer.WriteLine(L"}");
} }
} }
@@ -20138,7 +20158,76 @@ WfCppConfig::WriteCpp
writer.WriteLine(L";"); writer.WriteLine(L";");
} }
void WfCppConfig::WriteCpp_ClosureMembers(stream::StreamWriter& writer, Ptr<WfExpression> closure) void WfCppConfig::WriteHeader_LambdaExprDecl(stream::StreamWriter& writer, Ptr<WfExpression> lambda)
{
if (auto ordered = lambda.Cast<WfOrderedLambdaExpression>())
{
auto name = lambdaExprs[lambda.Obj()];
writer.WriteLine(L"\tstruct " + name);
writer.WriteLine(L"\t{");
if (WriteCpp_ClosureMembers(writer, lambda))
{
writer.WriteLine(L"");
}
writer.WriteString(L"\t\t");
WriteCpp_ClosureCtor(writer, lambda, name);
writer.WriteLine(L";");
writer.WriteLine(L"");
writer.WriteString(L"\t\t");
WriteFunctionHeader(writer, ordered, L"operator()", true);
writer.WriteLine(L" const;");
writer.WriteLine(L"\t};");
}
else if (auto funcExpr = lambda.Cast<WfFunctionExpression>())
{
auto name = lambdaExprs[lambda.Obj()];
writer.WriteLine(L"\tstruct " + name);
writer.WriteLine(L"\t{");
if (WriteCpp_ClosureMembers(writer, lambda))
{
writer.WriteLine(L"");
}
writer.WriteString(L"\t\t");
WriteCpp_ClosureCtor(writer, lambda, name);
writer.WriteLine(L";");
writer.WriteLine(L"");
writer.WriteString(L"\t\t");
WriteFunctionHeader(writer, funcExpr, L"operator()", true);
writer.WriteLine(L" const;");
writer.WriteLine(L"\t};");
}
}
void WfCppConfig::WriteHeader_ClassExprDecl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda)
{
auto result = manager->expressionResolvings[lambda.Obj()];
auto td = result.constructorInfo->GetOwnerTypeDescriptor();
auto name = classExprs[lambda.Obj()];
writer.WriteLine(L"\tclass " + name + L" : public ::vl::Object, public virtual " + ConvertType(td));
writer.WriteLine(L"\t{");
writer.WriteLine(L"\tpublic:");
if (WriteCpp_ClosureMembers(writer, lambda))
{
writer.WriteLine(L"");
}
writer.WriteString(L"\t\t");
WriteCpp_ClosureCtor(writer, lambda, name);
writer.WriteLine(L";");
writer.WriteLine(L"");
FOREACH(Ptr<WfClassMember>, member, lambda->members)
{
GenerateClassMemberDecl(this, writer, name, member, L"\t\t", true);
}
writer.WriteLine(L"\t};");
}
bool WfCppConfig::WriteCpp_ClosureMembers(stream::StreamWriter& writer, Ptr<WfExpression> closure)
{ {
auto info = closureInfos[closure.Obj()]; auto info = closureInfos[closure.Obj()];
@@ -20161,6 +20250,8 @@ WfCppConfig::WriteCpp
writer.WriteString(L"__vwsnthis_" + itow(index)); writer.WriteString(L"__vwsnthis_" + itow(index));
writer.WriteLine(L";"); writer.WriteLine(L";");
} }
return info->symbols.Count() + info->thisTypes.Count() > 0;
} }
void WfCppConfig::WriteCpp_ClosureCtor(stream::StreamWriter& writer, Ptr<WfExpression> closure, const WString& name) void WfCppConfig::WriteCpp_ClosureCtor(stream::StreamWriter& writer, Ptr<WfExpression> closure, const WString& name)
@@ -20232,46 +20323,6 @@ WfCppConfig::WriteCpp
} }
} }
void WfCppConfig::WriteCpp_LambdaExprDecl(stream::StreamWriter& writer, Ptr<WfExpression> lambda)
{
if (auto ordered = lambda.Cast<WfOrderedLambdaExpression>())
{
auto name = lambdaExprs[lambda.Obj()];
writer.WriteLine(L"\tstruct " + name);
writer.WriteLine(L"\t{");
WriteCpp_ClosureMembers(writer, lambda);
writer.WriteLine(L"");
writer.WriteString(L"\t\t");
WriteCpp_ClosureCtor(writer, lambda, name);
writer.WriteLine(L";");
writer.WriteLine(L"");
writer.WriteString(L"\t\t");
WriteFunctionHeader(writer, ordered, L"operator()", true);
writer.WriteLine(L" const;");
writer.WriteLine(L"\t};");
}
else if (auto funcExpr = lambda.Cast<WfFunctionExpression>())
{
auto name = lambdaExprs[lambda.Obj()];
writer.WriteLine(L"\tstruct " + name);
writer.WriteLine(L"\t{");
WriteCpp_ClosureMembers(writer, lambda);
writer.WriteLine(L"");
writer.WriteString(L"\t\t");
WriteCpp_ClosureCtor(writer, lambda, name);
writer.WriteLine(L";");
writer.WriteLine(L"");
writer.WriteString(L"\t\t");
WriteFunctionHeader(writer, funcExpr, L"operator()", true);
writer.WriteLine(L" const;");
writer.WriteLine(L"\t};");
}
}
void WfCppConfig::WriteCpp_LambdaExprImpl(stream::StreamWriter& writer, Ptr<WfExpression> lambda) void WfCppConfig::WriteCpp_LambdaExprImpl(stream::StreamWriter& writer, Ptr<WfExpression> lambda)
{ {
if (auto ordered = lambda.Cast<WfOrderedLambdaExpression>()) if (auto ordered = lambda.Cast<WfOrderedLambdaExpression>())
@@ -20312,29 +20363,6 @@ WfCppConfig::WriteCpp
} }
} }
void WfCppConfig::WriteCpp_ClassExprDecl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda)
{
auto result = manager->expressionResolvings[lambda.Obj()];
auto td = result.constructorInfo->GetOwnerTypeDescriptor();
auto name = classExprs[lambda.Obj()];
writer.WriteLine(L"\tclass " + name + L" : public ::vl::Object, public virtual " + ConvertType(td));
writer.WriteLine(L"\t{");
writer.WriteLine(L"\tpublic:");
WriteCpp_ClosureMembers(writer, lambda);
writer.WriteLine(L"");
writer.WriteString(L"\t\t");
WriteCpp_ClosureCtor(writer, lambda, name);
writer.WriteLine(L";");
writer.WriteLine(L"");
FOREACH(Ptr<WfClassMember>, member, lambda->members)
{
GenerateClassMemberDecl(this, writer, name, member, L"\t\t", true);
}
writer.WriteLine(L"\t};");
}
void WfCppConfig::WriteCpp_ClassExprImpl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda) void WfCppConfig::WriteCpp_ClassExprImpl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda)
{ {
auto name = classExprs[lambda.Obj()]; auto name = classExprs[lambda.Obj()];
+4 -3
View File
@@ -2695,12 +2695,12 @@ namespace vl
void WriteHeader_Struct(stream::StreamWriter& writer, Ptr<WfStructDeclaration> decl, collections::List<WString>& nss); void WriteHeader_Struct(stream::StreamWriter& writer, Ptr<WfStructDeclaration> decl, collections::List<WString>& nss);
void WriteHeader_ClosurePreDecl(stream::StreamWriter& writer, Ptr<WfExpression> closure); void WriteHeader_ClosurePreDecl(stream::StreamWriter& writer, Ptr<WfExpression> closure);
void WriteCpp_ClosureMembers(stream::StreamWriter& writer, Ptr<WfExpression> closure); void WriteHeader_LambdaExprDecl(stream::StreamWriter& writer, Ptr<WfExpression> lambda);
void WriteHeader_ClassExprDecl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda);
bool WriteCpp_ClosureMembers(stream::StreamWriter& writer, Ptr<WfExpression> closure);
void WriteCpp_ClosureCtor(stream::StreamWriter& writer, Ptr<WfExpression> closure, const WString& name); void WriteCpp_ClosureCtor(stream::StreamWriter& writer, Ptr<WfExpression> closure, const WString& name);
void WriteCpp_ClosureCtorInitList(stream::StreamWriter& writer, Ptr<WfExpression> closure); void WriteCpp_ClosureCtorInitList(stream::StreamWriter& writer, Ptr<WfExpression> closure);
void WriteCpp_LambdaExprDecl(stream::StreamWriter& writer, Ptr<WfExpression> lambda);
void WriteCpp_LambdaExprImpl(stream::StreamWriter& writer, Ptr<WfExpression> lambda); void WriteCpp_LambdaExprImpl(stream::StreamWriter& writer, Ptr<WfExpression> lambda);
void WriteCpp_ClassExprDecl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda);
void WriteCpp_ClassExprImpl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda); void WriteCpp_ClassExprImpl(stream::StreamWriter& writer, Ptr<WfNewInterfaceExpression> lambda);
void WriteHeader_ClassPreDecl(stream::StreamWriter& writer, Ptr<WfClassDeclaration> decl, const WString& name, const WString& prefix); void WriteHeader_ClassPreDecl(stream::StreamWriter& writer, Ptr<WfClassDeclaration> decl, const WString& name, const WString& prefix);
@@ -2711,6 +2711,7 @@ namespace vl
bool WriteCpp_ClassMember(stream::StreamWriter& writer, Ptr<WfClassDeclaration> decl, Ptr<WfClassMember> member, collections::List<WString>& nss); bool WriteCpp_ClassMember(stream::StreamWriter& writer, Ptr<WfClassDeclaration> decl, Ptr<WfClassMember> member, collections::List<WString>& nss);
void WriteCpp_Class(stream::StreamWriter& writer, Ptr<WfClassDeclaration> decl, collections::List<WString>& nss); void WriteCpp_Class(stream::StreamWriter& writer, Ptr<WfClassDeclaration> decl, collections::List<WString>& nss);
void SortClosure(collections::Dictionary<WString, Ptr<WfExpression>>& reversedLambdaExprs, collections::Dictionary<WString, Ptr<WfNewInterfaceExpression>>& reversedClassExprs);
void WriteHeader_Global(stream::StreamWriter& writer); void WriteHeader_Global(stream::StreamWriter& writer);
void WriteCpp_Global(stream::StreamWriter& writer); void WriteCpp_Global(stream::StreamWriter& writer);
@@ -53,7 +53,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);VCZH_DEBUG_NO_REFLECTION</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
</ClCompile> </ClCompile>
<Link> <Link>
@@ -69,7 +69,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);VCZH_DEBUG_NO_REFLECTION</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
</ClCompile> </ClCompile>
<Link> <Link>
@@ -118,8 +118,8 @@
<ClInclude Include="UI\Source\DemoPartialClasses.h" /> <ClInclude Include="UI\Source\DemoPartialClasses.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Lib\GacUI\GacUI.vcxproj"> <ProjectReference Include="..\..\Lib\GacUILite\GacUILite.vcxproj">
<Project>{8018d622-66ba-4e65-9d03-bdac37ea9a54}</Project> <Project>{96c559ca-9718-4bec-a053-28a0ab6a8ca2}</Project>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -9,8 +9,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lib", "Lib", "{A7FA6C2B-37E
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GacUILite", "..\Lib\GacUILite\GacUILite.vcxproj", "{96C559CA-9718-4BEC-A053-28A0AB6A8CA2}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GacUILite", "..\Lib\GacUILite\GacUILite.vcxproj", "{96C559CA-9718-4BEC-A053-28A0AB6A8CA2}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GacUI", "..\Lib\GacUI\GacUI.vcxproj", "{8018D622-66BA-4E65-9D03-BDAC37EA9A54}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32 Debug|Win32 = Debug|Win32
@@ -25,16 +23,11 @@ Global
{96C559CA-9718-4BEC-A053-28A0AB6A8CA2}.Debug|Win32.Build.0 = Debug|Win32 {96C559CA-9718-4BEC-A053-28A0AB6A8CA2}.Debug|Win32.Build.0 = Debug|Win32
{96C559CA-9718-4BEC-A053-28A0AB6A8CA2}.Release|Win32.ActiveCfg = Release|Win32 {96C559CA-9718-4BEC-A053-28A0AB6A8CA2}.Release|Win32.ActiveCfg = Release|Win32
{96C559CA-9718-4BEC-A053-28A0AB6A8CA2}.Release|Win32.Build.0 = Release|Win32 {96C559CA-9718-4BEC-A053-28A0AB6A8CA2}.Release|Win32.Build.0 = Release|Win32
{8018D622-66BA-4E65-9D03-BDAC37EA9A54}.Debug|Win32.ActiveCfg = Debug|Win32
{8018D622-66BA-4E65-9D03-BDAC37EA9A54}.Debug|Win32.Build.0 = Debug|Win32
{8018D622-66BA-4E65-9D03-BDAC37EA9A54}.Release|Win32.ActiveCfg = Release|Win32
{8018D622-66BA-4E65-9D03-BDAC37EA9A54}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{96C559CA-9718-4BEC-A053-28A0AB6A8CA2} = {A7FA6C2B-37E0-4C2B-AC76-6E577A987492} {96C559CA-9718-4BEC-A053-28A0AB6A8CA2} = {A7FA6C2B-37E0-4C2B-AC76-6E577A987492}
{8018D622-66BA-4E65-9D03-BDAC37EA9A54} = {A7FA6C2B-37E0-4C2B-AC76-6E577A987492}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal