// MenuFrame.java // The MenuFrame class definition import java.awt.*; import java.util.*; import java.io.*; class MenuFrame extends Frame { // set of options at the top of the screen // from Quan's NFR-Assistant private Menu replay_menu, file_menu, place_menu, transition_menu, token_menu, condition_menu, simulate_menu, edit_menu, help_menu, comm_menu, disc_sub, f; private MenuBar menu_bar; private Display pad; private Panel main_panel; private GridBagLayout gridbag = new GridBagLayout(); public ExtendedGraphCanvas gc ; public static DialogTest f1; petrinet1 parent; boolean Locked=false; CommFrame commWin; Thread commThread; //thread for communication //constructor MenuFrame(String title,ExtendedGraphCanvas graphcanvas) { super(title); gc = graphcanvas; commThread = null; file_menu = new Menu("File"); file_menu.add (new MenuItem("Clear")); file_menu.add (new MenuItem("Load")); file_menu.add (new MenuItem("Save")); file_menu.add (new MenuItem("Print")); file_menu.add (new MenuItem("Quit")); replay_menu = new Menu("Replay"); replay_menu.add (new MenuItem("Replay")); place_menu = new Menu("Place"); place_menu.add (new MenuItem("Add place")); place_menu.add (new MenuItem("Delete place")); transition_menu = new Menu("Transition"); transition_menu.add (new MenuItem("Add transition")); transition_menu.add (new MenuItem("Delete transition")); transition_menu.add (new MenuItem("Fire transition")); token_menu = new Menu("Token"); token_menu.add (new MenuItem("Add token")); token_menu.add (new MenuItem("Delete token")); condition_menu = new Menu("Condition"); condition_menu.add (new MenuItem("Add Condition")); condition_menu.add (new MenuItem("Delete Condition")); simulate_menu = new Menu("Simulate"); simulate_menu.add (new MenuItem("Arrival interval")); simulate_menu.add (new MenuItem("Firing delay")); simulate_menu.add (new MenuItem("Weight")); simulate_menu.addSeparator(); f = new Menu("Options"); f.add(new MenuItem("No transition Delay")); f.add(new MenuItem("All transitions - Same Delay")); f.add(new MenuItem("Some transitions - Same Delay")); f.add(new MenuItem("All transitions - Different Delay")); f.add(new MenuItem("Start Cyclic Checking")); simulate_menu.add(f); edit_menu = new Menu("Edit"); edit_menu.add (new MenuItem("Drag")); edit_menu.add (new MenuItem("Move")); edit_menu.add(new MenuItem("Group")); edit_menu.add(new MenuItem("DeGroup")); edit_menu.add (new MenuItem("Scale")); edit_menu.add (new MenuItem("Font")); edit_menu.add (new MenuItem("Add Link")); edit_menu.add (new MenuItem("Delete Link")); help_menu = new Menu("Help"); help_menu.add (new MenuItem("Glossary")); help_menu.add (new MenuItem("Tutorial")); help_menu.add (new MenuItem("About")); comm_menu = new Menu("Comm"); comm_menu.add (new MenuItem("Connect")); comm_menu.addSeparator(); disc_sub = new Menu("Disconnect"); disc_sub.add (new MenuItem ("Disconnect all")); comm_menu.add (disc_sub); //the communication menu should only work for the main window if (!(this.getTitle().equals("Main"))) comm_menu.setEnabled(false); menu_bar = new MenuBar(); menu_bar.add (file_menu); menu_bar.add (replay_menu); menu_bar.add (place_menu); menu_bar.add (transition_menu); menu_bar.add (token_menu); menu_bar.add (condition_menu); menu_bar.add (simulate_menu); menu_bar.add (edit_menu); menu_bar.add (help_menu); menu_bar.add (comm_menu); this.setMenuBar (menu_bar); } // end of "MenuFrame()" - Display frame constructor FileDialog openFile = new FileDialog(this, "Open Your Petrinet File", FileDialog.LOAD); FileDialog saveFile = new FileDialog(this, "Save Your Petrinet File As", FileDialog.SAVE); Toolkit toolkit = this.getToolkit( ); public boolean handleEvent(Event event) { if(event.id==Event.WINDOW_DESTROY) { dispose(); return true; } else if(event.id==Event.ACTION_EVENT) { if (event.target instanceof MenuItem) { if("Clear".equals(event.arg)) { gc.vector.removeAllElements( ); gc.placeList = new LinkedList( ); gc.arcList = new LinkedList( ); gc.transitionList = new LinkedList( ); gc.groupRect=null; gc.repaint( ); return true; } else if ("Load".equals(event.arg)) { openFile.show(); String inFile=openFile.getFile(); try { FileInputStream f = new FileInputStream(inFile); ObjectInputStream s = new ObjectInputStream(f); gc.vector = (Vector)s.readObject( ); gc.placeList = (LinkedList) gc.vector.elementAt(0); gc.arcList = (LinkedList) gc.vector.elementAt(1); gc.transitionList = (LinkedList) gc.vector.elementAt(2); gc.repaint(); s.close( ); f.close(); } catch(Exception e) { System.err.println(e); } return true; } else if ("Save".equals(event.arg)) { saveFile.show(); String outFile=saveFile.getFile(); try { FileOutputStream f = new FileOutputStream(outFile); ObjectOutputStream s = new ObjectOutputStream(f); s.writeObject(gc.vector); s.flush( ); s.close( ); f.close( ); } catch ( Exception e) { System.err.println(e) ; } return true; } else if ("Print".equals(event.arg)) { PrintJob pjob = toolkit.getPrintJob(this,"Print",null); return true; } else if ("Quit".equals(event.arg)) { dispose(); return true; } else if (event.arg.equals("Move")) { gc.MoveCycle = true; System.out.println("true"); } else if (event.arg.equals("Replay")) gc.Replay = true; else if(event.arg.equals("Delete place")) gc.Delete_Place = true; else if(event.arg.equals("Add place")) gc.Delete_Place = false; else if(event.arg.equals("Add token")) //WeiDong { gc.PutDot = true; gc.deleteToken = false; } else if(event.arg.equals("Delete token")) //WeiDong { gc.deleteToken =true; gc.PutDot = false; } else if (event.arg.equals("Group")) { gc.Grouping = true; System.out.println("true"); } else if (event.arg.equals("DeGroup")) { gc.DeGrouping = true; System.out.println("true"); } else if ("Tutorial".equals(event.arg)) { BaseFrame31 win = new BaseFrame31(" Instrucion Window"); win.resize(375, 170); win.show(); return true; } else if ("Connect".equals(event.arg)) { if (commThread == null) { //start a new thread to open up a CommFrame window commWin = new CommFrame(); commThread = new Thread(commWin); commThread.start(); } else //a CommFrame thread is already running commWin.restart(); } else if ("Disconnect all".equals(event.arg)) { commWin.disconnect(); commThread.stop(); } } } return false; } // end of "handleEvent(Event event)" public void lock() { Locked=true; } public void unlock() { Locked=false; } public boolean action(Event evt, Object arg) { if(evt.target instanceof MenuItem) { if(arg.equals("No transition Delay")) System.out.println("No transition Delay"); else if (arg.equals("All transitions - Same Delay")) { System.out.println("All transitions - Same Delay"); f1 = new DialogTest("All transitions - Same Delay",1); f1.resize(400,300); f1.show(); } else if (arg.equals("Some transitions - Same Delay")) { System.out.println("Some transitions - Same Delay"); f1 = new DialogTest("Some transitions - Same Delay",2); f1.resize(400,300); f1.show(); } else if(arg.equals("All transitions - Different Delay")) { System.out.println("All transitions - Different Delay"); f1 = new DialogTest("All transitions - Different Delay",3); f1.resize(400,300); f1.show(); } else if (arg.equals("Start Cyclic Checking")) { NewDialog nd = new NewDialog ( "Enter the number of iterations", gc); nd.resize(400,300); nd.show( ); } else if (arg.equals("Disconnect all")) { System.out.println("Try disconnecting..."); commWin.disconnect(); commThread.stop(); } return true; } return false; } // end of "action()" } // end of class MenuFrame