// 6 april 2015 // This is not an IDL file for the conventional RPC or Microsoft IDLs. // Instead, this is for a custom IDL of my own creation. // You can find it at github.com/andlabs/pgidl package ui { // TODO autogenerate this somehow // TODO alternatively, move AFTER typedefs raw "#ifndef __UI_UI_H__"; raw "#define __UI_UI_H__"; raw "#include "; // TODO note that should be initialized to zero struct InitOptions { // TODO cbSize // If nonzero, allocations will be logged to stderr. // See leaks.awk. field debugLogAllocations int; }; // TODO const char raw "const char *uiInit(uiInitOptions *);"; raw "void uiFreeInitError(const char *);"; func Main(void); func Quit(void); func FreeText(text *char); raw "typedef struct uiSizingSys uiSizingSys;"; struct Sizing { field xPadding intmax_t; field yPadding intmax_t; field sys *uiSizingSys; }; interface Control { field Internal *void; // for use by ui only func Destroy(void); func Handle(void) uintptr_t; func SetParent(p *Parent); func PreferredSize(d *Sizing, width *intmax_t, height *intmax_t); func Resize(x intmax_t, y intmax_t, width intmax_t, height intmax_t, d *Sizing); func Visible(void) int; func Show(void); func Hide(void); func ContainerShow(void); func ContainerHide(void); func Enable(void); func Disable(void); func ContainerEnable(void); func ContainerDisable(void); }; interface Parent { field Internal *void; func Destroy(void); // TODO object destruction debug handler func Handle(void) uintptr_t; func SetMainControl(c *Control); func SetMargins(left intmax_t, top intmax_t, right intmax_t, bottom intmax_t); // TODO Resize? func Update(void); }; func NewParent(osParent uintptr_t) *Parent; interface Window { field Internal *void; func Destroy(void); func Handle(void) uintptr_t; func Title(void) *char; func SetTitle(title *const char); func Show(void); func Hide(void); func OnClosing(f *func(w *Window, data *void) int, data *void); func SetChild(c *Control); func Margined(void) int; func SetMargined(margined int); }; func NewWindow(title *const char, width int, height int) *Window; interface Button from Control { func Text(void) *char; func SetText(text *const char); func OnClicked(f *func(b *Button, data *void), data *void); }; func NewButton(text *const char) *Button; interface Stack from Control { func Append(c *Control, stretchy int); func Delete(index uintmax_t); func Padded(void) int; func SetPadded(padded int); }; func NewHorizontalStack(void) *Stack; func NewVerticalStack(void) *Stack; interface Entry from Control { func Text(void) *char; func SetText(text *const char); }; func NewEntry(void) *Entry; interface Checkbox from Control { func Text(void) *char; func SetText(text *const char); func OnToggled(f *func(c *Checkbox, data *void), data *void); func Checked(void) int; func SetChecked(checked int); }; func NewCheckbox(text *const char) *Checkbox; interface Label from Control { func Text(void) *char; func SetText(text *const char); }; func NewLabel(text *const char) *Label; interface Tab from Control { // TODO rename to AppendPage() func AddPage(name *const char, c *Control); func DeletePage(index uintmax_t); }; func NewTab(void) *Tab; raw "#endif"; };