From 2f785c9a09533b58d38bf4d3d56e23a5cc6e1f9f Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Wed, 15 Apr 2015 18:41:04 -0400 Subject: [PATCH] Converted ui.h to a pgidl file. --- ui.h | 159 ------------------------------------------------------- ui.idl | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+), 159 deletions(-) delete mode 100644 ui.h create mode 100644 ui.idl diff --git a/ui.h b/ui.h deleted file mode 100644 index b1a03c8f..00000000 --- a/ui.h +++ /dev/null @@ -1,159 +0,0 @@ -// 6 april 2015 - -#ifndef __UI_UI_H__ -#define __UI_UI_H__ - -#include - -typedef struct uiInitOptions uiInitOptions; - -// TODO note that should be initialized to zero -struct uiInitOptions { - // TODO cbSize - - // If nonzero, allocations will be logged to stderr. - // See leaks.awk. - int debugLogAllocations; -}; - -const char *uiInit(uiInitOptions *); -void uiFreeInitError(const char *); - -void uiMain(void); -void uiQuit(void); - -void uiFreeText(char *); - -typedef struct uiSizing uiSizing; -typedef struct uiSizingSys uiSizingSys; -struct uiSizing { - intmax_t xPadding; - intmax_t yPadding; - uiSizingSys *sys; -}; - -typedef struct uiParent uiParent; - -typedef struct uiControl uiControl; -struct uiControl { - void *data; // for use by implementations only - void *internal; // for use by ui only - void (*destroy)(uiControl *); - uintptr_t (*handle)(uiControl *); - void (*setParent)(uiControl *, uiParent *); - void (*preferredSize)(uiControl *, uiSizing *, intmax_t *, intmax_t *); - void (*resize)(uiControl *, intmax_t, intmax_t, intmax_t, intmax_t, uiSizing *); - int (*visible)(uiControl *); - void (*show)(uiControl *); - void (*hide)(uiControl *); - void (*containerShow)(uiControl *); - void (*containerHide)(uiControl *); - void (*enable)(uiControl *); - void (*disable)(uiControl *); - void (*containerEnable)(uiControl *); - void (*containerDisable)(uiControl *); -}; -void uiControlDestroy(uiControl *); -uintptr_t uiControlHandle(uiControl *); -void uiControlSetParent(uiControl *, uiParent *); -void uiControlPreferredSize(uiControl *, uiSizing *, intmax_t *width, intmax_t *height); -void uiControlResize(uiControl *, intmax_t, intmax_t, intmax_t, intmax_t, uiSizing *); -int uiControlVisible(uiControl *); -void uiControlShow(uiControl *); -void uiControlHide(uiControl *); -void uiControlContainerShow(uiControl *); -void uiControlContainerHide(uiControl *); -void uiControlEnable(uiControl *); -void uiControlDisable(uiControl *); -void uiControlContainerEnable(uiControl *); -void uiControlContainerDisable(uiControl *); - -// uiParent represents an OS control that hosts other OS controls. -// It is used internally by package ui and by implementations. -// uiWindow, uiTab, and uiGroup all use uiParents to store their controls. -struct uiParent { - // Internal points to internal data. - // Do not access or alter this field. - void *Internal; - - // 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. - uintptr_t (*Handle)(uiParent *p); -#define uiParentHandle(p) ((*((p)->Handle))((p))) - - // 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. - void (*SetChild)(uiParent *p, uiControl *child); -#define uiParentSetChild(p, child) ((*((p)->SetChild))((p), (child))) - - // 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. - void (*SetMargins)(uiParent *p, intmax_t left, intmax_t top, intmax_t right, intmax_t bottom); -#define uiParentSetMargins(p, left, top, right, bottom) ((*((p)->SetMargins))((p), (left), (top), (right), (bottom))) - - // 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. - void (*Update)(uiParent *p); -#define uiParentUpdate(p) ((*((p)->Update))((p))) -}; -uiParent *uiNewParent(uintptr_t); - -typedef struct uiWindow uiWindow; -uiWindow *uiNewWindow(char *, int, int); -void uiWindowDestroy(uiWindow *); -uintptr_t uiWindowHandle(uiWindow *); -char *uiWindowTitle(uiWindow *); -void uiWindowSetTitle(uiWindow *, const char *); -void uiWindowShow(uiWindow *); -void uiWindowHide(uiWindow *); -void uiWindowOnClosing(uiWindow *, int (*)(uiWindow *, void *), void *); -void uiWindowSetChild(uiWindow *, uiControl *); -int uiWindowMargined(uiWindow *); -void uiWindowSetMargined(uiWindow *, int); - -uiControl *uiNewButton(const char *); -char *uiButtonText(uiControl *); -void uiButtonSetText(uiControl *, const char *); -void uiButtonOnClicked(uiControl *, void (*)(uiControl *, void *), void *); - -uiControl *uiNewHorizontalStack(void); -uiControl *uiNewVerticalStack(void); -void uiStackAppend(uiControl *, uiControl *, int); -void uiStackDelete(uiControl *, uintmax_t); -int uiStackPadded(uiControl *); -void uiStackSetPadded(uiControl *, int); - -uiControl *uiNewEntry(void); -char *uiEntryText(uiControl *); -void uiEntrySetText(uiControl *, const char *); - -uiControl *uiNewCheckbox(const char *); -char *uiCheckboxText(uiControl *); -void uiCheckboxSetText(uiControl *, const char *); -void uiCheckboxOnToggled(uiControl *, void (*)(uiControl *, void *), void *); -int uiCheckboxChecked(uiControl *); -void uiCheckboxSetChecked(uiControl *, int); - -uiControl *uiNewLabel(const char *); -char *uiLabelText(uiControl *); -void uiLabelSetText(uiControl *, const char *); - -uiControl *uiNewTab(void); -void uiTabAddPage(uiControl *, const char *, uiControl *); - -#endif diff --git a/ui.idl b/ui.idl new file mode 100644 index 00000000..d61311bf --- /dev/null +++ b/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 "; + +// 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"; + +};