#include "wx/dcscreen.h"
#endif
+#include "wx/stockitem.h"
+#include "wx/tokenzr.h"
#include "wx/msw/private.h"
// ----------------------------------------------------------------------------
wxFLAGS_MEMBER(wxBORDER_RAISED)
wxFLAGS_MEMBER(wxBORDER_STATIC)
wxFLAGS_MEMBER(wxBORDER_NONE)
-
+
// old style border flags
wxFLAGS_MEMBER(wxSIMPLE_BORDER)
wxFLAGS_MEMBER(wxSUNKEN_BORDER)
IMPLEMENT_DYNAMIC_CLASS_XTI(wxButton, wxControl,"wx/button.h")
wxBEGIN_PROPERTIES_TABLE(wxButton)
- wxEVENT_PROPERTY( Click , wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEvent)
+ wxEVENT_PROPERTY( Click , wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEvent)
- wxPROPERTY( Font , wxFont , SetFont , GetFont , EMPTY_MACROVALUE, 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
- wxPROPERTY( Label, wxString , SetLabel, GetLabel, wxString(), 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+ wxPROPERTY( Font , wxFont , SetFont , GetFont , EMPTY_MACROVALUE, 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
+ wxPROPERTY( Label, wxString , SetLabel, GetLabel, wxString(), 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
wxPROPERTY_FLAGS( WindowStyle , wxButtonStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style
bool wxButton::Create(wxWindow *parent,
wxWindowID id,
- const wxString& label,
+ const wxString& lbl,
const wxPoint& pos,
const wxSize& size,
long style,
const wxValidator& validator,
const wxString& name)
{
+ wxString label(lbl);
+ if (label.empty() && wxIsStockID(id))
+ {
+ // On Windows, some buttons aren't supposed to have
+ // mnemonics, so strip them out.
+
+ label = wxGetStockLabel(id
+#if defined(__WXMSW__) || defined(__WXWINCE__)
+ , ( id != wxID_OK &&
+ id != wxID_CANCEL &&
+ id != wxID_CLOSE )
+#endif
+ );
+ }
+
if ( !CreateControl(parent, id, pos, size, style, validator, name) )
- return FALSE;
+ return false;
WXDWORD exstyle;
WXDWORD msStyle = MSWGetStyle(style, &exstyle);
wxSize wxButton::DoGetBestSize() const
{
- int wBtn;
- GetTextExtent(wxGetWindowText(GetHWND()), &wBtn, NULL);
+ wxClientDC dc(wx_const_cast(wxButton *, this));
+ dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
- int wChar, hChar;
- wxGetCharSize(GetHWND(), &wChar, &hChar, &GetFont());
+ wxCoord wBtn,
+ hBtn;
+ dc.GetMultiLineTextExtent(GetLabel(), &wBtn, &hBtn);
// add a margin -- the button is wider than just its label
- wBtn += 3*wChar;
-
- // the button height is proportional to the height of the font used
- int hBtn = BUTTON_HEIGHT_FROM_CHAR_HEIGHT(hChar);
+ wBtn += 3*GetCharWidth();
+ hBtn = BUTTON_HEIGHT_FROM_CHAR_HEIGHT(hBtn);
// all buttons have at least the standard size unless the user explicitly
// wants them to be of smaller size and used wxBU_EXACTFIT style when
wxWindow *winOldDefault = parent->SetDefaultItem(this);
// ... and Windows
- SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), FALSE);
- SetDefaultStyle(this, TRUE);
+ SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), false);
+ SetDefaultStyle(this, true);
}
// set this button as being currently default
wxWindow *winOldDefault = parent->GetDefaultItem();
parent->SetTmpDefaultItem(this);
- SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), FALSE);
- SetDefaultStyle(this, TRUE);
+ SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), false);
+ SetDefaultStyle(this, true);
}
// unset this button as currently default, it may still stay permanent default
wxWindow *winOldDefault = parent->GetDefaultItem();
- SetDefaultStyle(this, FALSE);
- SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), TRUE);
+ SetDefaultStyle(this, false);
+ SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), true);
}
/* static */
bool wxButton::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
{
- bool processed = FALSE;
+ bool processed = false;
switch ( param )
{
// NOTE: Apparently older versions (NT 4?) of the common controls send
// BN_DOUBLECLICKED but not a second BN_CLICKED for owner-drawn
- // buttons, so in order to send two EVET_BUTTON events we should
+ // buttons, so in order to send two EVT_BUTTON events we should
// catch both types. Currently (Feb 2003) up-to-date versions of
// win98, win2k and winXP all send two BN_CLICKED messages for
// all button types, so we don't catch BN_DOUBLECLICKED anymore
WXLRESULT wxButton::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
- // when we receive focus, we want to temporary become the default button in
+ // when we receive focus, we want to temporarily become the default button in
// our parent panel so that pressing "Enter" would activate us -- and when
// losing it we should restore the previous default button as well
if ( nMsg == WM_SETFOCUS )
if ( !wxControl::SetBackgroundColour(colour) )
{
// nothing to do
- return FALSE;
+ return false;
}
MakeOwnerDrawn();
Refresh();
- return TRUE;
+ return true;
}
bool wxButton::SetForegroundColour(const wxColour &colour)
if ( !wxControl::SetForegroundColour(colour) )
{
// nothing to do
- return FALSE;
+ return false;
}
MakeOwnerDrawn();
Refresh();
- return TRUE;
+ return true;
}
/*
DrawRect(hdc, r);
(void)SelectObject(hdc, hpenGrey);
- InflateRect(&r, -1, -1);
+ ::InflateRect(&r, -1, -1);
DrawRect(hdc, r);
}
{
DrawRect(hdc, r);
- InflateRect(&r, -1, -1);
+ ::InflateRect(&r, -1, -1);
}
wxDrawLine(hdc, r.left, r.bottom, r.right, r.bottom);
::DeleteObject(hbrushBackground);
- return TRUE;
+ return true;
}
#endif // __WIN32__