]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/include/wx/xrc/xmlres.h
1. made XRC immune against changing CWD
[wxWidgets.git] / contrib / include / wx / xrc / xmlres.h
index 00547bca5e9747b29f53cc026a9a2e358c6d0b63..07cfd4ebbf05ad8b13abfefbf6590158f5717cbf 100644 (file)
@@ -11,7 +11,7 @@
 #ifndef _WX_XMLRES_H_
 #define _WX_XMLRES_H_
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
 #pragma interface "xmlres.h"
 #endif
 
@@ -37,6 +37,9 @@ class WXDLLEXPORT wxFrame;
 class WXDLLEXPORT wxToolBar;
 
 class WXXMLDLLEXPORT wxXmlResourceHandler;
+class WXXMLDLLEXPORT wxXmlSubclassFactory;
+class WXXMLDLLEXPORT wxXmlSubclassFactoriesList;
+class wxXmlResourceModule;
 
 
 // These macros indicate current version of XML resources (this information is
@@ -55,7 +58,7 @@ class WXXMLDLLEXPORT wxXmlResourceHandler;
 #define WX_XMLRES_CURRENT_VERSION_MINOR            3
 #define WX_XMLRES_CURRENT_VERSION_RELEASE          0
 #define WX_XMLRES_CURRENT_VERSION_REVISION         1
-#define WX_XMLRES_CURRENT_VERSION_STRING    "2.3.0.1"
+#define WX_XMLRES_CURRENT_VERSION_STRING       _T("2.3.0.1")
 
 #define WX_XMLRES_CURRENT_VERSION \
                 (WX_XMLRES_CURRENT_VERSION_MAJOR * 256*256*256 + \
@@ -111,7 +114,7 @@ public:
 
     // Destructor.
     ~wxXmlResource();
-    
+
     // Loads resources from XML files that match given filemask.
     // This method understands VFS (see filesys.h).
     bool Load(const wxString& filemask);
@@ -128,8 +131,16 @@ public:
     // all controls used within the resource.
     void AddHandler(wxXmlResourceHandler *handler);
 
+    // Add a new handler at the begining of the handler list
+    void InsertHandler(wxXmlResourceHandler *handler);
+
     // Removes all handlers
     void ClearHandlers();
+    
+    // Registers subclasses factory for use in XRC. This function is not meant
+    // for public use, please see the comment above wxXmlSubclassFactory
+    // definition.
+    static void AddSubclassFactory(wxXmlSubclassFactory *factory);
 
     // Loads menu from resource. Returns NULL on failure.
     wxMenu *LoadMenu(const wxString& name);
@@ -165,8 +176,20 @@ public:
     bool LoadPanel(wxPanel *panel, wxWindow *parent, const wxString& name);
 
     // Loads a frame.
+    wxFrame *LoadFrame(wxWindow* parent, const wxString& name);
     bool LoadFrame(wxFrame* frame, wxWindow *parent, const wxString& name);
 
+    // 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);
+
+    // 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);
+
     // Loads a bitmap resource from a file.
     wxBitmap LoadBitmap(const wxString& name);
 
@@ -191,15 +214,20 @@ public:
     int CompareVersion(int major, int minor, int release, int revision) const
         { return GetVersion() -
                  (major*256*256*256 + minor*256*256 + release*256 + revision); }
-                 
+
 //// Singleton accessors.
-    
+
     // Gets the global resources object or creates one if none exists.
     static wxXmlResource *Get();
 
     // Sets the global resources object and returns a pointer to the previous one (may be NULL).
     static wxXmlResource *Set(wxXmlResource *res);
 
+    // Returns flags, which may be a bitlist of wxXRC_USE_LOCALE and wxXRC_NO_SUBCLASSING.
+    int GetFlags() const { return m_flags; }
+    // Set flags after construction.
+    void SetFlags(int flags) { m_flags = flags; }
+
 protected:
     // Scans the resources list for unloaded files and loads them. Also reloads
     // files that have been modified since last loading.
@@ -214,9 +242,6 @@ protected:
     // Creates a resource from information in the given node.
     wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL);
 
-    // Returns flags, which may be a bitlist of wxXRC_USE_LOCALE and wxXRC_NO_SUBCLASSING.
-    int GetFlags() { return m_flags; }
-
 private:
     long m_version;
 
@@ -229,7 +254,10 @@ private:
 #endif
 
     friend class wxXmlResourceHandler;
-    
+    friend class wxXmlResourceModule;
+
+    static wxXmlSubclassFactoriesList *ms_subclassFactories;
+
     // singleton instance:
     static wxXmlResource *ms_instance;
 };
@@ -423,7 +451,21 @@ protected:
 void wxXmlInitResourceModule();
 
 
-/* ------------------------------------------------------------------------- 
+// This class is used to create instances of XRC "object" nodes with "subclass"
+// property. It is _not_ supposed to be used by XRC users, you should instead
+// register your subclasses via wxWindows' RTTI mechanism. This class is useful
+// only for language bindings developer who need a way to implement subclassing
+// in wxWindows ports that don't support wxRTTI (e.g. wxPython).
+class WXXMLDLLEXPORT wxXmlSubclassFactory
+{
+public:
+    // Try to create instance of given class and return it, return NULL on failure:
+    virtual wxObject *Create(const wxString& className) = 0;
+    virtual ~wxXmlSubclassFactory() {}
+};
+
+
+/* -------------------------------------------------------------------------
    Backward compatibility macros. Do *NOT* use, they may disappear in future
    versions of the XRC library!
    ------------------------------------------------------------------------- */