]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/xrc/xmlres.h
Add test for absence of events from wxSpinCtrlDouble ctor.
[wxWidgets.git] / interface / wx / xrc / xmlres.h
index 460b7fa71422073aa14430832a35496fccd9f339..a264d2ab39d05a2ca60568cf307fda6762f6b55a 100644 (file)
@@ -2,8 +2,7 @@
 // Name:        xrc/xmlres.h
 // Purpose:     interface of wxXmlResource
 // Author:      wxWidgets team
-// RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
@@ -89,6 +88,12 @@ public:
     */
     void AddHandler(wxXmlResourceHandler* handler);
 
+    /**
+       Add a new handler at the begining of the handler list.
+     */
+    void InsertHandler(wxXmlResourceHandler *handler);
+
+    
     /**
         Attaches an unknown control to the given panel/window/dialog.
         Unknown controls are used in conjunction with \<object class="unknown"\>.
@@ -103,6 +108,14 @@ public:
     */
     void ClearHandlers();
 
+    /**
+       Registers subclasses factory for use in XRC.  This is useful only for
+       language bindings developers who need a way to implement subclassing in
+       wxWidgets ports that don't support wxRTTI (e.g. wxPython).
+    */
+    static void AddSubclassFactory(wxXmlSubclassFactory *factory);
+
+    
     /**
         Compares the XRC version to the argument.
 
@@ -175,7 +188,12 @@ public:
 
         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.
+
+        @note IDs returned by XRCID() cannot be used with the <tt>EVT_*_RANGE</tt>
+              macros, because the order in which they are assigned to symbolic @a name
+              values is not guaranteed.
     */
     static int GetXRCID(const wxString& str_id, int value_if_not_found = wxID_NONE);
 
@@ -204,7 +222,7 @@ public:
         If you are sure that the argument is name of single XRC file (rather
         than an URL or a wildcard), use LoadFile() instead.
 
-        @see LoadFile()
+        @see LoadFile(), LoadAllFiles()
     */
     bool Load(const wxString& filemask);
 
@@ -213,10 +231,22 @@ public:
 
         @since 2.9.0
 
-        @see Load()
+        @see Load(), LoadAllFiles()
     */
     bool LoadFile(const wxFileName& file);
 
+    /**
+        Loads all .xrc files from directory @a dirname.
+
+        Tries to load as many files as possible; if there's an error while
+        loading one file, it still attempts to load other files.
+
+        @since 2.9.0
+
+        @see LoadFile(), Load()
+    */
+    bool LoadAllFiles(const wxString& dirname);
+
     /**
         Loads a bitmap resource from a file.
     */
@@ -243,7 +273,16 @@ public:
     bool LoadDialog(wxDialog* dlg, wxWindow* parent, const wxString& name);
 
     /**
-        Loads a frame.
+       Loads a frame from the resource. @a parent points to parent window (if any).
+    */
+    wxFrame *LoadFrame(wxWindow* parent, const wxString& name);
+
+    /**
+        Loads the contents of a frame onto an existing wxFrame.
+
+        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).
     */
     bool LoadFrame(wxFrame* frame, wxWindow* parent,
                    const wxString& name);
@@ -274,6 +313,10 @@ public:
         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.
+
+        In either case, only the resources defined at the top level of XRC
+        files can be loaded by this function, use LoadObjectRecursively() if
+        you need to load an object defined deeper in the hierarchy.
     */
     wxObject* LoadObject(wxWindow* parent, const wxString& name,
                          const wxString& classname);
@@ -282,6 +325,27 @@ public:
                     const wxString& classname);
     //@}
 
