Add support for stretchable spacers to XRC wxToolBar handler.

Notice that currently only stretchable spacers are supported via
separator-like "space" XRC element. If we ever add support for fixed spacers
in the toolbar we should do it via its fixed sub-element, e.g. they would be
specified with <fixed>1</fixed> in XRC file.

Also use spacers instead of separator in the XRC sample and ensure that the
toolbars in it are resized.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63172 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-01-18 00:29:00 +00:00
parent ca67f0d859
commit 5852e62f1f
3 changed files with 21 additions and 12 deletions

View File

@@ -1570,7 +1570,9 @@ A toolbar can have one or more child objects of any wxControl-derived class or
one of two pseudo-classes: @c separator or @c tool.
The @c separator pseudo-class is used to insert separators into the toolbar and
has neither properties nor children.
has neither properties nor children. Similarly, the @c space pseudo-class is
used for stretchable spaces (see wxToolBar::AddStretchableSpace(), new since
wxWidgets 2.9.1).
The @c tool pseudo-class objects specify toolbar buttons and have the following
properties:
@@ -1619,6 +1621,7 @@ Example:
<bitmap>bar.png</bitmap>
<label>Bar</label>
</object>
<object class="separator"/>
<object class="tool" name="view_auto">
<bitmap>view.png</bitmap>
<label>View</label>
@@ -1633,7 +1636,7 @@ Example:
</object>
</dropdown>
</object>
<object class="separator"/>
<object class="space"/>
<object class="wxComboBox">
<content>
<item>Just</item>

View File

@@ -65,8 +65,7 @@
<rows>0</rows>
<vgap>0</vgap>
<hgap>0</hgap>
<growablecols>0,1</growablecols>
<growablerows>0,1</growablerows>
<growablecols>1</growablecols>
<object class="sizeritem">
<flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>5</border>
@@ -75,9 +74,8 @@
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<flag>wxEXPAND|wxALL</flag>
<border>5</border>
<size>300,60</size>
<object class="wxToolBar">
<style>wxTB_FLAT|wxTB_NODIVIDER</style>
<margins>2,2</margins>
@@ -116,7 +114,7 @@
<bitmap stock_id="wxART_GO_DOWN"/>
<label>Down</label>
</object>
<object class="separator"/>
<object class="space"/>
<object class="wxComboBox">
<content>
<item>Just</item>
@@ -141,7 +139,7 @@
</object>
</object>
<object class="sizeritem">
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<flag>wxEXPAND|wxALL</flag>
<border>5</border>
<object class="wxToolBar">
<style>wxTB_FLAT|wxTB_NODIVIDER</style>
@@ -165,6 +163,7 @@
</object>
</dropdown>
</object>
<object class="separator"/>
<object class="tool" name="home">
<toggle>1</toggle>
<bitmap stock_id="wxART_GO_HOME"/>
@@ -181,7 +180,7 @@
<bitmap stock_id="wxART_GO_DOWN"/>
<label>Down</label>
</object>
<object class="separator"/>
<object class="space"/>
<object class="wxComboBox">
<content>
<item>Just</item>

View File

@@ -145,14 +145,19 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
return m_toolbar; // must return non-NULL
}
else if (m_class == wxT("separator"))
else if (m_class == wxT("separator") || m_class == wxT("space"))
{
if ( !m_toolbar )
{
ReportError("separator only allowed inside wxToolBar");
ReportError("separators only allowed inside wxToolBar");
return NULL;
}
if ( m_class == wxT("separator") )
m_toolbar->AddSeparator();
else
m_toolbar->AddStretchableSpace();
return m_toolbar; // must return non-NULL
}
@@ -206,6 +211,7 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
wxControl *control = wxDynamicCast(created, wxControl);
if (!IsOfClass(n, wxT("tool")) &&
!IsOfClass(n, wxT("separator")) &&
!IsOfClass(n, wxT("space")) &&
control != NULL)
toolbar->AddControl(control);
}
@@ -232,6 +238,7 @@ bool wxToolBarXmlHandler::CanHandle(wxXmlNode *node)
{
return ((!m_isInside && IsOfClass(node, wxT("wxToolBar"))) ||
(m_isInside && IsOfClass(node, wxT("tool"))) ||
(m_isInside && IsOfClass(node, wxT("space"))) ||
(m_isInside && IsOfClass(node, wxT("separator"))));
}