Files
wxWidgets/src/osx/button_osx.cpp
Tobias Taschner d35e102007 Remove private wxDisclosureTriangle control.
Remove the private and undocumented control and it's usage in wxGenericCollapsiblePane. The class used a low resolution bitmap which looks bad on high resolution displays. The generic implementation using wxRendererNative::DrawCollapseButton() is better fit even on OS X.
2015-09-19 17:30:33 +02:00

141 lines
3.4 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/osx/button_osx.cpp
// Purpose: wxButton
// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
// 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)
{
// 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 && !ShouldCreatePeer() )
{
return wxControl::Create(parent, id, pos, size, style,
validator, name);
}
DontCreatePeer();
m_marginX =
m_marginY = 0;
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_BUTTON, m_windowId);
event.SetEventObject(this);
ProcessCommand(event);
return true;
}
/* static */
wxSize wxButtonBase::GetDefaultSize()
{
return wxAnyButton::GetDefaultSize();
}