xref: /haiku/src/libs/glut/glutMenu.h (revision 683e7cc8455332d1b70d5b6e6313cfd6c9220e19)
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  ***********************************************************/
24 const int32 MENU_ITEM = 'menu';
25 
26 /***********************************************************
27  *	CLASS:	GlutMenu
28  ***********************************************************/
29 class GlutMenuItem;
30 class GlutPopUp;
31 class GlutMenu {
32 public:
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  ***********************************************************/
52 class GlutMenuItem {
53 public:
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  ***********************************************************/
67 class GlutPopUp : public BPopUpMenu {
68 public:
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  ***********************************************************/
79 class GlutBMenuItem : public BMenuItem {
80 public:
81 	GlutBMenuItem(const char *name) : BMenuItem(name, 0) {}
82 	GlutBMenuItem(BMenu* menu) : BMenuItem(menu) {}
83 	int menu, value;
84 };
85