wxSize wxSizerItem::AddBorderToSize(const wxSize& size) const
{
- if (size == wxDefaultSize)
- return size;
-
wxSize result = size;
- if (m_flag & wxWEST)
- result.x += m_border;
- if (m_flag & wxEAST)
- result.x += m_border;
- if (m_flag & wxNORTH)
- result.y += m_border;
- if (m_flag & wxSOUTH)
- result.y += m_border;
+
+ // Notice that we shouldn't modify the unspecified component(s) of the
+ // size, it's perfectly valid to have either min or max size specified in
+ // one direction only and it shouldn't be applied in the other one then.
+
+ if ( result.x != wxDefaultCoord )
+ {
+ if (m_flag & wxWEST)
+ result.x += m_border;
+ if (m_flag & wxEAST)
+ result.x += m_border;
+ }
+
+ if ( result.y != wxDefaultCoord )
+ {
+ if (m_flag & wxNORTH)
+ result.y += m_border;
+ if (m_flag & wxSOUTH)
+ result.y += m_border;
+ }
+
return result;
}
return m_window->IsShown();
case Item_Sizer:
- {
// arbitrarily decide that if at least one of our elements is
// shown, so are we (this arbitrariness is the reason for
// deprecating this function)
- for ( wxSizerItemList::compatibility_iterator
- node = m_sizer->GetChildren().GetFirst();
- node;
- node = node->GetNext() )
- {
- if ( node->GetData()->IsShown() )
- return true;
- }
- return false;
- }
+ return m_sizer->AreAnyItemsShown();
case Item_Spacer:
return m_spacer->IsShown();
CalcMin();
// Applies the layout and repositions/resizes the items
+ wxWindow::ChildrenRepositioningGuard repositionGuard(m_containingWindow);
+
RecalcSizes();
}
}
}
+bool wxSizer::AreAnyItemsShown() const
+{
+ wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+ while (node)
+ {
+ if ( node->GetData()->IsShown() )
+ return true;
+ node = node->GetNext();
+ }
+
+ return false;
+}
+
bool wxSizer::IsShown( wxWindow *window ) const
{
wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
minMajorSize += GetSizeInMajorDir(item->GetMinSizeWithBorder());
}
- // update our min size and delta which may have changed
+ // update our min size have changed
SizeInMajorDir(m_minSize) = minMajorSize;
- delta = totalMajorSize - minMajorSize;
// space and sum of proportions for the remaining items, both may change
wxBoxSizer::ShowItems( show );
}
+bool wxStaticBoxSizer::AreAnyItemsShown() const
+{
+ // We don't need to check the status of our child items: if the box is
+ // shown, this sizer should be considered shown even if all its elements
+ // are hidden (or, more prosaically, there are no elements at all). And,
+ // conversely, if the box is hidden then all our items, which are its
+ // children, are hidden too.
+ return m_staticBox->IsShown();
+}
+
bool wxStaticBoxSizer::Detach( wxWindow *window )
{
// avoid deleting m_staticBox in our dtor if it's being detached from the