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