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/log.h"
#include "wx/bmpbuttn.h"
#include "wx/button.h"
#include "wx/checkbox.h"
#include "wx/radiobox.h"
@ -38,6 +39,7 @@
#include "wx/artprov.h"
#include "wx/sizer.h"
#include "wx/dcmemory.h"
#include "widgets.h"
@ -96,11 +98,19 @@ protected:
// (re)create the wxButton
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 check/radio boxes for styles
wxCheckBox *m_chkImage,
wxCheckBox *m_chkBitmap,
*m_chkImage,
*m_chkFit,
*m_chkDefault;
@ -146,6 +156,7 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
imaglist->Add(wxBitmap(button_xpm));
// init everything
m_chkBitmap =
m_chkImage =
m_chkFit =
m_chkDefault = (wxCheckBox *)NULL;
@ -165,6 +176,7 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
m_chkBitmap = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Bitmap button"));
m_chkImage = CreateCheckBoxAndAddToSizer(sizerLeft, _T("With &image"));
m_chkFit = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Fit exactly"));
m_chkDefault = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Default"));
@ -214,26 +226,25 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
_T("Change label"),
wxID_ANY,
&m_textLabel);
m_textLabel->SetValue(_T("&Press me!"));
sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
// right pane
wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
m_button = new wxButton(this, ButtonPage_Button, _T("&Press me!"));
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
m_sizerButton = new wxBoxSizer(wxHORIZONTAL);
m_sizerButton->SetMinSize(150, 0);
// the 3 panes panes compose the window
sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 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
Reset();
m_button = new wxButton(this, ButtonPage_Button, _T("&Press me!"));
AddButtonToSizer();
SetSizer(sizerTop);
sizerTop->Fit(this);
@ -245,6 +256,7 @@ ButtonWidgetsPage::ButtonWidgetsPage(wxBookCtrlBase *book,
void ButtonWidgetsPage::Reset()
{
m_chkBitmap->SetValue(false);
m_chkFit->SetValue(true);
m_chkImage->SetValue(false);
m_chkDefault->SetValue(false);
@ -268,9 +280,12 @@ void ButtonWidgetsPage::CreateButton()
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;
@ -311,9 +326,21 @@ void ButtonWidgetsPage::CreateButton()
break;
}
m_button = new wxButton(this, ButtonPage_Button, label,
wxDefaultPosition, wxDefaultSize,
flags);
if ( m_chkBitmap->GetValue() )
{
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__
if ( m_chkImage->GetValue() )
@ -327,20 +354,25 @@ void ButtonWidgetsPage::CreateButton()
m_button->SetDefault();
}
if ( m_chkFit->GetValue() )
{
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);
}
AddButtonToSizer();
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
// ----------------------------------------------------------------------------
@ -367,3 +399,24 @@ void ButtonWidgetsPage::OnButton(wxCommandEvent& WXUNUSED(event))
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;
}