// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
-// Copyright: (c) Stefan Csomory
+// Copyright: (c) Stefan Csomor
+// Licence: The wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#include "wx/bitmap.h"
#if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarBase)
+IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl)
BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase)
EVT_MOUSE_EVENTS( wxToolBar::OnMouse )
DisposeControl( m_controlHandle ) ;
}
- ControlHandle GetControlHandle() { return m_controlHandle ; }
- void SetControlHandle( ControlHandle handle ) { m_controlHandle = handle ; }
+ WXWidget GetControlHandle() { return (WXWidget) m_controlHandle ; }
+ void SetControlHandle( ControlRef handle ) { m_controlHandle = handle ; }
void SetSize(const wxSize& size) ;
void SetPosition( const wxPoint& position ) ;
{
m_controlHandle = NULL ;
}
- ControlHandle m_controlHandle ;
+ ControlRef m_controlHandle ;
wxCoord m_x;
wxCoord m_y;
};
+static const EventTypeSpec eventList[] =
+{
+ { kEventClassControl , kEventControlHit } ,
+} ;
+
+static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
+{
+ OSStatus result = eventNotHandledErr ;
+
+ wxMacCarbonEvent cEvent( event ) ;
+
+ ControlRef controlRef ;
+
+ cEvent.GetParameter( kEventParamDirectObject , &controlRef ) ;
+
+ switch( GetEventKind( event ) )
+ {
+ case kEventControlHit :
+ {
+ wxToolBarTool* tbartool = (wxToolBarTool*)data ;
+ if ( tbartool->CanBeToggled() )
+ {
+ tbartool->Toggle( GetControl32BitValue( (ControlRef) tbartool->GetControlHandle() ) ) ;
+ }
+ ((wxToolBar*)tbartool->GetToolBar())->OnLeftClick( tbartool->GetId() , tbartool -> IsToggled() ) ;
+
+ result = noErr;
+ }
+ break ;
+ default :
+ break ;
+ }
+ return result ;
+}
+
+pascal OSStatus wxMacToolBarToolEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
+{
+ OSStatus result = eventNotHandledErr ;
+
+ switch ( GetEventClass( event ) )
+ {
+ case kEventClassControl :
+ result = wxMacToolBarToolControlEventHandler( handler, event, data ) ;
+ break ;
+ default :
+ break ;
+ }
+ return result ;
+}
+
+DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacToolBarToolEventHandler )
+
// ============================================================================
// implementation
// ============================================================================
{
int x , y ;
x = y = 0 ;
- WindowRef rootwindow = (WindowRef) GetToolBar()->MacGetRootWindow() ;
+ int mac_x = position.x ;
+ int mac_y = position.y ;
+#if !TARGET_API_MAC_OSX
+ WindowRef rootwindow = (WindowRef) GetToolBar()->MacGetTopLevelWindowRef() ;
GetToolBar()->MacWindowToRootWindow( &x , &y ) ;
- int mac_x = x + position.x ;
- int mac_y = y + position.y ;
-
-
+ mac_x += x;
+ mac_y += y;
+#endif
Rect contrlRect ;
GetControlBounds( m_controlHandle , &contrlRect ) ;
int former_mac_x = contrlRect.left ;
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() )
: wxToolBarToolBase(tbar, id, label, bmpNormal, bmpDisabled, kind,
clientData, shortHelp, longHelp)
{
- Init() ;
+ Init();
- WindowRef window = (WindowRef) tbar->MacGetRootWindow() ;
+ if (id == wxID_SEPARATOR) return;
+
+ WindowRef window = (WindowRef) tbar->MacGetTopLevelWindowRef() ;
wxSize toolSize = tbar->GetToolSize() ;
Rect toolrect = { 0, 0 , toolSize.y , toolSize.x } ;
if ( info.contentType != kControlNoContent )
{
- m_controlHandle = ::NewControl( window , &toolrect , "\p" , false , 0 ,
+ m_controlHandle = ::NewControl( window , &toolrect , "\p" , true , 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 ,
+ m_controlHandle = ::NewControl( window , &toolrect , "\p" , true , 0 ,
behaviour , 0 , kControlBevelButtonNormalBevelProc , (long) this ) ;
}
+ InstallControlEventHandler( (ControlRef) m_controlHandle, GetwxMacToolBarToolEventHandlerUPP(),
+ GetEventTypeCount(eventList), eventList, this,NULL);
UMAShowControl( m_controlHandle ) ;
if ( !IsEnabled() )
{
::SetControl32BitValue( m_controlHandle , 0 ) ;
}
- ControlHandle container = (ControlHandle) tbar->MacGetContainerForEmbedding() ;
+ ControlRef container = (ControlRef) tbar->GetHandle() ;
wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
::EmbedControl( m_controlHandle , container ) ;
}
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 == -1)
- 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 ;
- }
+ if ( !wxToolBarBase::Create( parent , id , pos , size , style ) )
+ return FALSE ;
return TRUE;
}
node = node->GetNext();
}
- int separatorSize = GetToolSize().x / 4 ;
-
node = m_tools.GetFirst();
while (node)
{
m_maxWidth = maxWidth ;
}
- SetSize(maxWidth, maxHeight);
+ SetSize( maxWidth, maxHeight );
return TRUE;
}
return wxSize(m_defaultWidth + 4, m_defaultHeight + 4);
}
-void wxToolBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
+void wxToolBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) )
{
wxToolBarToolsList::Node *node;
for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
{
if ( tool->CanBeToggled() )
{
- tool->Toggle( GetControl32BitValue( (ControlHandle) control ) ) ;
+ tool->Toggle( GetControl32BitValue( (ControlRef) control ) ) ;
}
OnLeftClick( tool->GetId() , tool -> IsToggled() ) ;
break ;
else if ( tool->IsButton() )
{
if ( enable )
- UMAActivateControl( tool->GetControlHandle() ) ;
+ UMAActivateControl( (ControlRef) tool->GetControlHandle() ) ;
else
- UMADeactivateControl( tool->GetControlHandle() ) ;
+ UMADeactivateControl( (ControlRef) tool->GetControlHandle() ) ;
}
}
wxToolBarTool *tool = (wxToolBarTool *)t;
if ( tool->IsButton() )
{
- ::SetControl32BitValue( tool->GetControlHandle() , toggle ) ;
+ ::SetControl32BitValue( (ControlRef) tool->GetControlHandle() , toggle ) ;
}
}
{
wxPaintDC dc(this) ;
wxMacPortSetter helper(&dc) ;
+ int w, h ;
+ GetSize( &w , &h ) ;
Rect toolbarrect = { dc.YLOG2DEVMAC(0) , dc.XLOG2DEVMAC(0) ,
- dc.YLOG2DEVMAC(m_height) , dc.XLOG2DEVMAC(m_width) } ;
+ dc.YLOG2DEVMAC(h) , dc.XLOG2DEVMAC(w) } ;
+/*
+ if( toolbarrect.left < 0 )
+ toolbarrect.left = 0 ;
+ if ( toolbarrect.top < 0 )
+ toolbarrect.top = 0 ;
+*/
UMADrawThemePlacard( &toolbarrect , IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
- {
- wxToolBarToolsList::Node *node;
- for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
- {
- wxToolBarTool* tool = (wxToolBarTool*) node->GetData() ;
- if ( tool->IsButton() )
- {
- UMADrawControl( tool->GetControlHandle() ) ;
- }
- }
- }
+
+ event.Skip() ;
}
void wxToolBar::OnMouse( wxMouseEvent &event )
MacClientToRootWindow( &x , &y ) ;
- ControlHandle control ;
+ ControlRef control ;
Point localwhere ;
SInt16 controlpart ;
- WindowRef window = (WindowRef) MacGetRootWindow() ;
+ WindowRef window = (WindowRef) MacGetTopLevelWindowRef() ;
localwhere.h = x ;
localwhere.v = y ;
if ( control && ::IsControlActive( control ) )
{
{
- if ( controlpart == kControlIndicatorPart && !UMAHasAppearance() )
- controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) NULL ) ;
- else
- controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ;
+ controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ;
wxTheApp->s_lastMouseDown = 0 ;
- if ( controlpart && ! ( ( UMAHasAppearance() || (controlpart != kControlIndicatorPart) )
- && (IsKindOf( CLASSINFO( wxScrollBar ) ) ) ) ) // otherwise we will get the event twice
+ if ( control && controlpart != kControlNoPart ) // otherwise we will get the event twice
{
- MacHandleControlClick( control , controlpart ) ;
+ MacHandleControlClick((WXWidget) control , controlpart , false /* not down anymore */ ) ;
}
}
}