]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/xrc/xmlres.h
allow specifying the mask colour in wxImage::ConvertAlphaToMask() (closes #10143)
[wxWidgets.git] / interface / wx / xrc / xmlres.h
index 2a5f89f15938392cfbd91399218259d686e4a1fe..849b932ea6562a43047295601602fee6dc6cd6d4 100644 (file)
@@ -6,6 +6,23 @@
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
+/**
+    Flags which can be used with wxXmlResource::wxXmlResource.
+*/
+enum wxXmlResourceFlags
+{
+    /** Translatable strings will be translated via _(). */
+    wxXRC_USE_LOCALE     = 1,
+
+    /** Subclass property of object nodes will be ignored (useful for previews in XRC editors). */
+    wxXRC_NO_SUBCLASSING = 2,
+
+    /** Prevent the XRC files from being reloaded from disk in case they have been modified there
+        since being last loaded (may slightly speed up loading them). */
+    wxXRC_NO_RELOADING   = 4
+};
+
+
 /**
     @class wxXmlResource
 
     The class holds XML resources from one or more .xml files, binary files or zip
     archive files.
 
-    @see @ref overview_xrc, @ref xrc_format
+    Note that this is a singleton class and you'll never allocate/deallocate it.
+    Just use the static wxXmlResource::Get() getter.
+
+    @see @ref overview_xrc, @ref overview_xrcformat
 
     @library{wxxrc}
     @category{xrc}
 class wxXmlResource : public wxObject
 {
 public:
-    //@{
     /**
         Constructor.
 
+        @param filemask
+            The XRC file, archive file, or wildcard specification that will be
+            used to load all resource files inside a zip archive.
         @param 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). wxXRC_NO_RELOADING will prevent the
-            XRC files from being reloaded from disk in case they have been modified
-        there
-            since being last loaded (may slightly speed up loading them).
+            One or more value of the ::wxXmlResourceFlags enumeration.
         @param domain
-            The name of the gettext catalog to search for
-              translatable strings.  By default all loaded catalogs will be
-              searched.  This provides a way to allow the strings to only come
-              from a specific catalog.
+            The name of the gettext catalog to search for translatable strings.
+            By default all loaded catalogs will be searched.
+            This provides a way to allow the strings to only come from a specific catalog.
     */
     wxXmlResource(const wxString& filemask,
                   int flags = wxXRC_USE_LOCALE,
-                  const wxString domain = wxEmptyString);
+                  const wxString& domain = wxEmptyString);
+
+    /**
+        Constructor.
+
+        @param flags
+            One or more value of the ::wxXmlResourceFlags enumeration.
+        @param domain
+            The name of the gettext catalog to search for translatable strings.
+            By default all loaded catalogs will be searched.
+            This provides a way to allow the strings to only come from a specific catalog.
+    */
     wxXmlResource(int flags = wxXRC_USE_LOCALE,
-                  const wxString domain = wxEmptyString);
-    //@}
+                  const wxString& domain = wxEmptyString);
 
     /**
         Destructor.
@@ -52,37 +78,52 @@ public:
     virtual ~wxXmlResource();
 
     /**
-        Initializes only a specific handler (or custom handler). Convention says
-        that the handler name is equal to the control's name plus 'XmlHandler', for
-        example
-        wxTextCtrlXmlHandler, wxHtmlWindowXmlHandler. The XML resource compiler
-        (wxxrc) can create include file that contains initialization code for
-        all controls used within the resource. Note that this handler should be
-        allocated on the heap, since it will be delete by
-        ClearHandlers() later.
+        Initializes only a specific handler (or custom handler).
+        Convention says that the handler name is equal to the control's name plus
+        'XmlHandler', for example wxTextCtrlXmlHandler, wxHtmlWindowXmlHandler.
+
+        The XML resource compiler (wxxrc) can create include file that contains
+        initialization code for all controls used within the resource.
+        Note that this handler must be allocated on the heap, since it will be
+        deleted by ClearHandlers() later.
     */
     void AddHandler(wxXmlResourceHandler* handler);
 
     /**
         Attaches an unknown control to the given panel/window/dialog.
-        Unknown controls are used in conjunction with object class="unknown".
+        Unknown controls are used in conjunction with \<object class="unknown"\>.
     */
     bool AttachUnknownControl(const wxString& name,
                               wxWindow* control,
                               wxWindow* parent = NULL);
 
     /**
-        Removes all handlers and deletes them (this means that any handlers added using
-        AddHandler() must be allocated on the heap).
+        Removes all handlers and deletes them (this means that any handlers
+        added using AddHandler() must be allocated on the heap).
     */
     void ClearHandlers();
 
     /**
-        Compares the XRC version to the argument. Returns -1 if the XRC version
-        is less than the argument, +1 if greater, and 0 if they are equal.
+        Compares the XRC version to the argument.
+
+        Returns -1 if the XRC version is less than the argument,
+        +1 if greater, and 0 if they are equal.
     */
