1/***********************************************************
2 *      Copyright (C) 1997, Be Inc.  Copyright (C) 1999, Jake Hamby.
3 *
4 * This program is freely distributable without licensing fees
5 * and is provided without guarantee or warrantee expressed or
6 * implied. This program is -not- in the public domain.
7 *
8 *  FILE:	glutMenu.h
9 *
10 *	DESCRIPTION:	the GlutMenu class is a simple popup menu
11 ***********************************************************/
12
13/***********************************************************
14 *	Headers
15 ***********************************************************/
16#include <GL/glut.h>
17#include <Menu.h>
18#include <MenuItem.h>
19#include <PopUpMenu.h>
20
21/***********************************************************
22 *	Definitions
23 ***********************************************************/
24const int32 MENU_ITEM = 'menu';
25
26/***********************************************************
27 *	CLASS:	GlutMenu
28 ***********************************************************/
29class GlutMenuItem;
30class GlutPopUp;
31class GlutMenu {
32public:
33	GlutMenu(int n_id, GLUTselectCB n_select) {
34		id = n_id;
35		select = n_select;
36		list = 0;
37		num = 0;
38	}
39	~GlutMenu();
40	BMenu *CreateBMenu(bool toplevel=true);	// construct BPopUpMenu
41
42	// public data
43	int id;
44	GLUTselectCB select;	// callback function
45	GlutMenuItem *list;		// list of menu items
46	int num;				// number of items
47};
48
49/***********************************************************
50 *	CLASS:	GlutMenuItem
51 ***********************************************************/
52class GlutMenuItem {
53public:
54	GlutMenuItem(GlutMenu *n_menu, bool n_trig, int n_value, const char *n_label);
55
56	// public data
57	GlutMenu *menu;		// parent menu
58	bool isTrigger;		// are we a submenu?
59	int value;			// value to send, or submenu id if isTrigger
60	char *label;		// strdup'ed label string
61	GlutMenuItem *next; // next menu entry on list
62};
63
64/***********************************************************
65 *	CLASS:	GlutPopUp
66 ***********************************************************/
67class GlutPopUp : public BPopUpMenu {
68public:
69	GlutPopUp(int m) : BPopUpMenu(0, false, false) { menu = m;}
70
71	BPoint point;	// point to start menu
72	GlutWindow *win;	// pointer to my window
73	int menu;		// my menu number
74};
75
76/***********************************************************
77 *	CLASS:	GlutBMenuItem
78 ***********************************************************/
79class GlutBMenuItem : public BMenuItem {
80public:
81	GlutBMenuItem(const char *name) : BMenuItem(name, 0) {}
82	GlutBMenuItem(BMenu* menu) : BMenuItem(menu) {}
83	int menu, value;
84};
85