]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxInfoBar::AddButton().
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 5 Oct 2009 22:54:31 +0000 (22:54 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 5 Oct 2009 22:54:31 +0000 (22:54 +0000)
Allow adding custom buttons to wxInfoBar and show this in the sample.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62270 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/infobar.h
include/wx/infobar.h
samples/dialogs/dialogs.cpp
src/generic/infobar.cpp

index f107549907f02244491831f7af0dbac3f9ba69df..085bc40d50417a5aa839d7482610c5a98529fb02 100644 (file)
@@ -40,6 +40,8 @@ public:
 
     virtual void ShowMessage(const wxString& msg, int flags = wxICON_NONE);
 
+    virtual void AddButton(wxWindowID btnid, const wxString& label = wxString());
+
 
     // methods specific to this version
     // --------------------------------
index ffa7aadcd931813113d9c0ca84604747a7e92365..eb8b7e170316180f831cd3db774239d23cb15dd4 100644 (file)
@@ -35,6 +35,10 @@ public:
     // show the info bar with the given message and optionally an icon
     virtual void ShowMessage(const wxString& msg, int flags = wxICON_NONE) = 0;
 
+    // add an extra button to the bar, near the message
+    virtual void AddButton(wxWindowID btnid,
+                           const wxString& label = wxString()) = 0;
+
 private:
     wxDECLARE_NO_COPY_CLASS(wxInfoBarBase);
 };
index a45f416b92e05a50a123594f438a840d90f47d01..d5e61a62c32bb383a75b813fe15bccaded314574 100644 (file)
@@ -525,13 +525,23 @@ MyFrame::MyFrame(const wxString& title)
     m_canvas = new MyCanvas(this);
 
 #if wxUSE_INFOBAR
+    // an info bar can be created very simply and used without any extra effort
     m_infoBarSimple = new wxInfoBar(this);
-    m_infoBarAdvanced = NULL;
+
+    // or it can also be customized
+    m_infoBarAdvanced = new wxInfoBar(this);
+    m_infoBarAdvanced->AddButton(wxID_UNDO);
+
+    m_infoBarAdvanced->SetOwnBackgroundColour(0xc8ffff);
+    m_infoBarAdvanced->SetShowHideEffects(wxSHOW_EFFECT_EXPAND,
+                                          wxSHOW_EFFECT_EXPAND);
+    m_infoBarAdvanced->SetEffectDuration(1500);
 
     // to use the info bars we need to use sizer for the window layout
     wxBoxSizer * const sizer = new wxBoxSizer(wxVERTICAL);
     sizer->Add(m_infoBarSimple, wxSizerFlags().Expand());
     sizer->Add(m_canvas, wxSizerFlags(1).Expand());
+    sizer->Add(m_infoBarAdvanced, wxSizerFlags().Expand());
     SetSizer(sizer);
 #endif // wxUSE_INFOBAR
 }
@@ -690,6 +700,7 @@ void MyFrame::InfoBarSimple(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::InfoBarAdvanced(wxCommandEvent& WXUNUSED(event))
 {
+    m_infoBarAdvanced->ShowMessage("Sorry, it didn't work out.", wxICON_WARNING);
 }
 
 #endif // wxUSE_INFOBAR
index 549f20617d9fc103b769638878d8481e54b80cad..c5e84d838f71c862d959588b7de8f1d99865eb69 100644 (file)
@@ -28,6 +28,7 @@
 #ifndef WX_PRECOMP
     #include "wx/artprov.h"
     #include "wx/bmpbuttn.h"
+    #include "wx/button.h"
     #include "wx/settings.h"
     #include "wx/statbmp.h"
     #include "wx/stattext.h"
@@ -96,7 +97,11 @@ bool wxInfoBar::Create(wxWindow *parent, wxWindowID winid)
         this
     );
 
-    // Center the text inside the sizer.
+    // center the text inside the sizer with an icon to the left of it and a
+    // button at the very right
+    //
+    // NB: AddButton() relies on the button being the last control in the sizer
+    //     and being preceded by a spacer
     wxSizer * const sizer = new wxBoxSizer(wxHORIZONTAL);
     sizer->AddStretchSpacer();
     sizer->Add(m_icon, wxSizerFlags().Centre().DoubleBorder());
@@ -239,6 +244,16 @@ void wxInfoBar::ShowMessage(const wxString& msg, int flags)
     }
 }
 
+void wxInfoBar::AddButton(wxWindowID btnid, const wxString& label)
+{
+    wxSizer * const sizer = GetSizer();
+    wxCHECK_RET( sizer, "must be created first" );
+
+    sizer->Insert(sizer->GetItemCount() - 2,
+                  new wxButton(this, btnid, label),
+                  wxSizerFlags().Centre().DoubleBorder());
+}
+
 void wxInfoBar::OnButton(wxCommandEvent& WXUNUSED(event))
 {
     DoHide();