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