Files
dolphin/Externals/wxWidgets3/src/osx/button_osx.cpp
2012-03-17 21:47:47 -07:00

193 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: button_osx.cpp 67936 2011-06-14 22:19:09Z RD $
// 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);
}
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;
}