making removal and re-inserting possible
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33169 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -85,6 +85,8 @@ public:
|
|||||||
void SetSize(const wxSize& size) ;
|
void SetSize(const wxSize& size) ;
|
||||||
void SetPosition( const wxPoint& position ) ;
|
void SetPosition( const wxPoint& position ) ;
|
||||||
|
|
||||||
|
void ClearControl() { m_control = NULL ; }
|
||||||
|
|
||||||
wxSize GetSize() const
|
wxSize GetSize() const
|
||||||
{
|
{
|
||||||
if ( IsControl() )
|
if ( IsControl() )
|
||||||
@@ -339,64 +341,6 @@ wxToolBarTool::wxToolBarTool(wxToolBar *tbar,
|
|||||||
clientData, shortHelp, longHelp)
|
clientData, shortHelp, longHelp)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
WindowRef window = (WindowRef) tbar->MacGetTopLevelWindowRef() ;
|
|
||||||
wxSize toolSize = tbar->GetToolSize() ;
|
|
||||||
Rect toolrect = { 0, 0 , toolSize.y , toolSize.x } ;
|
|
||||||
|
|
||||||
if ( id == wxID_SEPARATOR )
|
|
||||||
{
|
|
||||||
toolSize.x /= 4 ;
|
|
||||||
toolSize.y /= 4 ;
|
|
||||||
if ( GetToolBar()->GetWindowStyleFlag() & wxTB_VERTICAL )
|
|
||||||
{
|
|
||||||
toolrect.bottom = toolSize.y ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
toolrect.right = toolSize.x ;
|
|
||||||
}
|
|
||||||
#ifdef __WXMAC_OSX__
|
|
||||||
// in flat style we need a visual separator
|
|
||||||
CreateSeparatorControl( window , &toolrect , &m_controlHandle ) ;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ControlButtonContentInfo info ;
|
|
||||||
wxMacCreateBitmapButton( &info , GetNormalBitmap() , kControlContentIconRef ) ;
|
|
||||||
|
|
||||||
#ifdef __WXMAC_OSX__
|
|
||||||
CreateIconControl( window , &toolrect , &info , false , &m_controlHandle ) ;
|
|
||||||
#else
|
|
||||||
SInt16 behaviour = kControlBehaviorOffsetContents ;
|
|
||||||
if ( CanBeToggled() )
|
|
||||||
behaviour += kControlBehaviorToggles ;
|
|
||||||
CreateBevelButtonControl( window , &toolrect , CFSTR("") , kControlBevelButtonNormalBevel , behaviour , &info ,
|
|
||||||
0 , 0 , 0 , &m_controlHandle ) ;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wxMacReleaseBitmapButton( &info ) ;
|
|
||||||
/*
|
|
||||||
SetBevelButtonTextPlacement( m_controlHandle , kControlBevelButtonPlaceBelowGraphic ) ;
|
|
||||||
UMASetControlTitle( m_controlHandle , label , wxFont::GetDefaultEncoding() ) ;
|
|
||||||
*/
|
|
||||||
|
|
||||||
InstallControlEventHandler( (ControlRef) m_controlHandle, GetwxMacToolBarToolEventHandlerUPP(),
|
|
||||||
GetEventTypeCount(eventList), eventList, this,NULL);
|
|
||||||
|
|
||||||
}
|
|
||||||
ControlRef container = (ControlRef) tbar->GetHandle() ;
|
|
||||||
wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
|
|
||||||
if ( m_controlHandle )
|
|
||||||
{
|
|
||||||
UMAShowControl( m_controlHandle ) ;
|
|
||||||
::EmbedControl( m_controlHandle , container ) ;
|
|
||||||
}
|
|
||||||
if ( CanBeToggled() && IsToggled() )
|
|
||||||
{
|
|
||||||
UpdateToggleImage( true ) ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -632,8 +576,85 @@ void wxToolBar::DoToggleTool(wxToolBarToolBase *t, bool toggle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos),
|
bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos),
|
||||||
wxToolBarToolBase *tool)
|
wxToolBarToolBase *toolBase)
|
||||||
{
|
{
|
||||||
|
wxToolBarTool* tool = wx_static_cast( wxToolBarTool* , toolBase ) ;
|
||||||
|
|
||||||
|
WindowRef window = (WindowRef) MacGetTopLevelWindowRef() ;
|
||||||
|
wxSize toolSize = GetToolSize() ;
|
||||||
|
Rect toolrect = { 0, 0 , toolSize.y , toolSize.x } ;
|
||||||
|
ControlRef controlHandle = NULL ;
|
||||||
|
|
||||||
|
switch( tool->GetStyle() )
|
||||||
|
{
|
||||||
|
case wxTOOL_STYLE_SEPARATOR :
|
||||||
|
{
|
||||||
|
wxASSERT( tool->GetControlHandle() == NULL ) ;
|
||||||
|
toolSize.x /= 4 ;
|
||||||
|
toolSize.y /= 4 ;
|
||||||
|
if ( GetWindowStyleFlag() & wxTB_VERTICAL )
|
||||||
|
{
|
||||||
|
toolrect.bottom = toolSize.y ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
toolrect.right = toolSize.x ;
|
||||||
|
}
|
||||||
|
#ifdef __WXMAC_OSX__
|
||||||
|
// in flat style we need a visual separator
|
||||||
|
CreateSeparatorControl( window , &toolrect , &controlHandle ) ;
|
||||||
|
tool->SetControlHandle( controlHandle ) ;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
case wxTOOL_STYLE_BUTTON :
|
||||||
|
{
|
||||||
|
wxASSERT( tool->GetControlHandle() == NULL ) ;
|
||||||
|
ControlButtonContentInfo info ;
|
||||||
|
wxMacCreateBitmapButton( &info , tool->GetNormalBitmap() , kControlContentIconRef ) ;
|
||||||
|
|
||||||
|
#ifdef __WXMAC_OSX__
|
||||||
|
CreateIconControl( window , &toolrect , &info , false , &controlHandle ) ;
|
||||||
|
#else
|
||||||
|
SInt16 behaviour = kControlBehaviorOffsetContents ;
|
||||||
|
if ( CanBeToggled() )
|
||||||
|
behaviour += kControlBehaviorToggles ;
|
||||||
|
CreateBevelButtonControl( window , &toolrect , CFSTR("") , kControlBevelButtonNormalBevel , behaviour , &info ,
|
||||||
|
0 , 0 , 0 , &controlHandle ) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxMacReleaseBitmapButton( &info ) ;
|
||||||
|
/*
|
||||||
|
SetBevelButtonTextPlacement( m_controlHandle , kControlBevelButtonPlaceBelowGraphic ) ;
|
||||||
|
UMASetControlTitle( m_controlHandle , label , wxFont::GetDefaultEncoding() ) ;
|
||||||
|
*/
|
||||||
|
|
||||||
|
InstallControlEventHandler( (ControlRef) controlHandle, GetwxMacToolBarToolEventHandlerUPP(),
|
||||||
|
GetEventTypeCount(eventList), eventList, tool,NULL);
|
||||||
|
|
||||||
|
tool->SetControlHandle( controlHandle ) ;
|
||||||
|
}
|
||||||
|
break ;
|
||||||
|
case wxTOOL_STYLE_CONTROL :
|
||||||
|
wxASSERT( tool->GetControl() != NULL ) ;
|
||||||
|
// right now there's nothing to do here
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( controlHandle )
|
||||||
|
{
|
||||||
|
ControlRef container = (ControlRef) GetHandle() ;
|
||||||
|
wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
|
||||||
|
|
||||||
|
UMAShowControl( controlHandle ) ;
|
||||||
|
::EmbedControl( controlHandle , container ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( tool->CanBeToggled() && tool->IsToggled() )
|
||||||
|
{
|
||||||
|
tool->UpdateToggleImage( true ) ;
|
||||||
|
}
|
||||||
|
|
||||||
// nothing special to do here - we relayout in Realize() later
|
// nothing special to do here - we relayout in Realize() later
|
||||||
tool->Attach(this);
|
tool->Attach(this);
|
||||||
InvalidateBestSize();
|
InvalidateBestSize();
|
||||||
@@ -646,8 +667,9 @@ void wxToolBar::DoSetToggle(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(tog
|
|||||||
wxFAIL_MSG( _T("not implemented") );
|
wxFAIL_MSG( _T("not implemented") );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
|
bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolbase)
|
||||||
{
|
{
|
||||||
|
wxToolBarTool* tool = wx_static_cast( wxToolBarTool* , toolbase ) ;
|
||||||
wxToolBarToolsList::compatibility_iterator node;
|
wxToolBarToolsList::compatibility_iterator node;
|
||||||
for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
|
for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
|
||||||
{
|
{
|
||||||
@@ -665,19 +687,21 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *tool)
|
|||||||
|
|
||||||
tool->Detach();
|
tool->Detach();
|
||||||
|
|
||||||
wxToolBarTool* tl = wx_static_cast( wxToolBarTool* , tool ) ;
|
|
||||||
switch ( tool->GetStyle() )
|
switch ( tool->GetStyle() )
|
||||||
{
|
{
|
||||||
case wxTOOL_STYLE_CONTROL:
|
case wxTOOL_STYLE_CONTROL:
|
||||||
tool->GetControl()->Destroy();
|
{
|
||||||
|
tool->GetControl()->Destroy();
|
||||||
|
tool->ClearControl() ;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case wxTOOL_STYLE_BUTTON:
|
case wxTOOL_STYLE_BUTTON:
|
||||||
case wxTOOL_STYLE_SEPARATOR:
|
case wxTOOL_STYLE_SEPARATOR:
|
||||||
if ( tl->GetControlHandle() )
|
if ( tool->GetControlHandle() )
|
||||||
{
|
{
|
||||||
DisposeControl( (ControlRef) tl->GetControlHandle() ) ;
|
DisposeControl( (ControlRef) tool->GetControlHandle() ) ;
|
||||||
tl->SetControlHandle( (ControlRef) NULL ) ;
|
tool->SetControlHandle( (ControlRef) NULL ) ;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user