wxGridBagSizer::wxGridBagSizer(int vgap, int hgap )
: wxFlexGridSizer(1, vgap, hgap),
m_emptyCellSize(10,20)
-
+
{
}
wxGBPosition badpos(-1,-1);
wxSizerItemList::compatibility_iterator node = m_children.Item( index );
wxCHECK_MSG( node, badpos, _T("Failed to find item.") );
- wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
+ wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
return item->GetPos();
}
{
wxSizerItemList::compatibility_iterator node = m_children.Item( index );
wxCHECK_MSG( node, false, _T("Failed to find item.") );
- wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
+ wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
return item->SetPos(pos);
}
wxGBSpan badspan(-1,-1);
wxSizerItemList::compatibility_iterator node = m_children.Item( index );
wxCHECK_MSG( node, badspan, _T("Failed to find item.") );
- wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
+ wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
return item->GetSpan();
}
{
wxSizerItemList::compatibility_iterator node = m_children.Item( index );
wxCHECK_MSG( node, false, _T("Failed to find item.") );
- wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
+ wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
return item->SetSpan(span);
}
+wxGBSizerItem* wxGridBagSizer::FindItemAtPoint(const wxPoint& pt)
+{
+ wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+ while (node)
+ {
+ wxGBSizerItem* item = (wxGBSizerItem*)node->GetData();
+ wxRect rect(item->GetPosition(), item->GetSize());
+ rect.Inflate(m_hgap, m_vgap);
+ if ( rect.Inside(pt) )
+ return item;
+ node = node->GetNext();
+ }
+ return NULL;
+}
+
+
+
+
wxGBSizerItem* wxGridBagSizer::FindItemWithData(const wxObject* userData)
{
wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
wxSize wxGridBagSizer::CalcMin()
{
int idx;
-
+
if (m_children.GetCount() == 0)
return m_emptyCellSize;
if ( item->IsShown() )
{
int row, col, endrow, endcol;
-
+
item->GetPos(row, col);
item->GetEndPos(endrow, endcol);
for (idx=0; idx < m_rows; idx++)
height += m_rowHeights[idx] + ( idx == m_rows-1 ? 0 : m_vgap );
- return wxSize(width, height);
+ m_calculatedMinSize = wxSize(width, height);
+ return m_calculatedMinSize;
}
if (m_children.GetCount() == 0)
return;
- // Calculates minsize and populates m_rowHeights and m_colWidths
- wxSize minsz( CalcMin() );
-
wxPoint pt( GetPosition() );
wxSize sz( GetSize() );
-
+
m_rows = m_rowHeights.GetCount();
m_cols = m_colWidths.GetCount();
int idx, width, height;
- AdjustForGrowables(sz, minsz, m_rows, m_cols);
+ AdjustForGrowables(sz, m_calculatedMinSize, m_rows, m_cols);
// Find the start positions on the window of the rows and columns
wxArrayInt rowpos;
height = 0;
for(idx=row; idx <= endrow; idx++)
- height += m_rowHeights[idx] + m_vgap;
-
+ height += m_rowHeights[idx];
+ height += (endrow - row) * m_vgap; // add a vgap for every row spanned
+
width = 0;
for (idx=col; idx <= endcol; idx++)
- width += m_colWidths[idx] + m_hgap;
-
+ width += m_colWidths[idx];
+ width += (endcol - col) * m_hgap; // add a hgap for every col spanned
+
SetItemBounds(item, colpos[col], rowpos[row], width, height);
node = node->GetNext();
- }
+ }
}
if ( excludeItem && item == excludeItem )
continue;
-
+
if ( item->Intersects(pos, span) )
return true;