Beispiel #1
0
// 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;
}
Beispiel #2
0
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));
		}
	}
}