summaryrefslogtreecommitdiff
path: root/sys/include/control.h
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 16:47:56 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 16:47:56 +0300
commitc558a99e0be506a9abdf677f0ca4490644e05fc1 (patch)
tree17aef678ad05a32ef96ce8385703cb3fe089a5c7 /sys/include/control.h
parente5888a1ffdae813d7575f5fb02275c6bb07e5199 (diff)
Import sources from 2011-03-30 iso image - sys/include
Diffstat (limited to 'sys/include/control.h')
-rwxr-xr-xsys/include/control.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/sys/include/control.h b/sys/include/control.h
new file mode 100755
index 000000000..29f2e6548
--- /dev/null
+++ b/sys/include/control.h
@@ -0,0 +1,213 @@
+#pragma src "/sys/src/libcontrol"
+#pragma lib "libcontrol.a"
+
+#pragma varargck argpos ctlprint 2
+#pragma varargck argpos _ctlprint 2
+
+typedef struct Control Control;
+typedef struct Controlset Controlset;
+typedef struct CParse CParse;
+typedef struct CCache CCache;
+typedef struct CCache CImage;
+typedef struct CCache CFont;
+
+enum /* types */
+{
+ Ctlunknown,
+ Ctlbox,
+ Ctlbutton,
+ Ctlentry,
+ Ctlkeyboard,
+ Ctllabel,
+ Ctlmenu,
+ Ctlradio,
+ Ctlscribble,
+ Ctlslider,
+ Ctltabs,
+ Ctltext,
+ Ctltextbutton,
+ Ctltextbutton3,
+ Ctlgroup, /* divider between controls and metacontrols */
+ Ctlboxbox,
+ Ctlcolumn,
+ Ctlrow,
+ Ctlstack,
+ Ctltab,
+ Ntypes,
+};
+
+struct Controlset
+{
+ Control *controls;
+ Image *screen;
+ Control *actives;
+ Control *focus;
+ Channel *ctl;
+ Channel *data; /* currently only for sync */
+ Channel *kbdc;
+ Channel *mousec;
+ Channel *resizec;
+ Channel *resizeexitc;
+ Channel *csexitc;
+ Keyboardctl *keyboardctl; /* will be nil if user supplied keyboard */
+ Mousectl *mousectl; /* will be nil if user supplied mouse */
+ int clicktotype; /* flag */
+};
+
+struct Control
+{
+ /* known to client */
+ char *name;
+ Rectangle rect;
+ Rectangle size; /* minimum/maximum Dx, Dy (not a rect) */
+ Channel *event; /* chan(char*) to client */
+ Channel *data; /* chan(char*) to client */
+
+ /* internal to control set */
+ int type;
+ int hidden; /* hide hides, show unhides (and redraws) */
+ Controlset *controlset;
+ Image *screen; /* where Control appears */
+ char *format; /* used to generate events */
+ char wevent; /* event channel rewired */
+ char wdata; /* data channel rewired */
+
+ /* method table */
+ void (*ctl)(Control*, CParse*);
+ void (*mouse)(Control*, Mouse*);
+ void (*key)(Control*, Rune*);
+ void (*exit)(Control*);
+ void (*setsize)(Control*);
+ void (*activate)(Control*, int);
+ Control *nextactive;
+ Control *next;
+};
+
+struct CCache
+{
+ union{
+ Image *image;
+ Font *font;
+ };
+ char *name;
+ int index; /* entry number in cache */
+ int ref; /* one for client, plus one for each use */
+};
+
+struct CParse
+{
+ char str[256];
+ char *sender;
+ char *receiver;
+ int cmd;
+ char *pargs[32];
+ int iargs[32];
+ char **args;
+ int nargs;
+};
+
+enum /* alignments */
+{
+ Aupperleft = 0,
+ Auppercenter,
+ Aupperright,
+ Acenterleft,
+ Acenter,
+ Acenterright,
+ Alowerleft,
+ Alowercenter,
+ Alowerright,
+ Nalignments
+};
+
+enum
+{
+ _Ctlmaxsize = 10000,
+};
+
+extern char *ctltypenames[];
+
+/* Functions used internally */
+void _ctladdgroup(Control*, Control*);
+void _ctlargcount(Control*, CParse*, int);
+Control* _createctl(Controlset*, char*, uint, char*);
+Rune* _ctlrunestr(char*);
+char* _ctlstrrune(Rune*);
+void _ctlputsnarf(Rune*);
+Rune* _ctlgetsnarf(void);
+int _ctlalignment(char*);
+Point _ctlalignpoint(Rectangle, int, int, int);
+void _ctlfocus(Control*, int);
+void _activategroup(Control*);
+void _deactivategroup(Control*);
+int _ctllookup(char *s, char *tab[], int ntab);
+void _ctlprint(Control *c, char *fmt, ...);
+
+/* images */
+CImage* _getctlimage(char*);
+void _setctlimage(Control*, CImage**, char*);
+void _putctlimage(CImage*);
+CFont* _getctlfont(char*);
+void _putctlfont(CFont*);
+
+/* fonts */
+CImage* _getctlfont(char*);
+void _setctlfont(Control*, CImage**, char*);
+void _putctlfont(CImage*);
+CFont* _getctlfont(char*);
+void _putctlfont(CFont*);
+
+/* Public functions */
+
+/* images */
+int namectlimage(Image*, char*);
+int freectlimage(char*);
+
+/* fonts */
+int namectlfont(Font*, char*);
+int freectlfont(char*);
+
+/* commands */
+int ctlprint(Control*, char*, ...);
+
+/* general */
+void initcontrols(void);
+Controlset* newcontrolset(Image*, Channel*, Channel*, Channel*);
+void closecontrolset(Controlset*);
+void closecontrol(Control*);
+void ctlerror(char*, ...);
+Control* controlcalled(char*);
+
+/* publicly visible error-checking allocation routines */
+void* ctlmalloc(uint);
+void* ctlrealloc(void*, uint);
+char* ctlstrdup(char*);
+
+/* creation */
+void controlwire(Control*, char*, Channel*);
+void activate(Control*);
+void deactivate(Control*);
+Control* createbox(Controlset*, char*);
+Control* createbutton(Controlset*, char*);
+Control* createcolumn(Controlset*, char*);
+Control* createboxbox(Controlset*, char*);
+Control* createentry(Controlset*, char*);
+Control* createkeyboard(Controlset*, char*);
+Control* createlabel(Controlset*, char*);
+Control* createmenu(Controlset*, char*);
+Control* createradiobutton(Controlset*, char*);
+Control* createrow(Controlset*, char*);
+Control* createscribble(Controlset*, char*);
+Control* createslider(Controlset*, char*);
+Control* createstack(Controlset*, char*);
+Control* createtab(Controlset*, char*);
+Control* createtext(Controlset*, char*);
+Control* createtextbutton(Controlset*, char*);
+Control* createtextbutton3(Controlset*, char*);
+
+/* user-supplied */
+void resizecontrolset(Controlset*);
+
+int _ctlsnarffd;
+char *alignnames[];
+int ctldeletequits;