// 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)); }
void TreeItem::OnArrange(LDraw::SizeD finalSize) { m_ExpandButton->Arrange(LDraw::RectD(LDraw::PointD(0, 0), m_ExpandButton->get_DesiredSize()/*LDraw::SizeD(1, 14)*/)); //m_ExpandButton->SetLayoutOffset(0, 0); // pCell->m_computedLeft = x; double height = m_ExpandButton->m_computedSize.Height; double x = m_ExpandButton->m_computedSize.Width; if (m_Span) { m_Span->Arrange(LDraw::RectD(x, 0, finalSize.Width-x, height/*m_Span->get_DesiredSize().Height*/)); //m_Span->SetLayoutOffset(x, 0); m_Span->m_computedLeft = x; height = MAX(height, m_Span->get_ActualSize().Height); } if (m_cells.GetSize()) { 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; } 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 = finalSize.Width - totalWidth - 16; else columnWidth = pColumn->get_ActualSize().Width; } else columnWidth = 0; pCell->Arrange(LDraw::RectD(x, 0, columnWidth/*pCell->m_availSize.Width*/, pCell->get_DesiredSize().Height)); //pCell->SetLayoutOffset(x, 0); pCell->m_computedLeft = x; if (pColumn->get_Visibility() != Collapsed) { height = MAX(height, pCell->get_ActualSize().Height); } x += columnWidth; } } #if 0 m_Button->m_expandedBBox.Width = finalSize.Width; m_Button->m_expandedBBox.Height = finalSize.Height; #endif // m_VisualTree->Arrange(finalSize); //Control::OnArrange(finalSize); if (m_Children) { //double x, y; if (m_Children->get_Visibility() != Collapsed) { //m_Children->SetLayoutOffset(16, height); // x = 16; // y = height; //m_Children->m_transformMatrix *= gmMatrix3::translate(16, 0); m_Children->Arrange(LDraw::RectD(16, height, finalSize.Width-16, m_Children->get_DesiredSize().Height)); } } }
// virtual LDraw::SizeD DockPanel::ArrangeOverride(LDraw::SizeD finalSize) { LDraw::BBoxD layoutRect(0, 0, finalSize.Width, finalSize.Height); unsigned int ncount = get_InternalChildren()->GetCount();//get_rchildList()->get_Size(); for (unsigned int i = 0; i < ncount; i++) { UIElement* pVisual = get_InternalChildren()->get_Item(i);//(*get_rchildList())[i]; if (pVisual->get_Visibility() != Collapsed) { // long dockValue; DockEnum dock = GetDock(pVisual); ASSERT(pVisual->get_DesiredSize().Width >= 0 && pVisual->get_DesiredSize().Height >= 0); // double fLeft; // double fTop; if (dock == Fill || ((i == ncount-1) && get_LastChildFill())) { pVisual->Arrange(layoutRect);//LDraw::RectD(layoutRect.GetWidth(), layoutRect.GetHeight())); // fLeft = layoutRect.left; // fTop = layoutRect.top; } else if (dock == Left) { pVisual->Arrange(LDraw::RectD(layoutRect.left, layoutRect.top, pVisual->get_DesiredSize().Width, layoutRect.GetHeight())); // fLeft = layoutRect.left; // fTop = layoutRect.top; layoutRect.left += pVisual->get_ActualSize().Width; } else if (dock == Top) { pVisual->Arrange(LDraw::RectD(layoutRect.left, layoutRect.top, layoutRect.GetWidth(), pVisual->get_DesiredSize().Height)); // fLeft = layoutRect.left; // fTop = layoutRect.top; layoutRect.top += pVisual->get_ActualSize().Height; } else if (dock == Right) { pVisual->Arrange(LDraw::RectD(layoutRect.right - pVisual->get_DesiredSize().Width, layoutRect.top, pVisual->get_DesiredSize().Width, layoutRect.GetHeight())); // fLeft = layoutRect.right - pVisual->get_ActualSize().Width; // fTop = layoutRect.top; layoutRect.right -= pVisual->get_ActualSize().Width; } else if (dock == Bottom) { pVisual->Arrange(LDraw::RectD(layoutRect.left, layoutRect.bottom - pVisual->get_DesiredSize().Height, layoutRect.GetWidth(), pVisual->get_DesiredSize().Height)); // fLeft = layoutRect.left; // fTop = layoutRect.bottom - pVisual->get_ActualSize().Height; layoutRect.bottom -= pVisual->get_ActualSize().Height; } else ASSERT(0); // pVisual->SetLayoutOffset(fLeft, fTop); if (dock == Fill || layoutRect.GetWidth() <= 0 || layoutRect.GetHeight() <= 0) { break; } } } return finalSize; }
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); }