]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/xrc/xmlres.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxXmlResource
4 // Author: wxWidgets team
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
10 Flags which can be used with wxXmlResource::wxXmlResource.
12 enum wxXmlResourceFlags
14 /** Translatable strings will be translated via _(). */
17 /** Subclass property of object nodes will be ignored (useful for previews in XRC editors). */
18 wxXRC_NO_SUBCLASSING
= 2,
20 /** Prevent the XRC files from being reloaded from disk in case they have been modified there
21 since being last loaded (may slightly speed up loading them). */
22 wxXRC_NO_RELOADING
= 4
29 This is the main class for interacting with the XML-based resource system.
31 The class holds XML resources from one or more .xml files, binary files or zip
34 Note that this is a singleton class and you'll never allocate/deallocate it.
35 Just use the static wxXmlResource::Get() getter.
37 @see @ref overview_xrc, @ref overview_xrcformat
42 class wxXmlResource
: public wxObject
49 The XRC file, archive file, or wildcard specification that will be
50 used to load all resource files inside a zip archive.
52 One or more value of the ::wxXmlResourceFlags enumeration.
54 The name of the gettext catalog to search for translatable strings.
55 By default all loaded catalogs will be searched.
56 This provides a way to allow the strings to only come from a specific catalog.
58 wxXmlResource(const wxString
& filemask
,
59 int flags
= wxXRC_USE_LOCALE
,
60 const wxString
& domain
= wxEmptyString
);
66 One or more value of the ::wxXmlResourceFlags enumeration.
68 The name of the gettext catalog to search for translatable strings.
69 By default all loaded catalogs will be searched.
70 This provides a way to allow the strings to only come from a specific catalog.
72 wxXmlResource(int flags
= wxXRC_USE_LOCALE
,
73 const wxString
& domain
= wxEmptyString
);
78 virtual ~wxXmlResource();
81 Initializes only a specific handler (or custom handler).
82 Convention says that the handler name is equal to the control's name plus
83 'XmlHandler', for example wxTextCtrlXmlHandler, wxHtmlWindowXmlHandler.
85 The XML resource compiler (wxxrc) can create include file that contains
86 initialization code for all controls used within the resource.
87 Note that this handler must be allocated on the heap, since it will be
88 deleted by ClearHandlers() later.
90 void AddHandler(wxXmlResourceHandler
* handler
);
93 Add a new handler at the begining of the handler list.
95 void InsertHandler(wxXmlResourceHandler
*handler
);
99 Attaches an unknown control to the given panel/window/dialog.
100 Unknown controls are used in conjunction with \<object class="unknown"\>.
102 bool AttachUnknownControl(const wxString
& name
,
104 wxWindow
* parent
= NULL
);
107 Removes all handlers and deletes them (this means that any handlers
108 added using AddHandler() must be allocated on the heap).
110 void ClearHandlers();
113 Registers subclasses factory for use in XRC. This is useful only for
114 language bindings developers who need a way to implement subclassing in
115 wxWidgets ports that don't support wxRTTI (e.g. wxPython).
117 static void AddSubclassFactory(wxXmlSubclassFactory
*factory
);
121 Compares the XRC version to the argument.
123 Returns -1 if the XRC version is less than the argument,
124 +1 if greater, and 0 if they are equal.
126 int CompareVersion(int major
, int minor
, int release
, int revision
) const;
129 Returns a string ID corresponding to the given numeric ID.
131 The string returned is such that calling GetXRCID() with it as
132 parameter yields @a numId. If there is no string identifier
133 corresponding to the given numeric one, an empty string is returned.
135 Notice that, unlike GetXRCID(), this function is slow as it checks all
136 of the identifiers used in XRC.
140 static wxString
FindXRCIDById(int numId
);
143 Gets the global resources object or creates one if none exists.
145 static wxXmlResource
* Get();
148 Returns the domain (message catalog) that will be used to load
149 translatable strings in the XRC.
151 const wxString
& GetDomain() const;
154 Returns flags, which may be a bitlist of ::wxXmlResourceFlags
157 int GetFlags() const;
160 Returns the wxXmlNode containing the definition of the object with the
163 This function recursively searches all the loaded XRC files for an
164 object with the specified @a name. If the object is found, the
165 wxXmlNode corresponding to it is returned, so this function can be used
166 to access additional information defined in the XRC file and not used
167 by wxXmlResource itself, e.g. contents of application-specific XML
171 The name of the resource which must be unique for this function to
172 work correctly, if there is more than one resource with the given
173 name the choice of the one returned by this function is undefined.
175 The node corresponding to the resource with the given name or @NULL.
177 const wxXmlNode
*GetResourceNode(const wxString
& name
) const;
180 Returns version information (a.b.c.d = d + 256*c + 2562*b + 2563*a).
182 long GetVersion() const;
185 Returns a numeric ID that is equivalent to the string ID used in an XML resource.
187 If an unknown @a str_id is requested (i.e. other than wxID_XXX or integer),
188 a new record is created which associates the given string with a number.
190 If @a value_if_not_found is @c wxID_NONE, the number is obtained via
191 wxNewId(). Otherwise @a value_if_not_found is used.
193 Macro @c XRCID(name) is provided for convenient use in event tables.
195 @note IDs returned by XRCID() cannot be used with the <tt>EVT_*_RANGE</tt>
196 macros, because the order in which they are assigned to symbolic @a name
197 values is not guaranteed.
199 static int GetXRCID(const wxString
& str_id
, int value_if_not_found
= wxID_NONE
);
202 Initializes handlers for all supported controls/windows.
204 This will make the executable quite big because it forces linking against
205 most of the wxWidgets library.
207 void InitAllHandlers();
210 Loads resources from XML files that match given filemask.
214 if (!wxXmlResource::Get()->Load("rc/*.xrc"))
215 wxLogError("Couldn't load resources!");
219 If wxUSE_FILESYS is enabled, this method understands wxFileSystem URLs
220 (see wxFileSystem::FindFirst()).
223 If you are sure that the argument is name of single XRC file (rather
224 than an URL or a wildcard), use LoadFile() instead.
226 @see LoadFile(), LoadAllFiles()
228 bool Load(const wxString
& filemask
);
231 Simpler form of Load() for loading a single XRC file.
235 @see Load(), LoadAllFiles()
237 bool LoadFile(const wxFileName
& file
);
240 Loads all .xrc files from directory @a dirname.
242 Tries to load as many files as possible; if there's an error while
243 loading one file, it still attempts to load other files.
247 @see LoadFile(), Load()
249 bool LoadAllFiles(const wxString
& dirname
);
252 Loads a bitmap resource from a file.
254 wxBitmap
LoadBitmap(const wxString
& name
);
257 Loads a dialog. @a parent points to parent window (if any).
259 wxDialog
* LoadDialog(wxWindow
* parent
, const wxString
& name
);
262 Loads a dialog. @a parent points to parent window (if any).
264 This form is used to finish creation of an already existing instance (the main
265 reason for this is that you may want to use derived class with a new event table).
270 wxXmlResource::Get()->LoadDialog(&dlg, mainFrame, "my_dialog");
274 bool LoadDialog(wxDialog
* dlg
, wxWindow
* parent
, const wxString
& name
);
277 Loads a frame from the resource. @a parent points to parent window (if any).
279 wxFrame
*LoadFrame(wxWindow
* parent
, const wxString
& name
);
282 Loads the contents of a frame onto an existing wxFrame.
284 This form is used to finish creation of an already existing instance
285 (the main reason for this is that you may want to use derived class
286 with a new event table).
288 bool LoadFrame(wxFrame
* frame
, wxWindow
* parent
,
289 const wxString
& name
);
292 Loads an icon resource from a file.
294 wxIcon
LoadIcon(const wxString
& name
);
297 Loads menu from resource. Returns @NULL on failure.
299 wxMenu
* LoadMenu(const wxString
& name
);
303 Loads a menubar from resource. Returns @NULL on failure.
305 wxMenuBar
* LoadMenuBar(wxWindow
* parent
, const wxString
& name
);
306 wxMenuBar
* LoadMenuBar(const wxString
& name
);
311 Load an object from the resource specifying both the resource name and the
314 The first overload lets you load nonstandard container windows and returns
315 @NULL on failure. The second one lets you finish the creation of an existing
316 instance and returns @false on failure.
318 In either case, only the resources defined at the top level of XRC
319 files can be loaded by this function, use LoadObjectRecursively() if
320 you need to load an object defined deeper in the hierarchy.
322 wxObject
* LoadObject(wxWindow
* parent
, const wxString
& name
,
323 const wxString
& classname
);
324 bool LoadObject(wxObject
* instance
, wxWindow
* parent
,
325 const wxString
& name
,
326 const wxString
& classname
);
331 Load an object from anywhere in the resource tree.
333 These methods are similar to LoadObject() but may be used to load an
334 object from anywhere in the resource tree and not only the top level.
335 Note that you will very rarely need to do this as in normal use the
336 entire container window (defined at the top level) is loaded and not
337 its individual children but this method can be useful in some
338 particular situations.
342 wxObject
* LoadObjectRecursively(wxWindow
* parent
,
343 const wxString
& name
,
344 const wxString
& classname
);
345 bool LoadObjectRecursively(wxObject
* instance
, wxWindow
* parent
,
346 const wxString
& name
,
347 const wxString
& classname
);
351 Loads a panel. @a parent points to the parent window.
353 wxPanel
* LoadPanel(wxWindow
* parent
, const wxString
& name
);
356 Loads a panel. @a parent points to the parent window.
357 This form is used to finish creation of an already existing instance.
359 bool LoadPanel(wxPanel
* panel
, wxWindow
* parent
, const wxString
& name
);
364 wxToolBar
* LoadToolBar(wxWindow
* parent
, const wxString
& name
);
367 Sets the global resources object and returns a pointer to the previous one
370 static wxXmlResource
* Set(wxXmlResource
* res
);
373 Sets the domain (message catalog) that will be used to load
374 translatable strings in the XRC.
376 void SetDomain(const wxString
& domain
);
379 Sets flags (bitlist of ::wxXmlResourceFlags enumeration values).
381 void SetFlags(int flags
);
384 This function unloads a resource previously loaded by Load().
386 Returns @true if the resource was successfully unloaded and @false if it
387 hasn't been found in the list of loaded resources.
389 bool Unload(const wxString
& filename
);
393 Reports error in XRC resources to the user.
395 Any errors in XRC input files should be reported using this method
396 (or its wxXmlResourceHandler::ReportError() equivalent). Unlike
397 wxLogError(), this method presents the error to the user in a more
398 usable form. In particular, the output is compiler-like and contains
399 information about the exact location of the error.
401 @param context XML node the error occurred in or relates to. This can
402 be @NULL, but should be the most specific node possible,
403 as its line number is what is reported to the user.
404 @param message Text of the error message. This string should always
405 be in English (i.e. not wrapped in _()). It shouldn't
406 be a sentence -- it should start with lower-case letter
407 and shouldn't have a trailing period or exclamation
412 @see wxXmlResourceHandler::ReportError(), DoReportError()
414 void ReportError(const wxXmlNode
*context
, const wxString
& message
);
417 Implementation of XRC resources errors reporting.
419 This method is called by ReportError() and shouldn't be called
420 directly; use ReportError() or wxXmlResourceHandler::ReportError()
423 Default implementation uses wxLogError().
425 @param xrcFile File the error occurred in or empty string if it
426 couldn't be determined.
427 @param position XML node where the error occurred or @NULL if it
428 couldn't be determined.
429 @param message Text of the error message. See ReportError()
430 documentation for details of the string's format.
433 You may override this method in a derived class to customize errors
434 reporting. If you do so, you'll need to either use the derived class
435 in all your code or call wxXmlResource::Set() to change the global
436 wxXmlResource instance to your class.
442 virtual void DoReportError(const wxString
& xrcFile
, const wxXmlNode
*position
,
443 const wxString
& message
);
449 @class wxXmlResourceHandler
451 wxXmlResourceHandler is an abstract base class for resource handlers
452 capable of creating a control from an XML node.
454 See @ref overview_xrc for details.
459 class wxXmlResourceHandler
: public wxObject
465 wxXmlResourceHandler();
470 virtual ~wxXmlResourceHandler();
473 Creates an object (menu, dialog, control, ...) from an XML node.
474 Should check for validity. @a parent is a higher-level object
475 (usually window, dialog or panel) that is often necessary to
478 If @b instance is non-@NULL it should not create a new instance via
479 'new' but should rather use this one, and call its Create method.
481 wxObject
* CreateResource(wxXmlNode
* node
, wxObject
* parent
,
485 Called from CreateResource after variables were filled.
487 virtual wxObject
* DoCreateResource() = 0;
490 Returns @true if it understands this node and can create
491 a resource from it, @false otherwise.
494 You must not call any wxXmlResourceHandler methods except IsOfClass()
495 from this method! The instance is not yet initialized with node data
496 at the time CanHandle() is called and it is only safe to operate on
497 node directly or to call IsOfClass().
499 virtual bool CanHandle(wxXmlNode
* node
) = 0;
502 Sets the parent resource.
504 void SetParentResource(wxXmlResource
* res
);
510 Add a style flag (e.g. @c wxMB_DOCKABLE) to the list of flags
511 understood by this handler.
513 void AddStyle(const wxString
& name
, int value
);
516 Add styles common to all wxWindow-derived classes.
518 void AddWindowStyles();
523 void CreateChildren(wxObject
* parent
, bool this_hnd_only
= false);
528 void CreateChildrenPrivately(wxObject
* parent
,
529 wxXmlNode
* rootnode
= NULL
);
532 Creates a resource from a node.
534 wxObject
* CreateResFromNode(wxXmlNode
* node
, wxObject
* parent
,
535 wxObject
* instance
= NULL
);
538 Creates an animation (see wxAnimation) from the filename specified in @a param.
540 wxAnimation
GetAnimation(const wxString
& param
= "animation");
545 wxBitmap
GetBitmap(const wxString
& param
= "bitmap",
546 const wxArtClient
& defaultArtClient
= wxART_OTHER
,
547 wxSize size
= wxDefaultSize
);
549 Gets a bitmap from an XmlNode.
553 wxBitmap
GetBitmap(const wxXmlNode
* node
,
554 const wxArtClient
& defaultArtClient
= wxART_OTHER
,
555 wxSize size
= wxDefaultSize
);
558 Gets a bool flag (1, t, yes, on, true are @true, everything else is @false).
560 bool GetBool(const wxString
& param
, bool defaultv
= false);
563 Gets colour in HTML syntax (\#RRGGBB).
565 wxColour
GetColour(const wxString
& param
,
566 const wxColour
& defaultColour
= wxNullColour
);
569 Returns the current file system.
571 wxFileSystem
& GetCurFileSystem();
574 Gets a dimension (may be in dialog units).
576 wxCoord
GetDimension(const wxString
& param
, wxCoord defaultv
= 0,
577 wxWindow
* windowToUse
= 0);
582 If the given @a param is not present or has empty value, @a dir is
583 returned by default. Otherwise the value of the parameter is parsed and
584 a warning is generated if it's not one of @c wxLEFT, @c wxTOP, @c
585 wxRIGHT or @c wxBOTTOM.
589 wxDirection
GetDirection(const wxString
& param
, wxDirection dir
= wxLEFT
);
594 wxFont
GetFont(const wxString
& param
= "font");
604 wxIcon
GetIcon(const wxString
& param
= "icon",
605 const wxArtClient
& defaultArtClient
= wxART_OTHER
,
606 wxSize size
= wxDefaultSize
);
609 Gets an icon from an XmlNode.
613 wxIcon
GetIcon(const wxXmlNode
* node
,
614 const wxArtClient
& defaultArtClient
= wxART_OTHER
,
615 wxSize size
= wxDefaultSize
);
618 Returns an icon bundle.
621 Bundles can be loaded either with stock IDs or from files that contain
622 more than one image (e.g. Windows icon files). If a file contains only
623 single image, a bundle with only one icon will be created.
627 wxIconBundle
GetIconBundle(const wxString
& param
,
628 const wxArtClient
& defaultArtClient
= wxART_OTHER
);
631 Creates an image list from the @a param markup data.
634 The new instance of wxImageList or @NULL if no data is found.
638 wxImageList
*GetImageList(const wxString
& param
= wxT("imagelist"));
641 Gets the integer value from the parameter.
643 long GetLong(const wxString
& param
, long defaultv
= 0);
646 Returns the resource name.
651 Gets node content from wxXML_ENTITY_NODE.
653 wxString
GetNodeContent(wxXmlNode
* node
);
656 Finds the node or returns @NULL.
658 wxXmlNode
* GetParamNode(const wxString
& param
);
661 Finds the parameter value or returns the empty string.
663 wxString
GetParamValue(const wxString
& param
);
666 Returns the node parameter value.
670 wxString
GetParamValue(const wxXmlNode
* node
);
673 Gets the position (may be in dialog units).
675 wxPoint
GetPosition(const wxString
& param
= "pos");
678 Gets the size (may be in dialog units).
680 wxSize
GetSize(const wxString
& param
= "size", wxWindow
* windowToUse
= 0);
683 Gets style flags from text in form "flag | flag2| flag3 |..."
684 Only understands flags added with AddStyle().
686 int GetStyle(const wxString
& param
= "style", int defaults
= 0);
689 Gets text from param and does some conversions:
690 - replaces \\n, \\r, \\t by respective characters (according to C syntax)
691 - replaces @c $ by @c and @c $$ by @c $ (needed for @c _File to @c File
692 translation because of XML syntax)
693 - calls wxGetTranslations (unless disabled in wxXmlResource)
695 wxString
GetText(const wxString
& param
, bool translate
= true);
698 Check to see if a parameter exists.
700 bool HasParam(const wxString
& param
);
703 Convenience function.
704 Returns @true if the node has a property class equal to classname,
705 e.g. object class="wxDialog".
707 bool IsOfClass(wxXmlNode
* node
, const wxString
& classname
);
710 Sets common window options.
712 void SetupWindow(wxWindow
* wnd
);
715 Reports error in XRC resources to the user.
717 See wxXmlResource::ReportError() for more information.
721 void ReportError(wxXmlNode
*context
, const wxString
& message
);
724 Like ReportError(wxXmlNode*, const wxString&), but uses the node
725 of currently processed object (m_node) as the context.
729 void ReportError(const wxString
& message
);
732 Like ReportError(wxXmlNode*, const wxString&), but uses the node
733 of parameter @a param of the currently processed object as the context.
734 This is convenience function for reporting errors in particular
739 void ReportParamError(const wxString
& param
, const wxString
& message
);