]> git.saurik.com Git - wxWidgets.git/commitdiff
add support for creating drop down toolbar buttons from XRC
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 2 Dec 2008 18:11:54 +0000 (18:11 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 2 Dec 2008 18:11:54 +0000 (18:11 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57073 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/doxygen/overviews/xrc_format.h
samples/xrc/rc/controls.xrc
src/xrc/xh_toolb.cpp

index 973417ae5b49184fb7530738d2fa3b3ef53f862b..04bce2249d24ace581c4a1318223fc11e6f23de2 100644 (file)
@@ -345,6 +345,7 @@ All (GUI):
 - 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).
index 324ecb909de9a9eea5445f9bde671b4ae61e5bee..042b2f08bb8e7e484cfcfcb04844915f3fbe55b9 100644 (file)
@@ -1441,6 +1441,8 @@ properties:
      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,
@@ -1449,7 +1451,11 @@ properties:
      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
@@ -1467,6 +1473,20 @@ Example:
         <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>
index ba6a5288e780d1b7f2d872c57c395b3378851c0b..d6b92a1d42f7505eca91d3bf2284de6da2af15f4 100644 (file)
                                 <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"/>
index c1bda2419fb6301ed9c082b157d57cd56930004c..0fa523baa0ffac9ef7b9f30bdc9106f3c5694d3b 100644 (file)
@@ -58,23 +58,58 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
         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
     }