2005-04-16 15:20:36 -07:00
/*
* dialog . h - - common declarations for all dialog modules
*
* AUTHOR : Savio Lam ( lam836 @ cs . cuhk . hk )
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include <sys/types.h>
# include <fcntl.h>
# include <unistd.h>
# include <ctype.h>
# include <stdlib.h>
# include <string.h>
# ifdef __sun__
# define CURS_MACROS
# endif
# include CURSES_LOC
/*
* Colors in ncurses 1.9 .9 e do not work properly since foreground and
* background colors are OR ' d rather than separately masked . This version
* of dialog was hacked to work with ncurses 1.9 .9 e , making it incompatible
* with standard curses . The simplest fix ( to make this work with standard
* curses ) uses the wbkgdset ( ) function , not used in the original hack .
* Turn it off if we ' re building with 1.9 .9 e , since it just confuses things .
*/
# if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
# define OLD_NCURSES 1
# undef wbkgdset
2005-11-19 19:13:34 +01:00
# define wbkgdset(w,p) /*nothing */
2005-04-16 15:20:36 -07:00
# else
# define OLD_NCURSES 0
# endif
# define TR(params) _tracef params
# define ESC 27
# define TAB 9
# define MAX_LEN 2048
# define BUF_SIZE (10*1024)
# define MIN(x,y) (x < y ? x : y)
# define MAX(x,y) (x > y ? x : y)
# ifndef ACS_ULCORNER
# define ACS_ULCORNER '+'
# endif
# ifndef ACS_LLCORNER
# define ACS_LLCORNER '+'
# endif
# ifndef ACS_URCORNER
# define ACS_URCORNER '+'
# endif
# ifndef ACS_LRCORNER
# define ACS_LRCORNER '+'
# endif
# ifndef ACS_HLINE
# define ACS_HLINE '-'
# endif
# ifndef ACS_VLINE
# define ACS_VLINE '|'
# endif
# ifndef ACS_LTEE
# define ACS_LTEE '+'
# endif
# ifndef ACS_RTEE
# define ACS_RTEE '+'
# endif
# ifndef ACS_UARROW
# define ACS_UARROW '^'
# endif
# ifndef ACS_DARROW
# define ACS_DARROW 'v'
# endif
2005-11-19 21:56:20 +01:00
/*
2006-07-24 21:40:46 +02:00
* Color definitions
2005-04-16 15:20:36 -07:00
*/
2006-07-24 21:40:46 +02:00
struct dialog_color {
chtype atr ; /* Color attribute */
int fg ; /* foreground */
int bg ; /* background */
int hl ; /* highlight this item */
} ;
2005-04-16 15:20:36 -07:00
2006-07-24 21:40:46 +02:00
struct dialog_info {
const char * backtitle ;
struct dialog_color screen ;
struct dialog_color shadow ;
struct dialog_color dialog ;
struct dialog_color title ;
struct dialog_color border ;
struct dialog_color button_active ;
struct dialog_color button_inactive ;
struct dialog_color button_key_active ;
struct dialog_color button_key_inactive ;
struct dialog_color button_label_active ;
struct dialog_color button_label_inactive ;
struct dialog_color inputbox ;
struct dialog_color inputbox_border ;
struct dialog_color searchbox ;
struct dialog_color searchbox_title ;
struct dialog_color searchbox_border ;
struct dialog_color position_indicator ;
struct dialog_color menubox ;
struct dialog_color menubox_border ;
struct dialog_color item ;
struct dialog_color item_selected ;
struct dialog_color tag ;
struct dialog_color tag_selected ;
struct dialog_color tag_key ;
struct dialog_color tag_key_selected ;
struct dialog_color check ;
struct dialog_color check_selected ;
struct dialog_color uarrow ;
struct dialog_color darrow ;
} ;
2005-04-16 15:20:36 -07:00
/*
* Global variables
*/
2006-07-24 21:40:46 +02:00
extern struct dialog_info dlg ;
2005-04-16 15:20:36 -07:00
/*
* Function prototypes
*/
2005-11-19 19:13:34 +01:00
void init_dialog ( void ) ;
void end_dialog ( void ) ;
void attr_clear ( WINDOW * win , int height , int width , chtype attr ) ;
void dialog_clear ( void ) ;
void print_autowrap ( WINDOW * win , const char * prompt , int width , int y , int x ) ;
void print_button ( WINDOW * win , const char * label , int y , int x , int selected ) ;
2005-11-19 23:38:06 +01:00
void print_title ( WINDOW * dialog , const char * title , int width ) ;
2005-11-19 19:13:34 +01:00
void draw_box ( WINDOW * win , int y , int x , int height , int width , chtype box ,
chtype border ) ;
void draw_shadow ( WINDOW * win , int y , int x , int height , int width ) ;
int first_alpha ( const char * string , const char * exempt ) ;
int dialog_yesno ( const char * title , const char * prompt , int height , int width ) ;
int dialog_msgbox ( const char * title , const char * prompt , int height ,
int width , int pause ) ;
int dialog_textbox ( const char * title , const char * file , int height , int width ) ;
int dialog_menu ( const char * title , const char * prompt , int height , int width ,
int menu_height , const char * choice , int item_no ,
const char * const * items ) ;
int dialog_checklist ( const char * title , const char * prompt , int height ,
int width , int list_height , int item_no ,
2005-12-22 04:44:04 +01:00
const char * const * items ) ;
2005-07-27 14:14:00 -04:00
extern char dialog_input_result [ ] ;
2005-11-19 19:13:34 +01:00
int dialog_inputbox ( const char * title , const char * prompt , int height ,
int width , const char * init ) ;
2005-04-16 15:20:36 -07:00
/*
* This is the base for fictitious keys , which activate
* the buttons .
*
* Mouse - generated keys are the following :
* - - the first 32 are used as numbers , in addition to ' 0 ' - ' 9 '
* - - the lowercase are used to signal mouse - enter events ( M_EVENT + ' o ' )
* - - uppercase chars are used to invoke the button ( M_EVENT + ' O ' )
*/
# define M_EVENT (KEY_MAX+1)