[BACK]Return to SoSceneMenu.h CVS log [TXT][DIR] Up to [Development] / inventor / apps / demos / SceneViewer

File: [Development] / inventor / apps / demos / SceneViewer / SoSceneMenu.h (download)

Revision 1.1, Tue Aug 15 12:55:53 2000 UTC (17 years, 2 months ago) by naaman
Branch: MAIN

Initial revision

/*
 *
 *  Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved. 
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  Further, this software is distributed without any warranty that it is
 *  free of the rightful claim of any third person regarding infringement
 *  or the like.  Any license provided herein, whether implied or
 *  otherwise, applies only to this software file.  Patent licenses, if
 *  any, provided herein do not apply to combinations of this program with
 *  other software, or any other product whatsoever.
 * 
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
 *  Mountain View, CA  94043, or:
 * 
 *  http://www.sgi.com 
 * 
 *  For further information regarding this notice, see: 
 * 
 *  http://oss.sgi.com/projects/GenInfo/NoticeExplan/
 *
 */

#ifndef  _SO_SCENE_MENU_
#define  _SO_SCENE_MENU_

// -*- C++ -*-
//
// header for TopbarMenu
//

#include <X11/Intrinsic.h>
#include <Inventor/SbBasic.h>

enum MenuEntries {
    SV_FILE = 0,  // start at 0 since we use an array
    SV_FILE_ABOUT, 
    SV_FILE_OPEN, 
    SV_FILE_IMPORT, 
    SV_FILE_NEW, 
    SV_FILE_SAVE, 
    SV_FILE_SAVE_AS, 
    SV_FILE_SAVE_ENV, 
    SV_FILE_READ_ENV, 
    SV_FILE_PRINT, 
    SV_FILE_QUIT, 
    
    SV_EDIT, 
    SV_EDIT_PICK_PARENT, 
    SV_EDIT_PICK_ALL, 
    SV_EDIT_CUT, 
    SV_EDIT_COPY, 
    SV_EDIT_PASTE, 
    SV_EDIT_DELETE, 
    
    SV_VIEW, 
    SV_VIEW_PICK, 
#ifdef EXPLORER
    SV_VIEW_USER,
#endif
    SV_VIEW_EXAMINER, 
    SV_VIEW_FLY, 
    SV_VIEW_WALK, 
    SV_VIEW_PLANE, 
    SV_VIEW_SELECTION, 
    SV_VIEW_FOG, 
    SV_VIEW_ANTIALIASING, 
    SV_VIEW_SCREEN_TRANSPARENCY, 
    SV_VIEW_BLEND_TRANSPARENCY, 
    SV_VIEW_DELAY_BLEND_TRANSPARENCY, 
    SV_VIEW_SORT_BLEND_TRANSPARENCY, 
    SV_VIEW_BKG_COLOR, 
    
    SV_EDITOR, 
    SV_EDITOR_TRANSFORM, 
    SV_EDITOR_MATERIAL, 
    SV_EDITOR_COLOR, 

    SV_MANIP,  
    SV_MANIP_TRANSFORMER, 
    SV_MANIP_HANDLEBOX, 
    SV_MANIP_TRACKBALL, 
    SV_MANIP_JACK,
    SV_MANIP_CENTERBALL,
    SV_MANIP_XFBOX,
    SV_MANIP_TABBOX,

// rotateCylindrical rotateDisc RotateSpherical 
// scale1 scale2 scale2Uniform scaleUniform 
// translate1 translate2 

    SV_MANIP_NONE, 
    SV_MANIP_REPLACE_ALL, 
    
    SV_LIGHT, 
    SV_LIGHT_ADD_DIRECT, 
    SV_LIGHT_ADD_POINT, 
    SV_LIGHT_ADD_SPOT, 
    SV_LIGHT_AMBIENT_EDIT, 
    SV_LIGHT_TURN_ON, 
    SV_LIGHT_TURN_OFF, 
    SV_LIGHT_SHOW_ALL, 
    SV_LIGHT_HIDE_ALL, 
    
