Fix stretchable spaces in wxToolBar after tool removal in wxMSW.
The stretchable spaces need to be manually updated after removing a tool from the toolbar. Closes #13577. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70798 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -503,7 +503,8 @@ MSW:
|
|||||||
- Fix coordinates and Z-position for joystick events (Markus Juergens).
|
- Fix coordinates and Z-position for joystick events (Markus Juergens).
|
||||||
- Fix size of the font returned by wxTextCtrl::GetStyle() (Igor Korot).
|
- Fix size of the font returned by wxTextCtrl::GetStyle() (Igor Korot).
|
||||||
- Add wxActiveXContainer::QueryClientSiteInterface and implement it in
|
- Add wxActiveXContainer::QueryClientSiteInterface and implement it in
|
||||||
wxWebViewIE to improve the default behaviour (Allonii)
|
wxWebViewIE to improve the default behaviour (Allonii).
|
||||||
|
- Update stretchable spaces in wxToolBar after tool removal (Catalin Raceanu).
|
||||||
|
|
||||||
OSX:
|
OSX:
|
||||||
|
|
||||||
|
@@ -568,14 +568,18 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool)
|
|||||||
// get the size of the button we're going to delete
|
// get the size of the button we're going to delete
|
||||||
const RECT r = wxGetTBItemRect(GetHwnd(), pos);
|
const RECT r = wxGetTBItemRect(GetHwnd(), pos);
|
||||||
|
|
||||||
int width = r.right - r.left;
|
int delta = IsVertical() ? r.bottom - r.top : r.right - r.left;
|
||||||
|
|
||||||
if ( tool->IsControl() )
|
if ( tool->IsControl() )
|
||||||
{
|
{
|
||||||
nButtonsToDelete = ((wxToolBarTool *)tool)->GetSeparatorsCount();
|
nButtonsToDelete = ((wxToolBarTool *)tool)->GetSeparatorsCount();
|
||||||
width *= nButtonsToDelete;
|
|
||||||
|
if ( !IsVertical() )
|
||||||
|
delta *= nButtonsToDelete;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_totalFixedSize -= delta;
|
||||||
|
|
||||||
// do delete all buttons
|
// do delete all buttons
|
||||||
m_nButtons -= nButtonsToDelete;
|
m_nButtons -= nButtonsToDelete;
|
||||||
while ( nButtonsToDelete-- > 0 )
|
while ( nButtonsToDelete-- > 0 )
|
||||||
@@ -588,14 +592,45 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// and finally reposition all the controls after this button (the toolbar
|
// and finally rearrange the tools
|
||||||
// takes care of all normal items)
|
|
||||||
|
// search for any stretch spacers before the removed tool
|
||||||
|
bool hasPrecedingStrechables = false;
|
||||||
|
for ( wxToolBarToolsList::compatibility_iterator nodeStch = m_tools.GetFirst();
|
||||||
|
nodeStch != node; nodeStch = nodeStch->GetNext() )
|
||||||
|
{
|
||||||
|
if ( ((wxToolBarTool*)nodeStch->GetData())->IsStretchable() )
|
||||||
|
{
|
||||||
|
hasPrecedingStrechables = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( hasPrecedingStrechables )
|
||||||
|
{
|
||||||
|
// if the removed tool is preceded by stretch spacers
|
||||||
|
// just redistribute the space
|
||||||
|
UpdateStretchableSpacersSize();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// reposition all the controls after this button but before any
|
||||||
|
// stretch spacer (the toolbar takes care of all normal items)
|
||||||
for ( /* node -> first after deleted */ ; node; node = node->GetNext() )
|
for ( /* node -> first after deleted */ ; node; node = node->GetNext() )
|
||||||
{
|
{
|
||||||
wxToolBarTool *tool2 = (wxToolBarTool*)node->GetData();
|
wxToolBarTool *tool2 = (wxToolBarTool*)node->GetData();
|
||||||
|
|
||||||
if ( tool2->IsControl() )
|
if ( tool2->IsControl() )
|
||||||
{
|
{
|
||||||
tool2->MoveBy(-width);
|
tool2->MoveBy(-delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if a stretch spacer is found just redistribute the available space
|
||||||
|
else if ( tool2->IsStretchable() )
|
||||||
|
{
|
||||||
|
UpdateStretchableSpacersSize();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user