/*  GadTools layout toolkit
**
**  Copyright © 1993-1994 by Olaf `Olsen' Barthel
**  Freely distributable.
*/

#include "gtlayout_global.h"

VOID __regargs
LTP_PlaceGroups(LayoutHandle *handle,ObjectNode *group,LONG left,LONG top)
{
	if(!handle -> Failed)
	{
		ObjectNode	*node;
		LONG		 plusLeft,
				 plusTop,
				 lastSpace;

		if(group -> Label || group -> Special . Group . Frame)
		{
			plusLeft = 4 + handle -> GlyphWidth + handle -> InterWidth + group -> Special . Group . ExtraLeft;

			if(group -> Label)
				plusTop = handle -> RPort . TxHeight + handle -> InterHeight + group -> Special . Group . ExtraTop;
			else
				plusTop = 2 + handle -> InterHeight + group -> Special . Group . ExtraTop;
		}
		else
		{
			plusLeft	= group -> Special . Group . ExtraLeft;
			plusTop 	= group -> Special . Group . ExtraTop;
		}

		if(group -> ExtraSpace)
		{
			if(group -> Special . Group . ParentGroup -> Special . Group . Horizontal)
				left += handle -> InterWidth;
			else
				top += handle -> InterHeight;
		}

		group -> Left	= left;
		group -> Top	= top;

		left	+= plusLeft;
		top	+= plusTop;

		if(group -> Special . Group . Horizontal)
		{
			lastSpace = left;

			SCANGROUP(group,node)
			{
				if(node -> Type == GROUP_KIND)
					LTP_PlaceGroups(handle,node,lastSpace,top);
				else
				{
					node -> Left	+= left;
					node -> Top	+= top;

					handle -> Count++;
				}

				if(!group -> Special . Group . Paging)
				{
					lastSpace = node -> Left + node -> Width + handle -> InterWidth;

					if(node -> Type == MX_KIND)
					{
						if((node -> LabelPlace == PLACETEXT_RIGHT) || (node -> LabelPlace == PLACETEXT_LEFT))
							lastSpace += INTERWIDTH + node -> Special . Radio . LabelWidth;
					}
				}
			}
		}
		else
		{
			lastSpace = top;

			SCANGROUP(group,node)
			{
				if(node -> Type == GROUP_KIND)
					LTP_PlaceGroups(handle,node,left,lastSpace);
				else
				{
					node -> Left	+= left;
					node -> Top	+= top;

					handle -> Count++;
				}

				if(!group -> Special . Group . Paging)
					lastSpace = node -> Top + node -> Height + handle -> InterHeight;
			}
		}
	}
}
