// 15 august 2014

package ui

// #include "winapi_windows.h"
import "C"

type group struct {
	_hwnd	C.HWND
	_textlen	C.LONG

	*container
}

func newGroup(text string, control Control) Group {
	hwnd := C.newControl(buttonclass,
		C.BS_GROUPBOX,
		C.WS_EX_CONTROLPARENT)
	g := &group{
		_hwnd:		hwnd,
		container:		newContainer(control),
	}
	g.SetText(text)
	C.controlSetControlFont(g._hwnd)
	g.container.setParent(g._hwnd)
	g.container.isGroup = true
	return g
}

func (g *group) Text() string {
	return baseText(g)
}

func (g *group) SetText(text string) {
	baseSetText(g, text)
}

func (g *group) hwnd() C.HWND {
	return g._hwnd
}

func (g *group) textlen() C.LONG {
	return g._textlen
}

func (g *group) settextlen(len C.LONG) {
	g._textlen = len
}

func (g *group) setParent(p *controlParent) {
	basesetParent(g, p)
}

func (g *group) allocate(x int, y int, width int, height int, d *sizing) []*allocation {
	return baseallocate(g, x, y, width, height, d)
}

func (g *group) preferredSize(d *sizing) (width, height int) {
	width, height = g.child.preferredSize(d)
	if width < int(g._textlen) {		// if the text is longer, try not to truncate
		width = int(g._textlen)
	}
	// the two margin constants come from container_windows.go
	return width, height + fromdlgunitsY(groupYMarginTop, d) + fromdlgunitsY(groupYMarginBottom, d)
}

func (g *group) commitResize(c *allocation, d *sizing) {
	var r C.RECT

	// pretend that the client area of the group box only includes the actual empty space
	// container will handle the necessary adjustments properly
	r.left = 0
	r.top = 0
	r.right = C.LONG(c.width)
	r.bottom = C.LONG(c.height)
	g.container.move(&r)
	basecommitResize(g, c, d)
}

func (g *group) getAuxResizeInfo(d *sizing) {
	basegetAuxResizeInfo(g, d)
}