]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/xrc/xmlres.h
Fixed parts of toolbar background not being drawn with older comctl32.dll.
[wxWidgets.git] / include / wx / xrc / xmlres.h
index c15202e8a79a5256cdd8e3432f2af99959ea8f2b..1d226c11afa5c99f6e5ece5171813b8dfed99a28 100644 (file)
 
 #include "wx/xml/xml.h"
 
+class WXDLLIMPEXP_FWD_BASE wxFileName;
+
+class WXDLLIMPEXP_FWD_CORE wxIconBundle;
+class WXDLLIMPEXP_FWD_CORE wxImageList;
 class WXDLLIMPEXP_FWD_CORE wxMenu;
 class WXDLLIMPEXP_FWD_CORE wxMenuBar;
 class WXDLLIMPEXP_FWD_CORE wxDialog;
@@ -61,7 +65,7 @@ class wxXmlResourceDataRecords;
 #define WX_XMLRES_CURRENT_VERSION_MINOR            5
 #define WX_XMLRES_CURRENT_VERSION_RELEASE          3
 #define WX_XMLRES_CURRENT_VERSION_REVISION         0
-#define WX_XMLRES_CURRENT_VERSION_STRING       _T("2.5.3.0")
+#define WX_XMLRES_CURRENT_VERSION_STRING       wxT("2.5.3.0")
 
 #define WX_XMLRES_CURRENT_VERSION \
                 (WX_XMLRES_CURRENT_VERSION_MAJOR * 256*256*256 + \
@@ -109,9 +113,15 @@ public:
     virtual ~wxXmlResource();
 
     // Loads resources from XML files that match given filemask.
-    // This method understands VFS (see filesys.h).
+    // This method understands wxFileSystem URLs if wxUSE_FILESYS.
     bool Load(const wxString& filemask);
 
+    // Loads resources from single XRC file.
+    bool LoadFile(const wxFileName& file);
+
+    // Loads all XRC files from a directory.
+    bool LoadAllFiles(const wxString& dirname);
+
     // Unload resource from the given XML file (wildcards not allowed)
     bool Unload(const wxString& filename);
 
@@ -178,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);
@@ -255,6 +292,17 @@ public:
         { return GetResourceNodeAndLocation(name, wxString(), true); }
 
 protected:
+    // reports input error at position 'context'
+    void ReportError(const wxXmlNode *context, const wxString& message);
+
+    // override this in derived class to customize errors reporting
+    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();
@@ -292,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
@@ -309,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;
 
@@ -325,6 +395,8 @@ private:
 
     friend class wxXmlResourceHandler;
     friend class wxXmlResourceModule;
+    friend class wxIdRangeManager;
+    friend class wxIdRange;
 
     static wxXmlSubclassFactories *ms_subclassFactories;
 
@@ -419,14 +491,14 @@ protected:
 
     // Returns true if the node has a property class equal to classname,
     // e.g. <object class="wxDialog">.
-    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, <tag>content<tag> is represented as
     // wxXML_ENTITY_NODE name="tag", content=""
     //    |-- wxXML_TEXT_NODE or
     //        wxXML_CDATA_SECTION_NODE name="" content="content"
-    wxString GetNodeContent(wxXmlNode *node);
+    wxString GetNodeContent(const wxXmlNode *node);
 
     // Check to see if a parameter exists.
     bool HasParam(const wxString& param);
@@ -437,6 +509,9 @@ protected:
     // Finds the parameter value or returns the empty string.
     wxString GetParamValue(const wxString& param);
 
+    // Returns the parameter value from given node.
+    wxString GetParamValue(const wxXmlNode* node);
+
     // Add a style flag (e.g. wxMB_DOCKABLE) to the list of flags
     // understood by this handler.
     void AddStyle(const wxString& name, int value);
@@ -483,16 +558,36 @@ protected:
     wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0,
                          wxWindow *windowToUse = NULL);
 
+    // Gets a direction, complains if the value is invalid.
+    wxDirection GetDirection(const wxString& param, wxDirection dir = wxLEFT);
+
     // Gets a bitmap.
     wxBitmap GetBitmap(const wxString& param = wxT("bitmap"),
                        const wxArtClient& defaultArtClient = wxART_OTHER,
                        wxSize size = wxDefaultSize);
 
+    // Gets a bitmap from an XmlNode.
+    wxBitmap GetBitmap(const wxXmlNode* node,
+                       const wxArtClient& defaultArtClient = wxART_OTHER,
+                       wxSize size = wxDefaultSize);
+
     // Gets an icon.
     wxIcon GetIcon(const wxString& param = wxT("icon"),
                    const wxArtClient& defaultArtClient = wxART_OTHER,
                    wxSize size = wxDefaultSize);
 
+    // Gets an icon from an XmlNode.
+    wxIcon GetIcon(const wxXmlNode* node,
+                   const wxArtClient& defaultArtClient = wxART_OTHER,
+                   wxSize size = wxDefaultSize);
+
+    // Gets an icon bundle.
+    wxIconBundle GetIconBundle(const wxString& param,
+                               const wxArtClient& defaultArtClient = wxART_OTHER);
+
+    // Gets an image list.
+    wxImageList *GetImageList(const wxString& param = wxT("imagelist"));
+
 #if wxUSE_ANIMATIONCTRL
     // Gets an animation.
     wxAnimation GetAnimation(const wxString& param = wxT("animation"));
@@ -523,6 +618,13 @@ protected:
 #if wxUSE_FILESYSTEM
     wxFileSystem& GetCurFileSystem() { return m_resource->GetCurFileSystem(); }
 #endif
+
+    // reports input error at position 'context'
+    void ReportError(wxXmlNode *context, const wxString& message);
+    // reports input error at m_node
+    void ReportError(const wxString& message);
+    // reports input error when parsing parameter with given name
+    void ReportParamError(const wxString& param, const wxString& message);
 };