X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/423939b29aab373e5da156c857265d7a5604f613..53c43278a9d71e15f43cbe359abea50d3775d8ad:/src/osx/button_osx.cpp diff --git a/src/osx/button_osx.cpp b/src/osx/button_osx.cpp index 22f2ef156b..52208f4ed2 100644 --- a/src/osx/button_osx.cpp +++ b/src/osx/button_osx.cpp @@ -34,6 +34,18 @@ bool wxButton::Create(wxWindow *parent, const wxValidator& validator, const wxString& name) { + // FIXME: this hack is needed because we're called from + // wxBitmapButton::Create() with this style and we currently use a + // different wxWidgetImpl method (CreateBitmapButton() rather than + // CreateButton()) for creating bitmap buttons, but we really ought + // to unify the creation of buttons of all kinds and then remove + // this check + if ( style & wxBU_NOTEXT ) + { + return wxControl::Create(parent, id, pos, size, style, + validator, name); + } + wxString label(lbl); if (label.empty() && wxIsStockID(id) && !(id == wxID_HELP)) label = wxGetStockLabel(id); @@ -43,8 +55,9 @@ bool wxButton::Create(wxWindow *parent, if ( !wxButtonBase::Create(parent, id, pos, size, style, validator, name) ) return false; - m_labelOrig = m_label = label ; - + m_labelOrig = + m_label = label ; + m_peer = wxWidgetImpl::CreateButton( this, parent, id, label, pos, size, style, GetExtraStyle() ); MacPostControlCreate( pos, size ); @@ -52,6 +65,42 @@ bool wxButton::Create(wxWindow *parent, return true; } +void wxButton::SetLabel(const wxString& label) +{ + if ( GetId() == wxID_HELP || HasFlag(wxBU_NOTEXT) ) + { + // just store the label internally but don't really use it for the + // button + m_labelOrig = + m_label = label; + return; + } + + wxButtonBase::SetLabel(label); +} + +// there is no support for button bitmaps in wxOSX/Carbon so there is no need +// for these methods there +#if wxOSX_USE_COCOA + +wxBitmap wxButton::DoGetBitmap(State which) const +{ + return which == State_Normal ? m_peer->GetBitmap() : wxBitmap(); +} + +void wxButton::DoSetBitmap(const wxBitmap& bitmap, State which) +{ + if ( which == State_Normal ) + m_peer->SetBitmap(bitmap); +} + +void wxButton::DoSetBitmapPosition(wxDirection dir) +{ + m_peer->SetBitmapPosition(dir); +} + +#endif // wxOSX_USE_COCOA + wxWindow *wxButton::SetDefault() { wxWindow *btnOldDefault = wxButtonBase::SetDefault(); @@ -66,13 +115,13 @@ wxWindow *wxButton::SetDefault() return btnOldDefault; } -void wxButton::Command (wxCommandEvent & event) +void wxButton::Command (wxCommandEvent & WXUNUSED(event)) { m_peer->PerformClick() ; // ProcessCommand(event); } -bool wxButton::OSXHandleClicked( double timestampsec ) +bool wxButton::OSXHandleClicked( double WXUNUSED(timestampsec) ) { wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId); event.SetEventObject(this); @@ -95,9 +144,9 @@ bool wxDisclosureTriangle::Create(wxWindow *parent, wxWindowID id, const wxStrin m_peer = 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 if again + // passing the text in the param doesn't seem to work, so lets do it again SetLabel( label ); - + return true; } @@ -111,7 +160,7 @@ bool wxDisclosureTriangle::IsOpen() const return m_peer->GetValue() == 1; } -bool wxDisclosureTriangle::OSXHandleClicked( double timestampsec ) +bool wxDisclosureTriangle::OSXHandleClicked( double WXUNUSED(timestampsec) ) { // Just emit button event for now wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId); @@ -123,6 +172,14 @@ bool wxDisclosureTriangle::OSXHandleClicked( double timestampsec ) wxSize wxDisclosureTriangle::DoGetBestSize() const { - return wxSize(16,16); + wxSize size = wxWindow::DoGetBestSize(); + + // under Carbon the base class GetBestSize() implementation doesn't seem to + // take the label into account at all, correct for it here +#if wxOSX_USE_CARBON + size.x += GetTextExtent(GetLabel()).x; +#endif // wxOSX_USE_CARBON + + return size; }