// File: Editor.java // Classes: Editor // Original Author: Kedar Patankar // Date 15 Jan 1997 // Modified Authors: Dave Boatwright and Kevin Carlson // Date 21 Feb 1997 package uci.graphedit; import java.util.Vector; import java.awt.Frame; import java.awt.Event; import java.awt.BorderLayout; import java.awt.Color; import java.awt.MenuItem; import java.awt.Toolkit; import gjt.ImageButton; import gjt.ImageButtonEvent; import gjt.Toolbar; public class Editor extends Frame { private Toolbar _toolBar; private ImageButton newButton,openButton,saveButton, printButton,cutButton,copyButton,pasteButton; private UmlPalette _palette; private EditorMenus _menu; private CdPanel _cdPanel; private String INSTALL_DIR; private String IO_DIR; private String _title; public void updateDocname(String previousName,String presentName) { _menu.refresh(previousName); removeFromOutstanding(previousName); _cdPanel.updateDocname(previousName,presentName); _menu.refresh(presentName); showDocument(presentName); } public boolean isPresent(String s){ return _cdPanel.isPresent(s);} public int getNoOfOpenDocuments(){ return _cdPanel.getNoOfOpenDocuments();} public Document getDocument(String s){return _cdPanel.getDocument(s);} public int nextDocumentNumber(){ return _cdPanel.nextDocumentNumber(); } public Document curDocument(){ return _cdPanel.curDocument();} public void addInOutstanding(String s) { _cdPanel.addInOutstanding(s); _menu.refresh(); } public void removeFromOutstanding(String s) { _cdPanel.removeFromOutstanding(s); _menu.refresh(); } public Vector get_outStanding(){return _cdPanel.get_outStanding();} public void settitle(String s) { if(s==null) setTitle(_title); else setTitle(_title+s); } public void showDocument(String s) { _cdPanel.showDocument(s); if(_cdPanel.get_outStanding().contains(s)) settitle("- ["+s+" *]"); else settitle("- ["+s+"]"); show(); } public void resizeCanvas( int width, int height ){ _cdPanel.resizeCanvas( width, height ); } public void attach(String name,Document d) { _cdPanel.attach(name,d); settitle("- ["+name+"]"); refresh(name); saveButton.enable(); show(); } public void detach(String name,Document d) { String s=_cdPanel.detach(name,d); if (s!=null) { if(get_outStanding().contains(s)) settitle("- ["+s+" *]"); else settitle("- ["+s+"]"); saveButton.enable(); } else { settitle(null); saveButton.disable(); } refresh(name); show(); } public void refresh(String name) { _menu.refresh(name); _cdPanel.refresh(); } /** Construct a new Editor to edit the given NetList */ public Editor(String title, int w, int h) { _menu = new EditorMenus(this); this.setTitle(title); _title=title; this.resize(w, h); INSTALL_DIR=System.getProperty("INSTALL_DIR"); if (INSTALL_DIR==null) INSTALL_DIR="."; IO_DIR=System.getProperty("IO_DIR"); if (IO_DIR==null) IO_DIR="."; setLayout(new BorderLayout()); _toolBar = new Toolbar(0,0); makeToolbar(); _toolBar.setBackground(Color.gray); add("North",_toolBar); _cdPanel=new CdPanel(this); add("Center",_cdPanel); } public String getInstallDir(){ return INSTALL_DIR;} public String getIoDir(){return IO_DIR;} public void makeToolbar() { newButton = new ImageButton(Toolkit.getDefaultToolkit().getImage (INSTALL_DIR+"/images/new.gif")); openButton = new ImageButton(Toolkit.getDefaultToolkit().getImage (INSTALL_DIR+"/images/open.gif")); saveButton = new ImageButton(Toolkit.getDefaultToolkit().getImage (INSTALL_DIR+"/images/save.gif")); saveButton.disable(); printButton = new ImageButton(Toolkit.getDefaultToolkit().getImage (INSTALL_DIR+"/images/print.gif")); printButton.disable(); cutButton = new ImageButton(Toolkit.getDefaultToolkit().getImage (INSTALL_DIR+"/images/cut.gif")); cutButton.disable(); copyButton = new ImageButton(Toolkit.getDefaultToolkit().getImage (INSTALL_DIR+"/images/copy.gif")); copyButton.disable(); pasteButton = new ImageButton(Toolkit.getDefaultToolkit().getImage (INSTALL_DIR+"/images/paste.gif")); pasteButton.disable(); _toolBar.add(newButton); _toolBar.add(openButton); _toolBar.add(saveButton); _toolBar.addSpacer(10); _toolBar.add(printButton); _toolBar.addSpacer(10); _toolBar.add(cutButton); _toolBar.add(copyButton); _toolBar.add(pasteButton); } public boolean handleEvent(Event event) { if(event instanceof ImageButtonEvent) { ImageButtonEvent ibevent = (ImageButtonEvent)event; if(ibevent.isActivated()) { if(event.target == newButton) { Action act=new ActionNew(this); act.doIt(); } if(event.target == openButton) { Action act = new ActionOpen(this); act.doIt(); } if(event.target == saveButton) { Action act = new ActionSave(this,curDocument()); act.doIt(); } if(event.target == printButton) System.out.println("Print Button Activated"); if(event.target == cutButton) System.out.println("Cut Button Activated"); if(event.target == copyButton) System.out.println("Copy Button Activated"); if(event.target == pasteButton) System.out.println("Paste Button Activated"); return true; } } return HandleEvent(event); } /** intercepts special events for handling before passing it on to * the default event handler. If you modifythis function, make sure * you call still call super.handleEvent() otherwise none of the * above event handling functions will work. */ public boolean HandleEvent(Event e) { switch(e.id) { case Event.ACTION_EVENT: if (e.target instanceof MenuItem) return handleMenuEvent(e); return true; case Event.WINDOW_DESTROY: Action act=new ActionQuit(this); act.doIt(); return true; } boolean ret = super.handleEvent(e); return ret; } /** Pass any Menu events to my EditorMenus object. * @see EditorMenus */ protected boolean handleMenuEvent(Event e) { return _menu.handleMenuEvent(e); } /** The editor acts as a shell for Actions. This method executes the * given action in response to the given event (some Action's look * at the Event's that invoke them, even though this is * discouraged). The Editor executes the Action in a safe * environment so that buggy actions cannot crash the whole * Editor.

* Needs-more-work: Action debugging facilities are needed. * Needs-more-work: support for fynamic loading of actions... here? * @see Action */ public void executeAction(Action act, Event e) { if (act == null) return; try { act.doIt(); } catch (java.lang.Throwable ex) { System.out.println("While executing " + act.toString() + " on event " + e.toString() + " the following error occured:"); ex.printStackTrace(); } } /** close this editor window */ public void close() { hide(); dispose(); } }/* end class Editor */