package circdesignagui; import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import javax.swing.JButton; import javax.swing.JPanel; import circdesigna.CircDesigNA; import circdesigna.CircDesigNAOptions; import circdesigna.SequenceDesigner; /** * The top-level object for CircDesigNA. This holds information that gets persisted between views. */ public class CircDesigNA_Context extends Applet{ public CircDesigNA_Context(){ } //CircDesigNA_DesignView: private boolean started = false; public void start(){ if(started) return; started = true; setLayout(new BorderLayout()); openDesignView(); } private void theme(Container view) { for(Component c : view.getComponents()){ if (c instanceof Container){ theme((Container)c); } if (c instanceof JButton){ ButtonSkin.process(designView, (JButton)c); } } if (view instanceof JPanel){ designView.skinPanel((JPanel)view); } } /** * Adds, initializes, resizes, and validates a component to be added. */ private void aIVR(Component view) { add(view); view.setPreferredSize(getSize()); validate(); } private Component currentView; private void closeView() { if (currentView != null){ remove(currentView); } currentView = null; } private CircDesigNA_DesignView.Output designView_data; private SequenceDesigner<CircDesigNAOptions> cDesign; private CircDesigNA_DesignView designView; public void setDesignViewOutput(CircDesigNA_DesignView.Output output) { this.designView_data = output; if (cDesign != null){ System.err.println("Warning: old designer was not cleaned up. Overwriting."); } //Start a new designer cDesign = CircDesigNA.getDefaultDesigner(designView_data.molDefs, designView_data.domainDefs, designView_data.cfg); } /** * Return a reference to the current design. */ public SequenceDesigner<CircDesigNAOptions> getDesigner() { return cDesign; } /** * Returns whatever top-level component is currently being displayed. These are called "views." */ public Component getCurrentView() { return currentView; } public ThemedApplet getThemedApplet() { return designView; } public void openDesignViewWithDomainDefs(String modDomainDefs){ designView_data.domainDefs = modDomainDefs; openDesignView(); } public void openDesignView() { closeView(); if (cDesign != null){ cDesign.abort(); cDesign = null; } //Sort of wasteful to create a new one, but its safe at least. designView = new CircDesigNA_DesignView(this){ public String getParameter(String key){ return CircDesigNA_Context.this.getParameter(key); } }; currentView = designView; aIVR(designView); designView.init(); if (designView_data==null){ designView.start(); } else { designView.start(designView_data); } } public void openDesignOptionsView() { closeView(); //Make sure you can't change options when the designer's started. CircDesigNA_DesignOptionsView designOptionsView = new CircDesigNA_DesignOptionsView(this); currentView = designOptionsView; aIVR(designOptionsView); //resultsView.init(); theme(designOptionsView); } public void openRunningDesignerView() { closeView(); cDesign.resume(); //Does nothing if already running CircDesigNA_DesignRunningView designRunningView = new CircDesigNA_DesignRunningView(this); currentView = designRunningView; aIVR(designRunningView); designRunningView.init(); theme(designRunningView); } public void openResultsView() { closeView(); cDesign.resume(); //Does nothing if already running CircDesigNA_ResultsView resultsView = new CircDesigNA_ResultsView(this); currentView = resultsView; aIVR(resultsView); resultsView.init(); theme(resultsView); } }