blob: 1ee170694b83948cad961c337eebc161df150398 [file] [log] [blame]
/***********************************************************
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
*
* This program is freely distributable without licensing fees
* and is provided without guarantee or warrantee expressed or
* implied. This program is -not- in the public domain.
*
* FILE: glutMenu.h
*
* DESCRIPTION: the GlutMenu class is a simple popup menu
***********************************************************/
/***********************************************************
* Headers
***********************************************************/
#include <GL/glut.h>
#include <Menu.h>
#include <MenuItem.h>
#include <PopUpMenu.h>
/***********************************************************
* Definitions
***********************************************************/
const int32 MENU_ITEM = 'menu';
/***********************************************************
* CLASS: GlutMenu
***********************************************************/
class GlutMenuItem;
class GlutPopUp;
class GlutMenu {
public:
GlutMenu(int n_id, GLUTselectCB n_select) {
id = n_id;
select = n_select;
list = 0;
num = 0;
}
~GlutMenu();
BMenu *CreateBMenu(bool toplevel=true); // construct BPopUpMenu
// public data
int id;
GLUTselectCB select; // callback function
GlutMenuItem *list; // list of menu items
int num; // number of items
};
/***********************************************************
* CLASS: GlutMenuItem
***********************************************************/
class GlutMenuItem {
public:
GlutMenuItem(GlutMenu *n_menu, bool n_trig, int n_value, const char *n_label);
// public data
GlutMenu *menu; // parent menu
bool isTrigger; // are we a submenu?
int value; // value to send, or submenu id if isTrigger
char *label; // strdup'ed label string
GlutMenuItem *next; // next menu entry on list
};
/***********************************************************
* CLASS: GlutPopUp
***********************************************************/
class GlutPopUp : public BPopUpMenu {
public:
GlutPopUp(int m) : BPopUpMenu(0, false, false) { menu = m;}
BPoint point; // point to start menu
GlutWindow *win; // pointer to my window
int menu; // my menu number
};
/***********************************************************
* CLASS: GlutBMenuItem
***********************************************************/
class GlutBMenuItem : public BMenuItem {
public:
GlutBMenuItem(const char *name) : BMenuItem(name, 0) {}
GlutBMenuItem(BMenu* menu) : BMenuItem(menu) {}
int menu, value;
};