/*****************************************************************************/ /** Copyright 1988 by Evans & Sutherland Computer Corporation, **/ /** Salt Lake City, Utah **/ /** Portions Copyright 1989 by the Massachusetts Institute of Technology **/ /** Cambridge, Massachusetts **/ /** **/ /** All Rights Reserved **/ /** **/ /** Permission to use, copy, modify, and distribute this software and **/ /** its documentation for any purpose and without fee is hereby **/ /** granted, provided that the above copyright notice appear in all **/ /** copies and that both that copyright notice and this permis- **/ /** sion notice appear in supporting documentation, and that the **/ /** names of Evans & Sutherland and M.I.T. not be used in advertising **/ /** in publicity pertaining to distribution of the software without **/ /** specific, written prior permission. **/ /** **/ /** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/ /** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/ /** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/ /** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/ /** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/ /** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/ /** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/ /** OR PERFORMANCE OF THIS SOFTWARE. **/ /*****************************************************************************/ /*********************************************************************** * * $XConsortium: menus.h,v 1.24 89/12/10 17:46:26 jim Exp $ * * twm menus include file * * 17-Nov-87 Thomas E. LaStrange File created * ***********************************************************************/ #ifndef _MENUS_ #define _MENUS_ #define TWM_ROOT "bLoB_GoOp" /* my private root menu */ #define TWM_WINDOWS "TwmWindows" /* for f.menu "TwmWindows" */ #define MAX_FILE_SIZE 4096 /* max chars to read from file for cut */ typedef struct MenuItem { struct MenuItem *next; /* next menu item */ struct MenuItem *prev; /* prev menu item */ struct MenuRoot *sub; /* MenuRoot of a pull right menu */ struct MenuRoot *root; /* back pointer to my MenuRoot */ char *item; /* the character string displayed */ char *action; /* action to be performed */ Pixel fore; /* foreground color */ Pixel back; /* background color */ Pixel hi_fore; /* highlight foreground */ Pixel hi_back; /* highlight background */ short item_num; /* item number of this menu */ short x, y, width, height; /* bbox for text */ short func; /* twm built in function */ short state; /* video state, 0 = normal, 1 = reversed */ short strlen; /* strlen(item) */ short user_colors; /* colors were specified */ /* Added pie menu stuff. -deh */ short slice; /* Desired relative slice size */ float angle; /* Angle through center of slice */ float dx, dy; /* Cosine and sine of angle */ float subtend; /* Angle subtended by slice */ short quadrant; /* Quadrant of leading edge */ float slope; /* Slope of leading edge */ Pixmap icon; /* Icon pixmap */ Pixmap mask; /* Icon mask */ } MenuItem; typedef struct MenuRoot { struct MenuItem *first; /* first item in menu */ struct MenuItem *last; /* last item in menu */ struct MenuRoot *prev; /* previous root menu if pull right */ struct MenuRoot *next; /* next in list of root menus */ char *name; /* name of root */ Window w; /* the window of the menu */ Window shadow; /* the shadow window */ Pixel hi_fore; /* highlight foreground */ Pixel hi_back; /* highlight background */ short mapped; /* NEVER_MAPPED, UNMAPPED, or MAPPED */ short x, y; /* upper left corner of menu */ short height; /* height of the menu */ short width; /* width of the menu */ short items; /* number of items in the menu */ short pull; /* is there a pull right entry ? */ short entered; /* EnterNotify following pop up */ short real_menu; /* this is a real menu */ /* Added pie menu stuff. -deh */ short pie_menu; /* this is a pie menu */ short title_x, title_y; /* position of menu title */ short title_height; /* height of menu title */ float initial_angle; /* pie menu initial angle in radians */ short label_radius; /* Radius of labels from menu center */ short label_radius_min; /* Minimum value of label_radius */ short label_radius_step; /* Step for increasing label_radius */ short center_x, center_y; /* Menu center */ short inactive_radius; /* Radius of inactive menu center */ short current; /* Index of current item (or -1) */ XSegment *segments; /* Line segments to draw */ } MenuRoot; #define NEVER_MAPPED 0 /* constants for mapped field of MenuRoot */ #define UNMAPPED 1 #define MAPPED 2 typedef struct MouseButton { int func; /* the function number */ int mask; /* modifier mask */ MenuRoot *menu; /* menu if func is F_MENU */ MenuItem *item; /* action to perform if func != F_MENU */ } MouseButton; typedef struct FuncKey { struct FuncKey *next; /* next in the list of function keys */ char *name; /* key name */ KeySym keysym; /* X keysym */ KeyCode keycode; /* X keycode */ int cont; /* context */ int mods; /* modifiers */ int func; /* function to perform */ char *win_name; /* window name (if any) */ char *action; /* action string (if any) */ } FuncKey; extern int RootFunction; extern MenuRoot *ActiveMenu; extern MenuItem *ActiveItem; extern int MoveFunction; extern int WindowMoved; extern int ConstMove; extern int ConstMoveDir; extern int ConstMoveX; extern int ConstMoveY; extern int ConstMoveXL; extern int ConstMoveXR; extern int ConstMoveYT; extern int ConstMoveYB; #define MAXMENUDEPTH 10 /* max number of nested menus */ extern int MenuDepth; #define MOVE_NONE 0 /* modes of constrained move */ #define MOVE_VERT 1 #define MOVE_HORIZ 2 #define WARPSCREEN_NEXT "next" #define WARPSCREEN_PREV "prev" #define WARPSCREEN_BACK "back" #define COLORMAP_NEXT "next" #define COLORMAP_PREV "prev" #define COLORMAP_DEFAULT "default" extern void InitTitlebarButtons(); extern void InitMenus(); extern MenuRoot *NewMenuRoot(); extern MenuItem *AddToMenu(); extern Bool PopUpMenu(); extern MenuRoot *FindMenuRoot(); extern Bool AddFuncKey(); extern int ExecuteFunction(); extern int DeferExecution(); extern int Execute(); extern void FocusOnRoot(); #endif /* _MENUS_ */