Home | History | Annotate | Line # | Download | only in libmenu
menu.h revision 1.1
      1  1.1  blymn /*      $Id: menu.h,v 1.1 1999/11/23 11:12:34 blymn Exp $ */
      2  1.1  blymn 
      3  1.1  blymn /*-
      4  1.1  blymn  * Copyright (c) 1998-1999 Brett Lymn (blymn (at) baea.com.au, brett_lymn (at) yahoo.com)
      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.1  blymn #include <curses.h>
     30  1.1  blymn #include <eti.h>
     31  1.1  blymn 
     32  1.1  blymn #ifndef MENU_H
     33  1.1  blymn #define MENU_H 1
     34  1.1  blymn 
     35  1.1  blymn /* the following is a hack to define attr_t until the curses lib
     36  1.1  blymn    does it officially */
     37  1.1  blymn #ifndef CURSES_V3
     38  1.1  blymn typedef char attr_t;
     39  1.1  blymn #endif
     40  1.1  blymn 
     41  1.1  blymn /* requests for the menu_driver call */
     42  1.1  blymn #define REQ_BASE_NUM      (0x100)
     43  1.1  blymn #define REQ_LEFT_ITEM     (0x101)
     44  1.1  blymn #define REQ_RIGHT_ITEM    (0x102)
     45  1.1  blymn #define REQ_UP_ITEM       (0x103)
     46  1.1  blymn #define REQ_DOWN_ITEM     (0x104)
     47  1.1  blymn #define REQ_SCR_ULINE     (0x105)
     48  1.1  blymn #define REQ_SCR_DLINE     (0x106)
     49  1.1  blymn #define REQ_SCR_DPAGE     (0x107)
     50  1.1  blymn #define REQ_SCR_UPAGE     (0x108)
     51  1.1  blymn #define REQ_FIRST_ITEM    (0x109)
     52  1.1  blymn #define REQ_LAST_ITEM     (0x10a)
     53  1.1  blymn #define REQ_NEXT_ITEM     (0x10b)
     54  1.1  blymn #define REQ_PREV_ITEM     (0x10c)
     55  1.1  blymn #define REQ_TOGGLE_ITEM   (0x10d)
     56  1.1  blymn #define REQ_CLEAR_PATTERN (0x10e)
     57  1.1  blymn #define REQ_BACK_PATTERN  (0x10f)
     58  1.1  blymn #define REQ_NEXT_MATCH    (0x110)
     59  1.1  blymn #define REQ_PREV_MATCH    (0x111)
     60  1.1  blymn 
     61  1.1  blymn #define MAX_COMMAND       (0x111) /* last menu driver request - for application
     62  1.1  blymn 				     defined commands */
     63  1.1  blymn 
     64  1.1  blymn /* Menu options */
     65  1.1  blymn typedef unsigned int OPTIONS;
     66  1.1  blymn 
     67  1.1  blymn /* and the values they can have */
     68  1.1  blymn #define O_ONEVALUE   (0x1)
     69  1.1  blymn #define O_SHOWDESC   (0x2)
     70  1.1  blymn #define O_ROWMAJOR   (0x4)
     71  1.1  blymn #define O_IGNORECASE (0x8)
     72  1.1  blymn #define O_SHOWMATCH  (0x10)
     73  1.1  blymn #define O_NONCYCLIC  (0x20)
     74  1.1  blymn #define O_SELECTABLE (0x40)
     75  1.1  blymn 
     76  1.1  blymn typedef struct __menu_str {
     77  1.1  blymn         char *string;
     78  1.1  blymn         int length;
     79  1.1  blymn } MENU_STR;
     80  1.1  blymn 
     81  1.1  blymn typedef struct __menu MENU;
     82  1.1  blymn typedef struct __item ITEM;
     83  1.1  blymn 
     84  1.1  blymn typedef void (*_menui_menu_hook) (MENU *);
     85  1.1  blymn 
     86  1.1  blymn struct __item {
     87  1.1  blymn         MENU_STR name;
     88  1.1  blymn         MENU_STR description;
     89  1.1  blymn         char *userptr;
     90  1.1  blymn         int visible;  /* set if item is visible */
     91  1.1  blymn         int selected; /* set if item has been selected */
     92  1.1  blymn 	int row; /* menu row this item is on */
     93  1.1  blymn 	int col; /* menu column this item is on */
     94  1.1  blymn         OPTIONS opts;
     95  1.1  blymn         MENU *parent; /* menu this item is bound to */
     96  1.1  blymn 	int index; /* index number for this item, if attached */
     97  1.1  blymn 	  /* The following are the item's neighbours - makes menu
     98  1.1  blymn 	     navigation easier */
     99  1.1  blymn 	ITEM *left;
    100  1.1  blymn 	ITEM *right;
    101  1.1  blymn 	ITEM *up;
    102  1.1  blymn 	ITEM *down;
    103  1.1  blymn };
    104  1.1  blymn 
    105  1.1  blymn struct __menu {
    106  1.1  blymn         int rows; /* max number of rows to be displayed */
    107  1.1  blymn         int cols; /* max number of columns to be displayed */
    108  1.1  blymn 	int item_rows; /* number of item rows we have */
    109  1.1  blymn 	int item_cols; /* number of item columns we have */
    110  1.1  blymn         int cur_row; /* current cursor row */
    111  1.1  blymn         int cur_col; /* current cursor column */
    112  1.1  blymn         MENU_STR mark; /* menu mark string */
    113  1.1  blymn         MENU_STR unmark; /* menu unmark string */
    114  1.1  blymn         OPTIONS opts; /* options for the menu */
    115  1.1  blymn         char *pattern; /* the pattern buffer */
    116  1.1  blymn 	int plen;  /* pattern buffer length */
    117  1.1  blymn 	int match_len; /* length of pattern matched */
    118  1.1  blymn         int posted; /* set if menu is posted */
    119  1.1  blymn         attr_t fore; /* menu foreground */
    120  1.1  blymn         attr_t back; /* menu background */
    121  1.1  blymn         attr_t grey; /* greyed out (nonselectable) menu item */
    122  1.1  blymn         int pad;  /* filler char between name and description */
    123  1.1  blymn         char *userptr;
    124  1.1  blymn 	int top_row; /* the row that is at the top of the menu */
    125  1.1  blymn 	int max_item_width; /* widest item */
    126  1.1  blymn 	int col_width; /* width of the menu columns - this is not always
    127  1.1  blymn 			  the same as the widest item */
    128  1.1  blymn         int item_count; /* number of items attached */
    129  1.1  blymn         ITEM **items; /* items associated with this menu */
    130  1.1  blymn         int  cur_item; /* item cursor is currently positioned at */
    131  1.1  blymn         int in_init; /* set when processing an init or term function call */
    132  1.1  blymn         _menui_menu_hook menu_init; /* call this when menu is posted */
    133  1.1  blymn         _menui_menu_hook menu_term; /* call this when menu is unposted */
    134  1.1  blymn         _menui_menu_hook item_init; /* call this when menu posted & after
    135  1.1  blymn 				       current item changes */
    136  1.1  blymn         _menui_menu_hook item_term; /* call this when menu unposted & just
    137  1.1  blymn 				       before current item changes */
    138  1.1  blymn         WINDOW *menu_win; /* the menu window */
    139  1.1  blymn         WINDOW *menu_subwin; /* the menu subwindow */
    140  1.1  blymn 	int we_created;
    141  1.1  blymn };
    142  1.1  blymn 
    143  1.1  blymn 
    144  1.1  blymn /* Public function prototypes. */
    145  1.1  blymn __BEGIN_DECLS
    146  1.1  blymn int  menu_driver __P((MENU *, int));
    147  1.1  blymn int scale_menu __P((MENU *, int *, int *));
    148  1.1  blymn int set_top_row __P((MENU *, int));
    149  1.1  blymn int pos_menu_cursor __P((MENU *));
    150  1.1  blymn int top_row __P((MENU *));
    151  1.1  blymn 
    152  1.1  blymn int  free_menu __P((MENU *));
    153  1.1  blymn char menu_back __P((MENU *));
    154  1.1  blymn char menu_fore __P((MENU *));
    155  1.1  blymn void menu_format __P((MENU *, int *, int *));
    156  1.1  blymn char menu_grey __P((MENU *));
    157  1.1  blymn _menui_menu_hook menu_init __P((MENU *));
    158  1.1  blymn char *menu_mark __P((MENU *));
    159  1.1  blymn OPTIONS menu_opts __P((MENU *));
    160  1.1  blymn int menu_opts_off __P((MENU *, OPTIONS));
    161  1.1  blymn int menu_opts_on __P((MENU *, OPTIONS));
    162  1.1  blymn int menu_pad __P((MENU *));
    163  1.1  blymn char *menu_pattern __P((MENU *));
    164  1.1  blymn WINDOW *menu_sub __P((MENU *));
    165  1.1  blymn _menui_menu_hook menu_term __P((MENU *));
    166  1.1  blymn char *menu_unmark __P((MENU *));
    167  1.1  blymn char *menu_userptr __P((MENU *));
    168  1.1  blymn WINDOW *menu_win __P((MENU *));
    169  1.1  blymn MENU *new_menu __P((ITEM **));
    170  1.1  blymn int post_menu __P((MENU *));
    171  1.1  blymn int set_menu_back __P((MENU *, attr_t));
    172  1.1  blymn int set_menu_fore __P((MENU *, attr_t));
    173  1.1  blymn int set_menu_format __P((MENU *, int, int));
    174  1.1  blymn int set_menu_grey __P((MENU *, attr_t));
    175  1.1  blymn int set_menu_init __P((MENU *, _menui_menu_hook));
    176  1.1  blymn int set_menu_items __P((MENU *, ITEM **));
    177  1.1  blymn int set_menu_mark __P((MENU *, char *));
    178  1.1  blymn int set_menu_opts __P((MENU *, OPTIONS));
    179  1.1  blymn int set_menu_pad __P((MENU *, int));
    180  1.1  blymn int set_menu_pattern __P((MENU *, char *));
    181  1.1  blymn int  set_menu_sub __P((MENU *, WINDOW *));
    182  1.1  blymn int set_menu_term __P((MENU *, _menui_menu_hook));
    183  1.1  blymn int set_menu_unmark __P((MENU *, char *));
    184  1.1  blymn int set_menu_userptr __P((MENU *, char *));
    185  1.1  blymn int  set_menu_win __P((MENU *, WINDOW *));
    186  1.1  blymn int unpost_menu __P((MENU *));
    187  1.1  blymn 
    188  1.1  blymn ITEM *current_item __P((MENU *));
    189  1.1  blymn int free_item __P((ITEM *));
    190  1.1  blymn int item_count __P((MENU *));
    191  1.1  blymn char *item_description __P((ITEM *));
    192  1.1  blymn int item_index __P((ITEM *));
    193  1.1  blymn _menui_menu_hook item_init __P((MENU *));
    194  1.1  blymn char *item_name __P((ITEM *));
    195  1.1  blymn OPTIONS item_opts __P((ITEM *));
    196  1.1  blymn int item_opts_off __P((ITEM *, OPTIONS));
    197  1.1  blymn int item_opts_on __P((ITEM *, OPTIONS));
    198  1.1  blymn _menui_menu_hook item_term __P((MENU *));
    199  1.1  blymn char *item_userptr __P((ITEM *));
    200  1.1  blymn int item_value __P((ITEM *));
    201  1.1  blymn int item_visible __P((ITEM *));
    202  1.1  blymn ITEM **menu_items __P((MENU *));
    203  1.1  blymn ITEM *new_item __P((char *, char *));
    204  1.1  blymn int set_current_item __P((MENU *, ITEM *));
    205  1.1  blymn int set_item_init __P((MENU *, _menui_menu_hook));
    206  1.1  blymn int set_item_opts __P((ITEM *, OPTIONS));
    207  1.1  blymn int set_item_term __P((MENU *, _menui_menu_hook));
    208  1.1  blymn int set_item_userptr __P((ITEM *, char *));
    209  1.1  blymn int set_item_value __P((ITEM *, int));
    210  1.1  blymn 
    211  1.1  blymn #ifdef EXPOSE_PRIVATES
    212  1.1  blymn void __menui_draw_item __P((MENU *, int));
    213  1.1  blymn 
    214  1.1  blymn /* stole this from curses.h */
    215  1.1  blymn #define max(a,b)        ((a) > (b) ? a : b)
    216  1.1  blymn #endif
    217  1.1  blymn __END_DECLS
    218  1.1  blymn 
    219  1.1  blymn #endif
    220