X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..1f0acb435592470b421b80df854fbbb08cd2853f:/include/wx/xrc/xmlres.h diff --git a/include/wx/xrc/xmlres.h b/include/wx/xrc/xmlres.h index 97c1732d89..f7c6867929 100644 --- a/include/wx/xrc/xmlres.h +++ b/include/wx/xrc/xmlres.h @@ -188,13 +188,40 @@ public: // Load an object from the resource specifying both the resource name and // the classname. This lets you load nonstandard container windows. wxObject *LoadObject(wxWindow *parent, const wxString& name, - const wxString& classname); + const wxString& classname) + { + return DoLoadObject(parent, name, classname, false /* !recursive */); + } // Load an object from the resource specifying both the resource name and // the classname. This form lets you finish the creation of an existing // instance. - bool LoadObject(wxObject *instance, wxWindow *parent, const wxString& name, - const wxString& classname); + bool LoadObject(wxObject *instance, + wxWindow *parent, + const wxString& name, + const wxString& classname) + { + return DoLoadObject(instance, parent, name, classname, false); + } + + // These versions of LoadObject() look for the object with the given name + // recursively (breadth first) and can be used to instantiate an individual + // control defined anywhere in an XRC file. No check is done that the name + // is unique, it's up to the caller to ensure this. + wxObject *LoadObjectRecursively(wxWindow *parent, + const wxString& name, + const wxString& classname) + { + return DoLoadObject(parent, name, classname, true /* recursive */); + } + + bool LoadObjectRecursively(wxObject *instance, + wxWindow *parent, + const wxString& name, + const wxString& classname) + { + return DoLoadObject(instance, parent, name, classname, true); + } // Loads a bitmap resource from a file. wxBitmap LoadBitmap(const wxString& name); @@ -266,12 +293,16 @@ public: protected: // reports input error at position 'context' - void ReportError(wxXmlNode *context, const wxString& message); + void ReportError(const wxXmlNode *context, const wxString& message); // override this in derived class to customize errors reporting - virtual void DoReportError(const wxString& xrcFile, wxXmlNode *position, + virtual void DoReportError(const wxString& xrcFile, const wxXmlNode *position, const wxString& message); + // Load the contents of a single file and returns its contents as a new + // wxXmlDocument (which will be owned by caller) on success or NULL. + wxXmlDocument *DoLoadFile(const wxString& file); + // Scans the resources list for unloaded files and loads them. Also reloads // files that have been modified since last loading. bool UpdateResources(); @@ -309,7 +340,11 @@ protected: // (Uses only 'handlerToUse' if != NULL) wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL, - wxXmlResourceHandler *handlerToUse = NULL); + wxXmlResourceHandler *handlerToUse = NULL) + { + return node ? DoCreateResFromNode(*node, parent, instance, handlerToUse) + : NULL; + } // Helper of Load() and Unload(): returns the URL corresponding to the // given file if it's indeed a file, otherwise returns the original string @@ -326,6 +361,24 @@ private: wxXmlResourceDataRecords& Data() { return *m_data; } const wxXmlResourceDataRecords& Data() const { return *m_data; } + // the real implementation of CreateResFromNode(): this should be only + // called if node is non-NULL + wxObject *DoCreateResFromNode(wxXmlNode& node, + wxObject *parent, + wxObject *instance, + wxXmlResourceHandler *handlerToUse = NULL); + + // common part of LoadObject() and LoadObjectRecursively() + wxObject *DoLoadObject(wxWindow *parent, + const wxString& name, + const wxString& classname, + bool recursive); + bool DoLoadObject(wxObject *instance, + wxWindow *parent, + const wxString& name, + const wxString& classname, + bool recursive); + private: long m_version; @@ -342,6 +395,8 @@ private: friend class wxXmlResourceHandler; friend class wxXmlResourceModule; + friend class wxIdRangeManager; + friend class wxIdRange; static wxXmlSubclassFactories *ms_subclassFactories; @@ -436,7 +491,7 @@ protected: // Returns true if the node has a property class equal to classname, // e.g. . - bool IsOfClass(wxXmlNode *node, const wxString& classname); + static bool IsOfClass(wxXmlNode *node, const wxString& classname); // Gets node content from wxXML_ENTITY_NODE // The problem is, content is represented as