    SV_SELECTION, 
    SV_SEL_SINGLE_SELECT, 
    SV_SEL_TOGGLE_SELECT, 
    SV_SEL_SHIFT_SELECT, 
    
    SV_MENU_NUM    // this must be the last entry
};


// different types of menu item buttons
enum MenuItems {
    SV_SEPARATOR, 
    SV_PUSH_BUTTON, 
    SV_TOGGLE_BUTTON, 
    SV_RADIO_BUTTON
};

struct SoSceneViewerButton {
    char        *name;
    int		id;
    int  	buttonType; // PUSH, TOGGLE, RADIO
    char	*accelerator; // e.g. "Alt <Key> p" or "Ctrl <Key> u"
    char	*accelText;   // text that appears in the menu item
};
struct SoSceneViewerMenu {
    char        *name;
    int	    	id;
    struct 	SoSceneViewerButton *subMenu;
    int		subItemCount;
};


static SoSceneViewerButton fileData[] = {
#ifndef EXPLORER
    {(char *)NULL,	    SV_FILE_ABOUT,	SV_PUSH_BUTTON, 0, 0 },
    {0,    		    0,			SV_SEPARATOR },
    {"New",		    SV_FILE_NEW,	SV_PUSH_BUTTON, "Alt <Key> n", "Alt+n" },
    {(char *)NULL,	    SV_FILE_OPEN,	SV_PUSH_BUTTON, "Alt <Key> o", "Alt+o" },
    {(char *)NULL,	    SV_FILE_IMPORT,	SV_PUSH_BUTTON, "Alt <Key> i", "Alt+i" },
#endif /* EXPLORER */
    {(char *)NULL,	    SV_FILE_SAVE,	SV_PUSH_BUTTON, "Alt <Key> s", "Alt+s" },
    {(char *)NULL,	    SV_FILE_SAVE_AS,	SV_PUSH_BUTTON, "Alt Shift <Key> s", "Alt+S" },
#ifndef EXPLORER
    {0,    		    0,			SV_SEPARATOR },
    {(char *)NULL,          SV_FILE_READ_ENV,	SV_PUSH_BUTTON, 0, 0 },
    {(char *)NULL,          SV_FILE_SAVE_ENV,	SV_PUSH_BUTTON, 0, 0 },
    {0,    		    0,			SV_SEPARATOR },
    {(char *)NULL,	    SV_FILE_PRINT,	SV_PUSH_BUTTON, "Alt <Key> p", "Alt+p" },
    {"Quit",		    SV_FILE_QUIT,	SV_PUSH_BUTTON, "Alt <Key> q", "Alt+q" },
#endif /* EXPLORER */
};

#ifndef EXPLORER
static SoSceneViewerButton editData[] = {
    {"Pick Parent",	SV_EDIT_PICK_PARENT, SV_PUSH_BUTTON, 0, 0 },
    {"Pick All",	SV_EDIT_PICK_ALL, SV_PUSH_BUTTON, "Alt <Key> a", "Alt+a" },
    {0,    		    0,			SV_SEPARATOR },
    {"Cut",		SV_EDIT_CUT,	SV_PUSH_BUTTON, "Alt <Key> x", "Alt+x" },
    {"Copy",		SV_EDIT_COPY,	SV_PUSH_BUTTON, "Alt <Key> c", "Alt+c" },
    {"Paste",		SV_EDIT_PASTE,	SV_PUSH_BUTTON, "Alt <Key> v", "Alt+v" },
    {"Delete",		SV_EDIT_DELETE,	SV_PUSH_BUTTON, "<Key> BackSpace", 0 },
};
#endif /* EXPLORER */

