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:
Stefan Csomor
2005-03-30 07:33:28 +00:00
parent 9234615181
commit be5fe3aafb

View File

@@ -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;
} }