Files
wxWidgets/src/osx/button_osx.cpp
Vadim Zeitlin 5af80d3112 No changes, just rename OSXSetAcceleratorFromLabel().
Make the name of the function more general and call it
OSXUpdateAfterLabelChange() as it's supposed to be called whenever the label
changes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72885 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-11-04 23:50:28 +00:00

196 lines
5.0 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/osx/button_osx.cpp
// Purpose: wxButton
// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#include "wx/button.h"
#ifndef WX_PRECOMP
#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
bool wxButton::Create(wxWindow *parent,
wxWindowID id,
const wxString& labelOrig,
const wxPoint& pos,
const wxSize& size,
long style,
const wxValidator& validator,
const wxString& name)
{
DontCreatePeer();
m_marginX =
m_marginY = 0;
// 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;
// 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;
}
if ( !wxButtonBase::Create(parent, id, pos, size, style, validator, name) )
return false;
m_labelOrig =
m_label = label ;
SetPeer(wxWidgetImpl::CreateButton( this, parent, id, label, pos, size, style, GetExtraStyle() ));
MacPostControlCreate( pos, size );
return true;
}
void wxButton::SetLabel(const wxString& label)
{
if ( IsHelpButtonWithStandardLabel(GetId(), label) )
{
// ignore the standard label for the help buttons, it's not used
return;
}
wxAnyButton::SetLabel(label);
#if wxOSX_USE_COCOA
OSXUpdateAfterLabelChange(label);
#endif
}
wxWindow *wxButton::SetDefault()
{
wxWindow *btnOldDefault = wxButtonBase::SetDefault();
if ( btnOldDefault )
{
btnOldDefault->GetPeer()->SetDefaultButton( false );
}
GetPeer()->SetDefaultButton( true );
return btnOldDefault;
}
void wxButton::Command (wxCommandEvent & WXUNUSED(event))
{
GetPeer()->PerformClick() ;
// ProcessCommand(event);
}
bool wxButton::OSXHandleClicked( double WXUNUSED(timestampsec) )
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId);
event.SetEventObject(this);
ProcessCommand(event);
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 )
{
DontCreatePeer();
if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )
return false;
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 let's do it again
SetLabel( label );
return true;
}
void wxDisclosureTriangle::SetOpen( bool open )
{
GetPeer()->SetValue( open ? 1 : 0 );
}
bool wxDisclosureTriangle::IsOpen() const
{
return GetPeer()->GetValue() == 1;
}
bool wxDisclosureTriangle::OSXHandleClicked( double WXUNUSED(timestampsec) )
{
// Just emit button event for now
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId);
event.SetEventObject(this);
ProcessCommand(event);
return true;
}
wxSize wxDisclosureTriangle::DoGetBestSize() const
{
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;
}