added test of wxBitmapButton

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36068 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-11-03 01:28:17 +00:00
parent b4a12e485b
commit 552271d6ad

View File

@@ -29,6 +29,7 @@
#include "wx/app.h" #include "wx/app.h"
#include "wx/log.h" #include "wx/log.h"
#include "wx/bmpbuttn.h"
#include "wx/button.h" #include "wx/button.h"
#include "wx/checkbox.h" #include "wx/checkbox.h"
#include "wx/radiobox.h" #include "wx/radiobox.h"
@@ -38,6 +39,7 @@
#include "wx/artprov.h" #include "wx/artprov.h"
#include "wx/sizer.h" #include "wx/sizer.h"
#include "wx/dcmemory.h"
#include "widgets.h" #include "widgets.h"
@@ -96,11 +98,19 @@ protected:
// (re)create the wxButton // (re)create the wxButton
void CreateButton(); void CreateButton();
// add m_button to m_sizerButton using current value of m_chkFit
void AddButtonToSizer();
// helper function: create a bitmap for wxBitmapButton
wxBitmap CreateBitmap(const wxString& label);
// the controls // the controls
// ------------ // ------------
// the check/radio boxes for styles // the check/radio boxes for styles
wxCheckBox *m_chkImage, wxCheckBox *m_chkBitmap,
*m_chkImage,
*m_chkFit, *m_chkFit,
*m_chkDefault; *m_chkDefault;
@@ -146,6 +156,7 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
imaglist->Add(wxBitmap(button_xpm)); imaglist->Add(wxBitmap(button_xpm));
// init everything // init everything
m_chkBitmap =
m_chkImage = m_chkImage =
m_chkFit = m_chkFit =
m_chkDefault = (wxCheckBox *)NULL; m_chkDefault = (wxCheckBox *)NULL;
@@ -165,6 +176,7 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL); wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
m_chkBitmap = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Bitmap button"));
m_chkImage = CreateCheckBoxAndAddToSizer(sizerLeft, _T("With &image")); m_chkImage = CreateCheckBoxAndAddToSizer(sizerLeft, _T("With &image"));
m_chkFit = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Fit exactly")); m_chkFit = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Fit exactly"));
m_chkDefault = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Default")); m_chkDefault = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Default"));
@@ -214,26 +226,25 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
_T("Change label"), _T("Change label"),
wxID_ANY, wxID_ANY,
&m_textLabel); &m_textLabel);
m_textLabel->SetValue(_T("&Press me!"));
sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5); sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
// right pane // right pane
wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL); m_sizerButton = new wxBoxSizer(wxHORIZONTAL);
m_button = new wxButton(this, ButtonPage_Button, _T("&Press me!")); m_sizerButton->SetMinSize(150, 0);
sizerRight->Add(0, 0, 1, wxCENTRE);
sizerRight->Add(m_button, 1, wxCENTRE);
sizerRight->Add(0, 0, 1, wxCENTRE);
sizerRight->SetMinSize(150, 0);
m_sizerButton = sizerRight; // save it to modify it later
// the 3 panes panes compose the window // the 3 panes panes compose the window
sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10); sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10); sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10); sizerTop->Add(m_sizerButton, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
// final initializations // final initializations
Reset(); Reset();
m_button = new wxButton(this, ButtonPage_Button, _T("&Press me!"));
AddButtonToSizer();
SetSizer(sizerTop); SetSizer(sizerTop);
sizerTop->Fit(this); sizerTop->Fit(this);
@@ -245,6 +256,7 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
void ButtonWidgetsPage::Reset() void ButtonWidgetsPage::Reset()
{ {
m_chkBitmap->SetValue(false);
m_chkFit->SetValue(true); m_chkFit->SetValue(true);
m_chkImage->SetValue(false); m_chkImage->SetValue(false);
m_chkDefault->SetValue(false); m_chkDefault->SetValue(false);
@@ -268,9 +280,12 @@ void ButtonWidgetsPage::CreateButton()
delete m_button; delete m_button;
} }
else
if ( label.empty() )
{ {
label = _T("&Press me!"); // creating for the first time or recreating a button after bitmap
// button
label = m_textLabel->GetValue();
} }
int flags = 0; int flags = 0;
@@ -311,9 +326,21 @@ void ButtonWidgetsPage::CreateButton()
break; break;
} }
m_button = new wxButton(this, ButtonPage_Button, label, if ( m_chkBitmap->GetValue() )
wxDefaultPosition, wxDefaultSize, {
flags); wxBitmapButton *bbtn = new wxBitmapButton(this, ButtonPage_Button,
CreateBitmap(_T("normal")));
bbtn->SetBitmapSelected(CreateBitmap(_T("pushed")));
bbtn->SetBitmapFocus(CreateBitmap(_T("focused")));
bbtn->SetBitmapDisabled(CreateBitmap(_T("disabled")));
m_button = bbtn;
}
else // normal button
{
m_button = new wxButton(this, ButtonPage_Button, label,
wxDefaultPosition, wxDefaultSize,
flags);
}
#ifdef __WXUNIVERSAL__ #ifdef __WXUNIVERSAL__
if ( m_chkImage->GetValue() ) if ( m_chkImage->GetValue() )
@@ -327,20 +354,25 @@ void ButtonWidgetsPage::CreateButton()
m_button->SetDefault(); m_button->SetDefault();
} }
if ( m_chkFit->GetValue() ) AddButtonToSizer();
{
m_sizerButton->Add(0, 0, 1, wxCENTRE);
m_sizerButton->Add(m_button, 1, wxCENTRE);
m_sizerButton->Add(0, 0, 1, wxCENTRE);
}
else
{
m_sizerButton->Add(m_button, 1, wxGROW | wxALL, 5);
}
m_sizerButton->Layout(); m_sizerButton->Layout();
} }
void ButtonWidgetsPage::AddButtonToSizer()
{
if ( m_chkFit->GetValue() )
{
m_sizerButton->AddStretchSpacer(1);
m_sizerButton->Add(m_button, wxSizerFlags(0).Centre().Border());
m_sizerButton->AddStretchSpacer(1);
}
else // take up the entire space
{
m_sizerButton->Add(m_button, wxSizerFlags(1).Expand().Border());
}
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// event handlers // event handlers
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -367,3 +399,24 @@ void ButtonWidgetsPage::OnButton(wxCommandEvent& WXUNUSED(event))
wxLogMessage(_T("Test button clicked.")); wxLogMessage(_T("Test button clicked."));
} }
// ----------------------------------------------------------------------------
// bitmap button stuff
// ----------------------------------------------------------------------------
wxBitmap ButtonWidgetsPage::CreateBitmap(const wxString& label)
{
wxBitmap bmp(180, 70); // shouldn't hardcode but it's simpler like this
wxMemoryDC dc;
dc.SelectObject(bmp);
dc.SetBackground(wxBrush(*wxWHITE));
dc.Clear();
dc.SetTextForeground(*wxBLUE);
dc.DrawLabel(wxStripMenuCodes(m_textLabel->GetLabel()) + _T("\n")
_T("(") + label + _T(" state)"),
wxArtProvider::GetBitmap(wxART_INFORMATION),
wxRect(10, 10, bmp.GetWidth() - 20, bmp.GetHeight() - 20),
wxALIGN_CENTRE);
return bmp;
}