// 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 { raw "#include "; raw "#include "; raw "#ifndef _UI_EXTERN"; raw "#define _UI_EXTERN extern"; raw "#endif"; struct InitOptions { field Size size_t; }; func Init(options *InitOptions) *const char; func Uninit(void); func FreeInitError(err *const char); func Main(void); func Quit(void); func OnShouldQuit(f *func(data *void) int, data *void); func FreeText(text *char); func RegisterType(name *const char, parent uintmax_t, size size_t) uintmax_t; func IsA(p *void, type uintmax_t, fail int) *void; struct Typed { field Type uintmax_t; }; raw "#define uiTyped(this) ((uiTyped *) (this))"; 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 Parent(void) *Control; func SetParent(c *Control); 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 QueueResize(void); func Sizing(void) *Sizing; func ContainerVisible(void) int; func Show(void); func Hide(void); func ContainerEnabled(void) int; func Enable(void); func Disable(void); func UpdateState(void); func StartZOrder(void) uintptr_t; func SetZOrder(param uintptr_t) uintptr_t; func HasTabStops(void) int; func CommitDestroy(void); func CommitSetParent(parent *uiControl); func CommitShow(void); func CommitHide(void); func CommitEnable(void); func CommitDisable(void); func ContainerUpdateState(void); }; func NewControl(type uintmax_t) *Control; raw "#define uiDefineControlType(typename, funcname, realtype) \\"; raw " static uintmax_t type_ ## typename = 0; \\"; raw " uintmax_t funcname(void) \\"; raw " { \\"; raw " if (type_ ## typename == 0) \\"; raw " type_ ## typename = uiRegisterType(#typename, uiTypeControl(), sizeof (realtype)); \\"; raw " return type_ ## typename; \\"; raw " }"; func FreeSizing(d *Sizing); func MakeContainer(c *Control) uintptr_t; interface Window from Control { func Title(void) *char; func SetTitle(title *const char); func OnClosing(f *func(w *Window, data *void) int, data *void); func SetChild(c *Control); func Margined(void) int; func SetMargined(margined int); func ResizeChild(void); }; 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 OnChanged(f *func(e *Entry, data *void), data *void); func ReadOnly(void) int; func SetReadOnly(readonly int); }; 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 { func Append(name *const char, c *Control); func InsertAt(name *const char, before uintmax_t, c *Control); func Delete(index uintmax_t); func NumPages(void) uintmax_t; func Margined(page uintmax_t) int; func SetMargined(page uintmax_t, margined int); }; func NewTab(void) *Tab; interface Group from Control { func Title(void) *char; func SetTitle(title *const char); func SetChild(c *Control); func Margined(void) int; func SetMargined(margined int); }; func NewGroup(text *const char) *Group; // spinbox/slider rules: // setting value outside of range will automatically clamp // initial value is minimum // complaint if min >= max? interface Spinbox from Control { func Value(void) intmax_t; func SetValue(value intmax_t); func OnChanged(f *func(s *Spinbox, data *void), data *void); }; func NewSpinbox(min intmax_t, max intmax_t) *Spinbox; interface ProgressBar from Control { // TODO Value() func SetValue(n int); }; func NewProgressBar(void) *ProgressBar; interface Slider from Control { func Value(void) intmax_t; func SetValue(value intmax_t); func OnChanged(f *func(s *Slider, data *void), data *void); }; func NewSlider(min intmax_t, max intmax_t) *Slider; interface Separator from Control { }; func NewHorizontalSeparator(void) *Separator; interface Combobox from Control { func Append(text *const char); }; func NewCombobox(void) *Combobox; func NewEditableCombobox(void) *Combobox; interface RadioButtons from Control { func Append(text *const char); }; func NewRadioButtons(void) *RadioButtons; interface DateTimePicker from Control { }; func NewDateTimePicker(void) *DateTimePicker; func NewDatePicker(void) *DateTimePicker; func NewTimePicker(void) *DateTimePicker; interface Menu { func AppendItem(name *const char) *MenuItem; func AppendCheckItem(name *const char) *MenuItem; func AppendQuitItem(void) *MenuItem; func AppendPreferencesItem(void) *MenuItem; func AppendAboutItem(void) *MenuItem; func AppendSeparator(void); }; func NewMenu(name *const char) *Menu; interface MenuItem { func Enable(void); func Disable(void); func OnClicked(f *func(sender *MenuItem, window *Window, data *void), data *void); func Checked(void) int; func SetChecked(checked int); }; func OpenFile(void) *char; func SaveFile(void) *char; func MsgBox(title *const char, description *const char); func MsgBoxError(title *const char, description *const char); };