package circdesignagui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import circdesigna.CircDesigNAOptions; import circdesigna.SequenceDesigner; import circdesigna.SequenceDesigner.SeqDesignerOption; public class DnaDesignOptionsPanel extends JPanel{ public DnaDesignOptionsPanel(SequenceDesigner cDesign){ setLayout(new BorderLayout()); Box showOptionsBox = Box.createVerticalBox(); if (cDesign.isRunning()){ JLabel lab = new JLabel("<html><u>Options cannot be changed while the designer is running.</u></html>"); lab.setHorizontalAlignment(SwingConstants.CENTER); Box horiz = Box.createHorizontalBox(); horiz.add(lab); horiz.add(Box.createHorizontalGlue()); showOptionsBox.add(horiz); } CircDesigNAOptions options = cDesign.getOptions(); for(final SeqDesignerOption option : options.options){ JLabel label = new JLabel(); label.setText("<html>"+option.getDescription()+"</html>"); if (option instanceof SeqDesignerOption.Boolean){ //Add a new toggle final JCheckBox toggle = new JCheckBox(); toggle.setOpaque(false); Box horiz = Box.createHorizontalBox(); horiz.add(toggle); horiz.add(label); horiz.add(Box.createHorizontalGlue()); showOptionsBox.add(horiz); label.setLabelFor(toggle); final SeqDesignerOption.Boolean bOption = (SeqDesignerOption.Boolean) option; toggle.setSelected(bOption.getState()); toggle.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { bOption.toggle(); toggle.setSelected(bOption.getState()); } }); toggle.setEnabled(!cDesign.isRunning()); } else if (option instanceof SeqDesignerOption.Double || option instanceof SeqDesignerOption.Integer || option instanceof SeqDesignerOption.Str){ final SeqDesignerOption.Double dOption; final SeqDesignerOption.Integer iOption; final SeqDesignerOption.Str sOption; //Add a value field final JTextField jta = new JTextField(12); if (option instanceof SeqDesignerOption.Double){ dOption = (SeqDesignerOption.Double) option; jta.setText(dOption.getState()+""); iOption = null; sOption = null; } else if (option instanceof SeqDesignerOption.Integer){ iOption = (SeqDesignerOption.Integer) option; jta.setText(iOption.getState()+""); dOption = null; sOption = null; } else /*if (option instanceof SeqDesignerOption.String)*/{ sOption = (SeqDesignerOption.Str) option; jta.setText(sOption.getState()+""); dOption = null; iOption = null; } jta.setMaximumSize(new Dimension(150,23)); jta.setMinimumSize(new Dimension(150,23)); final String defaultDedicateText = "Set"; final JButton dedicate = new JButton(defaultDedicateText); dedicate.setPreferredSize(new Dimension(70,23)); dedicate.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent f) { try { if (dOption!=null){ dOption.setState(new Double(jta.getText())); } else if (iOption!=null){ iOption.setState(new Integer(jta.getText())); } else if (sOption!=null){ sOption.setState(jta.getText()); } } catch (Throwable e){ dedicate.setText("ERR."); new Thread(){ public void run(){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } dedicate.setText(defaultDedicateText); } }.start(); } } }); dedicate.setEnabled(!cDesign.isRunning()); jta.setEditable(!cDesign.isRunning()); Box horiz = Box.createHorizontalBox(); horiz.add(jta); horiz.add(dedicate); horiz.add(label); horiz.add(Box.createHorizontalGlue()); showOptionsBox.add(horiz); } } //showOptionsBox.add(Box.createVerticalGlue()); add(showOptionsBox); validate(); } }