diff options
| author | Pietro Gagliardi <[email protected]> | 2015-04-15 18:41:04 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2015-04-15 18:41:04 -0400 |
| commit | 86dbd5e8d2da9be32a437cc1bcfd7aedf57508a1 (patch) | |
| tree | 3f35fc7d0f9da94693d76ab517eabf1aec547aef /new/ui.idl | |
| parent | ed22e747b84ac408a531850b9b47711a7618c77d (diff) | |
Converted ui.h to a pgidl file.
Diffstat (limited to 'new/ui.idl')
| -rw-r--r-- | new/ui.idl | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/new/ui.idl b/new/ui.idl new file mode 100644 index 0000000..d61311b --- /dev/null +++ b/new/ui.idl @@ -0,0 +1,162 @@ +// 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 <stdint.h>"; + +// 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 Data *void; // for use by implementations only + 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); +}; + +// Parent represents an OS control that hosts other OS controls. +// It is used internally by package ui and by implementations. +// Window, Tab, and Group all use uiParents to store their controls. +interface Parent { + // Internal points to internal data. + // Do not access or alter this field. + field Internal *void; + + // TODO destroy + // TODO object destruction debug handler + + // Handle returns the window handle of the uiParent. + // On Windows, this is a HWND. + // On GTK+, this is a GtkContainer. + // On Mac OS X, this is a NSView. + func Handle(void) uintptr_t; + + // TODO rename and clean this up + // SetChild sets the uiControl that this uiParent relegates. + // It calls uiControl.SetParent() which should, in turn, call uiParent.Update(). + // The uiParent should already not have a child and the uiControl should already not have a parent. + // + // child can be NULL, in which case the uiParent has no children. + // This version should also call uiControl.SetParent(), passing NULL. + // + // If this uiParent has a child already, then the current child is replaced with the new one. + func SetChild(c *Control); + + // SetMargins sets the margins of the uiParent to the given margins. + // It does not call uiParent.Update(); its caller must. + // The units of the margins are backend-defined. + // The initial margins are all 0. + func SetMargins(left intmax_t, top intmax_t, right intmax_t, bottom intmax_t); + + // TODO Resize? + + // Update tells the uiParent to re-layout its children immediately. + // It is called when a widget is shown or hidden or when a control is added or removed from a container such as uiStack. + func Update(void); +}; +func uiNewParent(osParent uintptr_t) *Parent; + +interface uiWindow { + 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), data *void); + func SetChild(c *Control); + func Margined(void) int; + func SetMargined(margined int); +}; +func uiNewWindow(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() *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() *Label; + +interface Tab from Control { + AddPage(name *const char, c *Control); +} +func NewTab() *Tab; + +raw "#endif"; + +}; |
