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