Implemented the new uiTab methods on Windows.
This commit is contained in:
parent
180ca3d8d4
commit
10345a2c7d
|
@ -8,6 +8,7 @@ struct tab {
|
||||||
uiTab t;
|
uiTab t;
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
uiContainer **pages;
|
uiContainer **pages;
|
||||||
|
int *margined;
|
||||||
uintmax_t len;
|
uintmax_t len;
|
||||||
uintmax_t cap;
|
uintmax_t cap;
|
||||||
};
|
};
|
||||||
|
@ -57,6 +58,7 @@ static void onDestroy(void *data)
|
||||||
uiControlDestroy(uiControl(t->pages[i]));
|
uiControlDestroy(uiControl(t->pages[i]));
|
||||||
// and finally destroy ourselves
|
// and finally destroy ourselves
|
||||||
uiFree(t->pages);
|
uiFree(t->pages);
|
||||||
|
uiFree(t->margined);
|
||||||
uiFree(t);
|
uiFree(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,6 +137,7 @@ static void tabAppendPage(uiTab *tt, const char *name, uiControl *child)
|
||||||
if (t->len >= t->cap) {
|
if (t->len >= t->cap) {
|
||||||
t->cap += tabCapGrow;
|
t->cap += tabCapGrow;
|
||||||
t->pages = (uiContainer **) uiRealloc(t->pages, t->cap * sizeof (uiContainer *), "uiContainer *[]");
|
t->pages = (uiContainer **) uiRealloc(t->pages, t->cap * sizeof (uiContainer *), "uiContainer *[]");
|
||||||
|
t->margined = (int *) uiRealloc(t->margined, t->cap * sizeof (int), "int[]");
|
||||||
}
|
}
|
||||||
|
|
||||||
n = SendMessageW(t->hwnd, TCM_GETITEMCOUNT, 0, 0);
|
n = SendMessageW(t->hwnd, TCM_GETITEMCOUNT, 0, 0);
|
||||||
|
@ -145,6 +148,7 @@ static void tabAppendPage(uiTab *tt, const char *name, uiControl *child)
|
||||||
if (n != 0) // if this isn't the first page, we have to hide the other controls
|
if (n != 0) // if this isn't the first page, we have to hide the other controls
|
||||||
uiControlHide(uiControl(page));
|
uiControlHide(uiControl(page));
|
||||||
t->pages[t->len] = page;
|
t->pages[t->len] = page;
|
||||||
|
t->margined[t->len] = 0; // TODO should not be necessary but blah blah blah realloc
|
||||||
t->len++;
|
t->len++;
|
||||||
|
|
||||||
ZeroMemory(&item, sizeof (TCITEMW));
|
ZeroMemory(&item, sizeof (TCITEMW));
|
||||||
|
@ -176,9 +180,12 @@ static void tabDeletePage(uiTab *tt, uintmax_t n)
|
||||||
|
|
||||||
// now delete the page itself
|
// now delete the page itself
|
||||||
page = t->pages[n];
|
page = t->pages[n];
|
||||||
for (i = n; i < t->len - 1; i++)
|
for (i = n; i < t->len - 1; i++) {
|
||||||
t->pages[i] = t->pages[i + 1];
|
t->pages[i] = t->pages[i + 1];
|
||||||
|
t->margined[i] = t->margined[i + 1];
|
||||||
|
}
|
||||||
t->pages[i] = NULL;
|
t->pages[i] = NULL;
|
||||||
|
t->margined[i] = 0;
|
||||||
t->len--;
|
t->len--;
|
||||||
|
|
||||||
// make sure the page's control isn't destroyed
|
// make sure the page's control isn't destroyed
|
||||||
|
@ -188,6 +195,34 @@ static void tabDeletePage(uiTab *tt, uintmax_t n)
|
||||||
uiControlDestroy(uiControl(page));
|
uiControlDestroy(uiControl(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uintmax_t tabNumPages(uiTab *tt)
|
||||||
|
{
|
||||||
|
struct tab *t = (struct tab *) tt;
|
||||||
|
|
||||||
|
return t->len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tabMargined(uiTab *tt, uintmax_t n)
|
||||||
|
{
|
||||||
|
struct tab *t = (struct tab *) tt;
|
||||||
|
|
||||||
|
return t->margined[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
// from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx
|
||||||
|
#define tabMargin 7
|
||||||
|
|
||||||
|
static void tabSetMargined(uiTab *tt, uintmax_t n, int margined)
|
||||||
|
{
|
||||||
|
struct tab *t = (struct tab *) tt;
|
||||||
|
|
||||||
|
t->margined[n] = margined;
|
||||||
|
if (t->margined[n])
|
||||||
|
binSetMargins(t->pages[n], tabMargin, tabMargin, tabMargin, tabMargin);
|
||||||
|
else
|
||||||
|
binSetMargins(t->pages[n], 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
uiTab *uiNewTab(void)
|
uiTab *uiNewTab(void)
|
||||||
{
|
{
|
||||||
struct tab *t;
|
struct tab *t;
|
||||||
|
@ -216,6 +251,9 @@ uiTab *uiNewTab(void)
|
||||||
|
|
||||||
uiTab(t)->AppendPage = tabAppendPage;
|
uiTab(t)->AppendPage = tabAppendPage;
|
||||||
uiTab(t)->DeletePage = tabDeletePage;
|
uiTab(t)->DeletePage = tabDeletePage;
|
||||||
|
uiTab(t)->NumPages = tabNumPages;
|
||||||
|
uiTab(t)->Margined = tabMargined;
|
||||||
|
uiTab(t)->SetMargined = tabSetMargined;
|
||||||
|
|
||||||
return uiTab(t);
|
return uiTab(t);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue