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