/* SCCS %W% --- %G% -- %U% */ // Copyright: Copyright (c) 1997 University of Southern California Brain Project. // Copyright: This software may be freely copied provided the toplevel // Copyright: COPYRIGHT file is included with each such copy. // Copyright: Email nsl@java.usc.edu. package nslj.src.display; import java.lang.*; import java.lang.reflect.*; import java.awt.*; import java.util.*; import nslj.src.lang.*; import nslj.src.system.*; import java.awt.event.*; /** * The Nsl Frame * * @version 1.0 * @author Danjie Pan */ public class NslFrame extends Frame implements ActionListener, ItemListener { Color color; NslVariableInput variable_input_window=null; //ERHMOD public NslFrame() { System.err.println("Error: NslFrame: Should not call this constructor"); //NslCanvas.Frame = this; NslOutOfBoundsBezier.frame = this; } public NslFrame(NslModule module,NslSystem sys) { //String frameName; frameName=""; if (module!=null) { frameName=module.nslGetName(); } if (frameName.equals("")) { setTitle(".nsl.NslOutFrame"); } else { frameName=".nsl."+frameName; setTitle(frameName); } addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { system.remove((NslFrame) e.getWindow()); dispose(); } } ); //keep for (new WindowAdapter() MenuBar mbar = new MenuBar(); Menu m; NslRadioMenu columnsmenu; MenuItem fomi; //frame options MenuItem fpmi; //frame print // Frame m = createMenu("Frame", new String[] { "New Canvas", "Remove Canvas"}); m.addSeparator(); //--------------- columnsmenu = new NslRadioMenu("Columns", new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }); columnsmenu.addItemListener(new ColumnAdapter()); m.add(columnsmenu); fomi=new MenuItem("Frame Options"); m.add(fomi); fpmi = new MenuItem("Frame Print"); m.add(fpmi); m.addSeparator(); //--------------- m.add(new MenuItem("Close")); m.addActionListener(new DisplayFrameActionAdapter(this)); mbar.add(m); //------------------------ // Canvas // all of these menu options need to be disabled until a canvas is selected m = new Menu("Canvas"); //m = createMenu("Canvas", new String[] {"Zoom","Export Data"}); zmi=new MenuItem("Zoom"); zmi.setEnabled(false); m.add(zmi); typeMenu = new NslRadioMenu("Change Type", new String[] {"Area", "Bar", "Dot", "Image", "Spatial", "String", "Temporal"} ); m.add(typeMenu); typeMenu.addItemListener(this); typeMenu.setEnabled(false); comi=new MenuItem("Canvas Options"); comi.setEnabled(false); m.add(comi); cpmi = new MenuItem("Canvas Print"); cpmi.setEnabled(false); m.add(cpmi); emi=new MenuItem("Export Data"); emi.setEnabled(false); m.add(emi); m.addActionListener(new DisplayCanvasActionAdapter(this)); mbar.add(m); //------------------------ // Help m = new Menu("Help"); mbar.add(m); mbar.setHelpMenu(m); //98/9/9 aa took out - will make like add_graph /* Menu r = new Menu("Reports"); Menu at = new Menu("Apply_To"); at.add(new MenuItem("Current_Window_Selected")); at.add(new MenuItem("All_Visible_Windows")); r.add(at); Menu rt = new Menu("Report_Type"); rt.add(new MenuItem("Complete_History")); rt.add(new MenuItem("Bezier")); rt.add(new MenuItem("No_History")); r.add(rt); mbar.add(r); */ // m = new Menu("Help"); // // Test for multithread event handling // mbar.add(m); //finally put up the menu bar setMenuBar(mbar); pStatus = new Panel(); pStatus.setBackground(Color.lightGray); pStatus.setLayout(new FlowLayout(FlowLayout.LEFT)); pStatus.add(new Label("End Cycle time: ")); // This label would be used to display the simulation time. pStatus.add(new Label("0.0 ")); pStatus.add(new Label("Finished Cycles:")); pStatus.add(new Label("0 ")); pStatus.add(new Label("Finished Epochs:")); pStatus.add(new Label("0 ")); add("South",pStatus); Dimension d = pStatus.getSize(); drawPanel = new NslPanel(this); // act_model= module; // if (module != null) { // module.nslAddModelPlots(this); // System.err.println("Calling InitWindow"); // module.initWindow(); // } else { // System.err.println("Error: NslFrame: Need a NslModule."); // } /* int plotCount = drawPanel.getComponentCount(); if (plotCount > 0) { int colCount = (plotCount > 2) ? 3 : plotCount; drawPanel.setColumns(colCount); ((CheckboxMenuItem) columnsmenu.getItem(colCount - 1)).setState(true); } else drawPanel.setColumns(1); */ add("Center",drawPanel); if (sys!=null) { // setting tmax just as soon as we know system not null tmax=sys.getEndTime(); //System.out.println("NslFrame:tmax:"+tmax); } } // end constructor private Menu createMenu(String name, String[] items) { Menu m = new Menu(name); for (int i = 0; i < items.length; i++) m.add(new MenuItem(items[i])); return m; } public NslFrame getFrame(ActionEvent evt) { MenuContainer menu =(MenuContainer) (evt.getSource()); MenuBar top = null; NslFrame frame = null; while (!(menu instanceof MenuBar)) { menu = ((MenuComponent) menu).getParent(); } frame = (NslFrame) (((MenuBar) menu).getParent()); return frame; } public void actionPerformed(ActionEvent evt) { // for double click servicing try { drawPanel.zoomCanvas(); } catch (Exception e) { System.err.println(e.toString()); } } public void itemStateChanged(ItemEvent evt) { CheckboxMenuItem item = (CheckboxMenuItem) evt.getItemSelectable(); String type = item.getLabel(); try { drawPanel.changeCanvas(type); ((NslRadioMenu) item.getParent()).selectItem(type); } catch (Exception e) { System.out.println("#Warning: NslFrame: " + e.toString()); } } public void plotSelectionChanged(String type) { if (type.equals("")) { typeMenu.setEnabled(false); comi.setEnabled(false); //canvas options cpmi.setEnabled(false); //canvas print zmi.setEnabled(false); //zoom emi.setEnabled(false); //export } else { typeMenu.setEnabled(true); typeMenu.selectItem(type); comi.setEnabled(true); //canvas options cpmi.setEnabled(true); //canvas print zmi.setEnabled(true); //zoom emi.setEnabled(true); //export } } /* 99/5/11 aa: took out private class PrintActionAdapter implements ActionListener { public void actionPerformed(ActionEvent evt) { NslFrame frame = getFrame(evt); if (evt.getActionCommand().equals("Current Canvas")) { System.out.println("NslFrame: CurrentCanvas selected"); try { NslCanvas c = drawPanel.getCurrentCanvas(); PrintJob pjob = getToolkit().getPrintJob(frame,c.canvas_name, null); if (pjob != null) { Graphics pg = pjob.getGraphics(); if (pg != null) { c.printAll(pg); pg.dispose(); // flush page } pjob.end(); } } catch (NoCanvasSelectedException e) { System.err.println(e.toString()); } } else if (evt.getActionCommand().equals("All Canvases")) { System.out.println("NslFrame: All Canvases selected"); PrintJob pjob = getToolkit().getPrintJob(frame,"Simulation", null); if (pjob != null) { Graphics pg = pjob.getGraphics(); if (pg != null) { frame.printAll(pg); pg.dispose(); // flush page } pjob.end(); } } } } */ private class DisplayFrameActionAdapter implements ActionListener { NslFrame frame; DisplayFrameActionAdapter(NslFrame f) {frame = f;} public void actionPerformed(ActionEvent evt) { if (evt.getActionCommand().equals("Close")) { system.remove(getFrame(evt)); dispose(); } else if (evt.getActionCommand().equals("New Canvas")) { variable_input_window = new NslVariableInput(frame); variable_input_window.show(); } else if (evt.getActionCommand().equals("Remove Canvas")) { try { drawPanel.removeCanvas(); } catch (NoCanvasSelectedException e) { System.err.println(e.toString()); } } else if (evt.getActionCommand().equals("Frame Options")) { NslFrameProperty fp = new NslFrameProperty(frame); fp.show(); } else if (evt.getActionCommand().equals("Frame Print")) { PrintJob pjob = getToolkit().getPrintJob(frame,frame.frameName, null); if (pjob != null) { Graphics pg = pjob.getGraphics(); if (pg != null) { frame.printAll(pg); pg.dispose(); // flush page } pjob.end(); } } } } private class ColumnAdapter implements ItemListener { public void itemStateChanged(ItemEvent evt) { try { CheckboxMenuItem item = (CheckboxMenuItem) evt.getItemSelectable(); String label = item.getLabel(); int newColumns = Integer.parseInt(label); if (!drawPanel.setColumns(newColumns)) { item.setState(false); return; } ((NslRadioMenu) item.getParent()).selectItem(label); } catch (Exception e) { System.err.println("NslFrame:Exception: Invalid number format:"+e.toString()); } } } /* 99/5/11 aa: took out and added DisplayFrameActionAdapter private class FrameOptionActionAdapter implements ActionListener { NslFrame frame; FrameOptionActionAdapter(NslFrame f) { frame = f;} public void actionPerformed(ActionEvent evt) { if (evt.getActionCommand().equals("Frame Options")) { System.out.println("NslFrame:Frame Options selected."); NslFrameProperty fp = new NslFrameProperty(frame); fp.show(); } else if (evt.getActionCommand().equals("Frame Print")) { PrintJob pjob = getToolkit().getPrintJob(frame,"Simulation", null); if (pjob != null) { Graphics pg = pjob.getGraphics(); if (pg != null) { frame.printAll(pg); pg.dispose(); // flush page } pjob.end(); } } } } */ private class DisplayCanvasActionAdapter implements ActionListener { NslFrame frame; DisplayCanvasActionAdapter(NslFrame f) { frame = f;} public void actionPerformed(ActionEvent evt) { try { if (evt.getActionCommand().equals("Canvas Options")) { drawPanel.setCanvasProperties(); } else if (evt.getActionCommand().equals("Export Data")) { // NslCanvas ndc = (NslCanvas)canvas_list.elementAt(current_canvas_index); NslOutFileProperty ndofp = new NslOutFileProperty(frame); ndofp.show(); } else if (evt.getActionCommand().equals("Zoom")) { try { drawPanel.zoomCanvas(); } catch (Exception e) { System.err.println("NslFrame:Exception: "+e.toString()); } } else if (evt.getActionCommand().equals("Canvas Print")) { NslCanvas c = drawPanel.getCurrentCanvas(); PrintJob pjob = getToolkit().getPrintJob(frame,c.canvas_name, null); if (pjob != null) { Graphics pg = pjob.getGraphics(); if (pg != null) { c.printAll(pg); pg.dispose(); // flush page } pjob.end(); } } } catch (NoCanvasSelectedException e) { //end try System.out.println("NslFrame:Exception: No Canvas Selected"); System.out.println("NslFrame:Exception: " + e.toString()); } // end catch } } public static void nslSetSystem(NslSystem sys) { system=sys; interpreter = sys.getInterpreter(); NslVariable.system = sys; NslVariableInput.system = sys; } public void startCycle() { //((Label) pStatus.getComponent(0)).setText("Simulation running at: "); } public void collect(double time) { // For displaying status ((Label) pStatus.getComponent(1)).setText(String.valueOf(rounded(time))+" "); //if (system.getCurTime() 0) { int colCount = (plotCount > 2) ? 3 : plotCount; drawPanel.setColumns(colCount); } else { drawPanel.setColumns(1); } drawPanel.validate(); } public void setColumns(int columns) { drawPanel.setColumns(columns); } public void setRows(int rows) { drawPanel.setRows(rows); } public void setFontName(String name) { //System.out.println("NslFrame"+"Font: "+name); fontName = name; } public String getFontName() { return fontName; } public void setBackgroundColor(String name) { //System.out.println(""NslFrame:Bg : "+name); bg = name; //setBackground(NslColor.getColor(bg)); } public String getBackgroundColor() { return bg; } public void setForegroundColor(String name) { //System.out.println(""NslFrame:Fg : "+name); fg = name; } public String getForegroundColor() { return fg; } public NslPanel getPanel() { return drawPanel; } public void setInputFrame() { outputFrame = false; } public boolean isOutputFrame() { return outputFrame; } private boolean outputFrame = true; public static NslSystem system; static NslInterpreter interpreter; public String frameName; private String fontName, fg, bg; private NslPanel drawPanel; private Panel pStatus; private NslModule act_model; private NslRadioMenu typeMenu; private MenuItem comi; //canvas options private MenuItem cpmi; //canvas print private MenuItem zmi; //zoom private MenuItem emi; //export // time min and time max public double tmin=0.0; public double tmax=25; public double ymin=-1000; public double ymax=1000; public Color drawingColor=Color.black; public Color backgroundColor=Color.white; public Color gridColor=Color.black; //todo: add to displayFrameProperty later }