Fix handling of help buttons with non-empty label under OS X.

Creating a button with wxID_HELP and a non-empty label used to always show
this label, even if it was just a standard "Help" or "&Help". This didn't work
at all as the help buttons under OS X are too small to show any label.

To fix this, use normal buttons, not help ones, if a really custom label is
used to ensure that it can be seen. And to still use the correct help buttons
in as many cases as possible, ignore the standard "Help" label and its
variants and don't show it at all.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65258 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-08-11 16:03:46 +00:00
parent 34a1414265
commit 01495abf87
3 changed files with 55 additions and 9 deletions

View File

@@ -17,12 +17,31 @@
#include "wx/panel.h"
#include "wx/toplevel.h"
#include "wx/dcclient.h"
#include "wx/stattext.h"
#endif
#include "wx/stockitem.h"
#include "wx/osx/private.h"
namespace
{
// Returns true only if the id is wxID_HELP and the label is "Help" or empty.
bool IsHelpButtonWithStandardLabel(wxWindowID id, const wxString& label)
{
if ( id != wxID_HELP )
return false;
if ( label.empty() )
return true;
const wxString labelText = wxStaticText::GetLabelText(label);
return labelText == "Help" || labelText == _("Help");
}
} // anonymous namespace
IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
BEGIN_EVENT_TABLE(wxButton, wxControl)
@@ -32,7 +51,7 @@ END_EVENT_TABLE()
bool wxButton::Create(wxWindow *parent,
wxWindowID id,
const wxString& lbl,
const wxString& labelOrig,
const wxPoint& pos,
const wxSize& size,
long style,
@@ -54,9 +73,15 @@ bool wxButton::Create(wxWindow *parent,
validator, name);
}
wxString label(lbl);
if (label.empty() && wxIsStockID(id) && !(id == wxID_HELP))
label = wxGetStockLabel(id);
wxString label;
// Ignore the standard label for help buttons if possible, they use "?"
// label under Mac which looks better.
if ( !IsHelpButtonWithStandardLabel(id, labelOrig) )
{
label = labelOrig.empty() && wxIsStockID(id) ? wxGetStockLabel(id)
: labelOrig;
}
m_macIsUserPane = false ;
@@ -75,7 +100,13 @@ bool wxButton::Create(wxWindow *parent,
void wxButton::SetLabel(const wxString& label)
{
if ( GetId() == wxID_HELP || HasFlag(wxBU_NOTEXT) )
if ( IsHelpButtonWithStandardLabel(GetId(), label) )
{
// ignore the standard label for the help buttons, it's not used
return;
}
if ( HasFlag(wxBU_NOTEXT) )
{
// just store the label internally but don't really use it for the
// button