- Added wxWindow::AlwaysShowScrollbars() (Julian Scheid).
- Added wxMouseEvent::GetClickCount() (Julian Scheid).
- Added wxBG_STYLE_TRANSPARENT background style (Julian Scheid).
+- Added support for drop-down toolbar buttons to XRC.
- Added XRCSIZERITEM() macro for obtaining sizers from XRC (Brian Vanderburg II).
- New and improved wxFileCtrl (Diaa Sami and Marcin Wojdyr).
- Added wxEventBlocker class (Francesco Montorsi).
Item's kind is wxITEM_RADIO (default: 0)?}
@row3col{toggle, @ref overview_xrcformat_type_bool,
Item's kind is wxITEM_CHECK (default: 0)?}
+@row3col{dropdown, see below,
+ Item's kind is wxITEM_DROPDOWN (default: 0)? (@since 2.9.0)}
@row3col{tooltip, @ref overview_xrcformat_type_text,
Tooltip to use for the tool (default: none).}
@row3col{longhelp, @ref overview_xrcformat_type_text,
Is the tool initially disabled (default: 0)?}
@endTable
-@c radio and @c toggle are mutually exclusive.
+The presence of a @c dropdown property indicates that the tool is of type
+wxITEM_DROPDOWN. It must be either empty or contain exactly one wxMenu @ref
+xrc_wxmenu child object defining the drop-down button associated menu.
+
+Notice that @c radio, @c toggle and @c dropdown are mutually exclusive.
Children that are neither @c tool nor @c separator must be instances of classes
derived from wxControl and are added to the toolbar using
<bitmap>bar.png</bitmap>
<label>Bar</label>
</object>
+ <object class="tool" name="view_auto">
+ <bitmap>view.png</bitmap>
+ <label>View</label>
+ <dropdown>
+ <object class="wxMenu">
+ <object class="wxMenuItem" name="view_as_text">
+ <label>View as text</label>
+ </object>
+ <object class="wxMenuItem" name="view_as_hex">
+ <label>View as binary</label>
+ </object>
+ </object>
+ </dropdown>
+ </object>
<object class="separator"/>
<object class="wxComboBox">
<content>
<object class="wxToolBar">
<style>wxTB_FLAT|wxTB_NODIVIDER</style>
<margins>2,2</margins>
+ <object class="tool" name="New">
+ <bitmap stock_id="wxART_NEW"/>
+ <label>New</label>
+ </object>
+ <object class="tool" name="view_auto">
+ <bitmap stock_id="wxART_FILE_OPEN"/>
+ <label>View</label>
+ <dropdown>
+ <object class="wxMenu">
+ <object class="wxMenuItem" name="view_as_text">
+ <label>View as text</label>
+ </object>
+ <object class="wxMenuItem" name="view_as_hex">
+ <label>View as binary</label>
+ </object>
+ </object>
+ </dropdown>
+ </object>
+ <object class="separator"/>
<object class="tool" name="home">
<toggle>1</toggle>
<bitmap stock_id="wxART_GO_HOME"/>
<style>wxTB_FLAT|wxTB_NODIVIDER</style>
<bg>#bbbbff</bg>
<margins>2,2</margins>
+ <object class="tool" name="New">
+ <bitmap stock_id="wxART_NEW"/>
+ <label>New</label>
+ </object>
+ <object class="tool" name="view_auto">
+ <bitmap stock_id="wxART_FILE_OPEN"/>
+ <label>View</label>
+ <dropdown>
+ <object class="wxMenu">
+ <object class="wxMenuItem" name="view_as_text">
+ <label>View as text</label>
+ </object>
+ <object class="wxMenuItem" name="view_as_hex">
+ <label>View as binary</label>
+ </object>
+ </object>
+ </dropdown>
+ </object>
<object class="tool" name="home">
<toggle>1</toggle>
<bitmap stock_id="wxART_GO_HOME"/>
wxItemKind kind = wxITEM_NORMAL;
if (GetBool(wxT("radio")))
kind = wxITEM_RADIO;
+
if (GetBool(wxT("toggle")))
{
wxASSERT_MSG( kind == wxITEM_NORMAL,
_T("can't have both toggle and radio button at once") );
kind = wxITEM_CHECK;
}
- m_toolbar->AddTool(GetID(),
- GetText(wxT("label")),
- GetBitmap(wxT("bitmap"), wxART_TOOLBAR),
- GetBitmap(wxT("bitmap2"), wxART_TOOLBAR),
- kind,
- GetText(wxT("tooltip")),
- GetText(wxT("longhelp")));
+
+ // check whether we have dropdown tag inside
+ wxMenu *menu = NULL; // menu for drop down items
+ wxXmlNode * const nodeDropdown = GetParamNode("dropdown");
+ if ( nodeDropdown )
+ {
+ wxASSERT_MSG( kind == wxITEM_NORMAL,
+ "drop down button can't be a check/radio "
+ "button too" );
+
+ kind = wxITEM_DROPDOWN;
+
+ // also check for the menu specified inside dropdown (it is
+ // optional and may be absent for e.g. dynamically-created
+ // menus)
+ wxXmlNode * const nodeMenu = nodeDropdown->GetChildren();
+ if ( nodeMenu )
+ {
+ wxObject *res = CreateResFromNode(nodeMenu, NULL);
+ menu = wxDynamicCast(res, wxMenu);
+ wxASSERT_MSG( menu, "invalid drop down object contents" );
+
+ wxASSERT_MSG( !nodeMenu->GetNext(),
+ "only single menu tag allowed inside dropdown" );
+ }
+ }
+
+ wxToolBarToolBase * const
+ tool = m_toolbar->AddTool
+ (
+ GetID(),
+ GetText(wxT("label")),
+ GetBitmap(wxT("bitmap"), wxART_TOOLBAR),
+ GetBitmap(wxT("bitmap2"), wxART_TOOLBAR),
+ kind,
+ GetText(wxT("tooltip")),
+ GetText(wxT("longhelp"))
+ );
if ( GetBool(wxT("disabled")) )
m_toolbar->EnableTool(GetID(), false);
+ if ( menu )
+ tool->SetDropdownMenu(menu);
+
return m_toolbar; // must return non-NULL
}