+    //@{
+    /**
+        Load an object from anywhere in the resource tree.
+
+        These methods are similar to LoadObject() but may be used to load an
+        object from anywhere in the resource tree and not only the top level.
+        Note that you will very rarely need to do this as in normal use the
+        entire container window (defined at the top level) is loaded and not
+        its individual children but this method can be useful in some
+        particular situations.
+
+        @since 2.9.1
+    */
+    wxObject* LoadObjectRecursively(wxWindow* parent,
+                                    const wxString& name,
+                                    const wxString& classname);
+    bool LoadObjectRecursively(wxObject* instance, wxWindow* parent,
+                    const wxString& name,
+                    const wxString& classname);
+    //@}
+
     /**
         Loads a panel. @a parent points to the parent window.
     */
@@ -322,6 +386,60 @@ public:
         hasn't been found in the list of loaded resources.
     */
     bool Unload(const wxString& filename);
+
+protected:
+    /**
+        Reports error in XRC resources to the user.
+
+        Any errors in XRC input files should be reported using this method
+        (or its wxXmlResourceHandler::ReportError() equivalent). Unlike
+        wxLogError(), this method presents the error to the user in a more
+        usable form. In particular, the output is compiler-like and contains
+        information about the exact location of the error.
+
+        @param context XML node the error occurred in or relates to. This can
+                       be @NULL, but should be the most specific node possible,
+                       as its line number is what is reported to the user.
+        @param message Text of the error message. This string should always
+                       be in English (i.e. not wrapped in _()). It shouldn't
+                       be a sentence -- it should start with lower-case letter
+                       and shouldn't have a trailing period or exclamation
+                       point.
+
+        @since 2.9.0
+
+        @see wxXmlResourceHandler::ReportError(), DoReportError()
+     */
+    void ReportError(const wxXmlNode *context, const wxString& message);
+
+    /**
+        Implementation of XRC resources errors reporting.
+
+        This method is called by ReportError() and shouldn't be called
+        directly; use ReportError() or wxXmlResourceHandler::ReportError()
+        to log errors.
+
+        Default implementation uses wxLogError().
+
+        @param xrcFile  File the error occurred in or empty string if it
+                        couldn't be determined.
+        @param position XML node where the error occurred or @NULL if it
+                        couldn't be determined.
+        @param message  Text of the error message. See ReportError()
+                        documentation for details of the string's format.
+
+        @note
+        You may override this method in a derived class to customize errors
+        reporting. If you do so, you'll need to either use the derived class
+        in all your code or call wxXmlResource::Set() to change the global
+        wxXmlResource instance to your class.
+
+        @since 2.9.0
+
+        @see ReportError()
+    */
+    virtual void DoReportError(const wxString& xrcFile, const wxXmlNode *position,
+                               const wxString& message);
 };
 
 
@@ -418,7 +536,7 @@ protected:
     /**
         Creates an animation (see wxAnimation) from the filename specified in @a param.
     */
-    wxAnimation GetAnimation(const wxString& param = "animation");
+    wxAnimation* GetAnimation(const wxString& param = "animation");
 
     /**
         Gets a bitmap.
@@ -426,6 +544,14 @@ protected:
     wxBitmap GetBitmap(const wxString& param = "bitmap",
                        const wxArtClient& defaultArtClient = wxART_OTHER,
                        wxSize size = wxDefaultSize);
+    /**
+        Gets a bitmap from an XmlNode.
+
+        @since 2.9.1
+    */
+    wxBitmap GetBitmap(const wxXmlNode* node,
+                       const wxArtClient& defaultArtClient = wxART_OTHER,
+                       wxSize size = wxDefaultSize);
 
     /**
         Gets a bool flag (1, t, yes, on, true are @true, everything else is @false).
@@ -449,6 +575,18 @@ protected:
     wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0,
                          wxWindow* windowToUse = 0);
 
+    /**
+        Gets a direction.
+
+        If the given @a param is not present or has empty value, @a dir is
+        returned by default. Otherwise the value of the parameter is parsed and
+        a warning is generated if it's not one of @c wxLEFT, @c wxTOP, @c
+        wxRIGHT or @c wxBOTTOM.
+
+        @since 2.9.3
+     */
+    wxDirection GetDirection(const wxString& param, wxDirection dir = wxLEFT);
+
     /**
         Gets a font.
     */
