/*
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Matthew P. Hodges
This file is part of XMakemol.
XMakemol is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
XMakemol 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with XMakemol; see the file COPYING. If not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <Xm/Xm.h>
#include "globals.h"
#include "view.h"
void
make_menus(Widget main_w, Widget menubar)
{
void cont_cb(Widget, XtPointer, XtPointer);
void edit_cb(Widget, XtPointer, XtPointer);
void file_cb(Widget, XtPointer, XtPointer);
void help_cb(Widget, XtPointer, XtPointer);
void track_cb(Widget, XtPointer, XtPointer);
void view_cb(Widget, XtPointer, XtPointer);
Widget widget;
XmString file,open,revert,save,merge,export,print,quit;/* aro */ /* 0th menu */
XmString cont,fram,anim,meas,pers; /* 1st */
XmString edit,visi,posn,sc_co,ab_sz,bd_fd,vdisp,ed_bbox,elem; /* 2nd */
XmString track,tr_rotl,tr_roto,cent,tr_reor,tr_repo,
reflect_x,reflect_y,reflect_z,invert; /* 3rd */
XmString view,atoms,bonds,hbonds,vects,at_nos; /* 4th */
XmString at_sym,axes,bbox,outl;
XmString help,about,doc,mouse,bugs; /* 5th */
#ifdef GL
XmString gl_ren;
#endif /* GL */
/* XmStrings for accelerators */
XmString accel1, accel2, accel3, accel4, accel5;
/* Create a simple MenuBar that contains the five menus */
file = XmStringCreateLocalized("File");
cont = XmStringCreateLocalized("Control");
edit = XmStringCreateLocalized("Edit");
track = XmStringCreateLocalized("Track");
view = XmStringCreateLocalized("View");
help = XmStringCreateLocalized("Help");
menubar = XmVaCreateSimpleMenuBar
(main_w, "menubar",
XmVaCASCADEBUTTON, file, 'F',
XmVaCASCADEBUTTON, cont, 'C',
XmVaCASCADEBUTTON, edit, 'E',
XmVaCASCADEBUTTON, track, 'T',
XmVaCASCADEBUTTON, view, 'V',
XmVaCASCADEBUTTON, help, 'H',
NULL);
XmStringFree(file);
XmStringFree(cont);
XmStringFree(edit);
XmStringFree(track);
XmStringFree(view);
XmStringFree(help);
/* Tell the menubar which button is the help menu */
if ((widget = XtNameToWidget (menubar, "button_5")))
XtVaSetValues (menubar, XmNmenuHelpWidget, widget, NULL);
/* Zeroth menu is the File menu -- callback is file_cb() */
open = XmStringCreateLocalized("Open...");
revert = XmStringCreateLocalized("Revert");
save = XmStringCreateLocalized("Save...");
merge = XmStringCreateLocalized("Merge...");
export = XmStringCreateLocalized("Export...");
print = XmStringCreateLocalized("Print..."); /* aro */
quit = XmStringCreateLocalized("Quit");
accel1 = XmStringCreateLocalized("Ctrl+O");
accel2 = XmStringCreateLocalized("Ctrl+S");
accel3 = XmStringCreateLocalized("Ctrl+Q");
nth_menu[0] = XmVaCreateSimplePulldownMenu
(menubar, "file_menu", 0, file_cb,
XmVaPUSHBUTTON, open, 'O', "Ctrl<Key>O", accel1,
XmVaPUSHBUTTON, revert,'R', NULL, NULL,
XmVaPUSHBUTTON, save, 'S', "Ctrl<Key>S", accel2,
XmVaPUSHBUTTON, merge, 'M', NULL, NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON, export, 'E', NULL, NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON, print, 'P', NULL, NULL,/* aro */
XmVaSEPARATOR,/* aro */
XmVaPUSHBUTTON, quit, 'Q', "Ctrl<Key>Q", accel3,
NULL);
XmStringFree(open);
XmStringFree(revert);
XmStringFree(save);
XmStringFree(merge);
XmStringFree(export);
XmStringFree(print);/* aro */
XmStringFree(quit);
XmStringFree(accel1);
XmStringFree(accel2);
XmStringFree(accel3);
/* First menu is the control menu -- callback is cont_cb() */
fram = XmStringCreateLocalized("Frames...");
anim = XmStringCreateLocalized("Animate...");
meas = XmStringCreateLocalized("Measure...");
pers = XmStringCreateLocalized("Perspective...");
accel1 = XmStringCreateLocalized("Ctrl+F");
accel2 = XmStringCreateLocalized("Ctrl+M");
accel3 = XmStringCreateLocalized("Ctrl+P");
nth_menu[1] = XmVaCreateSimplePulldownMenu
(menubar, "cont_menu", 1, cont_cb,
XmVaPUSHBUTTON, fram, 'F', "Ctrl<Key>F", accel1,
XmVaPUSHBUTTON, anim, 'A', NULL, NULL,
XmVaPUSHBUTTON, meas, 'M', "Ctrl<Key>M", accel2,
XmVaPUSHBUTTON, pers, 'P', "Ctrl<Key>P", accel3,
NULL);
XmStringFree(fram);
XmStringFree(anim);
XmStringFree(meas);
XmStringFree(pers);
XmStringFree(accel1);
XmStringFree(accel2);
XmStringFree(accel3);
/* Second menu is the edit menu -- callback is edit_cb() */
visi=XmStringCreateLocalized("Visible...");
posn=XmStringCreateLocalized("Positions...");
sc_co=XmStringCreateLocalized("Scale coordinates...");
ab_sz=XmStringCreateLocalized("Atom/bond sizes...");
bd_fd=XmStringCreateLocalized("Bond factors...");
vdisp = XmStringCreateLocalized("Vector display...");
ed_bbox=XmStringCreateLocalized("Bounding Box...");
elem = XmStringCreateLocalized ("Element properties...");
#ifdef GL
gl_ren = XmStringCreateLocalized ("GL rendering...");
#endif /* GL */
accel1 = XmStringCreateLocalized("Ctrl+V");
accel2 = XmStringCreateLocalized("Ctrl+A");
accel3 = XmStringCreateLocalized("Ctrl+B");
nth_menu[2] = XmVaCreateSimplePulldownMenu
(menubar, "edit_menu", 2, edit_cb,
XmVaPUSHBUTTON, visi, 'V', "Ctrl<Key>V", accel1,
XmVaPUSHBUTTON, posn, 'P', NULL, NULL,
XmVaPUSHBUTTON, sc_co, 'S', NULL, NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON, ab_sz, 'A', "Ctrl<Key>A", accel2,
XmVaPUSHBUTTON, bd_fd, 'B', "Ctrl<Key>B", accel3,
XmVaSEPARATOR,
XmVaPUSHBUTTON, vdisp, 'D', NULL, NULL,
XmVaPUSHBUTTON, ed_bbox, 'O', NULL, NULL,
XmVaPUSHBUTTON, elem, 'E', NULL, NULL,
#ifdef GL
XmVaPUSHBUTTON, gl_ren, 'G', NULL, NULL,
#endif /* GL */
NULL);
XmStringFree(visi);
XmStringFree(posn);
XmStringFree(sc_co);
XmStringFree(ab_sz);
XmStringFree(bd_fd);
XmStringFree(vdisp);
XmStringFree(ed_bbox);
XmStringFree (elem);
#ifdef GL
XmStringFree (gl_ren);
#endif /* GL */
XmStringFree(accel1);
XmStringFree(accel2);
XmStringFree(accel3);
/* Third menu is the track menu -- callback is track_cb() */
tr_rotl = XmStringCreateLocalized ("Rotate about local COM");
tr_roto = XmStringCreateLocalized ("Rotate about origin");
cent = XmStringCreateLocalized ("Centre");
tr_reor = XmStringCreateLocalized("Original orientation");
tr_repo = XmStringCreateLocalized("Original position");
reflect_x = XmStringCreateLocalized("Reflect x coords");
reflect_y = XmStringCreateLocalized("Reflect y coords");
reflect_z = XmStringCreateLocalized("Reflect z coords");
invert = XmStringCreateLocalized("Invert through centre");
nth_menu[3] = XmVaCreateSimplePulldownMenu
(menubar, "track_menu", 3, track_cb,
XmVaRADIOBUTTON, tr_rotl, 'l', NULL, NULL,
XmVaRADIOBUTTON, tr_roto, 'o', NULL, NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON, cent, 'C', NULL, NULL,
XmVaPUSHBUTTON, tr_reor, 'o', NULL, NULL,
XmVaPUSHBUTTON, tr_repo, 'p',NULL,NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON, reflect_x,'x',NULL,NULL,
XmVaPUSHBUTTON, reflect_y,'y',NULL,NULL,
XmVaPUSHBUTTON, reflect_z,'z',NULL,NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON, invert,'I',NULL,NULL,
XmNradioBehavior, True, /* RowColumn resources to enforce */
NULL);
XmStringFree(tr_rotl);
XmStringFree(tr_roto);
XmStringFree(cent);
XmStringFree(tr_reor);
XmStringFree(tr_repo);
XmStringFree(reflect_x);
XmStringFree(reflect_y);
XmStringFree(reflect_z);
XmStringFree(invert);
/* Initialize menu so that "Rotations" is selected. */
if((widget = XtNameToWidget (nth_menu[3], "button_0")))
XtVaSetValues (widget, XmNset, True, NULL);
/* Fourth menu is the view menu -- callback is view_cb() */
atoms = XmStringCreateLocalized("Atoms");
bonds = XmStringCreateLocalized("Bonds");
hbonds = XmStringCreateLocalized("H-Bonds");
vects = XmStringCreateLocalized("Vectors");
at_nos = XmStringCreateLocalized("Numbers");
at_sym = XmStringCreateLocalized("Symbols");
axes = XmStringCreateLocalized("Axes");
bbox = XmStringCreateLocalized("Bounding Box");
outl = XmStringCreateLocalized("Outline");
accel1 = XmStringCreateLocalized("A");
accel2 = XmStringCreateLocalized("B");
accel3 = XmStringCreateLocalized("H");
accel4 = XmStringCreateLocalized("N");
accel5 = XmStringCreateLocalized("S");
nth_menu[4] = XmVaCreateSimplePulldownMenu
(menubar, "view_menu", 4, view_cb,
XmVaTOGGLEBUTTON, atoms, 'A', "<Key>A", accel1,
XmVaTOGGLEBUTTON, bonds, 'B', "<Key>B", accel2,
XmVaTOGGLEBUTTON, hbonds, 'H', "<Key>H", accel3,
XmVaTOGGLEBUTTON, vects, 'V', NULL,NULL,
XmVaSEPARATOR,
XmVaTOGGLEBUTTON, at_nos, 'N', "<Key>N", accel4,
XmVaTOGGLEBUTTON, at_sym, 'S', "<Key>S", accel5,
XmVaSEPARATOR,
XmVaTOGGLEBUTTON, axes, 'x', NULL,NULL,
XmVaTOGGLEBUTTON, bbox, 'o', NULL,NULL,
XmVaSEPARATOR,
XmVaTOGGLEBUTTON, outl, 'u', NULL, NULL,
NULL);
if(atom_flag==1){
if((widget = XtNameToWidget(nth_menu[4], "button_0")))
XtVaSetValues(widget, XmNset, True, NULL);
}
if(bond_flag==1){
if((widget = XtNameToWidget(nth_menu[4], "button_1")))
XtVaSetValues(widget, XmNset, True, NULL);
}
if(hbond_flag==1){
if((widget = XtNameToWidget(nth_menu[4], "button_2")))
XtVaSetValues(widget, XmNset, True, NULL);
}
if(vector_flag==1){
if((widget = XtNameToWidget(nth_menu[4], "button_3")))
XtVaSetValues(widget, XmNset, True, NULL);
}
XmStringFree(atoms);
XmStringFree(bonds);
XmStringFree(hbonds);
XmStringFree(vects);
XmStringFree(at_nos);
XmStringFree(at_sym);
XmStringFree(axes);
XmStringFree(bbox);
XmStringFree(outl);
XmStringFree(accel1);
XmStringFree(accel2);
XmStringFree(accel3);
XmStringFree(accel4);
XmStringFree(accel5);
/* Fifth is the help menu -- callback is help_cb() */
about = XmStringCreateLocalized("About...");
doc = XmStringCreateLocalized("Doc...");
mouse = XmStringCreateLocalized("Mouse...");
bugs = XmStringCreateLocalized("Bugs...");
nth_menu[5] = XmVaCreateSimplePulldownMenu
(menubar, "help_menu", 5, help_cb,
XmVaPUSHBUTTON, about, 'A', NULL, NULL,
XmVaPUSHBUTTON, doc, 'D', NULL, NULL,
XmVaPUSHBUTTON, mouse, 'M', NULL, NULL,
XmVaPUSHBUTTON, bugs, 'B', NULL, NULL,
NULL);
XmStringFree(about);
XmStringFree(doc);
XmStringFree(mouse);
XmStringFree(bugs);
XtManageChild (menubar);
}
syntax highlighted by Code2HTML, v. 0.9.1