Update GacUI_Controls\TextEditor demo

This commit is contained in:
vczh
2016-01-13 00:59:43 -08:00
parent 84075e9304
commit 5a84951689
12 changed files with 229 additions and 81 deletions
@@ -83,7 +83,6 @@
<ClCompile Include="Main.cpp" /> <ClCompile Include="Main.cpp" />
<ClCompile Include="UI\Source\AboutWindow.cpp" /> <ClCompile Include="UI\Source\AboutWindow.cpp" />
<ClCompile Include="UI\Source\DemoPartialClasses.cpp" /> <ClCompile Include="UI\Source\DemoPartialClasses.cpp" />
<ClCompile Include="UI\Source\FindWindow.cpp" />
<ClCompile Include="UI\Source\MainWindow.cpp" /> <ClCompile Include="UI\Source\MainWindow.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -102,7 +101,6 @@
<ClInclude Include="UI\Source\AboutWindow.h" /> <ClInclude Include="UI\Source\AboutWindow.h" />
<ClInclude Include="UI\Source\Demo.h" /> <ClInclude Include="UI\Source\Demo.h" />
<ClInclude Include="UI\Source\DemoPartialClasses.h" /> <ClInclude Include="UI\Source\DemoPartialClasses.h" />
<ClInclude Include="UI\Source\FindWindow.h" />
<ClInclude Include="UI\Source\MainWindow.h" /> <ClInclude Include="UI\Source\MainWindow.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -33,9 +33,6 @@
<ClCompile Include="UI\Source\AboutWindow.cpp"> <ClCompile Include="UI\Source\AboutWindow.cpp">
<Filter>UI</Filter> <Filter>UI</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="UI\Source\FindWindow.cpp">
<Filter>UI</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Xml Include="UI\Resource.xml"> <Xml Include="UI\Resource.xml">
@@ -67,9 +64,6 @@
<ClInclude Include="UI\Source\AboutWindow.h"> <ClInclude Include="UI\Source\AboutWindow.h">
<Filter>UI</Filter> <Filter>UI</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="UI\Source\FindWindow.h">
<Filter>UI</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Image Include="UI\Images\EditCopy.png"> <Image Include="UI\Images\EditCopy.png">
@@ -1,6 +1,106 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Instance ref.CodeBehind="true" ref.Class="demo::FindWindow"> <Folder>
<Window ref.Name="self" Text="Find" ClientSize="x:240 y:100" MinimizedBox="false" MaximizedBox="false"> <Script name="ViewModelResource">
<att.BoundsComposition-set PreferredMinSize="x:240 y:100"/> <Workflow-ViewModel>
</Window> <![CDATA[
</Instance> module viewmodel;
namespace vm
{
interface IFindWindowViewModel
{
func FindNext(toFind : string, caseSensitive : bool, down : bool) : bool;
}
}
]]>
</Workflow-ViewModel>
</Script>
<Instance name="FindWindowResource">
<Instance ref.CodeBehind="false" ref.Class="demo::FindWindow" xmlns:x="presentation::controls::GuiSelectableButton::*">
<ref.Parameter Name="ViewModel" Class="vm::IFindWindowViewModel"/>
<Window ref.Name="self" Text="Find" ClientSize="x:360 y:150" MinimizedBox="false" MaximizedBox="false">
<att.BoundsComposition-set PreferredMinSize="x:360 y:150"/>
<x:MutexGroupController ref.Name="groupDirection"/>
<MessageDialog ref.Name="dialogContentNotFound"
Input="DisplayOK"
Title-eval="self.Text"
Text="Content not found."
/>
<Table AlignmentToParent="left:0 top:0 right:0 bottom:0" CellPadding="5">
<att.Rows>
<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">
<Label Text="To Find:">
<att.BoundsComposition-set AlignmentToParent="left:5 top:5 right:5 bottom:5"/>
</Label>
</Cell>
<Cell Site="row:0 column:1 columnSpan:3">
<SinglelineTextBox ref.Name="textFind">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
</SinglelineTextBox>
</Cell>
<Cell Site="row:1 column:0 columnSpan:4">
<Stack Direction="Horizontal" AlignmentToParent="left:5 top:5 right:5 bottom:5" Padding="20" MinSizeLimitation="LimitToElementAndChildren">
<StackItem>
<CheckBox ref.Name="checkCase" Text="Case Sensitive"/>
</StackItem>
<StackItem>
<GroupBox Text="Direction">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:-1 bottom:0"/>
<att.ContainerComposition-set MinSizeLimitation="LimitToElementAndChildren"/>
<Stack Direction="Horizontal" AlignmentToParent="left:5 top:5 right:5 bottom:5" Padding="20" MinSizeLimitation="LimitToElementAndChildren">
<StackItem>
<RadioButton ref.Name="radioUp" Text="Up" GroupController-ref="groupDirection"/>
</StackItem>
<StackItem>
<RadioButton ref.Name="radioDown" Text="Down" GroupController-ref="groupDirection" Selected="true"/>
</StackItem>
</Stack>
</GroupBox>
</StackItem>
</Stack>
</Cell>
<Cell Site="row:3 column:2">
<Button Text="Find Next">
<att.BoundsComposition-set PreferredMinSize="x:100 y:30"/>
<ev.Clicked-eval>
<![CDATA[
{
if (not ViewModel.FindNext(textFind.Text, checkCase.Selected, radioDown.Selected))
{
dialogContentNotFound.ShowDialog();
}
}
]]>
</ev.Clicked-eval>
</Button>
</Cell>
<Cell Site="row:3 column:3">
<Button Text="Close">
<att.BoundsComposition-set PreferredMinSize="x:100 y:30"/>
<ev.Clicked-eval>self.Close();</ev.Clicked-eval>
</Button>
</Cell>
</Table>
</Window>
</Instance>
</Instance>
</Folder>
@@ -14,6 +14,6 @@
</Folder> </Folder>
<Folder name="Images" content="Link">Images\Folder.xml</Folder> <Folder name="Images" content="Link">Images\Folder.xml</Folder>
<Folder name="AboutWindow" content="Link">AboutWindow.xml</Folder> <Folder name="AboutWindow" content="Link">AboutWindow.xml</Folder>
<Instance name="FindWindowResource" content="File">FindWindow.xml</Instance> <Folder name="FindWindow" content="Link">FindWindow.xml</Folder>
<Instance name="MainWindowResource" content="File">MainWindow.xml</Instance> <Instance name="MainWindowResource" content="File">MainWindow.xml</Instance>
</Resource> </Resource>
@@ -13,7 +13,6 @@ DO NOT MODIFY
#include "DemoPartialClasses.h" #include "DemoPartialClasses.h"
#include "AboutWindow.h" #include "AboutWindow.h"
#include "FindWindow.h"
#include "MainWindow.h" #include "MainWindow.h"
#endif #endif
@@ -10,6 +10,24 @@ DO NOT MODIFY
#include "Demo.h" #include "Demo.h"
namespace demo
{
// #region CLASS_MEMBER_GUIEVENT_HANDLER (DO NOT PUT OTHER CONTENT IN THIS #region.)
// #endregion CLASS_MEMBER_GUIEVENT_HANDLER
FindWindow::FindWindow(Ptr<vm::IFindWindowViewModel> ViewModel)
{
InitializeComponents(ViewModel);
}
FindWindow::~FindWindow()
{
ClearSubscriptions();
}
}
namespace vl namespace vl
{ {
namespace reflection namespace reflection
@@ -17,10 +35,16 @@ namespace vl
namespace description namespace description
{ {
#define _ , #define _ ,
IMPL_CPP_TYPE_INFO(vm::IFindWindowViewModel)
IMPL_CPP_TYPE_INFO(demo::AboutWindow) IMPL_CPP_TYPE_INFO(demo::AboutWindow)
IMPL_CPP_TYPE_INFO(demo::FindWindow) IMPL_CPP_TYPE_INFO(demo::FindWindow)
IMPL_CPP_TYPE_INFO(demo::MainWindow) IMPL_CPP_TYPE_INFO(demo::MainWindow)
BEGIN_CLASS_MEMBER(vm::IFindWindowViewModel)
CLASS_MEMBER_BASE(vl::reflection::IDescriptable)
CLASS_MEMBER_METHOD(FindNext, { L"toFind" _ L"caseSensitive" _ L"down" });
END_CLASS_MEMBER(vm::IFindWindowViewModel)
BEGIN_CLASS_MEMBER(demo::AboutWindow) BEGIN_CLASS_MEMBER(demo::AboutWindow)
CLASS_MEMBER_BASE(vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(vl::presentation::controls::GuiWindow)
CLASS_MEMBER_CONSTRUCTOR(demo::AboutWindow*(), NO_PARAMETER) CLASS_MEMBER_CONSTRUCTOR(demo::AboutWindow*(), NO_PARAMETER)
@@ -30,7 +54,9 @@ namespace vl
BEGIN_CLASS_MEMBER(demo::FindWindow) BEGIN_CLASS_MEMBER(demo::FindWindow)
CLASS_MEMBER_BASE(vl::presentation::controls::GuiWindow) CLASS_MEMBER_BASE(vl::presentation::controls::GuiWindow)
CLASS_MEMBER_CONSTRUCTOR(demo::FindWindow*(), NO_PARAMETER) CLASS_MEMBER_CONSTRUCTOR(demo::FindWindow*(Ptr<vm::IFindWindowViewModel>), { L"ViewModel" })
CLASS_MEMBER_PROPERTY_READONLY_FAST(ViewModel)
END_CLASS_MEMBER(demo::FindWindow) END_CLASS_MEMBER(demo::FindWindow)
BEGIN_CLASS_MEMBER(demo::MainWindow) BEGIN_CLASS_MEMBER(demo::MainWindow)
@@ -64,6 +90,7 @@ namespace vl
public: public:
void Load(ITypeManager* manager) void Load(ITypeManager* manager)
{ {
ADD_TYPE_INFO(vm::IFindWindowViewModel)
ADD_TYPE_INFO(demo::AboutWindow) ADD_TYPE_INFO(demo::AboutWindow)
ADD_TYPE_INFO(demo::FindWindow) ADD_TYPE_INFO(demo::FindWindow)
ADD_TYPE_INFO(demo::MainWindow) ADD_TYPE_INFO(demo::MainWindow)
@@ -13,12 +13,28 @@ DO NOT MODIFY
#include "GacUIReflection.h" #include "GacUIReflection.h"
namespace vm
{
class IFindWindowViewModel;
}
namespace demo namespace demo
{ {
class AboutWindow; class AboutWindow;
class FindWindow; class FindWindow;
class MainWindow; class MainWindow;
}
namespace vm
{
class IFindWindowViewModel : public virtual vl::reflection::IDescriptable, public vl::reflection::Description<IFindWindowViewModel>
{
public:
virtual bool FindNext(vl::WString toFind, bool caseSensitive, bool down) = 0;
};
}
namespace demo
{
template<typename TImpl> template<typename TImpl>
class AboutWindow_ : public vl::presentation::controls::GuiWindow, public vl::presentation::GuiInstancePartialClass<vl::presentation::controls::GuiWindow>, public vl::reflection::Description<TImpl> class AboutWindow_ : public vl::presentation::controls::GuiWindow, public vl::presentation::GuiInstancePartialClass<vl::presentation::controls::GuiWindow>, public vl::reflection::Description<TImpl>
{ {
@@ -54,26 +70,52 @@ namespace demo
{ {
friend struct vl::reflection::description::CustomTypeDescriptorSelector<TImpl>; friend struct vl::reflection::description::CustomTypeDescriptorSelector<TImpl>;
private: private:
Ptr<vm::IFindWindowViewModel> ViewModel_;
protected: protected:
vl::presentation::controls::GuiSelectableButton* checkCase;
vl::presentation::controls::GuiMessageDialog* dialogContentNotFound;
vl::presentation::controls::GuiSelectableButton::MutexGroupController* groupDirection;
vl::presentation::controls::GuiSelectableButton* radioDown;
vl::presentation::controls::GuiSelectableButton* radioUp;
vl::presentation::controls::GuiWindow* self; vl::presentation::controls::GuiWindow* self;
vl::presentation::controls::GuiSinglelineTextBox* textFind;
void InitializeComponents() void InitializeComponents(Ptr<vm::IFindWindowViewModel> ViewModel)
{ {
ViewModel_ = ViewModel;
if (InitializeFromResource()) if (InitializeFromResource())
{ {
GUI_INSTANCE_REFERENCE(checkCase);
GUI_INSTANCE_REFERENCE(dialogContentNotFound);
GUI_INSTANCE_REFERENCE(groupDirection);
GUI_INSTANCE_REFERENCE(radioDown);
GUI_INSTANCE_REFERENCE(radioUp);
GUI_INSTANCE_REFERENCE(self); GUI_INSTANCE_REFERENCE(self);
GUI_INSTANCE_REFERENCE(textFind);
} }
else else
{ {
ViewModel_ = 0;
} }
} }
public: public:
FindWindow_() FindWindow_()
:vl::presentation::GuiInstancePartialClass<vl::presentation::controls::GuiWindow>(L"demo::FindWindow") :vl::presentation::GuiInstancePartialClass<vl::presentation::controls::GuiWindow>(L"demo::FindWindow")
,vl::presentation::controls::GuiWindow(vl::presentation::theme::GetCurrentTheme()->CreateWindowStyle()) ,vl::presentation::controls::GuiWindow(vl::presentation::theme::GetCurrentTheme()->CreateWindowStyle())
,checkCase(0)
,dialogContentNotFound(0)
,groupDirection(0)
,radioDown(0)
,radioUp(0)
,self(0) ,self(0)
,textFind(0)
{ {
} }
Ptr<vm::IFindWindowViewModel> GetViewModel()
{
return ViewModel_;
}
}; };
template<typename TImpl> template<typename TImpl>
@@ -179,6 +221,7 @@ namespace vl
{ {
namespace description namespace description
{ {
DECL_TYPE_INFO(vm::IFindWindowViewModel)
DECL_TYPE_INFO(demo::AboutWindow) DECL_TYPE_INFO(demo::AboutWindow)
DECL_TYPE_INFO(demo::FindWindow) DECL_TYPE_INFO(demo::FindWindow)
DECL_TYPE_INFO(demo::MainWindow) DECL_TYPE_INFO(demo::MainWindow)
@@ -186,5 +229,22 @@ namespace vl
} }
} }
} }
namespace demo
{
class FindWindow : public demo::FindWindow_<demo::FindWindow>
{
friend class demo::FindWindow_<demo::FindWindow>;
friend struct vl::reflection::description::CustomTypeDescriptorSelector<demo::FindWindow>;
protected:
// #region CLASS_MEMBER_GUIEVENT_HANDLER (DO NOT PUT OTHER CONTENT IN THIS #region.)
// #endregion CLASS_MEMBER_GUIEVENT_HANDLER
public:
FindWindow(Ptr<vm::IFindWindowViewModel> ViewModel);
~FindWindow();
};
}
#endif #endif
@@ -1,27 +0,0 @@
/***********************************************************************
Vczh Library++ 3.0
Developer: Zihan Chen(vczh)
GacUI::FindWindow
This file is generated by: Vczh GacUI Resource Code Generator
***********************************************************************/
#include "Demo.h"
namespace demo
{
// #region CLASS_MEMBER_GUIEVENT_HANDLER (DO NOT PUT OTHER CONTENT IN THIS #region.)
// #endregion CLASS_MEMBER_GUIEVENT_HANDLER
FindWindow::FindWindow()
{
InitializeComponents();
}
FindWindow::~FindWindow()
{
ClearSubscriptions();
}
}
@@ -1,30 +0,0 @@
/***********************************************************************
Vczh Library++ 3.0
Developer: Zihan Chen(vczh)
GacUI::FindWindow
This file is generated by: Vczh GacUI Resource Code Generator
***********************************************************************/
#ifndef VCZH_GACUI_RESOURCE_CODE_GENERATOR_Demo_FindWindow
#define VCZH_GACUI_RESOURCE_CODE_GENERATOR_Demo_FindWindow
#include "DemoPartialClasses.h"
namespace demo
{
class FindWindow : public demo::FindWindow_<demo::FindWindow>
{
friend class demo::FindWindow_<demo::FindWindow>;
friend struct vl::reflection::description::CustomTypeDescriptorSelector<demo::FindWindow>;
protected:
// #region CLASS_MEMBER_GUIEVENT_HANDLER (DO NOT PUT OTHER CONTENT IN THIS #region.)
// #endregion CLASS_MEMBER_GUIEVENT_HANDLER
public:
FindWindow();
~FindWindow();
};
}
#endif
@@ -110,6 +110,7 @@ namespace demo
void MainWindow::commandEditFind_Executed(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiEventArgs& arguments) void MainWindow::commandEditFind_Executed(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiEventArgs& arguments)
{ {
findWindow->Show();
} }
void MainWindow::commandEditPaste_Executed(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiEventArgs& arguments) void MainWindow::commandEditPaste_Executed(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiEventArgs& arguments)
@@ -311,10 +312,23 @@ namespace demo
MainWindow::MainWindow() MainWindow::MainWindow()
{ {
InitializeComponents(); InitializeComponents();
findWindow = MakePtr<FindWindow>(MakePtr<FindWindowViewModel>(textBox));
findWindow->MoveToScreenCenter();
findWindow->GetNativeWindow()->SetParent(GetNativeWindow());
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
ClearSubscriptions(); ClearSubscriptions();
} }
MainWindow::FindWindowViewModel::FindWindowViewModel(GuiMultilineTextBox* _textBox)
:textBox(_textBox)
{
}
bool MainWindow::FindWindowViewModel::FindNext(vl::WString toFind, bool caseSensitive, bool down)
{
return false;
}
} }
@@ -39,16 +39,29 @@ namespace demo
void commandFileSave_Executed(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiEventArgs& arguments); void commandFileSave_Executed(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiEventArgs& arguments);
void window_Closing(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiRequestEventArgs& arguments); void window_Closing(GuiGraphicsComposition* sender, vl::presentation::compositions::GuiRequestEventArgs& arguments);
// #endregion CLASS_MEMBER_GUIEVENT_HANDLER // #endregion CLASS_MEMBER_GUIEVENT_HANDLER
private:
class FindWindowViewModel : public Object, public virtual vm::IFindWindowViewModel
{
private:
GuiMultilineTextBox* textBox;
public:
FindWindowViewModel(GuiMultilineTextBox* _textBox);
bool FindNext(vl::WString toFind, bool caseSensitive, bool down)override;
};
private: private:
WString fileName; WString fileName;
bool isXml = false; bool isXml = false;
Ptr<FindWindow> findWindow;
bool CanCloseFile(); bool CanCloseFile();
bool OpenFile(vint filterIndex); bool OpenFile(vint filterIndex);
bool SaveFile(bool saveAs); bool SaveFile(bool saveAs);
void SetupTextConfig(); void SetupTextConfig();
void SetupXmlConfig(); void SetupXmlConfig();
public: public:
MainWindow(); MainWindow();
~MainWindow(); ~MainWindow();
Binary file not shown.