-    int CompareVersion(int major, int minor, int release,
-                       int revision) const;
+    int CompareVersion(int major, int minor, int release, int revision) const;
+
+    /**
+        Returns a string ID corresponding to the given numeric ID.
+
+        The string returned is such that calling GetXRCID() with it as
+        parameter yields @a numId. If there is no string identifier
+        corresponding to the given numeric one, an empty string is returned.
+
+        Notice that, unlike GetXRCID(), this function is slow as it checks all
+        of the identifiers used in XRC.
+
+        @since 2.9.0
+     */
+    static wxString FindXRCIDById(int numId);
 
     /**
         Gets the global resources object or creates one if none exists.
@@ -93,39 +134,49 @@ public:
         Returns the domain (message catalog) that will be used to load
         translatable strings in the XRC.
     */
-    wxChar* GetDomain();
+    const wxString& GetDomain() const;
 
     /**
-        Returns flags, which may be a bitlist of wxXRC_USE_LOCALE and
-        wxXRC_NO_SUBCLASSING.
+        Returns flags, which may be a bitlist of ::wxXmlResourceFlags
+        enumeration values.
     */
     int GetFlags() const;
 
     /**
-        Returns version information (a.b.c.d = d+ 256*c + 256@c 2*b + 256@c 3*a).
+        Returns version information (a.b.c.d = d + 256*c + 2562*b + 2563*a).
     */
     long GetVersion() const;
 
     /**
-        Returns a numeric ID that is equivalent to the string ID used in an XML
-        resource. If an unknown @a str_id is requested (i.e. other than wxID_XXX
-        or integer), a new record is created which associates the given string with
-        a number. If @a value_if_not_found is @c wxID_NONE, the number is obtained via
+        Returns a numeric ID that is equivalent to the string ID used in an XML resource.
+
+        If an unknown @a str_id is requested (i.e. other than wxID_XXX or integer),
+        a new record is created which associates the given string with a number.
+
+        If @a value_if_not_found is @c wxID_NONE, the number is obtained via
         wxNewId(). Otherwise @a value_if_not_found is used.
         Macro @c XRCID(name) is provided for convenient use in event tables.
     */
-#define int GetXRCID(const wxString& str_id, int value_if_not_found = -2)     /* implementation is private */
+    static int GetXRCID(const wxString& str_id, int value_if_not_found = wxID_NONE);
 
     /**
-        Initializes handlers for all supported controls/windows. This will
-        make the executable quite big because it forces linking against
+        Initializes handlers for all supported controls/windows.
+
+        This will make the executable quite big because it forces linking against
         most of the wxWidgets library.
     */
     void InitAllHandlers();
 
     /**
         Loads resources from XML files that match given filemask.
-        This method understands VFS (see filesys.h).
+
+        Example:
+        @code
+            if (!wxXmlResource::Get()->Load("rc/*.xrc"))
+                wxLogError("Couldn't load resources!");
+        @endcode
+
+        This method understands VFS (see wxFileSystem::FindFirst).
     */
     bool Load(const wxString& filemask);
 
@@ -134,18 +185,25 @@ public:
     */
     wxBitmap LoadBitmap(const wxString& name);
 
-    //@{
     /**
-        Loads a dialog. @a dlg points to parent window (if any).
+        Loads a dialog. @a parent points to parent window (if any).
+    */
+    wxDialog* LoadDialog(wxWindow* parent, const wxString& name);
+
+    /**
+        Loads a dialog. @a parent points to parent window (if any).
+
         This form is used to finish creation of an already existing instance (the main
-        reason
-        for this is that you may want to use derived class with a new event table).
+        reason for this is that you may want to use derived class with a new event table).
         Example:
+
+        @code
+          MyDialog dlg;
+          wxXmlResource::Get()->LoadDialog(&dlg, mainFrame, "my_dialog");
+          dlg.ShowModal();
+        @endcode
     */
