// 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; // This is the menu that the application will use. // To give this menu to a uiWindow, specify nonzero for the hasMenubar parameter to uiNewWindow(). // This value, nor any element of the array it points to, should never change during execution of the program. // TODO make it a proper const *const // TODO idl2h doesn't support making this even const * yet... field Menu *Menu; }; // 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, hasMenubar 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 Box from Control { func Append(c *Control, stretchy int); func Delete(index uintmax_t); func Padded(void) int; func SetPadded(padded int); }; func NewHorizontalBox(void) *Box; func NewVerticalBox(void) *Box; 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; struct Menu { field Name *const char; // TODO make a proper const *const // TODO idl2h doesn't support making this even const * yet... field Items *MenuItem; }; struct MenuItem { field Name *const char; field Type MenuItemType; }; enum MenuItemType { Command, Checkbox, Separator, }; // TODO allow these to be specified directly in the IDL /* TODO raw "extern const char *const uiMenuItemQuit;"; raw "extern const char *const uiMenuItemPreferences;"; raw "extern const char *const uiMenuItemAbout;"; raw "extern const char *const uiMenuItemSeparator;"; */ raw "#define uiMenuItemQuit ((char *)1)"; raw "#define uiMenuItemPreferences ((char *)2)"; raw "#define uiMenuItemAbout ((char *)3)"; raw "#define uiMenuItemSeparator ((char *)4)"; raw "#endif"; };