wxWidgets/misc/schema/xrc_schema.rnc
Vadim Zeitlin 0206eb6161 Add support for fixed spacers and labels to wxAuiToolBar XRC handler.
Allow specifying "width" and "proportion" attributes for the "space" elements
and add "label" element support.

Closes #15964.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75920 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-02-18 15:05:52 +00:00

1643 lines
49 KiB
Plaintext

#
# RELAX NG schema for XRC files.
#
# See http://docs.wxwidgets.org/trunk/overview_xrcformat.html for freeform
# description of the format.
#
#
# Extending the grammar
# -----------------------
#
# The grammar defined below validates all builtin <object> classes. Because the
# XRC format is extensible, it allows any content in <object> nodes that have
# non-builtin class.
#
# This can be customized by overriding the 'customClasses' rule in the grammar
# when including it from another custom grammar file.
#
# For example, if you wish to validate that only wx's builtin classes are used,
# you can disallow any custom <object>s (see xrc_schema_builtin_only.rnc):
#
# include "xrc_schema.rnc" {
# customClasses = notAllowed
# }
#
# You can also add validation for custom classes:
#
# include "xrc_schema.rnc" {
# customClasses = myExtensionClasses
# }
#
# myExtensionClasses = (MyFoo | MyBar | ...)
# MyFoo =
# element object {
# attribute class { "MyFoo" },
# stdObjectNodeAttributes,
# ...
# }
# ...
#
default namespace = "http://www.wxwidgets.org/wxxrc"
namespace xrc = "http://www.wxwidgets.org/wxxrc"
start =
element resource {
# Versions 2.3.0.1 and 2.5.3.0 differ only in how is '\\' interpreted
# in textual content. That's not even validated here, so we accept
# both. Additionally, even though the attribute is optional in the
# spec, we require it here; in other words, the schema cannot be used
# to validate XRC files from previous millennium.
attribute version { "2.3.0.1" | "2.5.3.0" },
toplevelObjectNode*
}
# IMPLEMENTATION NOTES:
#
# The guiding principle for writing this schema is to validate as much as we
# possible can, but without introducing false negatives; it is not acceptable
# to fail validation of a valid (per the human-readable XRC spec) XRC file.
#
# Unfortunately, there are some noteworthy complications when describing the
# XRC format with a formal schema. Working around them results in uglier and
# overly permissive schema:
#
#
# (1) The biggest issue is with the 'platform' attribute, which may be used on
# _any_ node in an XRC document. There's no way to specify "universal"
# attributes that can be placed anywhere in RELAX NG, so we must add the
# attribute everywhere. The 'platform' grammar rule is used for this and it has
# an alias, '_', for reduced verbosity. Typical use:
#
# element size {_, t_size }? &
#
#
# (2) The other 'platform'-related issue is that it messes up cardinality of
# properties elements. Properties can only be specified once, so the two forms
# for describing properties would be
#
# 1. element size {_, t_size }? # optional property
# 2. element size {_, t_size } # required property
#
# (Fortunately, all XRC properties are optional, se the second case is a
# non-issue and can be safely ignored. It is nevertheless briefly mentioned
# below for explanatory purposes.)
#
# But this is problematic with 'platform', because it's reasonable (and,
# indeed, done in the wild) to set properties differently for different
# platforms:
#
# <object class="wxMenuItem" name="menu_new_from_pot">
# <label platform="win">New catalog from POT file...</label>
# <label platform="unix|mac">New Catalog from POT File...</label>
# </object>
#
# But we now have the 'label' property _twice_ and validation fails. The
# simplest fix is to change the cardinality of properties to allow this [A]:
#
# 1. element size {_, t_size }* # optional property (0 or more times)
# 2. element size {_, t_size }+ # required property (at least once)
#
# Of course, this is too lax and allows invalid (but gracefully handled by
# wxXmlResource) markup like this:
#
# <object class="wxMenuItem" name="menu_new_from_pot">
# <label>Something</label>
# <label>Else</label>
# </object>
#
# We could make this better by splitting the property declaration into two, one
# for the case with 'platform' and one for without [B]:
#
# (element size { t_size } | element size { attribute platform{string}, t_size }+)
#
# But this is verbose and unreadable with the amount of properties present in
# the schema. Instead, we use the more-forbidding version and annotate
# properties with 'p' annotation (for "property") to mark these uses of * as
# special and enable post-processing of the schema.
#
# The value of the annotation is normally just "o" (for "optional" -- remember
# that there are no required properties) to indicate optional properties.
#
# Since we have the annotation anyway, we take advantage of it to indicate
# properties that are strictly speaking optional, but should almost always be
# specified, even though they don't _have_ to be. A typical example would be
# wxStaticText's label: it very rarely makes sense to omit it, but usually
# doesn't. Such properties are indicated with the "important" value of the
# annotation:
#
# [xrc:p="o"] element checked { t_bool }* # optional
# [xrc:p="important"] element label { t_text }* # should be provided
#
# This makes it possible to implement tools that translate this schema into a
# variant that uses [B].
#
toplevelObjectNode = (objectRef | builtinToplevelClasses | customClasses)
windowNode = (objectRef | builtinWindowClasses | customClasses)
sizerNode = (objectRef | builtinSizerClasses | customClasses)
# The following three lists must be updated when a new class is added
# to this file.
builtinToplevelClasses =
( builtinWindowClasses
| idsRange
| wxBitmap_or_wxIcon
| wxMenuBar
| wxMenu
)
builtinWindowClasses =
( unknown
| wxAnimationCtrl
| wxAuiNotebook
| wxAuiToolBar
| wxBannerWindow
| wxBitmapButton
| wxBitmapComboBox
| wxBitmapToggleButton
| wxButton
| wxCalendarCtrl
| wxCheckBox
| wxCheckListBox
| wxChoice
| wxChoicebook
| wxCommandLinkButton
| wxCollapsiblePane
| wxColourPickerCtrl
| wxComboBox
| wxComboCtrl
| wxDatePickerCtrl
| wxDialog
| wxDirPickerCtrl
| wxEditableListBox
| wxFileCtrl
| wxFilePickerCtrl
| wxFontPickerCtrl
| wxFrame
| wxGauge
| wxGenericDirCtrl
| wxGrid
| wxHtmlWindow
| wxHyperlinkCtrl
| wxListBox
| wxListbook
| wxListCtrl
| wxMDIParentFrame
| wxNotebook
| wxOwnerDrawnComboBox
| wxPanel
| wxPropertySheetDialog
| wxRadioButton
| wxRadioBox
| wxRibbonBar
| wxRibbonButtonBar
| wxRibbonControl
| wxRibbonGallery
| wxRibbonPage
| wxRibbonPanel
| wxRichTextCtrl
| wxScrollBar
| wxScrolledWindow
| wxSimpleHtmlListBox
| wxSlider
| wxSpinButton
| wxSpinCtrl
| wxSplitterWindow
| wxSearchCtrl
| wxStatusBar
| wxStaticBitmap
| wxStaticBox
| wxStaticLine
| wxStaticText
| wxTextCtrl
| wxTimePickerCtrl
| wxToggleButton
| wxToolBar
| wxToolbook
| wxTreeCtrl
| wxTreebook
| wxWizard
)
builtinSizerClasses =
( wxBoxSizer
| wxStaticBoxSizer
| wxGridSizer
| wxFlexGridSizer
| wxGridBagSizer
| wxWrapSizer
| wxStdDialogButtonSizer
)
builtinClassesNames =
( "wxBitmap"
| "wxIcon"
| "wxMenuBar"
| "wxMenu"
| "unknown"
| "wxAnimationCtrl"
| "wxAuiNotebook"
| "wxAuiToolBar"
| "wxBannerWindow"
| "wxBitmapButton"
| "wxBitmapComboBox"
| "wxBitmapToggleButton"
| "wxButton"
| "wxCalendarCtrl"
| "wxCheckBox"
| "wxCheckListBox"
| "wxChoice"
| "wxChoicebook"
| "wxCommandLinkButton"
| "wxCollapsiblePane"
| "wxColourPickerCtrl"
| "wxComboBox"
| "wxComboCtrl"
| "wxDatePickerCtrl"
| "wxDialog"
| "wxDirPickerCtrl"
| "wxEditableListBox"
| "wxFileCtrl"
| "wxFilePickerCtrl"
| "wxFontPickerCtrl"
| "wxFrame"
| "wxGauge"
| "wxGenericDirCtrl"
| "wxGrid"
| "wxHtmlWindow"
| "wxHyperlinkCtrl"
| "wxListBox"
| "wxListbook"
| "wxListCtrl"
| "wxMDIParentFrame"
| "wxNotebook"
| "wxOwnerDrawnComboBox"
| "wxPanel"
| "wxPropertySheetDialog"
| "wxRadioButton"
| "wxRadioBox"
| "wxRibbonBar"
| "wxRibbonButtonBar"
| "wxRibbonControl"
| "wxRibbonGallery"
| "wxRibbonPage"
| "wxRibbonPanel"
| "wxRichTextCtrl"
| "wxScrollBar"
| "wxScrolledWindow"
| "wxSimpleHtmlListBox"
| "wxSlider"
| "wxSpinButton"
| "wxSpinCtrl"
| "wxSplitterWindow"
| "wxSearchCtrl"
| "wxStatusBar"
| "wxStaticBitmap"
| "wxStaticBox"
| "wxStaticLine"
| "wxStaticText"
| "wxTextCtrl"
| "wxTimePickerCtrl"
| "wxToggleButton"
| "wxToolBar"
| "wxToolbook"
| "wxTreeCtrl"
| "wxTreebook"
| "wxWizard"
| "wxBoxSizer"
| "wxStaticBoxSizer"
| "wxGridSizer"
| "wxFlexGridSizer"
| "wxGridBagSizer"
| "wxWrapSizer"
| "wxStdDialogButtonSizer"
)
# class names not used at toplevel, only within something else
builtinNestedClassesNames =
( "wxMenuItem"
| "separator"
| "break"
| "space"
| "label"
| "tool"
| "panewindow"
| "notebookpage"
| "choicebookpage"
| "listbookpage"
| "treebookpage"
| "propertysheetpage"
| "ownerdrawnitem"
| "listcol"
| "listitem"
| "wxMDIChildFrame"
| "page" | "panel" | "button" | "item" # wxRibbon classes
| "wxWizardPage"
| "wxWizardPageSimple"
)
allPossibleBuiltinClassNames = (builtinClassesNames | builtinNestedClassesNames)
# This grammar rule can be used to plug in any extensions used in an
# application. By default, it allows any content under custom <object>
# nodes.
customClasses =
element object {
attribute class { string - allPossibleBuiltinClassNames } &
stdObjectNodeAttributes &
anyXMLContent*
}
# Helper for specifying arbitrary content.
anyXMLContent =
element * {
(attribute * { text }
| text
| anyXMLContent)*
}
# Annotations used to mark special kinds of content:
#
# [xrc:p] marks properties, with two possible values:
#
# [xrc:p="o"] for normal/optional properties
# [xrc:p="important"] for important properties that
# should almost always be set
#
# All <object> nodes (except the pseudo-classes) have these attributes.
stdObjectNodeAttributes =
attribute subclass { t_identifier }? &
attribute name { t_identifier }? &
platform
# All (almost) wxWindow-derived objects have these properties.
stdWindowProperties =
[xrc:p="o"] element pos {_, t_position }* &
[xrc:p="o"] element size {_, t_size }* &
[xrc:p="o"] element style {_, t_style }* &
[xrc:p="o"] element exstyle {_, t_style }* &
[xrc:p="o"] element fg {_, t_colour }* &
[xrc:p="o"] element ownfg {_, t_colour }* &
[xrc:p="o"] element bg {_, t_colour }* &
[xrc:p="o"] element ownbg {_, t_colour }* &
[xrc:p="o"] element enabled {_, t_bool }* &
[xrc:p="o"] element focused {_, t_bool }* &
[xrc:p="o"] element hidden {_, t_bool }* &
[xrc:p="o"] element tooltip {_, t_text }* &
[xrc:p="o"] element font {_, t_font }* &
[xrc:p="o"] element ownfont {_, t_font }* &
[xrc:p="o"] element help {_, t_text }*
platform =
attribute platform {
xsd:string { pattern = "(win|mac|unix|os2)( *\| *(win|mac|unix|os2))*" }
}?
# shorthand alias for 'platform' for use in properties definitions and
# elsewhere where 'platform' would be too verbose
_ = platform
# Basic data types.
t_identifier = string
t_text = string
t_string = string
t_bool = "1" | "0"
t_integer = xsd:integer
t_unsigned = xsd:nonNegativeInteger
t_float = xsd:float
t_direction = "wxLEFT" | "wxRIGHT" | "wxTOP" | "wxBOTTOM"
t_style = xsd:string { pattern = "(wx[A-Z0-9_]+)( *\| *(wx[A-Z0-9_]+))*" }
t_url = string
t_colour = xsd:string { pattern = "#[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]" } |
xsd:string { pattern = "[^#].*" }
t_position = t_size
t_size = xsd:string { pattern = "(-?\d+),(-?\d+)d?" }
t_dimension = xsd:string { pattern = "(-?\d+)d?" }
t_bitmap = t_url?,
(
attribute stock_id { t_identifier},
attribute stock_client { t_identifier}?
)?
t_font = (
[xrc:p="o"] element size {_, t_integer }* &
[xrc:p="o"] element style {_, ("normal" | "italic" | "slant") }* &
[xrc:p="o"] element weight {_, ("normal" | "bold" | "light") }* &
[xrc:p="o"] element family {_, ("roman" | "script" | "decorative" | "swiss" |
"modern" | "teletype") }* &
[xrc:p="o"] element underlined {_, t_bool }* &
[xrc:p="o"] element face {_, t_text }* &
[xrc:p="o"] element encoding {_, t_text }* &
[xrc:p="o"] element sysfont {_, ("wxSYS_OEM_FIXED_FONT" | "wxSYS_ANSI_FIXED_FONT" |
"wxSYS_ANSI_VAR_FONT" | "wxSYS_SYSTEM_FONT" |
"wxSYS_DEVICE_DEFAULT_FONT" | "wxSYS_SYSTEM_FIXED_FONT" |
"wxSYS_DEFAULT_GUI_FONT") }* &
[xrc:p="o"] element inherit {_, t_bool }* &
[xrc:p="o"] element relativesize {_, t_float }*
)
t_imagelist = (
[xrc:p="o"] element mask {_, t_bool }* &
[xrc:p="o"] element size {_, t_size }* &
element bitmap {_, t_bitmap }+
)
t_list_of_numbers = xsd:string { pattern = "\d+(,\d+)*" }
#
# Handlers for non-<object> content:
#
idsRange =
element ids-range {
attribute name { t_identifier },
attribute size { t_integer }?,
attribute start { t_integer }?
}
objectRef =
element object_ref {
stdObjectNodeAttributes &
attribute ref { t_identifier } &
anyXMLContent*
}
#
# Handlers for specific <object> classes follow:
#
unknown =
element object {
attribute class { "unknown" } &
attribute name { t_identifier } &
platform &
stdWindowProperties
}
wxBitmap_or_wxIcon =
element object {
attribute class { "wxBitmap" | "wxIcon" } &
stdObjectNodeAttributes &
t_bitmap
}
wxAnimationCtrl =
element object {
attribute class { "wxAnimationCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element animation {_, t_url }* &
[xrc:p="o"] element inactive-bitmap {_, t_bitmap }*
}
wxAuiNotebook =
element object {
attribute class { "wxAuiNotebook" } &
stdObjectNodeAttributes &
stdWindowProperties &
(wxAuiNotebook_notebookpage | objectRef)*
}
wxAuiNotebook_notebookpage =
element object {
attribute class { "notebookpage" } &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element selected {_, t_bool }* &
windowNode
}
wxAuiToolBar =
element object {
attribute class { "wxAuiToolBar" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element bitmapsize {_, t_size }* &
[xrc:p="o"] element margins {_, t_size }* &
[xrc:p="o"] element packing {_, t_integer }* &
[xrc:p="o"] element separation {_, t_integer }* &
[xrc:p="o"] element dontattachtoframe {_, t_bool }* &
(
windowNode |
wxToolBar_tool |
wxAuiToolBar_label |
element object { attribute class { "separator" }, platform } |
element object { attribute class { "space" } &
platform &
[xrc:p="o"] element width {_, t_integer }* &
[xrc:p="o"] element proportion {_, t_integer }*
}
)*
}
wxAuiToolBar_label =
element object {
attribute class { "label" } &
platform &
attribute name { t_identifier }? &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element width {_, t_integer }*
}
wxBannerWindow =
element object {
attribute class { "wxBannerWindow" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element direction {_, t_direction }* &
[xrc:p="o"](
element bitmap {_, t_bitmap } |
(
element gradient-start {_, t_colour} &
element gradient-end {_, t_colour }
)
)* &
[xrc:p="o"] element title {_, t_text }* &
[xrc:p="o"] element message {_, t_text }*
}
wxBitmapButton =
element object {
attribute class { "wxBitmapButton" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element default {_, t_bool }* &
[xrc:p="important"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element selected {_, t_bitmap }* &
[xrc:p="o"] element focus {_, t_bitmap }* &
[xrc:p="o"] element disabled {_, t_bitmap }* &
[xrc:p="o"] element hover {_, t_bitmap }*
}
wxBitmapComboBox =
element object {
attribute class { "wxBitmapComboBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element selection {_, t_integer }* &
[xrc:p="o"] element value {_, t_text }* &
(wxBitmapComboBox_ownerdrawnitem | objectRef)*
}
wxBitmapComboBox_ownerdrawnitem =
element object {
attribute class { "ownerdrawnitem" } &
platform &
[xrc:p="important"] element text {_, t_text }* &
[xrc:p="o"] element bitmap {_, t_bitmap }*
}
wxBitmapToggleButton =
element object {
attribute class { "wxBitmapToggleButton" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element checked {_, t_bool }*
}
wxButton =
element object {
attribute class { "wxButton" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element label {_, t_text }* &
[xrc:p="o"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element bitmapposition {_, t_direction }* &
[xrc:p="o"] element default {_, t_bool }*
}
wxCalendarCtrl =
element object {
attribute class { "wxCalendarCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties
}
wxCheckBox =
element object {
attribute class { "wxCheckBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element checked {_, t_bool }*
}
wxCheckListBox =
element object {
attribute class { "wxCheckListBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
element content {
platform,
element item {
attribute checked { t_bool }?,
t_text
}*
}?
}
wxChoice =
element object {
attribute class { "wxChoice" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element selection {_, t_integer }* &
element content {
platform,
element item {_, t_text }*
}?
}
wxChoicebook =
element object {
attribute class { "wxChoicebook" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element imagelist {_, t_imagelist }* &
(wxChoicebook_choicebookpage | objectRef)*
}
wxChoicebook_choicebookpage =
element object {
attribute class { "choicebookpage" } &
platform &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"](
element bitmap {_, t_bitmap } |
element image {_, t_integer }
)* &
[xrc:p="o"] element selected {_, t_bool }* &
windowNode
}
wxCommandLinkButton =
element object {
attribute class { "wxCommandLinkButton" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element note {_, t_text }*
}
wxCollapsiblePane =
element object {
attribute class { "wxCollapsiblePane" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element collapsed {_, t_bool }* &
(wxCollapsiblePane_panewindow | objectRef)?
}
wxCollapsiblePane_panewindow =
element object {
attribute class { "panewindow" } &
platform &
(sizerNode | windowNode)
}
wxColourPickerCtrl =
element object {
attribute class { "wxColourPickerCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_colour }*
}
wxComboBox =
element object {
attribute class { "wxComboBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element selection {_, t_integer }* &
[xrc:p="o"] element value {_, t_string }* &
element content {
platform,
element item {_, t_text }*
}?
}
wxComboCtrl =
element object {
attribute class { "wxComboCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_string }*
}
wxDatePickerCtrl =
element object {
attribute class { "wxDatePickerCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties
}
wxDialog =
element object {
attribute class { "wxDialog" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element title {_, t_text }* &
[xrc:p="o"] element icon {_, t_bitmap }* &
[xrc:p="o"] element centered {_, t_bool }* &
(sizerNode | windowNode* )?
}
wxDirPickerCtrl =
element object {
attribute class { "wxDirPickerCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_string }* &
[xrc:p="important"] element message {_, t_text}*
}
wxEditableListBox =
element object {
attribute class { "wxEditableListBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element label {_, t_text}* &
element content {
platform,
element item {_, t_text }*
}?
}
wxFileCtrl =
element object {
attribute class { "wxFileCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element defaultdirectory {_, t_string }* &
[xrc:p="o"] element defaultfilename {_, t_string }* &
[xrc:p="o"] element wildcard {_, t_string }*
}
wxFilePickerCtrl =
element object {
attribute class { "wxFilePickerCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_string }* &
[xrc:p="important"] element message {_, t_text }* &
[xrc:p="o"] element wildcard {_, t_string }*
}
wxFontPickerCtrl =
element object {
attribute class { "wxFontPickerCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_font }*
}
wxFrame =
element object {
attribute class { "wxFrame" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element title {_, t_text }* &
[xrc:p="o"] element icon {_, t_bitmap }* &
[xrc:p="o"] element centered {_, t_bool }* &
(sizerNode | windowNode* )?
}
wxGauge =
element object {
attribute class { "wxGauge" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element range {_, t_integer }* &
[xrc:p="o"] element value {_, t_integer }* &
[xrc:p="o"] element shadow {_, t_dimension }* &
[xrc:p="o"] element bezel {_, t_dimension }*
}
wxGenericDirCtrl =
element object {
attribute class { "wxGenericDirCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element defaultfolder {_, t_string }* &
[xrc:p="o"] element filter {_, t_text }* &
[xrc:p="o"] element defaultfilter {_, t_integer }*
}
wxGrid =
element object {
attribute class { "wxGrid" } &
stdObjectNodeAttributes &
stdWindowProperties
}
wxHtmlWindow =
element object {
attribute class { "wxHtmlWindow" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"](
element url {_, t_url } |
element htmlcode {_, t_text }
)* &
[xrc:p="o"] element borders {_, t_dimension }*
}
wxHyperlinkCtrl =
element object {
attribute class { "wxHyperlinkCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="important"] element url {_, t_url }*
}
wxListBox =
element object {
attribute class { "wxListBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element selection {_, t_integer }* &
element content {
platform,
element item {_, t_text }*
}?
}
wxListbook =
element object {
attribute class { "wxListbook" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element imagelist {_, t_imagelist }* &
(wxListbook_listbookpage | objectRef)*
}
wxListbook_listbookpage =
element object {
attribute class { "listbookpage" } &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"](
element bitmap {_, t_bitmap } |
element image {_, t_integer }
)* &
[xrc:p="o"] element selected {_, t_bool }* &
windowNode
}
wxListCtrl =
element object {
attribute class { "wxListCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element imagelist {_, t_imagelist }* &
[xrc:p="o"] element imagelist-small {_, t_imagelist }* &
(wxListCtrl_listcol | wxListCtrl_listitem | objectRef)*
}
wxListCtrl_listcol =
element object {
attribute class { "listcol" } &
platform &
[xrc:p="o"] element align {_, ("wxLIST_FORMAT_LEFT" | "wxLIST_FORMAT_RIGHT" |
"wxLIST_FORMAT_CENTRE") }* &
[xrc:p="o"] element text {_, t_text }* &
[xrc:p="o"] element width {_, t_integer }* &
[xrc:p="o"] element image {_, t_integer }*
}
wxListCtrl_listitem =
element object {
attribute class { "listitem" } &
platform &
[xrc:p="o"] element align {_, ("wxLIST_FORMAT_LEFT" | "wxLIST_FORMAT_RIGHT" |
"wxLIST_FORMAT_CENTRE") }* &
[xrc:p="o"] element bg {_, t_colour }* &
[xrc:p="o"] element col {_, t_integer }* &
[xrc:p="o"] element data {_, t_integer }* &
[xrc:p="o"] element font {_, t_font }* &
[xrc:p="o"] element state {_, ("wxLIST_STATE_FOCUSED" | "wxLIST_STATE_SELECTED") }* &
[xrc:p="o"] element text {_, t_text }* &
[xrc:p="o"] element textcolour {_, t_colour }* &
[xrc:p="o"](
element bitmap {_, t_bitmap } |
element image {_, t_integer }
)* &
[xrc:p="o"](
element bitmap-small {_, t_bitmap } |
element image-small {_, t_integer }
)*
}
wxMDIParentFrame =
element object {
attribute class { "wxMDIParentFrame" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element title {_, t_text }* &
[xrc:p="o"] element icon {_, t_bitmap }* &
[xrc:p="o"] element centered {_, t_bool }* &
(wxMDIChildFrame | objectRef)*
}
wxMDIChildFrame =
element object {
attribute class { "wxMDIChildFrame" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element title {_, t_text }* &
[xrc:p="o"] element icon {_, t_bitmap }* &
[xrc:p="o"] element centered {_, t_bool }* &
(sizerNode | windowNode* )?
}
wxMenuBar =
element object {
attribute class { "wxMenuBar" } &
stdObjectNodeAttributes &
[xrc:p="o"] element style {_, t_style }* &
(wxMenu | objectRef)*
}
wxMenu =
element object {
attribute class { "wxMenu" } &
stdObjectNodeAttributes &
[xrc:p="o"] element label {_, t_text }* &
[xrc:p="o"] element style {_, t_style }* &
[xrc:p="o"] element help {_, t_text }* &
[xrc:p="o"] element enabled {_, t_bool }* &
(
wxMenuItem |
wxMenu |
objectRef |
element object { attribute class { "separator" }, platform } |
element object { attribute class { "break" }, platform }
)*
}
wxMenuItem =
element object {
attribute class { "wxMenuItem" } &
stdObjectNodeAttributes &
[xrc:p="o"] element label {_, t_text }* &
[xrc:p="o"] element accel {_, t_text }* &
[xrc:p="o"] element radio {_, t_bool }* &
[xrc:p="o"] element checkable {_, t_bool }* &
[xrc:p="o"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element bitmap2 {_, t_bitmap }* &
[xrc:p="o"] element help {_, t_text }* &
[xrc:p="o"] element enabled {_, t_bool }* &
[xrc:p="o"] element checked {_, t_bool }*
}
wxNotebook =
element object {
attribute class { "wxNotebook" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element imagelist {_, t_imagelist }* &
(wxNotebook_notebookpage | objectRef)*
}
wxNotebook_notebookpage =
element object {
attribute class { "notebookpage" } &
platform &
[xrc:p="important"] element label {_, t_text }* &
(
element bitmap {_, t_bitmap } |
element image {_, t_integer }
)? &
[xrc:p="o"] element selected {_, t_bool }* &
windowNode
}
wxOwnerDrawnComboBox =
element object {
attribute class { "wxOwnerDrawnComboBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element selection {_, t_integer }* &
[xrc:p="o"] element value {_, t_string }* &
[xrc:p="o"] element buttonsize {_, t_size }* &
element content {
platform,
element item {_, t_text }*
}?
}
wxPanel =
element object {
attribute class { "wxPanel" } &
stdObjectNodeAttributes &
stdWindowProperties &
(sizerNode | windowNode* )?
}
wxPropertySheetDialog =
element object {
attribute class { "wxPropertySheetDialog" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element title {_, t_text }* &
[xrc:p="o"] element icon {_, t_bitmap }* &
[xrc:p="o"] element centered {_, t_bool }* &
[xrc:p="o"] element buttons {_, t_style }* &
(wxNotebook_notebookpage | objectRef)*
}
wxPropertySheetDialog_propertysheetpage =
element object {
attribute class { "propertysheetpage" } &
platform &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element selected {_, t_bool }* &
windowNode
}
wxRadioButton =
element object {
attribute class { "wxRadioButton" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element value {_, t_bool }*
}
wxRadioBox =
element object {
attribute class { "wxRadioBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element dimension {_, t_integer }* &
[xrc:p="o"] element selection {_, t_integer }* &
element content {
platform,
element item {
platform,
attribute tooltip { t_string }?,
attribute helptext { t_string }?,
attribute enabled { t_bool }?,
attribute hidden { t_bool }?,
t_text
}*
}?
}
wxRibbonBar =
element object {
attribute class { "wxRibbonBar" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element art-provider {_, ("default" | "aui" | "msw") }* &
(wxRibbonPage | objectRef)*
}
wxRibbonButtonBar =
element object {
attribute class { "wxRibbonButtonBar" } &
stdObjectNodeAttributes &
stdWindowProperties &
(wxRibbonButtonBar_button | objectRef)*
}
wxRibbonButtonBar_button =
element object {
attribute class { "button" } &
stdObjectNodeAttributes &
[xrc:p="o"] element hybrid {_, t_bool }* &
[xrc:p="o"] element disabled {_, t_bool }* &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="important"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element small-bitmap {_, t_bitmap }* &
[xrc:p="o"] element disabled-bitmap {_, t_bitmap }* &
[xrc:p="o"] element small-disabled-bitmap {_, t_bitmap }* &
[xrc:p="o"] element help {_, t_text }*
}
wxRibbonControl =
element object {
attribute class { "wxRibbonControl" } &
attribute subclass { t_identifier } & # must be subclassed
attribute name { t_identifier }? &
platform
}
wxRibbonGallery =
element object {
attribute class { "wxRibbonGallery" } &
stdObjectNodeAttributes &
stdWindowProperties &
(wxRibbonGallery_item | objectRef)*
}
wxRibbonGallery_item =
element object {
attribute class { "item" } &
stdObjectNodeAttributes &
[xrc:p="o"] element bitmap {_, t_bitmap }*
}
wxRibbonPage =
element object {
# unfortunately, wxRibbonXmlHandler supports "page" alias
attribute class { "wxRibbonPage" | "page" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element label {_, t_text }* &
[xrc:p="o"] element icon {_, t_bitmap }* &
(wxRibbon_anyControl | objectRef)*
}
wxRibbonPanel =
element object {
# unfortunately, wxRibbonXmlHandler supports "panel" alias
attribute class { "wxRibbonPanel" | "panel" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element label {_, t_text }* &
[xrc:p="o"] element icon {_, t_bitmap }* &
(sizerNode | wxRibbon_anyControl | objectRef)*
}
wxRibbon_anyControl = wxRibbonBar | wxRibbonButtonBar | wxRibbonControl |
wxRibbonGallery | wxRibbonPanel
wxRichTextCtrl =
element object {
attribute class { "wxRichTextCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_text }* &
[xrc:p="o"] element maxlength {_, t_integer }*
}
wxScrollBar =
element object {
attribute class { "wxScrollBar" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_integer }* &
[xrc:p="o"] element range {_, t_integer }* &
[xrc:p="o"] element thumbsize {_, t_integer }* &
[xrc:p="o"] element pagesize {_, t_integer }*
}
wxScrolledWindow =
element object {
attribute class { "wxScrolledWindow" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element scrollrate {_, t_size }* &
(sizerNode | windowNode* )?
}
wxSimpleHtmlListBox =
element object {
attribute class { "wxSimpleHtmlListBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element selection {_, t_integer }* &
element content {
platform,
element item {_, t_text }*
}?
}
wxSlider =
element object {
attribute class { "wxSlider" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_integer }* &
[xrc:p="o"] element min {_, t_integer }* &
[xrc:p="o"] element max {_, t_integer }* &
[xrc:p="o"] element pagesize {_, t_integer }* &
[xrc:p="o"] element linesize {_, t_integer }* &
[xrc:p="o"] element tickfreq {_, t_integer }* &
[xrc:p="o"] element tick {_, t_integer }* &
[xrc:p="o"] element thumb {_, t_integer }* &
[xrc:p="o"] element selmin {_, t_integer }* &
[xrc:p="o"] element selmax {_, t_integer }*
}
wxSpinButton =
element object {
attribute class { "wxSpinButton" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_integer }* &
[xrc:p="o"] element min {_, t_integer }* &
[xrc:p="o"] element max {_, t_integer }*
}
wxSpinCtrl =
element object {
attribute class { "wxSpinCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_integer }* &
[xrc:p="o"] element min {_, t_integer }* &
[xrc:p="o"] element max {_, t_integer }* &
[xrc:p="o"] element base {_, ("10" | "16") }*
}
wxSplitterWindow =
element object {
attribute class { "wxSplitterWindow" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element orientation {_, ("vertical" | "horizontal") }* &
[xrc:p="o"] element sashpos {_, t_dimension }* &
[xrc:p="o"] element minsize {_, t_dimension }* &
[xrc:p="o"] element gravity {_, t_float }* &
(windowNode, windowNode?) # 1 or 2 child windows
}
wxSearchCtrl =
element object {
attribute class { "wxSearchCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_text }*
}
wxStatusBar =
element object {
attribute class { "wxStatusBar" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element fields {_, t_integer }* &
[xrc:p="o"] element widths {_, t_list_of_numbers }* &
[xrc:p="o"] element styles {_, xsd:string { pattern = "wxSB_(NORMAL|FLAT|RAISED|SUNKEN)(,wxSB_(NORMAL|FLAT|RAISED|SUNKEN))*" } }*
}
wxStaticBitmap =
element object {
attribute class { "wxStaticBitmap" } &
stdObjectNodeAttributes &
stdWindowProperties &
element bitmap {_, t_bitmap }
}
wxStaticBox =
element object {
attribute class { "wxStaticBox" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }*
}
wxStaticLine =
element object {
attribute class { "wxStaticLine" } &
stdObjectNodeAttributes &
stdWindowProperties
}
wxStaticText =
element object {
attribute class { "wxStaticText" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element wrap {_, t_dimension }*
}
wxTextCtrl =
element object {
attribute class { "wxTextCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element value {_, t_text }* &
[xrc:p="o"] element maxlength {_, t_integer }*
}
wxTimePickerCtrl =
element object {
attribute class { "wxTimePickerCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties
}
wxToggleButton =
element object {
attribute class { "wxToggleButton" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element checked {_, t_bool }*
}
wxToolBar =
element object {
attribute class { "wxToolBar" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element bitmapsize {_, t_size }* &
[xrc:p="o"] element margins {_, t_size }* &
[xrc:p="o"] element packing {_, t_integer }* &
[xrc:p="o"] element separation {_, t_integer }* &
[xrc:p="o"] element dontattachtoframe {_, t_bool }* &
(
windowNode |
wxToolBar_tool |
element object { attribute class { "separator" }, platform } |
element object { attribute class { "space" }, platform }
)*
}
wxToolBar_tool =
element object {
attribute class { "tool" } &
stdObjectNodeAttributes &
[xrc:p="important"] element bitmap {_, t_bitmap }* &
[xrc:p="o"] element bitmap2 {_, t_bitmap }* &
[xrc:p="o"] element label {_, t_text }* &
[xrc:p="o"] element tooltip {_, t_text }* &
[xrc:p="o"] element longhelp {_, t_text }* &
[xrc:p="o"] element disabled {_, t_bool }* &
[xrc:p="o"] element checked {_, t_bool }* &
[xrc:p="o"](
element radio {_, t_bool } |
element toggle {_, t_bool } |
element dropdown {_, wxMenu? }
)*
}
wxToolbook =
element object {
attribute class { "wxToolbook" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element imagelist {_, t_imagelist }* &
(wxToolbook_toolbookpage | objectRef)*
}
wxToolbook_toolbookpage =
element object {
attribute class { "toolbookpage" } &
platform &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"](
element bitmap {_, t_bitmap } |
element image {_, t_integer }
)* &
[xrc:p="o"] element selected {_, t_bool }* &
windowNode
}
wxTreeCtrl =
element object {
attribute class { "wxTreeCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element imagelist {_, t_imagelist }*
}
wxTreebook =
element object {
attribute class { "wxTreebook" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element imagelist {_, t_imagelist }* &
(wxTreebook_treebookpage | objectRef)*
}
wxTreebook_treebookpage =
element object {
attribute class { "treebookpage" } &
platform &
[xrc:p="important"] element depth {_, t_integer }* &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"](
element bitmap {_, t_bitmap } |
element image {_, t_integer }
)* &
[xrc:p="o"] element selected {_, t_bool }* &
[xrc:p="o"] element expanded {_, t_bool }* &
windowNode
}
wxWizard =
element object {
attribute class { "wxWizard" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element title {_, t_text }* &
[xrc:p="o"] element bitmap {_, t_bitmap }* &
(wxWizardPage_any | objectRef)*
}
wxWizardPage_any =
element object {
attribute class { "wxWizardPage" | "wxWizardPageSimple" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="o"] element bitmap {_, t_bitmap }* &
(sizerNode | windowNode* )?
}
wxSizer_item =
element object {
(
(
attribute class { "spacer" } &
[xrc:p="o"] element size {_, t_size }*
)
|
(
attribute class { "sizeritem" } &
(windowNode | sizerNode)
)
) &
stdObjectNodeAttributes &
[xrc:p="o"] element option {_, t_integer }* &
[xrc:p="o"] element border {_, t_dimension }* &
[xrc:p="o"] element minsize {_, t_size }* &
[xrc:p="o"] element ratio {_, t_size }* &
# TODO: cell{pos,span} are wxGridBagSizer-only and required in it, this is too lax
[xrc:p="o"] element cellpos {_, t_position }* &
[xrc:p="o"] element cellspan {_, t_size }* &
[xrc:p="o"] element flag {_,
xsd:string {
pattern = "(wxLEFT|wxRIGHT|wxTOP|wxBOTTOM|wxNORTH|wxSOUTH|wxEAST|wxWEST|wxALL|wxGROW|wxEXPAND|wxSHAPED|wxSTRETCH_NOT|wxALIGN_CENTER|wxALIGN_CENTRE|wxALIGN_LEFT|wxALIGN_RIGHT|wxALIGN_TOP|wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTRE_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTRE_VERTICAL)( *\| *(wxLEFT|wxRIGHT|wxTOP|wxBOTTOM|wxNORTH|wxSOUTH|wxEAST|wxWEST|wxALL|wxGROW|wxEXPAND|wxSHAPED|wxSTRETCH_NOT|wxALIGN_CENTER|wxALIGN_CENTRE|wxALIGN_LEFT|wxALIGN_RIGHT|wxALIGN_TOP|wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTRE_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTRE_VERTICAL))*"
}
}*
}
wxBoxSizer =
element object {
attribute class { "wxBoxSizer" } &
stdObjectNodeAttributes &
[xrc:p="o"] element minsize {_, t_size }* &
[xrc:p="o"] element orient {_, ("wxHORIZONTAL" | "wxVERTICAL") }* &
(wxSizer_item | objectRef)*
}
wxStaticBoxSizer =
element object {
attribute class { "wxStaticBoxSizer" } &
stdObjectNodeAttributes &
[xrc:p="o"] element minsize {_, t_size }* &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="o"] element orient {_, ("wxHORIZONTAL" | "wxVERTICAL") }* &
(wxSizer_item | objectRef)*
}
wxGridSizer =
element object {
attribute class { "wxGridSizer" } &
stdObjectNodeAttributes &
[xrc:p="o"] element minsize {_, t_size }* &
[xrc:p="o"] element rows {_, t_unsigned }* &
[xrc:p="o"] element cols {_, t_unsigned }* &
[xrc:p="o"] element vgap {_, t_dimension }* &
[xrc:p="o"] element hgap {_, t_dimension }* &
(wxSizer_item | objectRef)*
}
wxFlexGridSizer =
element object {
attribute class { "wxFlexGridSizer" } &
stdObjectNodeAttributes &
[xrc:p="o"] element minsize {_, t_size }* &
[xrc:p="o"] element rows {_, t_unsigned }* &
[xrc:p="o"] element cols {_, t_unsigned }* &
[xrc:p="o"] element vgap {_, t_dimension }* &
[xrc:p="o"] element hgap {_, t_dimension }* &
[xrc:p="o"] element flexibledirection {_, ("wxVERTICAL" | "wxHORIZONTAL" | "wxBOTH") }* &
[xrc:p="o"] element nonflexiblegrowmode {_, ("wxFLEX_GROWMODE_NONE" |
"wxFLEX_GROWMODE_SPECIFIED" |
"wxFLEX_GROWMODE_ALL") }* &
[xrc:p="o"] element growablerows {_, t_list_of_numbers }* &
[xrc:p="o"] element growablecols {_, t_list_of_numbers }* &
(wxSizer_item | objectRef)*
}
wxGridBagSizer =
element object {
attribute class { "wxGridBagSizer" } &
stdObjectNodeAttributes &
[xrc:p="o"] element minsize {_, t_size }* &
[xrc:p="o"] element vgap {_, t_dimension }* &
[xrc:p="o"] element hgap {_, t_dimension }* &
[xrc:p="o"] element flexibledirection {_, ("wxVERTICAL" | "wxHORIZONTAL" | "wxBOTH") }* &
[xrc:p="o"] element nonflexiblegrowmode {_, ("wxFLEX_GROWMODE_NONE" |
"wxFLEX_GROWMODE_SPECIFIED" |
"wxFLEX_GROWMODE_ALL") }* &
[xrc:p="o"] element growablerows {_, t_list_of_numbers }* &
[xrc:p="o"] element growablecols {_, t_list_of_numbers }* &
(wxSizer_item | objectRef)*
}
wxWrapSizer =
element object {
attribute class { "wxWrapSizer" } &
stdObjectNodeAttributes &
[xrc:p="o"] element minsize {_, t_size }* &
[xrc:p="important"] element orient {_, ("wxHORIZONTAL" | "wxVERTICAL") }* &
[xrc:p="o"] element flag {_, t_style }* &
(wxSizer_item | objectRef)*
}
wxStdDialogButtonSizer =
element object {
attribute class { "wxStdDialogButtonSizer" } &
stdObjectNodeAttributes &
element object {
attribute class { "button" },
platform,
(wxButton | customClasses | objectRef)
}+
}