-    wxDialog* LoadDialog(wxWindow* parent, const wxString& name);
-    bool LoadDialog(wxDialog* dlg, wxWindow* parent,
-                    const wxString& name);
-    //@}
+    bool LoadDialog(wxDialog* dlg, wxWindow* parent, const wxString& name);
 
     /**
         Loads a frame.
@@ -175,9 +233,9 @@ public:
     /**
         Load an object from the resource specifying both the resource name and the
         class name.
-        The first overload lets you load nonstandard container windows and returns @c
-        @NULL
-        on failure. The second one lets you finish the creation of an existing
+
+        The first overload lets you load nonstandard container windows and returns
+        @NULL on failure. The second one lets you finish the creation of an existing
         instance and returns @false on failure.
     */
     wxObject* LoadObject(wxWindow* parent, const wxString& name,
@@ -187,15 +245,16 @@ public:
                     const wxString& classname);
     //@}
 
-    //@{
     /**
-        Loads a panel. @a panel points to parent window (if any). This form
-        is used to finish creation of an already existing instance.
+        Loads a panel. @a panel points to parent window (if any).
     */
     wxPanel* LoadPanel(wxWindow* parent, const wxString& name);
-    bool LoadPanel(wxPanel* panel, wxWindow* parent,
-                   const wxString& name);
-    //@}
+
+    /**
+        Loads a panel. @a panel points to parent window (if any).
+        This form is used to finish creation of an already existing instance.
+    */
+    bool LoadPanel(wxPanel* panel, wxWindow* parent, const wxString& name);
 
     /**
         Loads a toolbar.
@@ -203,8 +262,8 @@ public:
     wxToolBar* LoadToolBar(wxWindow* parent, const wxString& name);
 
     /**
-        Sets the global resources object and returns a pointer to the previous one (may
-        be @NULL).
+        Sets the global resources object and returns a pointer to the previous one
+        (may be @NULL).
     */
     static wxXmlResource* Set(wxXmlResource* res);
 
@@ -212,19 +271,18 @@ public:
         Sets the domain (message catalog) that will be used to load
         translatable strings in the XRC.
     */
-    wxChar* SetDomain(const wxChar* domain);
+    void SetDomain(const wxString& domain);
 
     /**
-        Sets flags (bitlist of wxXRC_USE_LOCALE and wxXRC_NO_SUBCLASSING).
+        Sets flags (bitlist of ::wxXmlResourceFlags enumeration values).
     */
     void SetFlags(int flags);
 
     /**
-        This function unloads a resource previously loaded by
-        Load().
+        This function unloads a resource previously loaded by Load().
+
         Returns @true if the resource was successfully unloaded and @false if it
-        hasn't
-        been found in the list of loaded resources.
+        hasn't been found in the list of loaded resources.
     */
     bool Unload(const wxString& filename);
 };
@@ -256,21 +314,52 @@ public:
     virtual ~wxXmlResourceHandler();
 
     /**
-        Add a style flag (e.g. wxMB_DOCKABLE) to the list of flags
-        understood by this handler.
+        Creates an object (menu, dialog, control, ...) from an XML node.
+        Should check for validity. @a parent is a higher-level object
+        (usually window, dialog or panel) that is often necessary to
+        create the resource.
+
+        If @b instance is non-@NULL it should not create a new instance via
+        'new' but should rather use this one, and call its Create method.
     */
-    void AddStyle(const wxString& name, int value);
+    wxObject* CreateResource(wxXmlNode* node, wxObject* parent,
+                             wxObject* instance);
 
     /**
-        Add styles common to all wxWindow-derived classes.
+        Called from CreateResource after variables were filled.
     */
-    void AddWindowStyles();
+    virtual wxObject* DoCreateResource() = 0;
 
     /**
         Returns @true if it understands this node and can create
         a resource from it, @false otherwise.
+
+        @note
+        You must not call any wxXmlResourceHandler methods except IsOfClass()
+        from this method! The instance is not yet initialized with node data
+        at the time CanHandle() is called and it is only safe to operate on
+        node directly or to call IsOfClass().
     */
