Add wxXmlResource::LoadObjectRecursively().

These methods can be used to load objects from anywhere in the XRC resource
tree and not just from the top level.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-09-14 23:22:00 +00:00
parent c9a199c6a6
commit af0ac990fc
7 changed files with 165 additions and 30 deletions

View File

@@ -87,6 +87,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(XRCID("platform_property_tool_or_menuitem"), MyFrame::OnPlatformPropertyToolOrMenuCommand)
EVT_MENU(XRCID("art_provider_tool_or_menuitem"), MyFrame::OnArtProviderToolOrMenuCommand)
EVT_MENU(XRCID("variable_expansion_tool_or_menuitem"), MyFrame::OnVariableExpansionToolOrMenuCommand)
EVT_MENU(XRCID("recursive_load"), MyFrame::OnRecursiveLoad)
EVT_MENU(wxID_ABOUT, MyFrame::OnAboutToolOrMenuCommand)
END_EVENT_TABLE()
@@ -311,6 +312,47 @@ void MyFrame::OnVariableExpansionToolOrMenuCommand(wxCommandEvent& WXUNUSED(even
dlg.ShowModal();
}
void MyFrame::OnRecursiveLoad(wxCommandEvent& WXUNUSED(event))
{
// this dialog is created manually to show how you can inject a single
// control from XRC into an existing dialog
//
// this is a slightly contrived example, please keep in mind that it's done
// only to demonstrate LoadObjectRecursively() in action and is not the
// recommended to do this
wxDialog dlg(NULL, wxID_ANY, "Recursive Load Example",
wxDefaultPosition, wxDefaultSize,
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
wxSizer * const sizer = new wxBoxSizer(wxVERTICAL);
sizer->Add
(
new wxStaticText
(
&dlg,
wxID_ANY,
"The entire tree book control below is loaded from XRC"
),
wxSizerFlags().Expand().Border()
);
sizer->Add
(
static_cast<wxWindow *>
(
// notice that controls_treebook is defined inside a notebook page
// inside a dialog defined in controls.xrc and so LoadObject()
// wouldn't find it -- but LoadObjectRecursively() does
wxXmlResource::Get()->
LoadObjectRecursively(&dlg, "controls_treebook", "wxTreebook")
),
wxSizerFlags(1).Expand().Border()
);
dlg.SetSizer(sizer);
dlg.SetClientSize(400, 200);
dlg.ShowModal();
}
void MyFrame::OnAboutToolOrMenuCommand(wxCommandEvent& WXUNUSED(event))
{

View File

@@ -48,6 +48,7 @@ private:
void OnPlatformPropertyToolOrMenuCommand(wxCommandEvent& event);
void OnArtProviderToolOrMenuCommand(wxCommandEvent& event);
void OnVariableExpansionToolOrMenuCommand(wxCommandEvent& event);
void OnRecursiveLoad(wxCommandEvent& event);
void OnAnimationCtrlPlay(wxCommandEvent& event);
// Any class wishing to process wxWidgets events must use this macro

View File

@@ -69,6 +69,10 @@
<bitmap>variable.xpm</bitmap>
<help>Replace variables in the XRC file at runtime</help>
</object>
<object class="wxMenuItem" name="recursive_load">
<label>_Recursive Load</label>
<help>Show how an individual control can be loaded</help>
</object>
</object>
<object class="wxMenu" name="help_menu">
<label>_Help</label>