193 lines
5.1 KiB
C
193 lines
5.1 KiB
C
|
|
/*
|
||
|
|
* xtb - a mini-toolbox for X11
|
||
|
|
*
|
||
|
|
* David Harrison
|
||
|
|
* University of California, Berkeley
|
||
|
|
* 1988
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef _XTB_
|
||
|
|
#define _XTB_
|
||
|
|
|
||
|
|
#include "copyright.h"
|
||
|
|
|
||
|
|
/* Handler function return codes */
|
||
|
|
typedef enum xtb_hret_defn {
|
||
|
|
XTB_NOTDEF, XTB_HANDLED, XTB_STOP
|
||
|
|
} xtb_hret;
|
||
|
|
|
||
|
|
/* If you have an ANSI compiler, some checking will be done */
|
||
|
|
#ifdef __STDC__
|
||
|
|
#define DECLARE(func, rtn, args) extern rtn func args
|
||
|
|
typedef void *xtb_data;
|
||
|
|
|
||
|
|
#else
|
||
|
|
#define DECLARE(func, rtn, args) extern rtn func ()
|
||
|
|
typedef char *xtb_data;
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/* Basic return value */
|
||
|
|
typedef struct xtb_frame_defn {
|
||
|
|
Window win;
|
||
|
|
int x_loc,
|
||
|
|
y_loc;
|
||
|
|
unsigned int width,
|
||
|
|
height;
|
||
|
|
} xtb_frame;
|
||
|
|
|
||
|
|
DECLARE(xtb_init, void, (Display * disp, int scrn,
|
||
|
|
unsigned long foreground,
|
||
|
|
unsigned long background,
|
||
|
|
XFontStruct * font));
|
||
|
|
/* Initializes mini-toolbox */
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Basic event handling
|
||
|
|
*/
|
||
|
|
|
||
|
|
DECLARE(xtb_register, void, (Window win,
|
||
|
|
xtb_hret(*func) (XEvent * evt, xtb_data info),
|
||
|
|
xtb_data info));
|
||
|
|
/* Registers call-back function */
|
||
|
|
|
||
|
|
DECLARE(xtb_lookup, xtb_data, (Window win));
|
||
|
|
/* Returns data associated with window */
|
||
|
|
|
||
|
|
DECLARE(xtb_dispatch, xtb_hret, (XEvent * evt));
|
||
|
|
/* Dispatches events for mini-toolbox */
|
||
|
|
|
||
|
|
DECLARE(xtb_unregister, int, (Window win, xtb_data * info));
|
||
|
|
/* Unregisters a call-back function */
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Command button frame
|
||
|
|
*/
|
||
|
|
|
||
|
|
DECLARE(xtb_bt_new, void, (Window win, char *text,
|
||
|
|
xtb_hret(*func) (Window win, int state,
|
||
|
|
xtb_data val),
|
||
|
|
xtb_data val,
|
||
|
|
xtb_frame * frame));
|
||
|
|
/* Creates new button */
|
||
|
|
|
||
|
|
DECLARE(xtb_bt_get, int, (Window win, xtb_data * stuff, int *na));
|
||
|
|
/* Returns state of button */
|
||
|
|
DECLARE(xtb_bt_set, int, (Window win, int val, xtb_data stuff, int na));
|
||
|
|
/* Sets state of button */
|
||
|
|
DECLARE(xtb_bt_del, void, (Window win, xtb_data * info));
|
||
|
|
/* Deletes a button */
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Button row frame - built on top of buttons
|
||
|
|
*/
|
||
|
|
|
||
|
|
DECLARE(xtb_br_new, void, (Window win, int cnt, char *lbls[], int init,
|
||
|
|
xtb_hret(*func) (Window win, int prev,
|
||
|
|
int this, xtb_data val),
|
||
|
|
xtb_data val,
|
||
|
|
xtb_frame * frame));
|
||
|
|
/* Creates a new button row frame */
|
||
|
|
|
||
|
|
DECLARE(xtb_br_get, int, (Window win));
|
||
|
|
/* Returns currently selected button */
|
||
|
|
DECLARE(xtb_br_del, void, (Window win));
|
||
|
|
/* Deletes a button row */
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Text output (label) frames
|
||
|
|
*/
|
||
|
|
|
||
|
|
DECLARE(xtb_to_new, void, (Window win, char *text,
|
||
|
|
XFontStruct * ft, xtb_frame * frame));
|
||
|
|
/* Create new text output frame */
|
||
|
|
DECLARE(xtb_to_del, void, (Window win));
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Text input (editable text) frames
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define MAXCHBUF 1024
|
||
|
|
|
||
|
|
DECLARE(xtb_ti_new, void, (Window win, char *text, int maxchar,
|
||
|
|
xtb_hret(*func) (Window win, int ch,
|
||
|
|
char *textcopy, xtb_data * val),
|
||
|
|
xtb_data val, xtb_frame * frame));
|
||
|
|
/* Creates a new text input frame */
|
||
|
|
|
||
|
|
DECLARE(xtb_ti_get, void, (Window win, char text[MAXCHBUF], xtb_data * val));
|
||
|
|
/* Returns state of text input frame */
|
||
|
|
DECLARE(xtb_ti_set, int, (Window win, char *text, xtb_data val));
|
||
|
|
/* Sets the state of text input frame */
|
||
|
|
DECLARE(xtb_ti_ins, int, (Window win, int ch));
|
||
|
|
/* Inserts character onto end of text input frame */
|
||
|
|
DECLARE(xtb_ti_dch, int, (Window win));
|
||
|
|
/* Deletes character from end of text input frame */
|
||
|
|
DECLARE(xtb_ti_del, void, (Window win, xtb_data * info));
|
||
|
|
/* Deletes an text input frame */
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Block frame
|
||
|
|
*/
|
||
|
|
|
||
|
|
DECLARE(xtb_bk_new, void, (Window win, unsigned width, unsigned height,
|
||
|
|
xtb_frame * frame));
|
||
|
|
/* Makes a new block frame */
|
||
|
|
DECLARE(xtb_bk_del, void, (Window win));
|
||
|
|
/* Deletes a block frame */
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Formatting support
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define MAX_BRANCH 50
|
||
|
|
|
||
|
|
typedef enum xtb_fmt_types_defn {
|
||
|
|
W_TYPE, A_TYPE
|
||
|
|
} xtb_fmt_types;
|
||
|
|
typedef enum xtb_fmt_dir_defn {
|
||
|
|
HORIZONTAL, VERTICAL
|
||
|
|
} xtb_fmt_dir;
|
||
|
|
typedef enum xtb_just_defn {
|
||
|
|
XTB_CENTER = 0, XTB_LEFT, XTB_RIGHT, XTB_TOP, XTB_BOTTOM
|
||
|
|
} xtb_just;
|
||
|
|
|
||
|
|
typedef struct xtb_fmt_widget_defn {
|
||
|
|
xtb_fmt_types type; /* W_TYPE */
|
||
|
|
xtb_frame *w;
|
||
|
|
} xtb_fmt_widget;
|
||
|
|
|
||
|
|
typedef struct xtb_fmt_align_defn {
|
||
|
|
xtb_fmt_types type; /* A_TYPE */
|
||
|
|
xtb_fmt_dir dir; /* HORIZONTAL or VERTICAL */
|
||
|
|
int padding; /* Outside padding */
|
||
|
|
int interspace; /* Internal padding */
|
||
|
|
xtb_just just; /* Justification */
|
||
|
|
int ni; /* Number of items */
|
||
|
|
union xtb_fmt_defn *items[MAX_BRANCH]; /* Branches themselves */
|
||
|
|
} xtb_fmt_align;
|
||
|
|
|
||
|
|
typedef union xtb_fmt_defn {
|
||
|
|
xtb_fmt_types type; /* W_TYPE or A_TYPE */
|
||
|
|
xtb_fmt_widget wid;
|
||
|
|
xtb_fmt_align align;
|
||
|
|
} xtb_fmt;
|
||
|
|
|
||
|
|
#define NE 0
|
||
|
|
|
||
|
|
DECLARE(xtb_w, xtb_fmt *, (xtb_frame * w));
|
||
|
|
/* Returns formatting structure for frame */
|
||
|
|
DECLARE(xtb_hort, xtb_fmt *, (xtb_just just, int padding, int interspace,...));
|
||
|
|
/* Varargs routine for horizontal formatting */
|
||
|
|
DECLARE(xtb_vert, xtb_fmt *, (xtb_just just, int padding, int interspace,...));
|
||
|
|
/* Varargs routine for vertical formatting */
|
||
|
|
DECLARE(xtb_fmt_do, xtb_fmt *, (xtb_fmt * def, unsigned *w, unsigned *h));
|
||
|
|
/* Carries out formatting */
|
||
|
|
DECLARE(xtb_mv_frames, void, (int nf, xtb_frame frames[]));
|
||
|
|
/* Actually moves widgets */
|
||
|
|
DECLARE(xtb_fmt_free, void, (xtb_fmt * def));
|
||
|
|
/* Frees resources claimed by xtb_w, xtb_hort, and xtb_vert */
|
||
|
|
|
||
|
|
#endif /* _XTB_ */
|