package fr.orsay.lri.varna.views; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JColorChooser; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import fr.orsay.lri.varna.VARNAPanel; import fr.orsay.lri.varna.models.annotations.ChemProbAnnotation; import fr.orsay.lri.varna.models.annotations.HighlightRegionAnnotation; import fr.orsay.lri.varna.models.rna.ModeleBase; public class VueChemProbAnnotation implements ChangeListener, ActionListener, ItemListener { private VARNAPanel _vp; private JPanel panel; private ChemProbAnnotation _an; private static int CONTROL_HEIGHT = 50; private static int TITLE_WIDTH = 70; private static int CONTROL_WIDTH = 200; private JButton color = new JButton(); JSpinner intensity; JComboBox outward = new JComboBox(new String[]{"Inward","Outward"}); JComboBox type = new JComboBox(ChemProbAnnotation.ChemProbAnnotationType.values()); public VueChemProbAnnotation(VARNAPanel vp, ChemProbAnnotation an) { _an = an; _vp = vp; panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.LEFT)); JPanel outlinep = new JPanel(); JLabel l1 = new JLabel("Color: "); l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT)); color.setContentAreaFilled(false); color.setOpaque(true); color.setPreferredSize(new Dimension(CONTROL_WIDTH,CONTROL_HEIGHT)); color.setBackground(_an.getColor()); color.addActionListener(this); color.setActionCommand("outline"); outlinep.add(l1); outlinep.add(color); JPanel radiusp = new JPanel(); l1 = new JLabel("Intensity: "); l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT)); SpinnerNumberModel jm = new SpinnerNumberModel(_an.getIntensity(),0.01,10.0,0.01); intensity = new JSpinner(jm); radiusp.add(l1); radiusp.add(intensity); intensity.addChangeListener(this); JPanel dirp = new JPanel(); l1 = new JLabel("Direction: "); l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT)); outward.addItemListener(this); dirp.add(l1); dirp.add(outward); JPanel typep = new JPanel(); l1 = new JLabel("Type: "); l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT)); type.addItemListener(this); typep.add(l1); typep.add(type); JPanel jp = new JPanel(); jp.setLayout(new GridLayout(4,1)); jp.add(outlinep); jp.add(radiusp); jp.add(dirp); jp.add(typep); panel.add(jp); } public JPanel getPanel() { return panel; } public VARNAPanel get_vp() { return _vp; } HighlightRegionAnnotation _backup = null; public boolean show() { boolean accept = false; intensity.setValue(_an.getIntensity()); color.setBackground(_an.getColor()); type.setSelectedItem(_an.getType()); outward.setSelectedItem((_an.isOut()?"Inward":"Outward")); if (JOptionPane.showConfirmDialog(_vp, getPanel(), "Edit chemical probing annotation", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) { accept = true; } _vp.repaint(); return accept; } public void stateChanged(ChangeEvent e) { if (e.getSource().equals(intensity)) { Object val = intensity.getValue(); if (val instanceof Double) { _an.setIntensity(((Double)val).doubleValue()); _vp.repaint(); } } } public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("outline")) { Color c = JColorChooser.showDialog(getPanel(), "Choose new outline color", _an.getColor()); if (c!= null) { _an.setColor(c); } } color.setBackground(_an.getColor()); _vp.repaint(); } public void itemStateChanged(ItemEvent e) { if (e.getSource()==outward) { _an.setOut(!e.getItem().equals("Outward")); _vp.repaint(); } else if ((e.getSource()==type)&&(e.getItem() instanceof ChemProbAnnotation.ChemProbAnnotationType)) { ChemProbAnnotation.ChemProbAnnotationType t = (ChemProbAnnotation.ChemProbAnnotationType) e.getItem(); _an.setType(t); _vp.repaint(); } } }