📄 toolbar.cpp
字号:
/////////////////////////////////////////////////////////////////////////////
// Name: src/mac/classic/toolbar.cpp
// Purpose: wxToolBar
// Author: Stefan Csomor
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id: toolbar.cpp,v 1.9 2006/06/14 10:02:01 ABX Exp $
// Copyright: (c) Stefan Csomor
// Licence: The wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#if wxUSE_TOOLBAR
#include "wx/toolbar.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/notebook.h"
#include "wx/tabctrl.h"
IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl)
BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase)
EVT_MOUSE_EVENTS( wxToolBar::OnMouse )
EVT_PAINT( wxToolBar::OnPaint )
END_EVENT_TABLE()
#include "wx/mac/uma.h"
#include "wx/geometry.h"
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
class wxToolBarTool : public wxToolBarToolBase
{
public:
wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,
const wxString& longHelp) ;
wxToolBarTool(wxToolBar *tbar, wxControl *control)
: wxToolBarToolBase(tbar, control)
{
Init() ;
}
~wxToolBarTool()
{
if ( m_controlHandle )
DisposeControl( m_controlHandle ) ;
}
ControlHandle GetControlHandle() { return m_controlHandle ; }
void SetControlHandle( ControlHandle handle ) { m_controlHandle = handle ; }
void SetSize(const wxSize& size) ;
void SetPosition( const wxPoint& position ) ;
wxSize GetSize() const
{
if ( IsControl() )
{
return GetControl()->GetSize() ;
}
else if ( IsButton() )
{
return GetToolBar()->GetToolSize() ;
}
else
{
wxSize sz = GetToolBar()->GetToolSize() ;
sz.x /= 4 ;
sz.y /= 4 ;
return sz ;
}
}
wxPoint GetPosition() const
{
return wxPoint(m_x, m_y);
}
private :
void Init()
{
m_controlHandle = NULL ;
}
ControlHandle m_controlHandle ;
wxCoord m_x;
wxCoord m_y;
};
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxToolBarTool
// ----------------------------------------------------------------------------
void wxToolBarTool::SetSize(const wxSize& size)
{
if ( IsControl() )
{
GetControl()->SetSize( size ) ;
}
}
void wxToolBarTool::SetPosition(const wxPoint& position)
{
m_x = position.x;
m_y = position.y;
if ( IsButton() )
{
int x , y ;
x = y = 0 ;
WindowRef rootwindow = (WindowRef) GetToolBar()->MacGetRootWindow() ;
GetToolBar()->MacWindowToRootWindow( &x , &y ) ;
int mac_x = x + position.x ;
int mac_y = y + position.y ;
Rect contrlRect ;
GetControlBounds( m_controlHandle , &contrlRect ) ;
int former_mac_x = contrlRect.left ;
int former_mac_y = contrlRect.top ;
wxSize sz = GetToolBar()->GetToolSize() ;
if ( mac_x != former_mac_x || mac_y != former_mac_y )
{
{
Rect inval = { former_mac_y , former_mac_x , former_mac_y + sz.y , former_mac_x + sz.x } ;
InvalWindowRect( rootwindow , &inval ) ;
}
UMAMoveControl( m_controlHandle , mac_x , mac_y ) ;
{
Rect inval = { mac_y , mac_x , mac_y + sz.y , mac_x + sz.x } ;
InvalWindowRect( rootwindow , &inval ) ;
}
}
}
else if ( IsControl() )
{
GetControl()->Move( position ) ;
}
}
const short kwxMacToolBarToolDefaultWidth = 24 ;
const short kwxMacToolBarToolDefaultHeight = 22 ;
const short kwxMacToolBarTopMargin = 2 ;
const short kwxMacToolBarLeftMargin = 2 ;
wxToolBarTool::wxToolBarTool(wxToolBar *tbar,
int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,
const wxString& longHelp)
: wxToolBarToolBase(tbar, id, label, bmpNormal, bmpDisabled, kind,
clientData, shortHelp, longHelp)
{
Init();
if (id == wxID_SEPARATOR) return;
WindowRef window = (WindowRef) tbar->MacGetRootWindow() ;
wxSize toolSize = tbar->GetToolSize() ;
Rect toolrect = { 0, 0 , toolSize.y , toolSize.x } ;
ControlButtonContentInfo info ;
wxMacCreateBitmapButton( &info , GetNormalBitmap() ) ;
SInt16 behaviour = kControlBehaviorOffsetContents ;
if ( CanBeToggled() )
behaviour += kControlBehaviorToggles ;
if ( info.contentType != kControlNoContent )
{
m_controlHandle = ::NewControl( window , &toolrect , "\p" , false , 0 ,
behaviour + info.contentType , 0 , kControlBevelButtonNormalBevelProc , (long) this ) ;
::SetControlData( m_controlHandle , kControlButtonPart , kControlBevelButtonContentTag , sizeof(info) , (char*) &info ) ;
}
else
{
m_controlHandle = ::NewControl( window , &toolrect , "\p" , false , 0 ,
behaviour , 0 , kControlBevelButtonNormalBevelProc , (long) this ) ;
}
UMAShowControl( m_controlHandle ) ;
if ( !IsEnabled() )
{
UMADeactivateControl( m_controlHandle ) ;
}
if ( CanBeToggled() && IsToggled() )
{
::SetControl32BitValue( m_controlHandle , 1 ) ;
}
else
{
::SetControl32BitValue( m_controlHandle , 0 ) ;
}
ControlHandle container = (ControlHandle) tbar->MacGetContainerForEmbedding() ;
wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
::EmbedControl( m_controlHandle , container ) ;
}
wxToolBarToolBase *wxToolBar::CreateTool(int id,
const wxString& label,
const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled,
wxItemKind kind,
wxObject *clientData,
const wxString& shortHelp,
const wxString& longHelp)
{
return new wxToolBarTool(this, id, label, bmpNormal, bmpDisabled, kind,
clientData, shortHelp, longHelp);
}
wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control)
{
return new wxToolBarTool(this, control);
}
void wxToolBar::Init()
{
m_maxWidth = -1;
m_maxHeight = -1;
m_defaultWidth = kwxMacToolBarToolDefaultWidth;
m_defaultHeight = kwxMacToolBarToolDefaultHeight;
}
bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size,
long style, const wxString& name)
{
int x = pos.x;
int y = pos.y;
int width = size.x;
int height = size.y;
if (width <= 0)
width = 100;
if (height <= 0)
height = 30;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
SetName(name);
m_windowStyle = style;
parent->AddChild(this);
m_backgroundColour = parent->GetBackgroundColour() ;
m_foregroundColour = parent->GetForegroundColour() ;
if (id == wxID_ANY)
m_windowId = NewControlId();
else
m_windowId = id;
{
m_width = size.x ;
m_height = size.y ;
int x = pos.x ;
int y = pos.y ;
AdjustForParentClientOrigin(x, y, wxSIZE_USE_EXISTING);
m_x = x ;
m_y = y ;
}
return true;
}
wxToolBar::~wxToolBar()
{
// we must refresh the frame size when the toolbar is deleted but the frame
// is not - otherwise toolbar leaves a hole in the place it used to occupy
}
bool wxToolBar::Realize()
{
if (m_tools.GetCount() == 0)
return false;
int x = m_xMargin + kwxMacToolBarLeftMargin ;
int y = m_yMargin + kwxMacToolBarTopMargin ;
int tw, th;
GetSize(& tw, & th);
int maxWidth = 0 ;
int maxHeight = 0 ;
int maxToolWidth = 0;
int maxToolHeight = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -