Home | History | Annotate | Line # | Download | only in libmenu
menu.h revision 1.9
      1  1.9   blymn /*	$NetBSD: menu.h,v 1.9 2000/05/11 14:01:28 blymn Exp $	*/
      2  1.1   blymn 
      3  1.1   blymn /*-
      4  1.4   blymn  * Copyright (c) 1998-1999 Brett Lymn (blymn (at) baea.com.au, brett_lymn (at) yahoo.com.au)
      5  1.1   blymn  * All rights reserved.
      6  1.1   blymn  *
      7  1.1   blymn  * Redistribution and use in source and binary forms, with or without
      8  1.1   blymn  * modification, are permitted provided that the following conditions
      9  1.1   blymn  * are met:
     10  1.1   blymn  * 1. Redistributions of source code must retain the above copyright
     11  1.1   blymn  *    notice, this list of conditions and the following disclaimer.
     12  1.1   blymn  * 2. The name of the author may not be used to endorse or promote products
     13  1.1   blymn  *    derived from this software withough specific prior written permission
     14  1.1   blymn  *
     15  1.1   blymn  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     16  1.1   blymn  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     17  1.1   blymn  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     18  1.1   blymn  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     19  1.1   blymn  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     20  1.1   blymn  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     21  1.1   blymn  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     22  1.1   blymn  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     23  1.1   blymn  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     24  1.1   blymn  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     25  1.1   blymn  *
     26  1.1   blymn  *
     27  1.1   blymn  */
     28  1.1   blymn 
     29  1.2  kleink #ifndef	_MENU_H_
     30  1.2  kleink #define	_MENU_H_
     31  1.2  kleink 
     32  1.1   blymn #include <curses.h>
     33  1.1   blymn #include <eti.h>
     34  1.1   blymn 
     35  1.1   blymn /* requests for the menu_driver call */
     36  1.1   blymn #define REQ_BASE_NUM      (0x100)
     37  1.1   blymn #define REQ_LEFT_ITEM     (0x101)
     38  1.1   blymn #define REQ_RIGHT_ITEM    (0x102)
     39  1.1   blymn #define REQ_UP_ITEM       (0x103)
     40  1.1   blymn #define REQ_DOWN_ITEM     (0x104)
     41  1.1   blymn #define REQ_SCR_ULINE     (0x105)
     42  1.1   blymn #define REQ_SCR_DLINE     (0x106)
     43  1.1   blymn #define REQ_SCR_DPAGE     (0x107)
     44  1.1   blymn #define REQ_SCR_UPAGE     (0x108)
     45  1.1   blymn #define REQ_FIRST_ITEM    (0x109)
     46  1.1   blymn #define REQ_LAST_ITEM     (0x10a)
     47  1.1   blymn #define REQ_NEXT_ITEM     (0x10b)
     48  1.1   blymn #define REQ_PREV_ITEM     (0x10c)
     49  1.1   blymn #define REQ_TOGGLE_ITEM   (0x10d)
     50  1.1   blymn #define REQ_CLEAR_PATTERN (0x10e)
     51  1.1   blymn #define REQ_BACK_PATTERN  (0x10f)
     52  1.1   blymn #define REQ_NEXT_MATCH    (0x110)
     53  1.1   blymn #define REQ_PREV_MATCH    (0x111)
     54  1.1   blymn 
     55  1.1   blymn #define MAX_COMMAND       (0x111) /* last menu driver request - for application
     56  1.1   blymn 				     defined commands */
     57  1.1   blymn 
     58  1.1   blymn /* Menu options */
     59  1.1   blymn typedef unsigned int OPTIONS;
     60  1.1   blymn 
     61  1.1   blymn /* and the values they can have */
     62  1.1   blymn #define O_ONEVALUE   (0x1)
     63  1.1   blymn #define O_SHOWDESC   (0x2)
     64  1.1   blymn #define O_ROWMAJOR   (0x4)
     65  1.1   blymn #define O_IGNORECASE (0x8)
     66  1.1   blymn #define O_SHOWMATCH  (0x10)
     67  1.1   blymn #define O_NONCYCLIC  (0x20)
     68  1.1   blymn #define O_SELECTABLE (0x40)
     69  1.1   blymn 
     70  1.1   blymn typedef struct __menu_str {
     71  1.1   blymn         char *string;
     72  1.1   blymn         int length;
     73  1.1   blymn } MENU_STR;
     74  1.1   blymn 
     75  1.1   blymn typedef struct __menu MENU;
     76  1.1   blymn typedef struct __item ITEM;
     77  1.1   blymn 
     78  1.4   blymn typedef void (*Menu_Hook) (MENU *);
     79  1.1   blymn 
     80  1.1   blymn struct __item {
     81  1.1   blymn         MENU_STR name;
     82  1.1   blymn         MENU_STR description;
     83  1.1   blymn         char *userptr;
     84  1.1   blymn         int visible;  /* set if item is visible */
     85  1.1   blymn         int selected; /* set if item has been selected */
     86  1.1   blymn 	int row; /* menu row this item is on */
     87  1.1   blymn 	int col; /* menu column this item is on */
     88  1.1   blymn         OPTIONS opts;
     89  1.1   blymn         MENU *parent; /* menu this item is bound to */
     90  1.1   blymn 	int index; /* index number for this item, if attached */
     91  1.1   blymn 	  /* The following are the item's neighbours - makes menu
     92  1.1   blymn 	     navigation easier */
     93  1.1   blymn 	ITEM *left;
     94  1.1   blymn 	ITEM *right;
     95  1.1   blymn 	ITEM *up;
     96  1.1   blymn 	ITEM *down;
     97  1.1   blymn };
     98  1.1   blymn 
     99  1.1   blymn struct __menu {
    100  1.1   blymn         int rows; /* max number of rows to be displayed */
    101  1.1   blymn         int cols; /* max number of columns to be displayed */
    102  1.1   blymn 	int item_rows; /* number of item rows we have */
    103  1.1   blymn 	int item_cols; /* number of item columns we have */
    104  1.1   blymn         int cur_row; /* current cursor row */
    105  1.1   blymn         int cur_col; /* current cursor column */
    106  1.1   blymn         MENU_STR mark; /* menu mark string */
    107  1.1   blymn         MENU_STR unmark; /* menu unmark string */
    108  1.1   blymn         OPTIONS opts; /* options for the menu */
    109  1.1   blymn         char *pattern; /* the pattern buffer */
    110  1.1   blymn 	int plen;  /* pattern buffer length */
    111  1.1   blymn 	int match_len; /* length of pattern matched */
    112  1.1   blymn         int posted; /* set if menu is posted */
    113  1.1   blymn         attr_t fore; /* menu foreground */
    114  1.1   blymn         attr_t back; /* menu background */
    115  1.1   blymn         attr_t grey; /* greyed out (nonselectable) menu item */
    116  1.1   blymn         int pad;  /* filler char between name and description */
    117  1.1   blymn         char *userptr;
    118  1.1   blymn 	int top_row; /* the row that is at the top of the menu */
    119  1.1   blymn 	int max_item_width; /* widest item */
    120  1.1   blymn 	int col_width; /* width of the menu columns - this is not always
    121  1.1   blymn 			  the same as the widest item */
    122  1.1   blymn         int item_count; /* number of items attached */
    123  1.1   blymn         ITEM **items; /* items associated with this menu */
    124  1.1   blymn         int  cur_item; /* item cursor is currently positioned at */
    125  1.1   blymn         int in_init; /* set when processing an init or term function call */
    126  1.4   blymn         Menu_Hook menu_init; /* call this when menu is posted */
    127  1.4   blymn         Menu_Hook menu_term; /* call this when menu is unposted */
    128  1.4   blymn         Menu_Hook item_init; /* call this when menu posted & after
    129  1.1   blymn 				       current item changes */
    130  1.4   blymn         Menu_Hook item_term; /* call this when menu unposted & just
    131  1.1   blymn 				       before current item changes */
    132  1.1   blymn         WINDOW *menu_win; /* the menu window */
    133  1.1   blymn         WINDOW *menu_subwin; /* the menu subwindow */
    134  1.1   blymn 	int we_created;
    135  1.1   blymn };
    136  1.1   blymn 
    137  1.1   blymn 
    138  1.1   blymn /* Public function prototypes. */
    139  1.1   blymn __BEGIN_DECLS
    140  1.9   blymn int  menu_driver(MENU *, int);
    141  1.9   blymn int scale_menu(MENU *, int *, int *);
    142  1.9   blymn int set_top_row(MENU *, int);
    143  1.9   blymn int pos_menu_cursor(MENU *);
    144  1.9   blymn int top_row(MENU *);
    145  1.9   blymn 
    146  1.9   blymn int  free_menu(MENU *);
    147  1.9   blymn char menu_back(MENU *);
    148  1.9   blymn char menu_fore(MENU *);
    149  1.9   blymn void menu_format(MENU *, int *, int *);
    150  1.9   blymn char menu_grey(MENU *);
    151  1.9   blymn Menu_Hook menu_init(MENU *);
    152  1.9   blymn char *menu_mark(MENU *);
    153  1.9   blymn OPTIONS menu_opts(MENU *);
    154  1.9   blymn int menu_opts_off(MENU *, OPTIONS);
    155  1.9   blymn int menu_opts_on(MENU *, OPTIONS);
    156  1.9   blymn int menu_pad(MENU *);
    157  1.9   blymn char *menu_pattern(MENU *);
    158  1.9   blymn WINDOW *menu_sub(MENU *);
    159  1.9   blymn Menu_Hook menu_term(MENU *);
    160  1.9   blymn char *menu_unmark (MENU *);
    161  1.9   blymn char *menu_userptr(MENU *);
    162  1.9   blymn WINDOW *menu_win(MENU *);
    163  1.9   blymn MENU *new_menu(ITEM **);
    164  1.9   blymn int post_menu(MENU *);
    165  1.9   blymn int set_menu_back(MENU *, attr_t);
    166  1.9   blymn int set_menu_fore(MENU *, attr_t);
    167  1.9   blymn int set_menu_format(MENU *, int, int);
    168  1.9   blymn int set_menu_grey(MENU *, attr_t);
    169  1.9   blymn int set_menu_init(MENU *, Menu_Hook);
    170  1.9   blymn int set_menu_items(MENU *, ITEM **);
    171  1.9   blymn int set_menu_mark(MENU *, char *);
    172  1.9   blymn int set_menu_opts(MENU *, OPTIONS);
    173  1.9   blymn int set_menu_pad(MENU *, int);
    174  1.9   blymn int set_menu_pattern(MENU *, char *);
    175  1.9   blymn int set_menu_sub(MENU *, WINDOW *);
    176  1.9   blymn int set_menu_term(MENU *, Menu_Hook);
    177  1.9   blymn int set_menu_unmark(MENU *, char *);
    178  1.9   blymn int set_menu_userptr(MENU *, char *);
    179  1.9   blymn int  set_menu_win(MENU *, WINDOW *);
    180  1.9   blymn int unpost_menu(MENU *);
    181  1.9   blymn 
    182  1.9   blymn ITEM *current_item(MENU *);
    183  1.9   blymn int free_item(ITEM *);
    184  1.9   blymn int item_count(MENU *);
    185  1.9   blymn char *item_description(ITEM *);
    186  1.9   blymn int item_index(ITEM *);
    187  1.9   blymn Menu_Hook item_init(MENU *);
    188  1.9   blymn char *item_name(ITEM *);
    189  1.9   blymn OPTIONS item_opts(ITEM *);
    190  1.9   blymn int item_opts_off(ITEM *, OPTIONS);
    191  1.9   blymn int item_opts_on(ITEM *, OPTIONS);
    192  1.9   blymn Menu_Hook item_term(MENU *);
    193  1.9   blymn char *item_userptr(ITEM *);
    194  1.9   blymn int item_value(ITEM *);
    195  1.9   blymn int item_visible(ITEM *);
    196  1.9   blymn ITEM **menu_items(MENU *);
    197  1.9   blymn ITEM *new_item(char *, char *);
    198  1.9   blymn int set_current_item(MENU *, ITEM *);
    199  1.9   blymn int set_item_init(MENU *, Menu_Hook);
    200  1.9   blymn int set_item_opts(ITEM *, OPTIONS);
    201  1.9   blymn int set_item_term(MENU *, Menu_Hook);
    202  1.9   blymn int set_item_userptr(ITEM *, char *);
    203  1.9   blymn int set_item_value(ITEM *, int);
    204  1.1   blymn 
    205  1.1   blymn __END_DECLS
    206  1.1   blymn 
    207  1.2  kleink #endif /* !_MENU_H_ */
    208