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();
}
}
}