<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/15f7744be816d8e9b6659a0e92dbe48efc9fb2ef..038c03337f139d64f99d3334edfd1aa08354d9f0:/docs/latex/wx/txrc.tex

diff --git a/docs/latex/wx/txrc.tex b/docs/latex/wx/txrc.tex
index dc065629b3..3a11b955d7 100644
--- a/docs/latex/wx/txrc.tex
+++ b/docs/latex/wx/txrc.tex
@@ -36,7 +36,7 @@ These are the typical steps for using XRC files in your application.
 \begin{itemize}\itemsep=0pt
 \item Include the appropriate headers: normally "wx/xrc/xmlres.h" will suffice;
 \item If you are going to use \helpref{XRS files}{binaryresourcefiles}, install
-wxFileSystem ZIP handler first with {\tt wxFileSystem::AddHandler(new wxZipFSHandler);}
+wxFileSystem archive handler first with {\tt wxFileSystem::AddHandler(new wxArchiveFSHandler);}
 \item call {\tt wxXmlResource::Get()-&gt;InitAllHandlers()} from your wxApp::OnInit function,
 and then call {\tt wxXmlResource::Get()-&gt;Load("myfile.xrc")} to load the resource file;
 \item to create a dialog from a resource, create it using the default constructor, and then
@@ -55,7 +55,6 @@ To create an XRC file, you can use one of the following methods.
 dialog editor that you can find in the {\tt wxPython/tools} subdirectory of the wxWidgets
 CVS archive;
 \item use \urlref{wxGlade}{http://wxglade.sf.net}, a GUI designer written in wxPython. At the moment it can generate Python, C++ and XRC;
-\item convert WIN32 RC files to XRC with the tool in {\tt contrib/utils/convertrc}.
 \end{itemize}
 
 A complete list of third-party tools that write to XRC can be found at \urlref{www.wxwidgets.org/lnk\_tool.htm}{http://www.wxwidgets.org/lnk\_tool.htm}.
@@ -97,14 +96,14 @@ For example:
 
 XRS file is essentially a renamed ZIP archive which means that you can manipulate
 it with standard ZIP tools. Note that if you are using XRS files, you have
-to initialize the \helpref{wxFileSystem}{wxfilesystem} ZIP handler first! It is a simple
+to initialize the \helpref{wxFileSystem}{wxfilesystem} archive handler first! It is a simple
 thing to do:
 
 \begin{verbatim}
   #include &lt;wx/filesys.h&gt;
-  #include &lt;wx/fs_zip.h&gt;
+  #include &lt;wx/fs_arc.h&gt;
   ...
-  wxFileSystem::AddHandler(new wxZipFSHandler);
+  wxFileSystem::AddHandler(new wxArchiveFSHandler);
 \end{verbatim}
 
 \subsection{Using embedded resources}\label{embeddedresource}
@@ -321,7 +320,7 @@ This is the XML file (resource.xrc) for the XRC sample.
           &lt;object class="wxStaticText"&gt;
             &lt;label&gt;fdgdfgdfgdfg&lt;/label&gt;
           &lt;/object&gt;
-          &lt;style&gt;wxSUNKEN_BORDER&lt;/style&gt;
+          &lt;style&gt;wxBORDER\_SUNKEN&lt;/style&gt;
         &lt;/object&gt;
         &lt;flag&gt;wxALIGN_CENTER&lt;/flag&gt;
       &lt;/object&gt;
@@ -380,7 +379,7 @@ This is the XML file (resource.xrc) for the XRC sample.
       &lt;object class="sizeritem" name="dfgdfg"&gt;
         &lt;object class="wxTextCtrl"&gt;
           &lt;size&gt;200,200d&lt;/size&gt;
-          &lt;style&gt;wxTE_MULTILINE|wxSUNKEN_BORDER&lt;/style&gt;
+          &lt;style&gt;wxTE_MULTILINE|wxBORDER_SUNKEN&lt;/style&gt;
           &lt;value&gt;Hello, this is an ordinary multiline\n         textctrl....&lt;/value&gt;
         &lt;/object&gt;
         &lt;option&gt;1&lt;/option&gt;
@@ -507,7 +506,127 @@ END_EVENT_TABLE()
 
 \end{verbatim}
 
+It is also possible to access the wxSizerItem of a sizer that is part of
+a resource.  This can be done using {\tt XRCSIZERITEM} as shown.  The
+resource file can have something like this for a sizer item.
+
+\begin{verbatim}
+&lt;object class="spacer" name="area"&gt;
+  &lt;size&gt;400, 300&lt;/size&gt;
+&lt;/object&gt;
+\end{verbatim}
+
+The code can then access the sizer item by using {\tt XRCSIZERITEM} and
+{\tt XRCID} together.
+
+\begin{verbatim}
+wxSizerItem* item = XRCSIZERITEM(*this, "area");
+\end{verbatim}
+
 \subsection{Adding new resource handlers}\label{newresourcehandlers}
 
-Coming soon.
+Adding a new resource handler is pretty easy.
+Typically, to add an handler for the {\tt MyControl} class, you'll want to create
+the {\tt xh\_mycontrol.h} {\tt xh\_mycontrol.cpp} files.
+
+The header needs to contains the {\tt MyControlXmlHandler} class definition:
+
+\begin{verbatim}
+class MyControlXmlHandler : public wxXmlResourceHandler
+{
+public:
+
+    // Constructor.
+    MyControlXmlHandler();
+
+    // Creates the control and returns a pointer to it.
+    virtual wxObject *DoCreateResource();
+
+    // Returns true if we know how to create a control for the given node.
+    virtual bool CanHandle(wxXmlNode *node);
+
+    // Register with wxWidgets' dynamic class subsystem.
+    DECLARE_DYNAMIC_CLASS(MyControlXmlHandler)
+};
+\end{verbatim}
+
+The implementation of your custom XML handler will typically look as:
+
+\begin{verbatim}
+// Register with wxWidgets' dynamic class subsystem.
+IMPLEMENT_DYNAMIC_CLASS(MyControlXmlHandler, wxXmlResourceHandler)
+
+MyControlXmlHandler::MyControlXmlHandler()
+{
+    // this call adds support for all wxWindows class styles
+    // (e.g. wxBORDER_SIMPLE, wxBORDER_SUNKEN, wxWS_EX_* etc etc)
+    AddWindowStyles();
+
+    // if MyControl class supports e.g. MYCONTROL_DEFAULT_STYLE
+    // you should use:
+    //     XRC_ADD_STYLE(MYCONTROL_DEFAULT_STYLE);
+}
+
+wxObject *MyControlXmlHandler::DoCreateResource()
+{
+    // the following macro will init a pointer named "control"
+    // with a new instance of the MyControl class, but will NOT
+    // Create() it!
+    XRC_MAKE_INSTANCE(control, MyControl)
+
+    // this is the point where you'll typically need to do the most
+    // important changes: here the control is created and initialized.
+    // You'll want to use the wxXmlResourceHandler's getters to
+    // do most of your work.
+    // If e.g. the MyControl::Create function looks like:
+    //
+    //    bool MyControl::Create(wxWindow *parent, int id, 
+    //                           const wxBitmap &amp;first, const wxPoint &amp;posFirst,
+    //                           const wxBitmap &amp;second, const wxPoint &amp;posSecond,
+    //                           const wxString &amp;theTitle, const wxFont &amp;titleFont,
+    //                           const wxPoint &amp;pos, const wxSize &amp;size,
+    //                           long style = MYCONTROL_DEFAULT_STYLE,
+    //                           const wxString &amp;name = wxT("MyControl"));
+    //
+    // then the XRC for your component should look like:
+    //
+    //    &lt;object class="MyControl" name="some_name"&gt;
+    //        &lt;first-bitmap&gt;first.xpm&lt;/first-bitmap&gt;
+    //        &lt;second-bitmap&gt;text.xpm&lt;/second-bitmap&gt;
+    //        &lt;first-pos&gt;3,3&lt;/first-pos&gt;
+    //        &lt;second-pos&gt;4,4&lt;/second-pos&gt;
+    //        &lt;the-title&gt;a title&lt;/the-title&gt;
+    //        &lt;title-font&gt;
+    //           &lt;!-- the standard XRC tags for describing a font: &lt;size&gt;, &lt;style&gt;, &lt;weight&gt;, etc --&gt;
+    //        &lt;/title-font&gt;
+    //        &lt;!-- XRC also accepts other usual tags for wxWindow-derived classes:
+    //             like e.g. &lt;name&gt;, &lt;style&gt;, &lt;size&gt;, &lt;position&gt;, etc --&gt;
+    //    &lt;/object&gt;
+    //
+    // and the code to read your custom tags from the XRC file is just:
+    control-&gt;Create(m_parentAsWindow, GetID(),
+                    GetBitmap(wxT("first-bitmap")),
+                    GetPosition(wxT("first-pos")),
+                    GetBitmap(wxT("second-bitmap")),
+                    GetPosition(wxT("second-pos")),
+                    GetText(wxT("the-title")),
+                    GetFont(wxT("title-font")),
+                    GetPosition(), GetSize(), GetStyle(), GetName());
+
+    SetupWindow(control);
+
+    return control;
+}
+
+bool MyControlXmlHandler::CanHandle(wxXmlNode *node)
+{
+    // this function tells XRC system that this handler can parse
+    // the &lt;object class="MyControl"&gt; tags
+    return IsOfClass(node, wxT("MyControl"));
+}
+\end{verbatim}
+
+You may want to check the \helpref{wxXmlResourceHandler}{wxxmlresourcehandler} documentation
+to see how many built-in getters it contains. It's very easy to retrieve also complex structures
+out of XRC files using them.
 
</pre></body></html>