Added wxInfoBar::AddButton().

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
This commit is contained in:
Vadim Zeitlin
2009-10-05 22:54:31 +00:00
parent df8c364bf4
commit 374ae80f2c
4 changed files with 34 additions and 2 deletions

View File

@@ -40,6 +40,8 @@ public:
virtual void ShowMessage(const wxString& msg, int flags = wxICON_NONE); virtual void ShowMessage(const wxString& msg, int flags = wxICON_NONE);
virtual void AddButton(wxWindowID btnid, const wxString& label = wxString());
// methods specific to this version // methods specific to this version
// -------------------------------- // --------------------------------

View File

@@ -35,6 +35,10 @@ public:
// show the info bar with the given message and optionally an icon // show the info bar with the given message and optionally an icon
virtual void ShowMessage(const wxString& msg, int flags = wxICON_NONE) = 0; 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: private:
wxDECLARE_NO_COPY_CLASS(wxInfoBarBase); wxDECLARE_NO_COPY_CLASS(wxInfoBarBase);
}; };

View File

@@ -525,13 +525,23 @@ MyFrame::MyFrame(const wxString& title)
m_canvas = new MyCanvas(this); m_canvas = new MyCanvas(this);
#if wxUSE_INFOBAR #if wxUSE_INFOBAR
// an info bar can be created very simply and used without any extra effort
m_infoBarSimple = new wxInfoBar(this); 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 // to use the info bars we need to use sizer for the window layout
wxBoxSizer * const sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer * const sizer = new wxBoxSizer(wxVERTICAL);
sizer->Add(m_infoBarSimple, wxSizerFlags().Expand()); sizer->Add(m_infoBarSimple, wxSizerFlags().Expand());
sizer->Add(m_canvas, wxSizerFlags(1).Expand()); sizer->Add(m_canvas, wxSizerFlags(1).Expand());
sizer->Add(m_infoBarAdvanced, wxSizerFlags().Expand());
SetSizer(sizer); SetSizer(sizer);
#endif // wxUSE_INFOBAR #endif // wxUSE_INFOBAR
} }
@@ -690,6 +700,7 @@ void MyFrame::InfoBarSimple(wxCommandEvent& WXUNUSED(event))
void MyFrame::InfoBarAdvanced(wxCommandEvent& WXUNUSED(event)) void MyFrame::InfoBarAdvanced(wxCommandEvent& WXUNUSED(event))
{ {
m_infoBarAdvanced->ShowMessage("Sorry, it didn't work out.", wxICON_WARNING);
} }
#endif // wxUSE_INFOBAR #endif // wxUSE_INFOBAR

View File

@@ -28,6 +28,7 @@
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/artprov.h" #include "wx/artprov.h"
#include "wx/bmpbuttn.h" #include "wx/bmpbuttn.h"
#include "wx/button.h"
#include "wx/settings.h" #include "wx/settings.h"
#include "wx/statbmp.h" #include "wx/statbmp.h"
#include "wx/stattext.h" #include "wx/stattext.h"
@@ -96,7 +97,11 @@ bool wxInfoBar::Create(wxWindow *parent, wxWindowID winid)
this 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); wxSizer * const sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->AddStretchSpacer(); sizer->AddStretchSpacer();
sizer->Add(m_icon, wxSizerFlags().Centre().DoubleBorder()); 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)) void wxInfoBar::OnButton(wxCommandEvent& WXUNUSED(event))
{ {
DoHide(); DoHide();