?? glui.h
字號:
/****************************************************************************
GLUI User Interface Toolkit
---------------------------
glui.h - Main header for GLUI User Interface Toolkit
--------------------------------------------------
Copyright (c) 1998 Paul Rademacher
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.
*****************************************************************************/
#ifndef _GLUI_H_
#define _GLUI_H_
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define GLUI_VERSION 2.01f /********** Current version **********/
class Arcball;
/********** Do some basic defines *******/
#ifndef false
#define true 1
#define false 0
#endif
#ifndef Byte
#define Byte unsigned char
#endif
#ifndef _RGBC_
class RGBc {
public:
Byte r, g, b;
void set(Byte r,Byte g,Byte b) {this->r=r;this->g=g;this->b=b;};
RGBc( void ) {};
RGBc( Byte r, Byte g, Byte b ) { set( r, g, b ); };
};
#define _RGBC_
#endif
/********** List of GLUT callbacks ********/
enum GLUI_Glut_CB_Types {
GLUI_GLUT_RESHAPE,
GLUI_GLUT_KEYBOARD,
GLUI_GLUT_DISPLAY,
GLUI_GLUT_MOUSE,
GLUI_GLUT_MOTION,
GLUI_GLUT_SPECIAL,
GLUI_GLUT_PASSIVE_MOTION,
GLUI_GLUT_ENTRY,
GLUI_GLUT_VISIBILITY
};
/********** List of control types **********/
enum GLUI_Control_Types {
GLUI_CONTROL_CHECKBOX =1,
GLUI_CONTROL_BUTTON,
GLUI_CONTROL_RADIOBUTTON,
GLUI_CONTROL_RADIOGROUP,
GLUI_CONTROL_SLIDER,
GLUI_CONTROL_STATICTEXT,
GLUI_CONTROL_EDITTEXT,
GLUI_CONTROL_BITMAP,
GLUI_CONTROL_PANEL,
GLUI_CONTROL_SPINNER,
GLUI_CONTROL_SEPARATOR,
GLUI_CONTROL_COLUMN,
GLUI_CONTROL_LISTBOX,
GLUI_CONTROL_MOUSE_INTERACTION,
GLUI_CONTROL_ROTATION,
GLUI_CONTROL_TRANSLATION,
GLUI_CONTROL_ROLLOUT
};
/********* Constants for window placement **********/
#define GLUI_XOFF 6
#define GLUI_YOFF 6
#define GLUI_ITEMSPACING 3
#define GLUI_CHECKBOX_SIZE 13
#define GLUI_RADIOBUTTON_SIZE 13
#define GLUI_BUTTON_SIZE 20
#define GLUI_STATICTEXT_SIZE 13
#define GLUI_SEPARATOR_HEIGHT 8
#define GLUI_DEFAULT_CONTROL_WIDTH 100
#define GLUI_DEFAULT_CONTROL_HEIGHT 13
#define GLUI_EDITTEXT_BOXINNERMARGINX 3
#define GLUI_EDITTEXT_HEIGHT 20
#define GLUI_EDITTEXT_WIDTH 130
#define GLUI_EDITTEXT_MIN_INT_WIDTH 35
#define GLUI_EDITTEXT_MIN_TEXT_WIDTH 50
#define GLUI_PANEL_NAME_DROP 8
#define GLUI_PANEL_EMBOSS_TOP 4
/* #define GLUI_ROTATION_WIDTH 60*/
/* #define GLUI_ROTATION_HEIGHT 78 */
#define GLUI_ROTATION_WIDTH 50
#define GLUI_ROTATION_HEIGHT (GLUI_ROTATION_WIDTH+18)
#define GLUI_MOUSE_INTERACTION_WIDTH 50
#define GLUI_MOUSE_INTERACTION_HEIGHT (GLUI_MOUSE_INTERACTION_WIDTH)+18
/** Different panel control types **/
#define GLUI_PANEL_NONE 0
#define GLUI_PANEL_EMBOSSED 1
#define GLUI_PANEL_RAISED 2
/** Max # of els in control's float_array **/
#define GLUI_DEF_MAX_ARRAY 30
/********* The control's 'active' behavior *********/
#define GLUI_CONTROL_ACTIVE_MOUSEDOWN 1
#define GLUI_CONTROL_ACTIVE_PERMANENT 2
/********* Control alignment types **********/
#define GLUI_ALIGN_CENTER 1
#define GLUI_ALIGN_RIGHT 2
#define GLUI_ALIGN_LEFT 3
/********** Limit types - how to limit spinner values *********/
#define GLUI_LIMIT_NONE 0
#define GLUI_LIMIT_CLAMP 1
#define GLUI_LIMIT_WRAP 2
/********** Translation control types ********************/
#define GLUI_TRANSLATION_XY 0
#define GLUI_TRANSLATION_Z 1
#define GLUI_TRANSLATION_X 2
#define GLUI_TRANSLATION_Y 3
#define GLUI_TRANSLATION_LOCK_NONE 0
#define GLUI_TRANSLATION_LOCK_X 1
#define GLUI_TRANSLATION_LOCK_Y 2
/********** How was a control activated? *****************/
#define GLUI_ACTIVATE_MOUSE 1
#define GLUI_ACTIVATE_TAB 2
/********** What type of live variable does a control have? **********/
#define GLUI_LIVE_NONE 0
#define GLUI_LIVE_INT 1
#define GLUI_LIVE_FLOAT 2
#define GLUI_LIVE_TEXT 3
#define GLUI_LIVE_DOUBLE 4
#define GLUI_LIVE_FLOAT_ARRAY 5
/********** Translation codes **********/
enum TranslationCodes {
GLUI_TRANSLATION_MOUSE_NONE=0,
GLUI_TRANSLATION_MOUSE_UP,
GLUI_TRANSLATION_MOUSE_DOWN,
GLUI_TRANSLATION_MOUSE_LEFT,
GLUI_TRANSLATION_MOUSE_RIGHT,
GLUI_TRANSLATION_MOUSE_UP_LEFT,
GLUI_TRANSLATION_MOUSE_UP_RIGHT,
GLUI_TRANSLATION_MOUSE_DOWN_LEFT,
GLUI_TRANSLATION_MOUSE_DOWN_RIGHT
};
/************ A string type for us to use **********/
/* typedef char GLUI_String[300]; */
class GLUI_String
{
public:
char string[300];
char &operator[]( int i ) {
return string[i];
}
operator char*() { return (char*) &string[0]; };
/* operator void*() { return (void*) &string[0]; }; */
GLUI_String( void ) {
string[0] = '\0';
}
GLUI_String( char *text ) {
strcpy( string, text );
}
};
/********* Pre-declare the various classes *********/
class GLUI;
class GLUI_Control;
class GLUI_Listbox;
class GLUI_Rotation;
class GLUI_Translation;
class GLUI_Mouse_Interaction;
class GLUI_Checkbox;
class GLUI_Slider;
class GLUI_Button;
class GLUI_StaticText;
class GLUI_Bitmap;
class GLUI_EditText;
class GLUI_Node;
class GLUI_Main;
class GLUI_Panel;
class GLUI_Spinner;
class GLUI_RadioButton;
class GLUI_RadioGroup;
class GLUI_Separator;
class GLUI_Column;
class GLUI_Master;
class GLUI_Glut_Window;
class GLUI_Rollout;
/*** Flags for GLUI class constructor ***/
#define GLUI_SUBWINDOW ((long)(1<< 1))
#define GLUI_SUBWINDOW_TOP ((long)(1<< 2))
#define GLUI_SUBWINDOW_BOTTOM ((long)(1<< 3))
#define GLUI_SUBWINDOW_LEFT ((long)(1<< 4))
#define GLUI_SUBWINDOW_RIGHT ((long)(1<< 5))
/*** Codes for different type of edittext boxes and spinners ***/
#define GLUI_EDITTEXT_TEXT 1
#define GLUI_EDITTEXT_INT 2
#define GLUI_EDITTEXT_FLOAT 3
#define GLUI_SPINNER_INT GLUI_EDITTEXT_INT
#define GLUI_SPINNER_FLOAT GLUI_EDITTEXT_FLOAT
/*** Definition of callbacks ***/
typedef void (*GLUI_Update_CB) (int id);
typedef void (*Int1_CB) (int);
typedef void (*Int2_CB) (int, int);
typedef void (*Int3_CB) (int, int, int);
typedef void (*Int4_CB) (int, int, int, int);
/************************************************************/
/* */
/* Base class, for hierarchical relationships */
/* */
/************************************************************/
class GLUI_Node {
protected:
GLUI_Node *parent_node;
GLUI_Node *child_head;
GLUI_Node *child_tail;
GLUI_Node *next_sibling;
GLUI_Node *prev_sibling;
public:
GLUI_Node *first_sibling( void );
GLUI_Node *last_sibling( void );
GLUI_Node *prev( void );
GLUI_Node *next( void );
GLUI_Node *first_child( void ) { return child_head; };
GLUI_Node *last_child( void ) { return child_tail; };
GLUI_Node *parent(void) { return parent_node; };
void link_this_to_parent_last( GLUI_Node *parent );
void link_this_to_parent_first( GLUI_Node *parent );
void link_this_to_sibling_next( GLUI_Node *sibling );
void link_this_to_sibling_prev( GLUI_Node *sibling );
void unlink( void );
void dump( FILE *out, char *name ) {
fprintf( out, "GLUI_node: %s\n", name );
fprintf( out, " parent: %p child_head: %p child_tail: %p\n",
parent_node, child_head, child_tail );
fprintf( out, " next: %p prev: %p\n", next_sibling, prev_sibling );
}
GLUI_Node( void ) {
parent_node= child_head = child_tail = next_sibling = prev_sibling = NULL;
};
friend GLUI_Rollout;
friend GLUI_Main;
};
/************************************************************/
/* */
/* Standard Bitmap stuff */
/* */
/************************************************************/
enum GLUI_StdBitmaps_Codes {
GLUI_STDBITMAP_CHECKBOX_OFF=0,
GLUI_STDBITMAP_CHECKBOX_ON,
GLUI_STDBITMAP_RADIOBUTTON_OFF,
GLUI_STDBITMAP_RADIOBUTTON_ON,
GLUI_STDBITMAP_UP_ARROW,
GLUI_STDBITMAP_DOWN_ARROW,
GLUI_STDBITMAP_LEFT_ARROW,
GLUI_STDBITMAP_RIGHT_ARROW,
GLUI_STDBITMAP_SPINNER_UP_OFF,
GLUI_STDBITMAP_SPINNER_UP_ON,
GLUI_STDBITMAP_SPINNER_DOWN_OFF,
GLUI_STDBITMAP_SPINNER_DOWN_ON,
GLUI_STDBITMAP_CHECKBOX_OFF_DIS, /*** Disactivated control bitmaps ***/
GLUI_STDBITMAP_CHECKBOX_ON_DIS,
GLUI_STDBITMAP_RADIOBUTTON_OFF_DIS,
GLUI_STDBITMAP_RADIOBUTTON_ON_DIS,
GLUI_STDBITMAP_SPINNER_UP_DIS,
GLUI_STDBITMAP_SPINNER_DOWN_DIS,
GLUI_STDBITMAP_LISTBOX_UP,
GLUI_STDBITMAP_LISTBOX_DOWN,
GLUI_STDBITMAP_LISTBOX_UP_DIS,
/***
GLUI_STDBITMAP_SLIDER_TAB,
***/
GLUI_STDBITMAP_NUM_ITEMS
};
/************ Image Bitmap arrays **********/
extern int glui_img_checkbox_0[];
extern int glui_img_checkbox_1[];
extern int glui_img_radiobutton_0[];
extern int glui_img_radiobutton_1[];
extern int glui_img_uparrow[];
extern int glui_img_downarrow[];
extern int glui_img_leftarrow[];
extern int glui_img_rightarrow[];
extern int glui_img_spinup_0[];
extern int glui_img_spinup_1[];
extern int glui_img_spindown_0[];
extern int glui_img_spindown_1[];
extern int glui_img_checkbox_0_dis[];
extern int glui_img_checkbox_1_dis[];
extern int glui_img_radiobutton_0_dis[];
extern int glui_img_radiobutton_1_dis[];
extern int glui_img_spinup_dis[];
extern int glui_img_spindown_dis[];
extern int glui_img_listbox_up[];
extern int glui_img_listbox_down[];
extern int glui_img_listbox_up_dis[];
extern int *bitmap_arrays[];
/************************************************************/
/* */
/* Class GLUI_Bitmap */
/* */
/************************************************************/
class GLUI_Bitmap
{
public:
unsigned char *pixels;
int w, h;
void load_from_array( int *array );
GLUI_Bitmap( void ) {
pixels = NULL;
w = 0;
h = 0;
}
};
/************************************************************/
/* */
/* Class GLUI_StdBitmap */
/* */
/************************************************************/
class GLUI_StdBitmaps
{
public:
GLUI_Bitmap bitmaps[ GLUI_STDBITMAP_NUM_ITEMS ];
void draw( int bitmap_num, int x, int y );
GLUI_StdBitmaps( void ) {
int i;
for( i=0; i<GLUI_STDBITMAP_NUM_ITEMS; i++ ) {
bitmaps[i].load_from_array( bitmap_arrays[i] );
}
}
};
/************************************************************/
/* */
/* Master GLUI Class */
/* */
/************************************************************/
class GLUI_Master_Object {
private:
GLUI_Node glut_windows;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -