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

// on GTK+ a uiRadioButtons is a GtkBox with each of the GtkRadioButtons as children

struct radiobuttons {
	uiRadioButtons r;
	GtkWidget *boxWidget;
	GtkContainer *boxContainer;
	GtkBox *box;
	GPtrArray *buttons;
};

uiDefineControlType(uiRadioButtons, uiTypeRadioButtons, struct radiobuttons)

// TODO destroy

// TODO note that the handle of a uiRadioButtons is undefined (or at least highly platform-dependent and unreliable)
static uintptr_t radiobuttonsHandle(uiControl *c)
{
	struct radiobuttons *r = (struct radiobuttons *) c;

	return (uintptr_t) (r->boxWidget);
}

static void radiobuttonsAppend(uiRadioButtons *rr, const char *text)
{
	struct radiobuttons *r = (struct radiobuttons *) rr;
	GtkWidget *rb;
	GtkRadioButton *previous;

	previous = NULL;
	if (r->buttons->len > 0)
		previous = GTK_RADIO_BUTTON(g_ptr_array_index(r->buttons, 0));
	rb = gtk_radio_button_new_with_label_from_widget(previous, text);
	gtk_container_add(r->boxContainer, rb);
	g_ptr_array_add(r->buttons, rb);
	gtk_widget_show(rb);
	uiControlQueueResize(uiControl(r));
}

uiRadioButtons *uiNewRadioButtons(void)
{
	struct radiobuttons *r;

	r = (struct radiobuttons *) uiNewControl(uiTypeRadioButtons());

	r->boxWidget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
	r->boxContainer = GTK_CONTAINER(r->boxWidget);
	r->box = GTK_BOX(r->boxWidget);
	uiUnixMakeSingleWidgetControl(uiControl(r), r->boxWidget);

	r->buttons = g_ptr_array_new();

	uiControl(r)->Handle = radiobuttonsHandle;

	uiRadioButtons(r)->Append = radiobuttonsAppend;

	return uiRadioButtons(r);
}