X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/06bb8d923df9ce02e522c661a11ff685466067a6..60372b0d54379701d62edf5595a7dc25c48330e1:/src/osx/button_osx.cpp diff --git a/src/osx/button_osx.cpp b/src/osx/button_osx.cpp index 2fef7837da..6984a9af08 100644 --- a/src/osx/button_osx.cpp +++ b/src/osx/button_osx.cpp @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: button.cpp 54845 2008-07-30 14:52:41Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,28 +17,42 @@ #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" -IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl) +namespace +{ -BEGIN_EVENT_TABLE(wxButton, wxControl) - EVT_ENTER_WINDOW(wxButton::OnEnterWindow) - EVT_LEAVE_WINDOW(wxButton::OnLeaveWindow) -END_EVENT_TABLE() +// 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 bool wxButton::Create(wxWindow *parent, wxWindowID id, - const wxString& lbl, + const wxString& labelOrig, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { + DontCreatePeer(); + m_marginX = m_marginY = 0; @@ -54,11 +68,16 @@ 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 ; if ( !wxButtonBase::Create(parent, id, pos, size, style, validator, name) ) return false; @@ -66,7 +85,7 @@ bool wxButton::Create(wxWindow *parent, m_labelOrig = m_label = label ; - m_peer = wxWidgetImpl::CreateButton( this, parent, id, label, pos, size, style, GetExtraStyle() ); + SetPeer(wxWidgetImpl::CreateButton( this, parent, id, label, pos, size, style, GetExtraStyle() )); MacPostControlCreate( pos, size ); @@ -75,42 +94,13 @@ bool wxButton::Create(wxWindow *parent, void wxButton::SetLabel(const wxString& label) { - if ( GetId() == wxID_HELP || HasFlag(wxBU_NOTEXT) ) + if ( IsHelpButtonWithStandardLabel(GetId(), label) ) { - // just store the label internally but don't really use it for the - // button - m_labelOrig = - m_label = label; + // ignore the standard label for the help buttons, it's not used return; } - wxButtonBase::SetLabel(label); -} - -wxBitmap wxButton::DoGetBitmap(State which) const -{ - return m_bitmaps[which]; -} - -void wxButton::DoSetBitmap(const wxBitmap& bitmap, State which) -{ - m_bitmaps[which] = bitmap; - - if ( which == State_Normal ) - m_peer->SetBitmap(bitmap); - else if ( which == State_Pressed ) - { - wxButtonImpl* bi = dynamic_cast (m_peer); - if ( bi ) - bi->SetPressedBitmap(bitmap); - } - InvalidateBestSize(); -} - -void wxButton::DoSetBitmapPosition(wxDirection dir) -{ - m_peer->SetBitmapPosition(dir); - InvalidateBestSize(); + wxAnyButton::SetLabel(label); } wxWindow *wxButton::SetDefault() @@ -122,29 +112,17 @@ wxWindow *wxButton::SetDefault() btnOldDefault->GetPeer()->SetDefaultButton( false ); } - m_peer->SetDefaultButton( true ); + GetPeer()->SetDefaultButton( true ); return btnOldDefault; } void wxButton::Command (wxCommandEvent & WXUNUSED(event)) { - m_peer->PerformClick() ; + GetPeer()->PerformClick() ; // ProcessCommand(event); } -void wxButton::OnEnterWindow( wxMouseEvent& WXUNUSED(event)) -{ - if ( DoGetBitmap( State_Current ).IsOk() ) - m_peer->SetBitmap( DoGetBitmap( State_Current ) ); -} - -void wxButton::OnLeaveWindow( wxMouseEvent& WXUNUSED(event)) -{ - if ( DoGetBitmap( State_Current ).IsOk() ) - m_peer->SetBitmap( DoGetBitmap( State_Normal ) ); -} - bool wxButton::OSXHandleClicked( double WXUNUSED(timestampsec) ) { wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId); @@ -153,22 +131,27 @@ bool wxButton::OSXHandleClicked( double WXUNUSED(timestampsec) ) return true; } +/* static */ +wxSize wxButtonBase::GetDefaultSize() +{ + return wxAnyButton::GetDefaultSize(); +} + //------------------------------------------------------- // wxDisclosureTriangle //------------------------------------------------------- bool wxDisclosureTriangle::Create(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos, const wxSize& size, long style,const wxValidator& validator, const wxString& name ) -{ - m_macIsUserPane = false ; - +{ + DontCreatePeer(); if ( !wxControl::Create(parent, id, pos, size, style, validator, name) ) return false; - m_peer = wxWidgetImpl::CreateDisclosureTriangle(this, parent, id, label, pos, size, style, GetExtraStyle() ); + SetPeer(wxWidgetImpl::CreateDisclosureTriangle(this, parent, id, label, pos, size, style, GetExtraStyle() )); MacPostControlCreate( pos, size ); - // passing the text in the param doesn't seem to work, so lets do it again + // passing the text in the param doesn't seem to work, so let's do it again SetLabel( label ); return true; @@ -176,12 +159,12 @@ bool wxDisclosureTriangle::Create(wxWindow *parent, wxWindowID id, const wxStrin void wxDisclosureTriangle::SetOpen( bool open ) { - m_peer->SetValue( open ? 1 : 0 ); + GetPeer()->SetValue( open ? 1 : 0 ); } bool wxDisclosureTriangle::IsOpen() const { - return m_peer->GetValue() == 1; + return GetPeer()->GetValue() == 1; } bool wxDisclosureTriangle::OSXHandleClicked( double WXUNUSED(timestampsec) )