static SoSceneViewerButton viewData[] = {
    {"Pick/Edit",  SV_VIEW_PICK,	       SV_TOGGLE_BUTTON, 0, 0},
#ifdef EXPLORER
    {"User Pick Mode",  SV_VIEW_USER,    SV_TOGGLE_BUTTON, 0, 0},
#endif /* EXPLORER */
    {0,    		    0,			SV_SEPARATOR },
    {"Examiner",   SV_VIEW_EXAMINER,        SV_RADIO_BUTTON, 0, 0},
    {"Fly",	   SV_VIEW_FLY,	       SV_RADIO_BUTTON, 0, 0},
    {"Walk",	   SV_VIEW_WALK,	       SV_RADIO_BUTTON, 0, 0},
    {"Plane",	   SV_VIEW_PLANE,	       SV_RADIO_BUTTON, 0, 0},
    {0,    		    0,			SV_SEPARATOR },
    {"View Selection",SV_VIEW_SELECTION,     SV_PUSH_BUTTON, 0, 0},
    {"Fog", 	   SV_VIEW_FOG, 	       SV_TOGGLE_BUTTON, 0, 0},
    {"Antialiasing",SV_VIEW_ANTIALIASING,   SV_TOGGLE_BUTTON, 0, 0},
    {0,    		    0,			SV_SEPARATOR },
    {"Screen Door Transparency", SV_VIEW_SCREEN_TRANSPARENCY,  SV_RADIO_BUTTON, 0, 0},
    {"Blended Transparency", SV_VIEW_BLEND_TRANSPARENCY,  SV_RADIO_BUTTON, 0, 0},
    {"Delayed Blended Transparency", SV_VIEW_DELAY_BLEND_TRANSPARENCY,  SV_RADIO_BUTTON, 0, 0},
    {"Sorted Blended Transparency", SV_VIEW_SORT_BLEND_TRANSPARENCY,  SV_RADIO_BUTTON, 0, 0},
    {0,    		    0,			SV_SEPARATOR },
    {(char *)NULL,  SV_VIEW_BKG_COLOR,  SV_PUSH_BUTTON, 0, 0}
};

static SoSceneViewerButton editorData[] = {
    {(char *)NULL,    SV_EDITOR_MATERIAL,    SV_PUSH_BUTTON, 0, 0},
    {(char *)NULL,       SV_EDITOR_COLOR,       SV_PUSH_BUTTON, 0, 0},
    {(char *)NULL,  SV_EDITOR_TRANSFORM,   SV_PUSH_BUTTON, 0, 0},
};

static SoSceneViewerButton manipData[] = {
    {"Transformer", SV_MANIP_TRANSFORMER,    SV_RADIO_BUTTON, 0, 0},
    {"Trackball",   SV_MANIP_TRACKBALL,      SV_RADIO_BUTTON, 0, 0},
    {"HandleBox",   SV_MANIP_HANDLEBOX,      SV_RADIO_BUTTON, 0, 0},
    {"Jack",        SV_MANIP_JACK,           SV_RADIO_BUTTON, 0, 0},
    {"Centerball",  SV_MANIP_CENTERBALL,     SV_RADIO_BUTTON, 0, 0},
    {"TransformBox",SV_MANIP_XFBOX,          SV_RADIO_BUTTON, 0, 0},
    {"TabBox",      SV_MANIP_TABBOX,         SV_RADIO_BUTTON, 0, 0},
    {"None",        SV_MANIP_NONE,           SV_RADIO_BUTTON, 0, 0},
    {0,    		    0,			SV_SEPARATOR },
    {"Replace",     SV_MANIP_REPLACE_ALL,    SV_TOGGLE_BUTTON, 0, 0}
};

static SoSceneViewerButton lightData[] = {
    {"Create Dir Light",	    SV_LIGHT_ADD_DIRECT,    SV_PUSH_BUTTON, 0, 0},
    {"Create Point Light",	    SV_LIGHT_ADD_POINT,	    SV_PUSH_BUTTON, 0, 0},
    {"Create Spot Light",	    SV_LIGHT_ADD_SPOT,	    SV_PUSH_BUTTON, 0, 0},
    {0,    		    0,			SV_SEPARATOR },
    {(char *)NULL,	    SV_LIGHT_AMBIENT_EDIT,  SV_PUSH_BUTTON, 0, 0},
    {0,    		    0,			SV_SEPARATOR },
    {"Turn all ON",		    SV_LIGHT_TURN_ON,	    SV_PUSH_BUTTON, 0, 0},
    {"Turn all OFF",		    SV_LIGHT_TURN_OFF,	    SV_PUSH_BUTTON, 0, 0},
    {"Show all Icons",		    SV_LIGHT_SHOW_ALL,	    SV_PUSH_BUTTON, 0, 0},
    {"Hide all Icons",		    SV_LIGHT_HIDE_ALL,	    SV_PUSH_BUTTON, 0, 0},
    {0,    		    0,			SV_SEPARATOR },
};