@@ -466,11 +604,48 @@ protected:
                    const wxArtClient& defaultArtClient = wxART_OTHER,
                    wxSize size = wxDefaultSize);
 
+    /**
+        Gets an icon from an XmlNode.
+
+        @since 2.9.1
+    */
+    wxIcon GetIcon(const wxXmlNode* node,
+                   const wxArtClient& defaultArtClient = wxART_OTHER,
+                   wxSize size = wxDefaultSize);
+
+    /**
+        Returns an icon bundle.
+
+        @note
+        Bundles can be loaded either with stock IDs or from files that contain
+        more than one image (e.g. Windows icon files). If a file contains only
+        single image, a bundle with only one icon will be created.
+
+        @since 2.9.0
+     */
+    wxIconBundle GetIconBundle(const wxString& param,
+                               const wxArtClient& defaultArtClient = wxART_OTHER);
+
+    /**
+        Creates an image list from the @a param markup data.
+
+        @return
+            The new instance of wxImageList or @NULL if no data is found.
+
+        @since 2.9.1
+    */
+    wxImageList *GetImageList(const wxString& param = "imagelist");
+
     /**
         Gets the integer value from the parameter.
     */
     long GetLong(const wxString& param, long defaultv = 0);
 
+    /**
+        Gets a float value from the parameter.
+    */
+    float GetFloat(const wxString& param, float defaultv = 0);
+
     /**
         Returns the resource name.
     */
@@ -491,6 +666,13 @@ protected:
     */
     wxString GetParamValue(const wxString& param);
 
+    /**
+        Returns the node parameter value.
+
+        @since 2.9.1
+    */
+    wxString GetParamValue(const wxXmlNode* node);
+
     /**
         Gets the position (may be in dialog units).
     */
@@ -532,5 +714,82 @@ protected:
         Sets common window options.
     */
     void SetupWindow(wxWindow* wnd);
+
+    /**
+        Reports error in XRC resources to the user.
+
+        See wxXmlResource::ReportError() for more information.
+
+        @since 2.9.0
+     */
+    void ReportError(wxXmlNode *context, const wxString& message);
+
+    /**
+        Like ReportError(wxXmlNode*, const wxString&), but uses the node
+        of currently processed object (m_node) as the context.
+
+        @since 2.9.0
+     */
+    void ReportError(const wxString& message);
+
+    /**
+        Like ReportError(wxXmlNode*, const wxString&), but uses the node
+        of parameter @a param of the currently processed object as the context.
+        This is convenience function for reporting errors in particular
+        parameters.
+
+        @since 2.9.0
+     */
+    void ReportParamError(const wxString& param, const wxString& message);
+
+
+    /**
+       After CreateResource has been called this will return the current
+       wxXmlResource object.
+       
+       @since 2.9.5
+    */
+    wxXmlResource* GetResource() const;
+
+    /**
+       After CreateResource has been called this will return the XML node
+       being processed.
+
+       @since 2.9.5
+    */
+    wxXmlNode* GetNode() const;
+
+    /**
+       After CreateResource has been called this will return the class name of
+       the XML resource node being processed.
+
+       @since 2.9.5
+    */
+    wxString GetClass() const;
+
+    /**
+       After CreateResource has been called this will return the current
+       item's parent, if any.
+
+       @since 2.9.5
+    */
+    wxObject* GetParent() const;
+
+    /**
+       After CreateResource has been called this will return the instance that
+       the XML resource content should be created upon, if it has already been
+       created.  If @NULL then the handler should create the object itself.
+
+       @since 2.9.5
+    */
+    wxObject* GetInstance() const;
+
+    /**
+       After CreateResource has been called this will return the item's parent
+       as a wxWindow.
+
+       @since 2.9.5
+    */
+    wxWindow* GetParentAsWindow() const;    
 };