Add wxAuiToolBar::DestroyTool() and DestroyToolByIndex()

These new functions destroy the associated window too, unlike the
existing DeleteTool() and DeleteByIndex().

Closes #16552.
This commit is contained in:
Vadim Zeitlin
2020-03-10 23:37:42 +01:00
parent 95b1f7b7ea
commit 700eaff131
3 changed files with 48 additions and 2 deletions

View File

@@ -525,6 +525,12 @@ public:
void ClearTools() { Clear() ; }
void Clear();
bool DestroyTool(int toolId);
bool DestroyToolByIndex(int idx);
// Note that these methods do _not_ delete the associated control, if any.
// Use DestroyTool() or DestroyToolByIndex() if this is wanted.
bool DeleteTool(int toolId);
bool DeleteByIndex(int toolId);

View File

@@ -723,12 +723,34 @@ public:
void ClearTools();
void Clear();
/**
Destroys the tool with the given ID and its associated window, if any.
@param tool_id ID of a previously added tool.
@return @true if the tool was destroyed or @false otherwise, e.g. if
the tool with the given ID was not found.
@since 3.1.4
*/
bool DestroyTool(int tool_id);
/**
Destroys the tool at the given position and its associated window, if
any.
@param idx The index, or position, of a previously added tool.
@return @true if the tool was destroyed or @false otherwise, e.g. if
the provided index is out of range.
*/
bool DestroyToolByIndex(int idx);
/**
Removes the tool with the given ID from the toolbar.
Note that if this tool was added by AddControl(), the associated
control is @e not deleted and must either be reused (e.g. by
reparenting it under a different window) or destroyed by caller.
If this behaviour is unwanted, prefer using DestroyTool() instead.
@param tool_id ID of a previously added tool.
@return @true if the tool was removed or @false otherwise, e.g. if the
@@ -742,6 +764,8 @@ public:
Note that if this tool was added by AddControl(), the associated
control is @e not deleted and must either be reused (e.g. by
reparenting it under a different window) or destroyed by caller.
If this behaviour is unwanted, prefer using DestroyToolByIndex()
instead.
@param idx The index, or position, of a previously added tool.
@return @true if the tool was removed or @false otherwise, e.g. if the

View File

@@ -1180,6 +1180,22 @@ bool wxAuiToolBar::DeleteByIndex(int idx)
return false;
}
bool wxAuiToolBar::DestroyTool(int tool_id)
{
return DestroyToolByIndex(GetToolIndex(tool_id));
}
bool wxAuiToolBar::DestroyToolByIndex(int idx)
{
if ( idx < 0 || static_cast<unsigned>(idx) >= m_items.GetCount() )
return false;
if ( wxWindow* window = m_items[idx].GetWindow() )
window->Destroy();
return DeleteByIndex(idx);
}
wxControl* wxAuiToolBar::FindControl(int id)
{