-    bool CanHandle(wxXmlNode* node);
+    virtual bool CanHandle(wxXmlNode* node) = 0;
+
+    /**
+        Sets the parent resource.
+    */
+    void SetParentResource(wxXmlResource* res);
+
+
+protected:
+
+    /**
+        Add a style flag (e.g. @c 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();
 
     /**
         Creates children.
@@ -290,33 +379,16 @@ public:
                                 wxObject* instance = NULL);
 
     /**
-        Creates an object (menu, dialog, control, ...) from an XML node.
-        Should check for validity. @a parent is a higher-level object
-        (usually window, dialog or panel) that is often necessary to create the resource.
-
-        If @b instance is non-@NULL it should not create a new instance via 'new' but
-        should rather use this one, and call its Create method.
-    */
-    wxObject* CreateResource(wxXmlNode* node, wxObject* parent,
-                             wxObject* instance);
-
-    /**
-        Called from CreateResource after variables
-        were filled.
-    */
-    wxObject* DoCreateResource();
-
-    /**
-        )
-        Creates a animation() from the filename specified in @e param.
+        Creates an animation (see wxAnimation) from the filename specified in @a param.
     */
-    wxAnimation GetAnimation();
+    wxAnimation GetAnimation(const wxString& param = "animation");
 
     /**
-        , @b wxSize@e size = wxDefaultSize)
         Gets a bitmap.
     */
-    wxBitmap GetBitmap();
+    wxBitmap GetBitmap(const wxString& param = "bitmap",
+                       const wxArtClient& defaultArtClient = wxART_OTHER,
+                       wxSize size = wxDefaultSize);
 
     /**
         Gets a bool flag (1, t, yes, on, true are @true, everything else is @false).
@@ -327,23 +399,23 @@ public:
         Gets colour in HTML syntax (\#RRGGBB).
     */
     wxColour GetColour(const wxString& param,
-                   const wxColour& default = wxNullColour);
+                       const wxColour& defaultColour = wxNullColour);
 
     /**
         Returns the current file system.
     */
-    wxFileSystem GetCurFileSystem();
+    wxFileSystem& GetCurFileSystem();
 
     /**
         Gets a dimension (may be in dialog units).
     */
-    wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0);
+    wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0,
+                         wxWindow* windowToUse = 0);
 
     /**
-        )
         Gets a font.
     */
-    wxFont GetFont();
+    wxFont GetFont(const wxString& param = "font");
 
     /**
         Returns the XRCID.
@@ -351,10 +423,11 @@ public:
     int GetID();
 
     /**
-        , @b wxSize@e size = wxDefaultSize)
         Returns an icon.
     */
-    wxIcon GetIcon();
+    wxIcon GetIcon(const wxString& param = "icon",
+                   const wxArtClient& defaultArtClient = wxART_OTHER,
+                   wxSize size = wxDefaultSize);
 
     /**
         Gets the integer value from the parameter.
@@ -382,23 +455,20 @@ public:
     wxString GetParamValue(const wxString& param);
 
     /**
-        )
         Gets the position (may be in dialog units).
     */
-    wxPoint GetPosition();
+    wxPoint GetPosition(const wxString& param = "pos");
 
     /**
-        )
         Gets the size (may be in dialog units).
     */
-    wxSize GetSize();
+    wxSize GetSize(const wxString& param = "size", wxWindow* windowToUse = 0);
 
     /**
-        , @b int@e defaults = 0)
         Gets style flags from text in form "flag | flag2| flag3 |..."
-        Only understands flags added with AddStyle.
+        Only understands flags added with AddStyle().
     */
-    int GetStyle();
+    int GetStyle(const wxString& param = "style", int defaults = 0);
 
     /**
         Gets text from param and does some conversions:
@@ -407,7 +477,7 @@ public:
           translation because of XML syntax)
         - calls wxGetTranslations (unless disabled in wxXmlResource)
     */
-    wxString GetText(const wxString& param);
+    wxString GetText(const wxString& param, bool translate = true);
 
     /**
         Check to see if a parameter exists.
@@ -415,17 +485,12 @@ public:
     bool HasParam(const wxString& param);
 
     /**
-        Convenience function. Returns @true if the node has a property class equal to
-        classname,
+        Convenience function.
+        Returns @true if the node has a property class equal to classname,
         e.g. object class="wxDialog".
     */
     bool IsOfClass(wxXmlNode* node, const wxString& classname);
 
-    /**
-        Sets the parent resource.
-    */
-    void SetParentResource(wxXmlResource* res);
-
     /**
         Sets common window options.
     */