#ifndef MENU_H
#define MENU_H
/* TN5250 - An implementation of the 5250 telnet protocol.
* Copyright (C) 2005 James Rich
*
* This file is part of TN5250.
*
* TN5250 is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1, or (at your option)
* any later version.
*
* TN5250 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA
*
*/
#ifdef __cplusplus
extern "C"
{
#endif
#define MENU_TYPE_MENUBAR 0x01 /* Menu bar */
#define MENU_TYPE_SINGLE_SELECT_FIELD 0x11 /* Single choice selection field */
#define MENU_TYPE_MULTIPLE_SELECT_FIELD 0x12 /* Multiple choice selection field */
#define MENU_TYPE_SINGLE_SELECT_LIST 0x21 /* Single choice selection list */
#define MENU_TYPE_MULTIPLE_SELECT_LIST 0x22 /* Multiple choice selection list */
#define MENU_TYPE_SINGLE_SELECT_FIELD_PULL_DOWN 0x31 /* Single choice selection field and a pull-down list */
#define MENU_TYPE_MULTIPLE_SELECT_FIELD_PULL_DOWN 0x32 /* Multiple choice selection field and a pull-down list */
#define MENU_TYPE_PUSH_BUTTONS 0x41 /* Push buttons */
#define MENU_TYPE_PUSH_BUTTONS_PULL_DOWN 0x51 /* Push buttons in a pull-down menu */
struct _Tn5250Menubar;
struct _Tn5250Menuitem;
struct _Tn5250DBuffer;
/***** lib5250/Tn5250Menubar
* NAME
* Tn5250Menubar
* SYNOPSIS
* Tn5250Menubar *menubar = tn5250_menubar_new ();
* DESCRIPTION
* The Tn5250Menubar object manages a 5250 menubar on the display.
* SOURCE
*/
struct _Tn5250Menubar
{
struct _Tn5250MenubarPrivate *data;
struct _Tn5250Menubar *next;
struct _Tn5250Menubar *prev;
unsigned int id; /* Numeric ID of this menubar */
struct _Tn5250Menuitem *menuitem_list;
int menuitem_count;
unsigned char flagbyte1;
unsigned char flagbyte2;
unsigned char flagbyte3;
unsigned short restricted_cursor;
unsigned char type;
unsigned int row; /* Row menubar starts on */
unsigned int column; /* Column menubar starts on */
unsigned int itemsize; /* max size (in characters) of menubar item */
unsigned int height; /* height (in rows) of menubar */
unsigned int items; /* number of items on this menubar */
struct _Tn5250DBuffer *table;
};
typedef struct _Tn5250Menubar Tn5250Menubar;
/* Manipulate menubars */
extern Tn5250Menubar *tn5250_menubar_new ();
extern Tn5250Menubar *tn5250_menubar_copy (Tn5250Menubar * This);
extern void tn5250_menubar_destroy (Tn5250Menubar * This);
#define tn5250_menubar_restricted_cursor(This) ((This)->restricted_cursor)
#define tn5250_menubar_type(This) ((This)->type)
#define tn5250_menubar_start_row(This) ((This)->row)
#define tn5250_menubar_start_col(This) ((This)->column)
#define tn5250_menubar_itemsize(This) ((This)->itemsize)
#define tn5250_menubar_height(This) ((This)->height)
#define tn5250_menubar_items(This) ((This)->items)
/* Manipulate menubar lists */
extern Tn5250Menubar *tn5250_menubar_list_destroy (Tn5250Menubar * list);
extern Tn5250Menubar *tn5250_menubar_list_add (Tn5250Menubar * list,
Tn5250Menubar * node);
extern Tn5250Menubar *tn5250_menubar_list_remove (Tn5250Menubar * list,
Tn5250Menubar * node);
extern Tn5250Menubar *tn5250_menubar_list_find_by_id (Tn5250Menubar * list,
int id);
extern Tn5250Menubar *tn5250_menubar_list_copy (Tn5250Menubar * list);
extern Tn5250Menubar *tn5250_menubar_hit_test (Tn5250Menubar * list, int x,
int y);
extern void tn5250_menubar_select_next (Tn5250Menubar * This, int *x,
int *y);
extern void tn5250_menubar_select_prev (Tn5250Menubar * This, int *x,
int *y);
/***** lib5250/Tn5250Menuitem
* NAME
* Tn5250Menuitem
* SYNOPSIS
* Tn5250Menuitem *menuitem = tn5250_menuitem_new ();
* DESCRIPTION
* The Tn5250Menuitem object manages a 5250 menuitem on the display.
* SOURCE
*/
struct _Tn5250Menuitem
{
struct _Tn5250MenuitemPrivate *data;
struct _Tn5250Menuitem *next;
struct _Tn5250Menuitem *prev;
unsigned int id; /* Numeric ID of this menuitem */
unsigned char flagbyte1;
unsigned char flagbyte2;
unsigned char flagbyte3;
int size;
short available;
short selected;
unsigned char *text;
unsigned int row; /* Row menubar starts on */
unsigned int column; /* Column menubar starts on */
struct _Tn5250Menubar *menubar;
};
typedef struct _Tn5250Menuitem Tn5250Menuitem;
/* Manipulate menuitems */
extern Tn5250Menuitem *tn5250_menuitem_new ();
extern Tn5250Menuitem *tn5250_menuitem_copy (Tn5250Menuitem * This);
extern void tn5250_menuitem_destroy (Tn5250Menuitem * This);
extern int tn5250_menuitem_new_row (Tn5250Menuitem * This);
extern int tn5250_menuitem_new_col (Tn5250Menuitem * This);
#define tn5250_menuitem_start_row(This) ((This)->row)
#define tn5250_menuitem_start_col(This) ((This)->column)
/* Manipulate menuitem lists */
extern Tn5250Menuitem *tn5250_menuitem_list_destroy (Tn5250Menuitem * list);
extern Tn5250Menuitem *tn5250_menuitem_list_add (Tn5250Menuitem * list,
Tn5250Menuitem * node);
extern Tn5250Menuitem *tn5250_menuitem_list_remove (Tn5250Menuitem * list,
Tn5250Menuitem * node);
extern Tn5250Menuitem *tn5250_menuitem_list_find_by_id (Tn5250Menuitem *
list, int id);
extern Tn5250Menuitem *tn5250_menuitem_list_copy (Tn5250Menuitem * list);
extern Tn5250Menuitem *tn5250_menuitem_hit_test (Tn5250Menuitem * list,
int x, int y);
void tn5250_menu_add_menuitem (Tn5250Menubar * This,
Tn5250Menuitem * menuitem);
#ifndef _TN5250_MENU_PRIVATE_DEFINED
#define _TN5250_MENU_PRIVATE_DEFINED
struct _Tn5250MenubarPrivate
{
long dummy;
};
struct _Tn5250MenuitemPrivate
{
long dummy;
};
#endif
#ifdef __cplusplus
}
#endif
#endif /* MENU_H */
syntax highlighted by Code2HTML, v. 0.9.1