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:
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user