home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Late Night VRML 2.0 with Java CD-ROM
/
code.zip
/
Ch12
/
ui
/
EditWindow.java
< prev
next >
Wrap
Text File
|
1997-01-04
|
13KB
|
478 lines
// VRML Generator
// (c) Justin Couch
//
// From Chapter 13: Late Night VRML 2.0 and Java
//
// The container window that holds the editing window
package ui;
import java.awt.*;
import java.net.*;
import vrml.external.Browser;
import VrmlScene;
import VrmlTypes;
import ui.ImageButton;
import ui.VrmlTree;
import ui.dialogs.*;
public class EditWindow extends Frame
{
private MenuBar menu_bar;
private Menu file_menu;
private Menu edit_menu;
private Menu node_menu;
private Menu group_menu;
private Menu geom_menu;
private Menu appear_menu;
private Menu interp_menu;
private Menu sensor_menu;
private Menu misc_menu;
private NotImpDialog warn;
private NoSelectionDialog select_warn;
private GeneralWarnDialog select_delete_warn;
private String CodeBase;
private VrmlTree screen_data;
private VrmlScene vrml_data;
private VrmlCheck vrml_checker;
// the constructor - create the basic frame window
public EditWindow (String code_base)
{
super("VRML Generator");
CodeBase = code_base;
// general housekeeping
resize(400, 600);
setBackground(Color.lightGray);
setLayout( new BorderLayout());
// create the menu
createMenu();
// create the side panel
add("East", createPanel());
// create the tree list
screen_data = new VrmlTree("Unknown.wrl", code_base);
add("Center", screen_data.display);
// create the one size fits all warning dialog
warn = new NotImpDialog(this);
select_warn = new NoSelectionDialog(this);
select_delete_warn = new GeneralWarnDialog(this, "Warning: No node selected to delete");
}
// force remove all references to the internal datastructures.
public void finalize()
{
menu_bar = null;
file_menu = null;
edit_menu = null;
node_menu = null;
group_menu = null;
geom_menu = null;
appear_menu = null;
interp_menu = null;
sensor_menu = null;
misc_menu = null;
warn = null;
CodeBase = null;
screen_data = null;
vrml_data = null;
vrml_checker = null;
}
// another version of the show method. Also sets the internal
// variables.
public void show(VrmlScene data, Browser b)
{
vrml_data = data;
// notify the scene handler of the tree to complete its setup
vrml_data.setScreenHandler(screen_data);
this.show();
vrml_checker = new VrmlCheck(b, this, screen_data, vrml_data);
}
private URL getURL(String relativepath)
{
try {
return new URL(CodeBase + relativepath);
}
catch (MalformedURLException e)
{
System.out.println("Editwindow Bad URL " + relativepath);
return null;
}
catch (NullPointerException e)
{
System.out.println("EditWindow Null URL : " + relativepath);
return null;
}
}
private void createMenu()
{
menu_bar = new MenuBar();
file_menu = new Menu("&File", false);
edit_menu = new Menu("&Edit", false);
node_menu = new Menu("&Node", true); // is a tear-off
file_menu.add(new MenuItem("&New"));
file_menu.add(new MenuItem("&Save"));
file_menu.add(new MenuItem("Save &As"));
file_menu.addSeparator();
file_menu.add(new MenuItem("&Close"));
edit_menu.add(new MenuItem("Cu&t"));
edit_menu.add(new MenuItem("&Copy"));
edit_menu.add(new MenuItem("Paste &Before"));
edit_menu.add(new MenuItem("&Paste After"));
edit_menu.add(new MenuItem("&Delete"));
// Create the Nodes menu. Each contains a submenu
group_menu = new Menu("&Grouping");
geom_menu = new Menu("Geometr&y");
appear_menu = new Menu("&Appearance");
interp_menu = new Menu("&Interpolators");
sensor_menu = new Menu("&Sensors");
misc_menu = new Menu("&Miscellaneous");
// create the submenus
group_menu.add(new MenuItem("&Anchor"));
group_menu.add(new MenuItem("&Billboard"));
group_menu.add(new MenuItem("&Collision"));
group_menu.add(new MenuItem("&Group"));
group_menu.add(new MenuItem("&Inline"));
group_menu.add(new MenuItem("&LOD"));
group_menu.add(new MenuItem("&Switch"));
group_menu.add(new MenuItem("&Transform"));
geom_menu.add(new MenuItem("&Shape"));
geom_menu.addSeparator();
geom_menu.add(new MenuItem("&Box"));
geom_menu.add(new MenuItem("&Cone"));
geom_menu.add(new MenuItem("Cylinde&r"));
geom_menu.add(new MenuItem("&ElevationGrid"));
geom_menu.add(new MenuItem("E&xtrusion"));
geom_menu.add(new MenuItem("Indexed&FaceSet"));
geom_menu.add(new MenuItem("Indexed&LineSet"));
geom_menu.add(new MenuItem("&PointSet"));
geom_menu.add(new MenuItem("Sp&here"));
geom_menu.add(new MenuItem("&Text"));
appear_menu.add(new MenuItem("&Appearance"));
appear_menu.add(new MenuItem("&FontStyle"));
appear_menu.add(new MenuItem("&ImageTexture"));
appear_menu.add(new MenuItem("&Material"));
appear_menu.add(new MenuItem("Mo&vieTexture"));
appear_menu.add(new MenuItem("&PixelTexture"));
appear_menu.add(new MenuItem("&TextureTransform"));
interp_menu.add(new MenuItem("&ColorInterpolator"));
interp_menu.add(new MenuItem("Coor&dinateInterpolator"));
interp_menu.add(new MenuItem("&NormalInterpolator"));
interp_menu.add(new MenuItem("&OrientationInterpolator"));
interp_menu.add(new MenuItem("&PositionInterpolator"));
interp_menu.add(new MenuItem("&ScalarInterpolator"));
sensor_menu.add(new MenuItem("&CylinderSensor"));
sensor_menu.add(new MenuItem("&PlaneSensor"));
sensor_menu.add(new MenuItem("Pro&ximitySensor"));
sensor_menu.add(new MenuItem("&SphereSensor"));
sensor_menu.add(new MenuItem("&TimeSensor"));
sensor_menu.add(new MenuItem("T&ouchSensor"));
sensor_menu.add(new MenuItem("&VisibilitySensor"));
misc_menu.add(new MenuItem("&AudioClip"));
misc_menu.add(new MenuItem("&Background"));
misc_menu.add(new MenuItem("&Fog"));
misc_menu.add(new MenuItem("&NavigationInfo"));
misc_menu.add(new MenuItem("&Script"));
misc_menu.add(new MenuItem("S&ound"));
misc_menu.add(new MenuItem("&ViewPoint"));
misc_menu.add(new MenuItem("&WorldInfo"));
node_menu.add(group_menu);
node_menu.add(geom_menu);
node_menu.add(appear_menu);
node_menu.add(interp_menu);
node_menu.add(sensor_menu);
node_menu.add(misc_menu);
// now add it to the window
menu_bar.add(file_menu);
menu_bar.add(edit_menu);
menu_bar.add(node_menu);
setMenuBar(menu_bar);
}
private Panel createPanel()
{
// create the basic panel
Panel p = new Panel();
p.setLayout(new GridLayout(14, 0));
p.add(new Button("Shape"));
// p.add(new ImageButton("Box", getURL("images/box.gif"), 0, 0));
// p.add(new ImageButton("Sphere", getURL("images/sphere.gif"), 0, 0));
// p.add(new ImageButton("Cone", getURL("images/cone.gif"), 0, 0));
// p.add(new ImageButton("Cylinder", getURL("images/cylinder.gif"), 0, 0));
p.add(new Button("Box"));
p.add(new Button("Cone"));
p.add(new Button("Cylinder"));
p.add(new Button("Sphere"));
p.add(new Button("Transform"));
p.add(new Button("Group"));
p.add(new Button("Appearance"));
p.add(new Button("Material"));
p.add(new Button("ImageTexture"));
p.add(new Button("MovieTexture"));
p.add(new Button("PixelTexture"));
p.add(new Button("TextureTranform"));
return(p);
}
private void processEditMenu(Event e, Object arg)
{
if("Cu&t".equals(arg))
warn.show();
else if("&Copy".equals(arg))
warn.show();
else if("Paste &Before".equals(arg))
warn.show();
else if("&Paste After".equals(arg))
warn.show();
else if("&Delete".equals(arg))
{
deleteNode();
}
}
private void processNodeMenu(Event e, Object arg, Menu parent_menu)
{
// error checking
if(screen_data.selected == null)
{
select_warn.show();
return;
}
if(parent_menu == group_menu)
{
if("&Anchor".equals(arg))
warn.show();
else if("&Billboard".equals(arg))
warn.show();
else if("&Collision".equals(arg))
warn.show();
else if("&Group".equals(arg))
vrml_checker.checkNode(VrmlTypes.Group);
else if("&Inline".equals(arg))
warn.show();
else if("&LOD".equals(arg))
warn.show();
else if("&Switch".equals(arg))
warn.show();
else if("&Transform".equals(arg))
vrml_checker.checkNode(VrmlTypes.Transform);
}
else if(parent_menu == geom_menu)
{
if("&Shape".equals(arg))
vrml_checker.checkNode(VrmlTypes.Shape);
else if("&Box".equals(arg))
vrml_checker.checkNode(VrmlTypes.Box);
else if("&Cone".equals(arg))
vrml_checker.checkNode(VrmlTypes.Cone);
else if("Cylinde&r".equals(arg))
vrml_checker.checkNode(VrmlTypes.Cylinder);
else if("&ElevationGrid".equals(arg))
warn.show();
else if("E&xtrusion".equals(arg))
warn.show();
else if("Indexed&FaceSet".equals(arg))
warn.show();
else if("Indexed&LineSet".equals(arg))
warn.show();
else if("&PointSet".equals(arg))
warn.show();
else if("Sp&here".equals(arg))
vrml_checker.checkNode(VrmlTypes.Sphere);
else if("&Text".equals(arg))
warn.show();
}
else if(parent_menu == appear_menu)
{
if("&Appearance".equals(arg))
vrml_checker.checkNode(VrmlTypes.Appearance);
else if("&FontStyle".equals(arg))
warn.show();
else if("&ImageTexture".equals(arg))
vrml_checker.checkNode(VrmlTypes.ImageTexture);
else if("&Material".equals(arg))
vrml_checker.checkNode(VrmlTypes.Material);
else if("Mo&vieTexture".equals(arg))
vrml_checker.checkNode(VrmlTypes.MovieTexture);
else if("&PixelTexture".equals(arg))
warn.show();
else if("&TextureTransform".equals(arg))
vrml_checker.checkNode(VrmlTypes.TextureTransform);
}
else if(parent_menu == interp_menu)
{
if("&ColorInterpolator".equals(arg))
warn.show();
else if("Coor&dinateInterpolator".equals(arg))
warn.show();
else if("&NormalInterpolator".equals(arg))
warn.show();
else if("&OrientationInterpolator".equals(arg))
warn.show();
else if("&PositionInterpolator".equals(arg))
warn.show();
else if("&ScalarInterpolator".equals(arg))
warn.show();
}
else if(parent_menu == sensor_menu)
{
if("&CylinerSensor".equals(arg))
warn.show();
else if("&PlaneSensor".equals(arg))
warn.show();
else if("Pro&ximitySensor".equals(arg))
warn.show();
else if("&SphereSensor".equals(arg))
warn.show();
else if("&TimeSensor".equals(arg))
warn.show();
else if("T&ouchSensor".equals(arg))
warn.show();
else if("&VisibilitySensor".equals(arg))
warn.show();
}
else if(parent_menu == misc_menu)
{
if("&AudioClip".equals(arg))
warn.show();
else if("&Background".equals(arg))
warn.show();
else if("&Fog".equals(arg))
warn.show();
else if("&NavigationInfo".equals(arg))
warn.show();
else if("&Script".equals(arg))
warn.show();
else if("S&ound".equals(arg))
warn.show();
else if("&Viewpoint".equals(arg))
warn.show();
else if("&WorldInfo".equals(arg))
warn.show();
}
}
private void processMenu(Event e, Object arg)
{
Menu parent = (Menu)((MenuItem)e.target).getParent();
if(parent == file_menu)
{
if("&New".equals(arg))
{
screen_data.deleteAll();
vrml_data.deleteAll();
}
else if("&Save".equals(arg))
warn.show();
else if("Save &As".equals(arg))
warn.show();
else if("&Close".equals(arg))
this.hide();
}
else if(parent == edit_menu)
processEditMenu(e, arg);
else
processNodeMenu(e, arg, parent);
}
// the button bar on the side of the screen
private void processButton(Event e, Object arg)
{
// bit of error checking first.
if(screen_data.selected == null)
{
select_warn.show();
return;
}
if("Shape".equals(arg))
vrml_checker.checkNode(VrmlTypes.Shape);
else if("Box".equals(arg))
vrml_checker.checkNode(VrmlTypes.Box);
else if("Cone".equals(arg))
vrml_checker.checkNode(VrmlTypes.Cone);
else if("Cylinder".equals(arg))
vrml_checker.checkNode(VrmlTypes.Cylinder);
else if("Sphere".equals(arg))
vrml_checker.checkNode(VrmlTypes.Sphere);
else if("Transform".equals(arg))
vrml_checker.checkNode(VrmlTypes.Transform);
else if("Group".equals(arg))
vrml_checker.checkNode(VrmlTypes.Group);
else if("Appearance".equals(arg))
vrml_checker.checkNode(VrmlTypes.Appearance);
else if("Material".equals(arg))
vrml_checker.checkNode(VrmlTypes.Material);
else if("ImageTexture".equals(arg))
vrml_checker.checkNode(VrmlTypes.ImageTexture);
else if("MovieTexture".equals(arg))
vrml_checker.checkNode(VrmlTypes.MovieTexture);
else if("PixelTexture".equals(arg))
warn.show();
else if("TextureTranform".equals(arg))
vrml_checker.checkNode(VrmlTypes.TextureTransform);
}
private void deleteNode()
{
if(screen_data.selected == null)
{
select_delete_warn.show();
return;
}
vrml_checker.deleteNode();
}
// a few event handling routines
public boolean action(Event e, Object arg)
{
if(e.target instanceof MenuItem)
processMenu(e, arg);
else if(e.target instanceof Button)
processButton(e, arg);
return true;
}
public boolean handleEvent(Event e)
{
if(e.id == Event.WINDOW_DESTROY)
{
// exit the program
System.exit(0);
return true;
}
return super.handleEvent(e);
}
}