mirror of
https://github.com/vczh-libraries/Release.git
synced 2026-05-19 10:47:19 +08:00
AddressBook NewContactWindow
This commit is contained in:
@@ -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.
Reference in New Issue
Block a user