// virtual LDraw::SizeD DockPanel::MeasureOverride(LDraw::SizeD availSize) { LDraw::BBoxD layoutRect(0, 0, availSize.Width, availSize.Height); double minWidth = 0; double minHeight = 0; double totalWidth = 0; double totalHeight = 0; unsigned int ncount = get_InternalChildren()->GetCount(); #if 0 for (unsigned int i = 0; i < ncount; i++) { UIElement* pVisual = get_InternalChildren()->GetItem(i);//(*get_rchildList())[i]; // TODO remove this // pVisual->SetRParent(this); } #endif for (unsigned int i = 0; i < ncount; i++) { UIElement* pVisual = get_InternalChildren()->get_Item(i);//(*get_rchildList())[i]; ASSERT(pVisual->GetRParent() == this); if (pVisual->get_Visibility() != Collapsed) { DockEnum dock = GetDock(pVisual); if (dock == Fill || ((i == ncount-1) && get_LastChildFill())) { pVisual->Measure(LDraw::SizeD(layoutRect.GetWidth(), layoutRect.GetHeight())); totalWidth += pVisual->get_DesiredSize().Width; totalHeight += pVisual->get_DesiredSize().Height; break; } else if (dock == Left) { pVisual->Measure(LDraw::SizeD(0, layoutRect.GetHeight())); layoutRect.left += pVisual->get_DesiredSize().Width; totalWidth += pVisual->get_DesiredSize().Width; // totalHeight = max(totalHeight, pVisual->m_desiredHeight); minHeight = MAX(minHeight, pVisual->get_DesiredSize().Height); } else if (dock == Top) { pVisual->Measure(LDraw::SizeD(layoutRect.GetWidth(), 0)); layoutRect.top += pVisual->get_DesiredSize().Height; totalHeight += pVisual->get_DesiredSize().Height; // totalWidth = max(totalWidth, pVisual->m_desiredWidth); minWidth = MAX(minWidth, pVisual->get_DesiredSize().Width); } else if (dock == Right) { pVisual->Measure(LDraw::SizeD(0, layoutRect.GetHeight())); layoutRect.right -= pVisual->get_DesiredSize().Width; totalWidth += pVisual->get_DesiredSize().Width; // totalHeight = max(totalHeight, pVisual->m_desiredHeight); minHeight = MAX(minHeight, pVisual->get_DesiredSize().Height); } else if (dock == Bottom) { pVisual->Measure(LDraw::SizeD(layoutRect.GetWidth(), 0)); layoutRect.bottom -= pVisual->get_DesiredSize().Height; totalHeight += pVisual->get_DesiredSize().Height; // totalWidth = max(totalWidth, pVisual->m_desiredWidth); minWidth = MAX(minWidth, pVisual->get_DesiredSize().Width); } else ASSERT(0); // pVisual->SetLayoutOffset(fLeft, fTop); // pVisual->Arrange(LDraw::SizeF(pVisual->m_computedWidth, pVisual->m_computedHeight)); /* if (dock == Fill || layoutRect.GetWidth() <= 0 || layoutRect.GetHeight() <= 0) { break; } */ } } return LDraw::SizeD(MAX(minWidth, totalWidth), MAX(minHeight, totalHeight)); }
LDraw::SizeD TreeItem::OnMeasure(LDraw::SizeD availSize) { double height = 0; double width = 0; if (true)//m_Button->get_Visibility() != Collapsed) { // m_Button->Measure(LDraw::SizeD(availSize.Width, 0)); // height = MAX(height, m_Button->m_desiredSize.Height); m_ExpandButton->Measure(LDraw::SizeD(0, 0)); height = m_ExpandButton->get_DesiredSize().Height; /* double totalWidth = m_ownerCtl->get_ActualSize().Width; { ColumnHeader* pColumn = m_ownerCtl->get_ColumnHeaderList()->m_columns[0]; // if (pColumn->get_Visibility() != Collapsed) totalWidth -= pColumn->get_ActualSize().Width; } */ if (m_Span) { m_Span->Measure(LDraw::SizeD(0, 0)); // TODO?? } for (int i = 0; i < m_cells.GetSize(); i++) { ColumnHeader* pColumn = m_ownerCtl->get_ColumnHeaderList()->m_columns[i]; UIElement* pCell = m_cells[i]; double columnWidth; if (pColumn->get_Visibility() != Collapsed) { /* if (i == 0) columnWidth = availSize.Width - totalWidth - 16; else */ columnWidth = pColumn->get_ActualSize().Width; } else { columnWidth = 0; } pCell->Measure(LDraw::SizeD(0/*columnWidth-16*/, 0)); if (pColumn->get_Visibility() != Collapsed) { height = MAX(height, pCell->get_DesiredSize().Height); } } width = MAX(width, m_ExpandButton->get_DesiredSize().Width); } if (m_Children) { if (m_Children->get_Visibility() != Collapsed) { m_Children->Measure(LDraw::SizeD(availSize.Width-16, availSize.Height - height)); height += m_Children->get_DesiredSize().Height; width = MAX(width, m_Children->get_DesiredSize().Width+16); } } return LDraw::SizeD(width, height); }