#ifndef EXPLORER
static SoSceneViewerButton selData[] = {
    {"Single Selection", SV_SEL_SINGLE_SELECT,  SV_RADIO_BUTTON, 0, 0},
    {"Toggle Selection", SV_SEL_TOGGLE_SELECT,  SV_RADIO_BUTTON, 0, 0},
    {"Shift Selection",	SV_SEL_SHIFT_SELECT,	SV_RADIO_BUTTON, 0, 0},
};
#endif /* EXPLORER */

static SoSceneViewerMenu pulldownData[] = {
//  {name, 	id,	    	subMenu,    subItemCount}
    {"File",    SV_FILE, 	fileData,   XtNumber(fileData)   },
#ifndef EXPLORER
    {"Edit",    SV_EDIT, 	editData,   XtNumber(editData)   },
#endif /* EXPLORER */
    {"Viewing", SV_VIEW, 	viewData,   XtNumber(viewData)   },
#ifndef EXPLORER
    {"Selection", SV_SELECTION, selData, XtNumber(selData)	 },
#endif /* EXPLORER */
    {"Editors", SV_EDITOR, 	editorData, XtNumber(editorData) },
    {"Manips",  SV_MANIP, 	manipData,  XtNumber(manipData)  },
    {"Lights",  SV_LIGHT, 	lightData,  XtNumber(lightData)  }
};

#endif

static struct {
char *headlight;
char *editlight;
char *directionallight;
char *spotlight;
char *pointlight;
} Light;


XtResource intl_resources[] = {  /* CAUTION: Mixing #ifdef and #ifndef EXPLORER */
#ifndef EXPLORER                 
  { "aboutMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[0].name, XtRString, "About...",},
  { "openMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[3].name, XtRString, "Open...",},
  { "importMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[4].name, XtRString, "Import...",},
  { "saveMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[5].name, XtRString, "Save",},
  { "saveAsMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[6].name, XtRString, "Save As...",},
  { "readEnvMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[8].name, XtRString, "Read Environment...",},
  { "saveEnvMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[9].name, XtRString, "Save Environment...",},
  { "printMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[11].name, XtRString, "Print...",},
  { "editBgColor", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &viewData[16].name, XtRString, "Edit Background Color...",},
#else
  { "saveMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[0].name, XtRString, "Save",},
  { "saveAsMenuLabel", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &fileData[1].name, XtRString, "Save As...",},
  { "editBgColor", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &viewData[17].name, XtRString, "Edit Background Color...",},
#endif
  { "materialEditor", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &editorData[0].name, XtRString, "Material Editor...",},
  { "colorEditor", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &editorData[1].name, XtRString, "Color Editor...",},
  { "transformSliders", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &editorData[2].name, XtRString, "Transform Sliders...",},
  { "ambientLighting", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &lightData[4].name, XtRString, "Ambient Lighting...",},
  { "headlight", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &Light.headlight, XtRString, "Headlight ",},
  { "editlight", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &Light.editlight, XtRString, "Edit",},
  { "directionallight", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &Light.directionallight, XtRString, "Directional ",},
  { "spotlight", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &Light.spotlight, XtRString, "Spot ",},
  { "pointlight", NULL, XtRString, sizeof(XtRString),
    (Cardinal) &Light.pointlight, XtRString, "Point ",},
};
int intl_num_resources = XtNumber( intl_resources );