summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--new/stack.c16
-rw-r--r--new/test.c36
-rw-r--r--new/ui.h1
3 files changed, 52 insertions, 1 deletions
diff --git a/new/stack.c b/new/stack.c
index 1a08ee0..41a67d6 100644
--- a/new/stack.c
+++ b/new/stack.c
@@ -367,6 +367,22 @@ void uiStackAdd(uiControl *st, uiControl *c, int stretchy)
uiParentUpdate(s->parent);
}
+void uiStackRemove(uiControl *st, uintptr_t index)
+{
+ stack *s = (stack *) (st->data);
+ uiControl *removed;
+ uintmax_t nAfter;
+
+ removed = s->controls[index].c;
+ nAfter = s->len - index - 1;
+ memmove(&(s->controls[index + 1]), &(s->controls[index]), nAfter * sizeof (stackControl));
+ s->len--;
+ if (s->parent != NULL) {
+ uiControlRemoveParent(removed);
+ uiParentUpdate(s->parent);
+ }
+}
+
int uiStackPadded(uiControl *c)
{
stack *s = (stack *) (c->data);
diff --git a/new/test.c b/new/test.c
index 5acfdc4..978cb55 100644
--- a/new/test.c
+++ b/new/test.c
@@ -67,7 +67,7 @@ static void setCheckboxText(uiControl *b, void *data)
}
uiWindow *w;
-#define nStacks 9
+#define nStacks 11
uiControl *stacks[nStacks];
uiControl *spaced;
@@ -148,6 +148,22 @@ static void setLabelText(uiControl *b, void *data)
uiFreeText(text);
}
+uiControl *firstStack;
+uiControl *secondStack;
+uiControl *movingLabel;
+
+static void moveToFirst(uiControl *c, void *data)
+{
+ uiStackRemove(secondStack, 1);
+ uiStackAdd(firstStack, movingLabel, 1);
+}
+
+static void moveToSecond(uiControl *c, void *data)
+{
+ uiStackRemove(firstStack, 1);
+ uiStackAdd(secondStack, movingLabel, 1);
+}
+
int main(int argc, char *argv[])
{
uiInitOptions o;
@@ -289,6 +305,24 @@ int main(int argc, char *argv[])
uiTabAddPage(tab, "Page 2", stacks[i]);
i++;
+ stacks[i] = uiNewHorizontalStack();
+ firstStack = stacks[i];
+ getButton = uiNewButton("Move Here");
+ uiButtonOnClicked(getButton, moveToFirst, NULL);
+ uiStackAdd(stacks[i], getButton, 0);
+ movingLabel = uiNewLabel("This label moves!");
+ uiStackAdd(stacks[i], movingLabel, 1);
+ uiStackAdd(stacks[page2stack], stacks[i], 0);;
+ i++;
+
+ stacks[i] = uiNewHorizontalStack();
+ secondStack = stacks[i];
+ getButton = uiNewButton("Move Here");
+ uiButtonOnClicked(getButton, moveToSecond, NULL);
+ uiStackAdd(stacks[i], getButton, 0);
+ uiStackAdd(stacks[page2stack], stacks[i], 0);
+ i++;
+
if (i != nStacks) {
fprintf(stderr, "forgot to update nStacks (expected %d)\n", i);
return 1;
diff --git a/new/ui.h b/new/ui.h
index 3120d6d..f82e800 100644
--- a/new/ui.h
+++ b/new/ui.h
@@ -131,6 +131,7 @@ void uiButtonOnClicked(uiControl *, void (*)(uiControl *, void *), void *);
uiControl *uiNewHorizontalStack(void);
uiControl *uiNewVerticalStack(void);
void uiStackAdd(uiControl *, uiControl *, int);
+void uiStackRemove(uiControl *, uintmax_t);
int uiStackPadded(uiControl *);
void uiStackSetPadded(uiControl *, int);