// 11 june 2015
#include "uipriv_darwin.h"

struct group {
	uiGroup g;
	NSBox *box;
	uiControl *child;
	int margined;
};

uiDefineControlType(uiGroup, uiTypeGroup, struct group)

static uintptr_t groupHandle(uiControl *c)
{
	struct group *g = (struct group *) c;

	return (uintptr_t) (g->box);
}

static void groupContainerUpdateState(uiControl *c)
{
	struct group *g = (struct group *) c;

	if (g->child != NULL)
		uiControlUpdateState(g->child);
}

static char *groupTitle(uiGroup *gg)
{
	struct group *g = (struct group *) gg;

	return PUT_CODE_HERE;
}

static void groupSetTitle(uiGroup *gg, const char *text)
{
	struct group *g = (struct group *) gg;

	PUT_CODE_HERE;
	// changing the text might necessitate a change in the groupbox's size
	uiControlQueueResize(uiControl(g));
}

static void groupSetChild(uiGroup *gg, uiControl *child)
{
	struct group *g = (struct group *) gg;

	if (g->child != NULL)
		uiControlSetParent(g->child, NULL);
	g->child = child;
	if (g->child != NULL) {
		uiControlSetParent(g->child, uiControl(g));
		uiControlQueueResize(g->child);
	}
}

static int groupMargined(uiGroup *gg)
{
	struct group *g = (struct group *) gg;

	return g->margined;
}

static void groupSetMargined(uiGroup *gg, int margined)
{
	struct group *g = (struct group *) gg;

	g->margined = margined;
	uiControlQueueResize(uiControl(g));
}

uiGroup *uiNewGroup(const char *text)
{
	struct group *g;

	g = (struct group *) uiNewControl(uiTypeGroup());

	g->box = [[NSBox alloc] initWithFrame:NSZeroRect];
	[g->box setBoxType:NSBoxPrimary];
//TODO	[g->box setBorderType:TODO];
	[g->box setTransparent:NO];
	[g->box setTitlePosition:NSAtTop];

	// can't set title font the way the function does; plus we need to use a different size
	uiDarwinMakeSingleViewControl(uiControl(g), g->box, NO);
	// TODO verify if Small in Xcode is this small
	[g->box setTitleFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];

	uiControl(g)->Handle = groupHandle;
	uiControl(g)->ContainerUpdateState = groupContainerUpdateState;

	uiGroup(g)->Title = groupTitle;
	uiGroup(g)->SetTitle = groupSetTitle;
	uiGroup(g)->SetChild = groupSetChild;
	uiGroup(g)->Margined = groupMargined;
	uiGroup(g)->SetMargined = groupSetMargined;

	return uiGroup(g);
}