// 29 april 2015
#include "test.h"

static uiEntry *entry;
static uiCheckbox *spaced;

#define TEXT(name, type, getter, setter) \
	static void get ## name ## Text(uiButton *b, void *data) \
	{ \
		char *text; \
		text = getter(type(data)); \
		uiEntrySetText(entry, text); \
		uiFreeText(text); \
	} \
	static void set ## name ## Text(uiButton *b, void *data) \
	{ \
		char *text; \
		text = uiEntryText(entry); \
		setter(type(data), text); \
		uiFreeText(text); \
	}
TEXT(Window, uiWindow, uiWindowTitle, uiWindowSetTitle)
TEXT(Button, uiButton, uiButtonText, uiButtonSetText)
TEXT(Checkbox, uiCheckbox, uiCheckboxText, uiCheckboxSetText)
TEXT(Label, uiLabel, uiLabelText, uiLabelSetText)
TEXT(Group, uiGroup, uiGroupTitle, uiGroupSetTitle)

static void onChanged(uiEntry *e, void *data)
{
	printf("onChanged()\n");
}

static void toggleSpaced(uiCheckbox *c, void *data)
{
	setSpaced(uiCheckboxChecked(spaced));
}

static void forceSpaced(uiButton *b, void *data)
{
	uiCheckboxSetChecked(spaced, data != NULL);
}

static void showSpaced(uiButton *b, void *data)
{
	char s[12];

	querySpaced(s);
	uiEntrySetText(entry, s);
}

#define SHED(method, Method) \
	static void method ## Control(uiButton *b, void *data) \
	{ \
		uiControl ## Method(uiControl(data)); \
	}
SHED(show, Show)
SHED(hide, Hide)
SHED(enable, Enable)
SHED(disable, Disable)

uiBox *page1;

void goToPage2(uiButton *b, void *data)
{
	uiTabSetSelected(mainTab, 1);
}

void makePage1(uiWindow *w)
{
	uiButton *getButton, *setButton, *nextButton;
	uiBox *hbox;
	uiBox *testBox;
	uiLabel *label;

	page1 = newVerticalBox();

	entry = uiNewEntry();
	uiEntryOnChanged(entry, onChanged, NULL);
	uiBoxAppend(page1, uiControl(entry), 0);

	spaced = uiNewCheckbox("Spaced");
	uiCheckboxOnToggled(spaced, toggleSpaced, NULL);
	label = uiNewLabel("Label");

	hbox = newHorizontalBox();
	getButton = uiNewButton("Get Window Text");
	uiButtonOnClicked(getButton, getWindowText, w);
	setButton = uiNewButton("Set Window Text");
	uiButtonOnClicked(setButton, setWindowText, w);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	uiBoxAppend(hbox, uiControl(setButton), 1);
	uiBoxAppend(page1, uiControl(hbox), 0);

	hbox = newHorizontalBox();
	getButton = uiNewButton("Get Button Text");
	uiButtonOnClicked(getButton, getButtonText, getButton);
	setButton = uiNewButton("Set Button Text");
	uiButtonOnClicked(setButton, setButtonText, getButton);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	uiBoxAppend(hbox, uiControl(setButton), 1);
	uiBoxAppend(page1, uiControl(hbox), 0);

	hbox = newHorizontalBox();
	getButton = uiNewButton("Get Checkbox Text");
	uiButtonOnClicked(getButton, getCheckboxText, spaced);
	setButton = uiNewButton("Set Checkbox Text");
	uiButtonOnClicked(setButton, setCheckboxText, spaced);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	uiBoxAppend(hbox, uiControl(setButton), 1);
	uiBoxAppend(page1, uiControl(hbox), 0);

	hbox = newHorizontalBox();
	getButton = uiNewButton("Get Label Text");
	uiButtonOnClicked(getButton, getLabelText, label);
	setButton = uiNewButton("Set Label Text");
	uiButtonOnClicked(setButton, setLabelText, label);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	uiBoxAppend(hbox, uiControl(setButton), 1);
	uiBoxAppend(page1, uiControl(hbox), 0);

	hbox = newHorizontalBox();
	getButton = uiNewButton("Get Group Text");
	uiButtonOnClicked(getButton, getGroupText, page2group);
	setButton = uiNewButton("Set Group Text");
	uiButtonOnClicked(setButton, setGroupText, page2group);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	uiBoxAppend(hbox, uiControl(setButton), 1);
	uiBoxAppend(page1, uiControl(hbox), 0);

	hbox = newHorizontalBox();
	uiBoxAppend(hbox, uiControl(spaced), 1);
	getButton = uiNewButton("On");
	uiButtonOnClicked(getButton, forceSpaced, getButton);
	uiBoxAppend(hbox, uiControl(getButton), 0);
	getButton = uiNewButton("Off");
	uiButtonOnClicked(getButton, forceSpaced, NULL);
	uiBoxAppend(hbox, uiControl(getButton), 0);
	getButton = uiNewButton("Show");
	uiButtonOnClicked(getButton, showSpaced, NULL);
	uiBoxAppend(hbox, uiControl(getButton), 0);
	uiBoxAppend(page1, uiControl(hbox), 0);

	testBox = newHorizontalBox();
	setButton = uiNewButton("Button");
	uiBoxAppend(testBox, uiControl(setButton), 1);
	getButton = uiNewButton("Show");
	uiButtonOnClicked(getButton, showControl, setButton);
	uiBoxAppend(testBox, uiControl(getButton), 0);
	getButton = uiNewButton("Hide");
	uiButtonOnClicked(getButton, hideControl, setButton);
	uiBoxAppend(testBox, uiControl(getButton), 0);
	getButton = uiNewButton("Enable");
	uiButtonOnClicked(getButton, enableControl, setButton);
	uiBoxAppend(testBox, uiControl(getButton), 0);
	getButton = uiNewButton("Disable");
	uiButtonOnClicked(getButton, disableControl, setButton);
	uiBoxAppend(testBox, uiControl(getButton), 0);
	uiBoxAppend(page1, uiControl(testBox), 0);

	hbox = newHorizontalBox();
	getButton = uiNewButton("Show Box");
	uiButtonOnClicked(getButton, showControl, testBox);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	getButton = uiNewButton("Hide Box");
	uiButtonOnClicked(getButton, hideControl, testBox);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	getButton = uiNewButton("Enable Box");
	uiButtonOnClicked(getButton, enableControl, testBox);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	getButton = uiNewButton("Disable Box");
	uiButtonOnClicked(getButton, disableControl, testBox);
	uiBoxAppend(hbox, uiControl(getButton), 1);
	uiBoxAppend(page1, uiControl(hbox), 0);

	nextButton = uiNewButton("Go to Page 2");
	uiButtonOnClicked(nextButton, goToPage2, NULL);
	uiBoxAppend(page1, uiControl(nextButton), 0);
	uiBoxAppend(page1, uiControl(label), 0);
}
