freebsd-skq/gnu/lib/libdialog/ui_objects.h
Jordan K. Hubbard ae5b2dcf86 Add another hateful global to libdialog (what the heck, there are already
so many).  For now, the only extended attribute implemented is NO ECHO,
useful for things like passwords.  See TESTS/input2.c for an example.
This should go into 2.2.
1996-12-14 16:14:21 +00:00

115 lines
3.6 KiB
C

/*
* Author: Marc van Kempen
* Desc: include file for UI-objects
*
* Copyright (c) 1995, Marc van Kempen
*
* All rights reserved.
*
* This software may be used, modified, copied, distributed, and
* sold, in both source and binary form provided that the above
* copyright and these terms are retained, verbatim, as the first
* lines of this file. Under no circumstances is the author
* responsible for the proper functioning of this software, nor does
* the author assume any responsibility for damages incurred with
* its use.
*
*/
#include "dialog.h"
#include <ncurses.h>
/***********************************************************************
*
* Defines
*
***********************************************************************/
#define ctrl(a) ((a) - 'a' + 1)
/* the Object types */
#define STRINGOBJ 1
#define LISTOBJ 2
#define BUTTONOBJ 3
/* the return signals from the selection routines */
/* 1000 and higher should avoid conflicts with keys pressed */
#define SEL_CR 1001 /* return was pressed */
#define SEL_ESC 1002 /* ESC pressed */
#define SEL_TAB 1003 /* TAB pressed */
#define SEL_BACKTAB 1004 /* SHIFT-TAB pressed */
#define SEL_BUTTON 1005 /* a button was pressed */
/***********************************************************************
*
* Typedefs
*
***********************************************************************/
typedef struct {
WINDOW *win; /* the window it's contained in */
char *title; /* the prompt for the input field */
char *s; /* initial value of the input field */
int x, y, w, len; /* the (y, x) position of the upperleft */
/* corner and the width <w> of the display */
/* and length <len> of the field */
int attr_mask; /* special attributes */
} StringObj;
typedef struct {
WINDOW *win; /* the windows it's contained in */
char *title; /* the title of the list */
char **name; /* the names of the list */
int *seld; /* the currently selected names */
char *elt; /* the current element in the list list[sel] */
int x, y, w, h, n; /* dimensions of list and # of elements (n) */
int scroll, sel; /* current position in the list */
} ListObj;
typedef struct {
WINDOW *win; /* the window it's contained in */
char *title; /* title for the button */
int x, y, w, h; /* its dimensions */
int *pushed; /* boolean that determines wether button was pushed */
} ButtonObj;
typedef struct ComposeObj {
int objtype;
void *obj;
struct ComposeObj *next, *prev;
} ComposeObj;
/**********************************************************************
*
* Prototypes
*
**********************************************************************/
void RefreshStringObj(StringObj *so);
StringObj *NewStringObj(WINDOW *win, char *title, char *s,
int y, int x, int w, int len);
int SelectStringObj(StringObj *so);
void DelStringObj(StringObj *so);
void RefreshListObj(ListObj *lo);
ListObj *NewListObj(WINDOW *win, char *title, char **list,
char *listelt, int y, int x, int h, int w, int n);
void UpdateListObj(ListObj *lo, char **list, int n);
int SelectListObj(ListObj *lo);
void DelListObj(ListObj *obj);
void MarkCurrentListObj(ListObj *lo);
void MarkAllListObj(ListObj *lo);
void UnMarkAllListObj(ListObj *lo);
void RefreshButtonObj(ButtonObj *bo);
ButtonObj *NewButtonObj(WINDOW *win, char *title, int *pushed,
int y, int x);
int SelectButtonObj(ButtonObj *bo);
void DelButtonObj(ButtonObj *bo);
void AddObj(ComposeObj **Obj, int objtype, void *obj);
void FreeObj(ComposeObj *Obj);
int ReadObj(ComposeObj *Obj);
int PollObj(ComposeObj **Obj);
void DelObj(ComposeObj *Obj);