📄 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.10 2006/09/05 20:47:23 VZ 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() ; } virtual ~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 + -