WX_DECLARE_OBJARRAY(wxXmlResourceDataRecord, wxXmlResourceDataRecords);
#endif
+enum wxXmlResourceFlags
+{
+ wxXRC_USE_LOCALE = 1,
+ wxXRC_NO_SUBCLASSING = 2
+};
// This class holds XML resources from one or more .xml files
// (or derived forms, either binary or zipped -- see manual for
// details).
-
class WXXMLDLLEXPORT wxXmlResource : public wxObject
{
public:
- // Ctor. If use_locale is TRUE, translatable strings are
- // translated via _(). You can disable it by passing use_locale=FALSE
- // (for example if you provide resource file for each locale)
- wxXmlResource(bool use_locale = TRUE);
- wxXmlResource(const wxString& filemask, bool use_locale = TRUE);
+ // Ctor.
+ // Flags: wxXRC_USE_LOCALE
+ // translatable strings will be translated via _()
+ // wxXRC_NO_SUBCLASSING
+ // subclass property of object nodes will be ignored
+ // (useful for previews in XRC editors)
+ wxXmlResource(int flags = wxXRC_USE_LOCALE);
+ wxXmlResource(const wxString& filemask, int flags = wxXRC_USE_LOCALE);
~wxXmlResource();
-
+
// Loads resources from XML files that match given filemask.
// This method understands VFS (see filesys.h).
bool Load(const wxString& filemask);
wxMenu *LoadMenu(const wxString& name);
// Loads menubar from resource. Returns NULL on failure.
- wxMenuBar *LoadMenuBar(const wxString& name);
+ wxMenuBar *LoadMenuBar(wxWindow *parent, const wxString& name);
+ wxMenuBar *LoadMenuBar(const wxString& name) { return LoadMenuBar(NULL, name); }
#if wxUSE_TOOLBAR
// Loads toolbar
// Returns numeric ID that is equivalent to string id used in XML
// resource. To be used in event tables
// Macro XMLID is provided for convenience
- static int GetXMLID(const char *str_id);
+ static int GetXMLID(const wxChar *str_id);
// Returns version info (a.b.c.d = d+ 256*c + 256^2*b + 256^3*a)
long GetVersion() const { return m_version; }
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 global resources object or create one if none exists
+ static wxXmlResource *Get();
+ // Sets global resources object and returns pointer to previous one (may be NULL).
+ static wxXmlResource *Set(wxXmlResource *res);
protected:
// Scans resources list for unloaded files and loads them. Also reloads
void UpdateResources();
// Finds resource (calls UpdateResources) and returns node containing it
- wxXmlNode *FindResource(const wxString& name, const wxString& classname);
+ wxXmlNode *FindResource(const wxString& name, const wxString& classname, bool recursive = FALSE);
+ wxXmlNode *DoFindResource(wxXmlNode *parent, const wxString& name, const wxString& classname, bool recursive);
// Creates resource from info in given node:
wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL);
- // Remove nodes with property "platform" that does not
- // match current platform
- void ProcessPlatformProperty(wxXmlNode *node);
-
- bool GetUseLocale() { return m_useLocale; }
+ int GetFlags() { return m_flags; }
private:
long m_version;
- bool m_useLocale;
+ int m_flags;
wxList m_handlers;
wxXmlResourceDataRecords m_data;
#if wxUSE_FILESYSTEM
#endif
friend class wxXmlResourceHandler;
+
+ // singleton instance:
+ static wxXmlResource *ms_instance;
};
-// Global instance of resource class. For your convenience.
-extern wxXmlResource *wxTheXmlResource;
+// This is here only for backward compatibility. Do NOT use!!
+#define wxTheXmlResource wxXmlResource::Get()
// This macro translates string identifier (as used in XML resource,
// e.g. <menuitem id="my_menu">...</menuitem>) to integer id that is needed by
{ return m_resource->CreateResFromNode(node, parent, instance); }
// helper
+#if wxUSE_FILESYSTEM
wxFileSystem& GetCurFileSystem() { return m_resource->GetCurFileSystem(); }
+#endif
};
-#define ADD_STYLE(style) AddStyle(wxT(#style), style)
+
+// Programmer-friendly macros for writing XRC handlers:
+
+#define XRC_ADD_STYLE(style) AddStyle(wxT(#style), style)
+#define ADD_STYLE XRC_ADD_STYLE /* deprecated, don't use!! */
+
+#define XRC_MAKE_INSTANCE(variable, classname) \
+ classname *variable = NULL; \
+ if (m_instance) \
+ variable = wxStaticCast(m_instance, classname); \
+ if (!variable) \
+ variable = new classname;
+// FIXME -- remove this $%^#$%#$@# as soon as Ron checks his changes in!!
void wxXmlInitResourceModule();
#endif // _WX_XMLRES_H_