135 lines
3.2 KiB
C
135 lines
3.2 KiB
C
// 8 october 2015
|
|
#include "test.h"
|
|
|
|
static uiArea *area;
|
|
static uiCombobox *which;
|
|
static uiSpinbox *hamount;
|
|
static uiSpinbox *vamount;
|
|
|
|
struct handler {
|
|
uiAreaHandler ah;
|
|
};
|
|
|
|
static struct handler handler;
|
|
|
|
static void handlerDraw(uiAreaHandler *a, uiArea *area, uiAreaDrawParams *p)
|
|
{
|
|
runDrawTest(uiComboboxSelected(which), p);
|
|
}
|
|
|
|
static uintmax_t handlerHScrollMax(uiAreaHandler *a, uiArea *area)
|
|
{
|
|
return uiSpinboxValue(hamount);
|
|
}
|
|
|
|
static uintmax_t handlerVScrollMax(uiAreaHandler *a, uiArea *area)
|
|
{
|
|
return uiSpinboxValue(vamount);
|
|
}
|
|
|
|
static int handlerRedrawOnResize(uiAreaHandler *a, uiArea *area)
|
|
{
|
|
// TODO make a checkbox
|
|
return uiSpinboxValue(hamount) == 0 && uiSpinboxValue(vamount) == 0;
|
|
}
|
|
|
|
static void handlerMouseEvent(uiAreaHandler *a, uiArea *area, uiAreaMouseEvent *e)
|
|
{
|
|
printf("mouse (%d,%d):(%d,%d) down:%d up:%d count:%d mods:%x held:%x\n",
|
|
(int) e->X,
|
|
(int) e->Y,
|
|
(int) e->HScrollPos,
|
|
(int) e->VScrollPos,
|
|
(int) e->Down,
|
|
(int) e->Up,
|
|
(int) e->Count,
|
|
(uint32_t) e->Modifiers,
|
|
e->Held1To64);
|
|
}
|
|
|
|
static void handlerDragBroken(uiAreaHandler *ah, uiArea *a)
|
|
{
|
|
printf("drag broken\n");
|
|
}
|
|
|
|
static int handlerKeyEvent(uiAreaHandler *ah, uiArea *a, uiAreaKeyEvent *e)
|
|
{
|
|
char k[4];
|
|
|
|
k[0] = '\'';
|
|
k[1] = e->Key;
|
|
k[2] = '\'';
|
|
k[3] = '\0';
|
|
if (e->Key == 0) {
|
|
k[0] = '0';
|
|
k[1] = '\0';
|
|
}
|
|
printf("key key:%s extkey:%d mod:%d mods:%d up:%d\n",
|
|
k,
|
|
(int) e->ExtKey,
|
|
(int) e->Modifier,
|
|
(int) e->Modifiers,
|
|
e->Up);
|
|
return 0;
|
|
}
|
|
|
|
static void onAmountChanged(uiSpinbox *s, void *data)
|
|
{
|
|
uiAreaUpdateScroll(area);
|
|
}
|
|
|
|
static void shouldntHappen(uiCombobox *c, void *data)
|
|
{
|
|
fprintf(stderr, "YOU SHOULD NOT SEE THIS. If you do, uiComboboxSetSelected() is triggering uiComboboxOnSelected(), which it should not.\n");
|
|
}
|
|
|
|
static void redraw(uiCombobox *c, void *data)
|
|
{
|
|
uiAreaQueueRedrawAll(area);
|
|
}
|
|
|
|
uiBox *makePage6(void)
|
|
{
|
|
uiBox *page6;
|
|
uiBox *hbox;
|
|
|
|
handler.ah.Draw = handlerDraw;
|
|
handler.ah.HScrollMax = handlerHScrollMax;
|
|
handler.ah.VScrollMax = handlerVScrollMax;
|
|
handler.ah.RedrawOnResize = handlerRedrawOnResize;
|
|
handler.ah.MouseEvent = handlerMouseEvent;
|
|
handler.ah.DragBroken = handlerDragBroken;
|
|
handler.ah.KeyEvent = handlerKeyEvent;
|
|
|
|
page6 = newVerticalBox();
|
|
|
|
hbox = newHorizontalBox();
|
|
uiBoxAppend(page6, uiControl(hbox), 0);
|
|
|
|
which = uiNewCombobox();
|
|
populateComboboxWithTests(which);
|
|
// this is to make sure that uiComboboxOnSelected() doesn't trigger with uiComboboxSetSelected()
|
|
uiComboboxOnSelected(which, shouldntHappen, NULL);
|
|
uiComboboxSetSelected(which, 0);
|
|
uiComboboxOnSelected(which, redraw, NULL);
|
|
uiBoxAppend(hbox, uiControl(which), 0);
|
|
|
|
// make these first in case the area handler calls the information as part of the constructor
|
|
hamount = uiNewSpinbox(0, 100000);
|
|
uiSpinboxOnChanged(hamount, onAmountChanged, NULL);
|
|
vamount = uiNewSpinbox(0, 100000);
|
|
uiSpinboxOnChanged(vamount, onAmountChanged, NULL);
|
|
|
|
area = uiNewArea((uiAreaHandler *) (&handler));
|
|
uiBoxAppend(page6, uiControl(area), 1);
|
|
|
|
hbox = newHorizontalBox();
|
|
uiBoxAppend(hbox, uiControl(uiNewLabel("H ")), 0);
|
|
uiBoxAppend(hbox, uiControl(hamount), 0);
|
|
uiBoxAppend(hbox, uiControl(uiNewLabel(" V ")), 0);
|
|
uiBoxAppend(hbox, uiControl(vamount), 0);
|
|
uiBoxAppend(page6, uiControl(hbox), 0);
|
|
|
|
return page6;
|
|
}
|