]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/xrc/xmlres.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / xrc / xmlres.h
index 1530fab993670cacd44e9e9820017ed94f29ccfc..f69d9939d957f3928cd8ffbe64432ce9c53007af 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     XML resources
 // Author:      Vaclav Slavik
 // Created:     2000/03/05
 // Purpose:     XML resources
 // Author:      Vaclav Slavik
 // Created:     2000/03/05
-// RCS-ID:      $Id$
 // Copyright:   (c) 2000 Vaclav Slavik
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) 2000 Vaclav Slavik
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 #include "wx/icon.h"
 #include "wx/artprov.h"
 #include "wx/colour.h"
 #include "wx/icon.h"
 #include "wx/artprov.h"
 #include "wx/colour.h"
-#include "wx/animate.h"
 #include "wx/vector.h"
 
 #include "wx/vector.h"
 
-#include "wx/xml/xml.h"
+#include "wx/xrc/xmlreshandler.h"
 
 class WXDLLIMPEXP_FWD_BASE wxFileName;
 
 
 class WXDLLIMPEXP_FWD_BASE wxFileName;
 
@@ -43,7 +41,8 @@ class WXDLLIMPEXP_FWD_CORE wxWindow;
 class WXDLLIMPEXP_FWD_CORE wxFrame;
 class WXDLLIMPEXP_FWD_CORE wxToolBar;
 
 class WXDLLIMPEXP_FWD_CORE wxFrame;
 class WXDLLIMPEXP_FWD_CORE wxToolBar;
 
-class WXDLLIMPEXP_FWD_XRC wxXmlResourceHandler;
+class WXDLLIMPEXP_FWD_XML wxXmlDocument;
+class WXDLLIMPEXP_FWD_XML wxXmlNode;
 class WXDLLIMPEXP_FWD_XRC wxXmlSubclassFactory;
 class wxXmlSubclassFactories;
 class wxXmlResourceModule;
 class WXDLLIMPEXP_FWD_XRC wxXmlSubclassFactory;
 class wxXmlSubclassFactories;
 class wxXmlResourceModule;
@@ -137,7 +136,7 @@ public:
     // code for all controls used within the resource.
     void AddHandler(wxXmlResourceHandler *handler);
 
     // code for all controls used within the resource.
     void AddHandler(wxXmlResourceHandler *handler);
 
-    // Add a new handler at the begining of the handler list
+    // Add a new handler at the beginning of the handler list
     void InsertHandler(wxXmlResourceHandler *handler);
 
     // Removes all handlers
     void InsertHandler(wxXmlResourceHandler *handler);
 
     // Removes all handlers
@@ -261,8 +260,16 @@ public:
     // Compares resources version to argument. Returns -1 if resources version
     // is less than the argument, +1 if greater and 0 if they equal.
     int CompareVersion(int major, int minor, int release, int revision) const
     // Compares resources version to argument. Returns -1 if resources version
     // is less than the argument, +1 if greater and 0 if they equal.
     int CompareVersion(int major, int minor, int release, int revision) const
-        { return GetVersion() -
-                 (major*256*256*256 + minor*256*256 + release*256 + revision); }
+    {
+        long diff = GetVersion() -
+                    (major*256*256*256 + minor*256*256 + release*256 + revision);
+        if ( diff < 0 )
+            return -1;
+        else if ( diff > 0 )
+            return +1;
+        else
+            return 0;
+    }
 
     //// Singleton accessors.
 
 
     //// Singleton accessors.
 
@@ -299,6 +306,10 @@ protected:
     virtual void DoReportError(const wxString& xrcFile, const wxXmlNode *position,
                                const wxString& message);
 
     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();
     // Scans the resources list for unloaded files and loads them. Also reloads
     // files that have been modified since last loading.
     bool UpdateResources();
@@ -389,7 +400,7 @@ private:
     // domain to pass to translation functions, if any.
     wxString m_domain;
 
     // domain to pass to translation functions, if any.
     wxString m_domain;
 
-    friend class wxXmlResourceHandler;
+    friend class wxXmlResourceHandlerImpl;
     friend class wxXmlResourceModule;
     friend class wxIdRangeManager;
     friend class wxIdRange;
     friend class wxXmlResourceModule;
     friend class wxIdRangeManager;
     friend class wxIdRange;
@@ -439,18 +450,20 @@ private:
 #define XRCSIZERITEM(window, id) \
     ((window).GetSizer() ? (window).GetSizer()->GetItemById(XRCID(id)) : NULL)
 
 #define XRCSIZERITEM(window, id) \
     ((window).GetSizer() ? (window).GetSizer()->GetItemById(XRCID(id)) : NULL)
 
