Wrote code for what the base uiControl should be.
This commit is contained in:
parent
72ead3a23e
commit
2fb8e38852
|
@ -0,0 +1,112 @@
|
||||||
|
// 26 may 2015
|
||||||
|
#include "out/ui.h"
|
||||||
|
#include "uipriv.h"
|
||||||
|
|
||||||
|
struct controlBase {
|
||||||
|
uiControl *parent;
|
||||||
|
int hidden;
|
||||||
|
int disabled;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define controlBase(c) ((struct controlBase *) (TODO))
|
||||||
|
|
||||||
|
void controlBaseDestroy(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
if (cb->parent != NULL)
|
||||||
|
complain("attempt to destroy uiControl %p while it has a parent", c);
|
||||||
|
uiControlCommitDestroy(c);
|
||||||
|
// TODO free memory
|
||||||
|
}
|
||||||
|
|
||||||
|
uiControl *controlBaseParent(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
return cb->parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlBaseSetParent(uiControl *c, uiControl *parent)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
if (parent != NULL && cb->parent != NULL)
|
||||||
|
complain("attempt to reparent uiControl %p (has parent %p, attempt to give parent %p)", c, cb->parent, parent);
|
||||||
|
if (parent == NULL && cb->parent == NULL)
|
||||||
|
complain("attempt to double unparent uiControl %p", c);
|
||||||
|
cb->parent = parent;
|
||||||
|
uiControlCommitSetParent(c, parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
int controlBaseContainerVisible(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
if (cb->hidden)
|
||||||
|
return 0;
|
||||||
|
if (cb->parent == NULL)
|
||||||
|
return 1;
|
||||||
|
return uiControlContainerVisible(cb->parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlBaseShow(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
cb->hidden = 0;
|
||||||
|
uiControlUpdateState(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlBaseHide(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
cb->hidden = 1;
|
||||||
|
uiControlUpdateState(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
int controlBaseContainerEnabled(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
if (cb->disabled)
|
||||||
|
return 0;
|
||||||
|
if (cb->parent == NULL)
|
||||||
|
return 1;
|
||||||
|
return uiControlContainerEnabled(cb->parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlBaseEnable(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
cb->disabled = 0;
|
||||||
|
uiControlUpdateState(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlBaseDisable(uiControl *c)
|
||||||
|
{
|
||||||
|
struct controlBase *cb = controlBase(c);
|
||||||
|
|
||||||
|
cb->disabled = 1;
|
||||||
|
uiControlUpdateState(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlBaseUpdateState(uiControl *c)
|
||||||
|
{
|
||||||
|
if (uiControlContainerVisible(c))
|
||||||
|
uiControlCommitShow(c);
|
||||||
|
else
|
||||||
|
uiControlCommitHide(c);
|
||||||
|
if (uiControlContainerEnabled(c))
|
||||||
|
uiControlCommitEnable(c);
|
||||||
|
else
|
||||||
|
uiControlCommitDisable(c);
|
||||||
|
uiControlContainerUpdateState(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlBaseContainerUpdateState(uiControl *c)
|
||||||
|
{
|
||||||
|
// by default not a contianer; do nothing
|
||||||
|
}
|
Loading…
Reference in New Issue