AddressBook NewContactWindow

This commit is contained in:
vczh
2016-07-30 21:55:22 -07:00
parent 96cee8c315
commit 4504edcfc6
5 changed files with 227 additions and 6 deletions
+4 -2
View File
@@ -231,9 +231,11 @@ public:
Ptr<IContact> CreateContact()override
{
if (auto parent = dynamic_cast<Category*>(selectedCategory.Obj()))
if (auto category = dynamic_cast<Category*>(selectedCategory.Obj()))
{
return new Contact(parent);
auto contact = new Contact(category);
contact->Update(L"Mr. New Contact", DateTime::LocalTime(), L"(123)-456-7890", L"110 st, New York, NY 10118");
return contact;
}
return nullptr;
}
@@ -110,8 +110,8 @@
<Instance name="MainWindowResource">
<Instance ref.Class="demo::MainWindow">
<ref.Parameter Name="ViewModel" Class="demo::IViewModel"/>
<Window ref.Name="self" Text="AddressBook" ClientSize="x:480 y:320">
<att.BoundsComposition-set PreferredMinSize="x:480 y:320"/>
<Window ref.Name="self" Text="AddressBook" ClientSize="x:640 y:480">
<att.BoundsComposition-set PreferredMinSize="x:640 y:480"/>
<att.ViewModel-set>
<att.SelectedCategory-bind>treeViewFolders.SelectedItem as (demo::ICategory^)</att.SelectedCategory-bind>
@@ -150,6 +150,15 @@
<ev.Executed-eval>
<![CDATA[
{
var contact = ViewModel.CreateContact();
var window = new demo::NewContactWindow*(contact);
window.MoveToScreenCenter();
window.ShowModalAndDelete(self, func():void
{
if (window.Ready)
{
}
});
}
]]>
</ev.Executed-eval>
@@ -305,13 +314,101 @@
<Cell Site="row:2 column:2">
<Button Text="OK">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0" PreferredMinSize="x:60"/>
<ev.Clicked-eval>{ self.Close(); }</ev.Clicked-eval>
<ev.Clicked-eval><![CDATA[{ self.Close(); }]]></ev.Clicked-eval>
</Button>
</Cell>
<Cell Site="row:2 column:3">
<Button Text="Cancel">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0" PreferredMinSize="x:60"/>
<ev.Clicked-eval>{ self.Ready = false; self.Close(); }</ev.Clicked-eval>
<ev.Clicked-eval><![CDATA[{ self.Ready = false; self.Close(); }]]></ev.Clicked-eval>
</Button>
</Cell>
</Table>
</Window>
</Instance>
</Instance>
<Instance name="NewContactWindowResource">
<Instance ref.CodeBehind="false" ref.Class="demo::NewContactWindow">
<ref.Property Name="Ready" Type="bool" Value="true"/>
<ref.Parameter Name="Contact" Class="demo::IContact"/>
<Window ref.Name="self" Text="New Contact" ClientSize="x:480 y:360" MaximizedBox="false" MinimizedBox="false" SizeBox="false">
<Table CellPadding="5" AlignmentToParent="left:0 top:0 right:0 bottom:0">
<att.Rows>
<CellOption>composeType:MinSize</CellOption>
<CellOption>composeType:MinSize</CellOption>
<CellOption>composeType:MinSize</CellOption>
<CellOption>composeType:MinSize</CellOption>
<CellOption>composeType:Percentage percentage:1.0</CellOption>
<CellOption>composeType:MinSize</CellOption>
</att.Rows>
<att.Columns>
<CellOption>composeType:MinSize</CellOption>
<CellOption>composeType:Percentage percentage:1.0</CellOption>
<CellOption>composeType:MinSize</CellOption>
<CellOption>composeType:MinSize</CellOption>
</att.Columns>
<Cell Site="row:0 column:0" InternalMargin="top:6">
<Label Text="Name:"/>
</Cell>
<Cell Site="row:0 column:1 columnSpan:3">
<DocumentTextBox ref.Name="textBoxName" EditMode="Editable" Text-eval="Contact.Name">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</DocumentTextBox>
</Cell>
<Cell Site="row:1 column:0" InternalMargin="top:6">
<Label Text="Phone:"/>
</Cell>
<Cell Site="row:1 column:1 columnSpan:3">
<DocumentTextBox ref.Name="textBoxPhone" EditMode="Editable" Text-eval="Contact.Phone">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</DocumentTextBox>
</Cell>
<Cell Site="row:2 column:0" InternalMargin="top:6">
<Label Text="Address:"/>
</Cell>
<Cell Site="row:2 column:1 columnSpan:3">
<DocumentTextBox ref.Name="textBoxAddress" EditMode="Editable" Text-eval="Contact.Address">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</DocumentTextBox>
</Cell>
<Cell Site="row:3 column:0" InternalMargin="top:6">
<Label Text="Birthday:"/>
</Cell>
<Cell Site="row:3 column:1 columnSpan:3">
<DatePicker ref.Name="datePickerBirthday" Date-eval="Contact.Birthday">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 bottom:0"/>
</DatePicker>
</Cell>
<Cell Site="row:5 column:2">
<Button Text="OK">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0" PreferredMinSize="x:60"/>
<ev.Clicked-eval>
<![CDATA[
{
Contact.Update(textBoxName.Text, datePickerBirthday.Date, textBoxPhone.Text, textBoxAddress.Text);
self.Close();
}
]]>
</ev.Clicked-eval>
</Button>
</Cell>
<Cell Site="row:5 column:3">
<Button Text="Cancel">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0" PreferredMinSize="x:60"/>
<ev.Clicked-eval>
<![CDATA[
{
self.Ready = false; self.Close();
}
]]>
</ev.Clicked-eval>
</Button>
</Cell>
</Table>
@@ -10,6 +10,34 @@ DO NOT MODIFY
#include "Demo.h"
namespace demo
{
// #region CLASS_MEMBER_GUIEVENT_HANDLER (DO NOT PUT OTHER CONTENT IN THIS #region.)
void NewContactWindow::OnCreate()
{
}
void NewContactWindow::OnDestroy()
{
}
// #endregion CLASS_MEMBER_GUIEVENT_HANDLER
NewContactWindow::NewContactWindow(Ptr<demo::IContact> Contact)
{
InitializeComponents(Contact);
OnCreate();
}
NewContactWindow::~NewContactWindow()
{
OnDestroy();
ClearSubscriptions();
}
}
namespace demo
{
// #region CLASS_MEMBER_GUIEVENT_HANDLER (DO NOT PUT OTHER CONTENT IN THIS #region.)
@@ -49,6 +77,7 @@ namespace vl
IMPL_CPP_TYPE_INFO(demo::IContact)
IMPL_CPP_TYPE_INFO(demo::IViewModel)
IMPL_CPP_TYPE_INFO(demo::MainWindow)
IMPL_CPP_TYPE_INFO(demo::NewContactWindow)
IMPL_CPP_TYPE_INFO(demo::NewFolderWindow)
BEGIN_CLASS_MEMBER(demo::ICategory)
@@ -114,6 +143,15 @@ namespace vl
CLASS_MEMBER_PROPERTY_READONLY_FAST(ViewModel)
END_CLASS_MEMBER(demo::MainWindow)
BEGIN_CLASS_MEMBER(demo::NewContactWindow)
CLASS_MEMBER_BASE(vl::presentation::controls::GuiWindow)
CLASS_MEMBER_CONSTRUCTOR(demo::NewContactWindow*(Ptr<demo::IContact>), { L"Contact" })
CLASS_MEMBER_PROPERTY_READONLY_FAST(Contact)
CLASS_MEMBER_EVENT(ReadyChanged)
CLASS_MEMBER_PROPERTY_EVENT_FAST(Ready, ReadyChanged)
END_CLASS_MEMBER(demo::NewContactWindow)
BEGIN_CLASS_MEMBER(demo::NewFolderWindow)
CLASS_MEMBER_BASE(vl::presentation::controls::GuiWindow)
CLASS_MEMBER_CONSTRUCTOR(demo::NewFolderWindow*(), NO_PARAMETER)
@@ -135,6 +173,7 @@ namespace vl
ADD_TYPE_INFO(demo::IContact)
ADD_TYPE_INFO(demo::IViewModel)
ADD_TYPE_INFO(demo::MainWindow)
ADD_TYPE_INFO(demo::NewContactWindow)
ADD_TYPE_INFO(demo::NewFolderWindow)
}
@@ -19,6 +19,7 @@ namespace demo
class ICategory;
class IViewModel;
class MainWindow;
class NewContactWindow;
class NewFolderWindow;
class IContact : public virtual vl::reflection::IDescriptable, public vl::reflection::Description<IContact>
@@ -131,6 +132,68 @@ namespace demo
}
};
template<typename TImpl>
class NewContactWindow_ : public vl::presentation::controls::GuiWindow, public vl::presentation::GuiInstancePartialClass<vl::presentation::controls::GuiWindow>, public vl::reflection::Description<TImpl>
{
friend struct vl::reflection::description::CustomTypeDescriptorSelector<TImpl>;
private:
Ptr<demo::IContact> Contact_;
bool Ready_;
protected:
vl::presentation::controls::GuiDatePicker* datePickerBirthday;
vl::presentation::controls::GuiWindow* self;
vl::presentation::controls::GuiDocumentLabel* textBoxAddress;
vl::presentation::controls::GuiDocumentLabel* textBoxName;
vl::presentation::controls::GuiDocumentLabel* textBoxPhone;
void InitializeComponents(Ptr<demo::IContact> Contact)
{
Contact_ = Contact;
if (InitializeFromResource())
{
GUI_INSTANCE_REFERENCE(datePickerBirthday);
GUI_INSTANCE_REFERENCE(self);
GUI_INSTANCE_REFERENCE(textBoxAddress);
GUI_INSTANCE_REFERENCE(textBoxName);
GUI_INSTANCE_REFERENCE(textBoxPhone);
}
else
{
Contact_ = 0;
}
}
public:
NewContactWindow_()
:vl::presentation::GuiInstancePartialClass<vl::presentation::controls::GuiWindow>(L"demo::NewContactWindow")
,vl::presentation::controls::GuiWindow(vl::presentation::theme::GetCurrentTheme()->CreateWindowStyle())
,datePickerBirthday(0)
,self(0)
,textBoxAddress(0)
,textBoxName(0)
,textBoxPhone(0)
{
this->Ready_ = vl::reflection::description::UnboxValue<bool>(vl::reflection::description::Value::From(L"true", reflection::description::GetTypeDescriptor<bool>()));
}
Ptr<demo::IContact> GetContact()
{
return Contact_;
}
vl::Event<void()> ReadyChanged;
bool GetReady()
{
return Ready_;
}
void SetReady(bool value)
{
Ready_ = value;
ReadyChanged();
}
};
template<typename TImpl>
class NewFolderWindow_ : public vl::presentation::controls::GuiWindow, public vl::presentation::GuiInstancePartialClass<vl::presentation::controls::GuiWindow>, public vl::reflection::Description<TImpl>
{
@@ -202,11 +265,31 @@ namespace vl
DECL_TYPE_INFO(demo::IContact)
DECL_TYPE_INFO(demo::IViewModel)
DECL_TYPE_INFO(demo::MainWindow)
DECL_TYPE_INFO(demo::NewContactWindow)
DECL_TYPE_INFO(demo::NewFolderWindow)
}
}
}
namespace demo
{
class NewContactWindow : public demo::NewContactWindow_<demo::NewContactWindow>
{
friend class demo::NewContactWindow_<demo::NewContactWindow>;
friend struct vl::reflection::description::CustomTypeDescriptorSelector<demo::NewContactWindow>;
protected:
// #region CLASS_MEMBER_GUIEVENT_HANDLER (DO NOT PUT OTHER CONTENT IN THIS #region.)
void OnCreate();
void OnDestroy();
// #endregion CLASS_MEMBER_GUIEVENT_HANDLER
public:
NewContactWindow(Ptr<demo::IContact> Contact);
~NewContactWindow();
};
}
namespace demo
{
class NewFolderWindow : public demo::NewFolderWindow_<demo::NewFolderWindow>
Binary file not shown.