-// wxXmlResourceHandler is an abstract base class for resource handlers
-// capable of creating a control from an XML node.
 
 
-class WXDLLIMPEXP_XRC wxXmlResourceHandler : public wxObject
+// wxXmlResourceHandlerImpl is the back-end of the wxXmlResourceHander class to
+// really implementing all its functionality. It is defined in the "xrc"
+// library unlike wxXmlResourceHandler itself which is defined in "core" to
+// allow inheriting from it in the code from the other libraries too.
+
+class WXDLLIMPEXP_XRC wxXmlResourceHandlerImpl : public wxXmlResourceHandlerImplBase
 {
 {
-DECLARE_ABSTRACT_CLASS(wxXmlResourceHandler)
 public:
     // Constructor.
 public:
     // Constructor.
-    wxXmlResourceHandler();
+    wxXmlResourceHandlerImpl(wxXmlResourceHandler *handler);
 
     // Destructor.
 
     // Destructor.
-    virtual ~wxXmlResourceHandler() {}
+    virtual ~wxXmlResourceHandlerImpl() {}
 
     // Creates an object (menu, dialog, control, ...) from an XML node.
     // Should check for validity.
 
     // Creates an object (menu, dialog, control, ...) from an XML node.
     // Should check for validity.
@@ -461,33 +474,12 @@ public:
     wxObject *CreateResource(wxXmlNode *node, wxObject *parent,
                              wxObject *instance);
 
     wxObject *CreateResource(wxXmlNode *node, wxObject *parent,
                              wxObject *instance);
 
-    // This one is called from CreateResource after variables
-    // were filled.
-    virtual wxObject *DoCreateResource() = 0;
-
-    // Returns true if it understands this node and can create
-    // a resource from it, false otherwise.
-    virtual bool CanHandle(wxXmlNode *node) = 0;
-
-    // Sets the parent resource.
-    void SetParentResource(wxXmlResource *res) { m_resource = res; }
-
-protected:
-    wxXmlResource *m_resource;
-    wxArrayString m_styleNames;
-    wxArrayInt m_styleValues;
-
-    // Variables (filled by CreateResource)
-    wxXmlNode *m_node;
-    wxString m_class;
-    wxObject *m_parent, *m_instance;
-    wxWindow *m_parentAsWindow;
 
     // --- Handy methods:
 
     // Returns true if the node has a property class equal to classname,
     // e.g. <object class="wxDialog">.
 
     // --- Handy methods:
 
     // Returns true if the node has a property class equal to classname,
     // e.g. <object class="wxDialog">.
-    static bool IsOfClass(wxXmlNode *node, const wxString& classname);
+    bool IsOfClass(wxXmlNode *node, const wxString& classname) const;
 
     // Gets node content from wxXML_ENTITY_NODE
     // The problem is, <tag>content<tag> is represented as
 
     // Gets node content from wxXML_ENTITY_NODE
     // The problem is, <tag>content<tag> is represented as
@@ -508,13 +500,6 @@ protected:
     // Returns the parameter value from given node.
     wxString GetParamValue(const wxXmlNode* node);
 
     // 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);
-
-    // Add styles common to all wxWindow-derived classes.
-    void AddWindowStyles();
-
     // Gets style flags from text in form "flag | flag2| flag3 |..."
     // Only understands flags added with AddStyle
     int GetStyle(const wxString& param = wxT("style"), int defaults = 0);
     // Gets style flags from text in form "flag | flag2| flag3 |..."
     // Only understands flags added with AddStyle
     int GetStyle(const wxString& param = wxT("style"), int defaults = 0);
@@ -554,6 +539,9 @@ protected:
     wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0,
                          wxWindow *windowToUse = NULL);
 
     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,
     // Gets a bitmap.
     wxBitmap GetBitmap(const wxString& param = wxT("bitmap"),
                        const wxArtClient& defaultArtClient = wxART_OTHER,
@@ -583,11 +571,11 @@ protected:
 
 #if wxUSE_ANIMATIONCTRL
     // Gets an animation.
 
 #if wxUSE_ANIMATIONCTRL
     // Gets an animation.
-    wxAnimation GetAnimation(const wxString& param = wxT("animation"));
+    wxAnimation* GetAnimation(const wxString& param = wxT("animation"));
 #endif
 
     // Gets a font.
 #endif
 
     // Gets a font.
-    wxFont GetFont(const wxString& param = wxT("font"));
+    wxFont GetFont(const wxString& param = wxT("font"), wxWindow* parent = NULL);
 
     // Gets the value of a boolean attribute (only "0" and "1" are valid values)
     bool GetBoolAttr(const wxString& attr, bool defaultv);
 
     // Gets the value of a boolean attribute (only "0" and "1" are valid values)
     bool GetBoolAttr(const wxString& attr, bool defaultv);
@@ -604,12 +592,11 @@ protected:
 
     // Creates a resource from a node.
     wxObject *CreateResFromNode(wxXmlNode *node,
 
     // Creates a resource from a node.
     wxObject *CreateResFromNode(wxXmlNode *node,
-                                wxObject *parent, wxObject *instance = NULL)
-        { return m_resource->CreateResFromNode(node, parent, instance); }
+                                wxObject *parent, wxObject *instance = NULL);
 
     // helper
 #if wxUSE_FILESYSTEM
 
     // helper
 #if wxUSE_FILESYSTEM
-    wxFileSystem& GetCurFileSystem() { return m_resource->GetCurFileSystem(); }
+    wxFileSystem& GetCurFileSystem();
 #endif
 
     // reports input error at position 'context'
 #endif
 
     // reports input error at position 'context'
@@ -623,8 +610,6 @@ protected:
 
 // Programmer-friendly macros for writing XRC handlers:
 
 
 // Programmer-friendly macros for writing XRC handlers:
 
-#define XRC_ADD_STYLE(style) AddStyle(wxT(#style), style)
-
 #define XRC_MAKE_INSTANCE(variable, classname) \
    classname *variable = NULL; \
    if (m_instance) \
 #define XRC_MAKE_INSTANCE(variable, classname) \
    classname *variable = NULL; \
    if (m_instance) \