summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-04-15 18:41:04 -0400
committerPietro Gagliardi <[email protected]>2015-04-15 18:41:04 -0400
commit86dbd5e8d2da9be32a437cc1bcfd7aedf57508a1 (patch)
tree3f35fc7d0f9da94693d76ab517eabf1aec547aef
parented22e747b84ac408a531850b9b47711a7618c77d (diff)
Converted ui.h to a pgidl file.
-rw-r--r--new/ui.h159
-rw-r--r--new/ui.idl162
2 files changed, 162 insertions, 159 deletions
diff --git a/new/ui.h b/new/ui.h
deleted file mode 100644
index b1a03c8..0000000
--- a/new/ui.h
+++ /dev/null
@@ -1,159 +0,0 @@
-// 6 april 2015
-
-#ifndef __UI_UI_H__
-#define __UI_UI_H__
-
-#include <stdint.h>
-
-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/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";
+
+};