+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.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+ import javax.swing.JLabel;
+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 fr.orsay.lri.varna.VARNAPanel;
+import fr.orsay.lri.varna.models.annotations.HighlightRegionAnnotation;
+import fr.orsay.lri.varna.models.rna.ModeleBase;
+
+ public class VueHighlightRegionEdit implements ChangeListener, ActionListener {
+
+ private VARNAPanel _vp;
+ private JSlider _fromSlider;
+ private JSlider _toSlider;
+ private JPanel panel;
+ private HighlightRegionAnnotation _an;
+ private static int CONTROL_HEIGHT = 50;
+ private static int TITLE_WIDTH = 70;
+ private static int CONTROL_WIDTH = 200;
+ private JButton fillShow = new JButton();
+ private JButton outlineShow = new JButton();
+ JSpinner rad;
+
+ public VueHighlightRegionEdit(VARNAPanel vp, HighlightRegionAnnotation an) {
+ _an = an;
+ _vp = vp;
+ _toSlider = new JSlider(JSlider.HORIZONTAL, 0,vp.getRNA().getSize()-1,0);
+ _toSlider.setMajorTickSpacing(10);
+ _toSlider.setPaintTicks(true);
+ _toSlider.setPaintLabels(true);
+ _toSlider.setPreferredSize(new Dimension(CONTROL_WIDTH, CONTROL_HEIGHT));
+
+ _fromSlider = new JSlider(JSlider.HORIZONTAL, 0,vp.getRNA().getSize()-1,0);
+ _fromSlider.setMajorTickSpacing(10);
+ _fromSlider.setPaintTicks(true);
+ _fromSlider.setPaintLabels(true);
+ _fromSlider.setPreferredSize(new Dimension(CONTROL_WIDTH, CONTROL_HEIGHT));
+
+ _fromSlider.addChangeListener(this);
+ _toSlider.addChangeListener(this);
+
+ panel = new JPanel();
+ panel.setLayout(new FlowLayout(FlowLayout.LEFT));
+
+ JPanel fromp = new JPanel();
+ JLabel l1 = new JLabel("From: ");
+ l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT));
+ fromp.add(l1);
+ fromp.add(_fromSlider);
+
+ JPanel top = new JPanel();
+ l1 = new JLabel("To: ");
+ l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT));
+ top.add(l1);
+ top.add(_toSlider);
+
+ JPanel outlinep = new JPanel();
+ l1 = new JLabel("Outline color: ");
+ l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT));
+ outlineShow.setContentAreaFilled(false);
+ outlineShow.setOpaque(true);
+ outlineShow.setPreferredSize(new Dimension(CONTROL_WIDTH,CONTROL_HEIGHT));
+ outlineShow.setBackground(an.getOutlineColor());
+ outlineShow.addActionListener(this);
+ outlineShow.setActionCommand("outline");
+ outlinep.add(l1);
+ outlinep.add(outlineShow);
+
+ JPanel fillp = new JPanel();
+ l1 = new JLabel("Fill color: ");
+ l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT));
+ fillShow.setContentAreaFilled(false);
+ fillShow.setOpaque(true);
+ fillShow.setPreferredSize(new Dimension(CONTROL_WIDTH,CONTROL_HEIGHT));
+ fillShow.setBackground(an.getFillColor());
+ fillShow.addActionListener(this);
+ fillShow.setActionCommand("fill");
+ fillp.add(l1);
+ fillp.add(fillShow);
+
+ JPanel radiusp = new JPanel();
+ l1 = new JLabel("Radius: ");
+ l1.setPreferredSize(new Dimension(TITLE_WIDTH,CONTROL_HEIGHT));
+ SpinnerNumberModel jm = new SpinnerNumberModel(_an.getRadius(),1.0,50.0,0.1);
+ rad = new JSpinner(jm);
+ rad.setPreferredSize(new Dimension(CONTROL_WIDTH,CONTROL_HEIGHT));
+ radiusp.add(l1);
+ radiusp.add(rad);
+ rad.addChangeListener(this);
+
+ JPanel jp = new JPanel();
+ jp.setLayout(new GridLayout(5,1));
+ jp.add(fromp);
+ jp.add(top);
+ jp.add(outlinep);
+ jp.add(fillp);
+ jp.add(radiusp);
+ panel.add(jp);
+ }
+
+ public JPanel getPanel() {
+ return panel;
+ }
+
+ public double getAngle() {
+ return _toSlider.getValue();
+ }
+
+ public VARNAPanel get_vp() {
+ return _vp;
+ }
+
+ HighlightRegionAnnotation _backup = null;
+
+ public boolean show() {
+ boolean accept = false;
+ int from = _an.getMinIndex();
+ int to = _an.getMaxIndex();
+ _fromSlider.setValue(from);
+ _toSlider.setValue(to );
+ if (JOptionPane.showConfirmDialog(_vp, getPanel(),
+ "Edit region 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()==_toSlider)||(e.getSource()==_fromSlider))
+ {
+ int from = _fromSlider.getValue();
+ int to = _toSlider.getValue();
+ if (from>to)
+ {
+ if (e.getSource().equals(_fromSlider))
+ {
+ _toSlider.setValue(from);
+ }
+ else if (e.getSource().equals(_toSlider))
+ {
+ _fromSlider.setValue(to);
+ }
+ }
+ from = _fromSlider.getValue();
+ to = _toSlider.getValue();
+ _an.setBases(_vp.getRNA().getBasesBetween(from, to));
+ _vp.repaint();
+ }
+ else if (e.getSource().equals(rad))
+ {
+ Object val = rad.getValue();
+ if (val instanceof Double)
+ {
+ _an.setRadius(((Double)val).doubleValue());
+ }
+ }
+
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ if (e.getActionCommand().equals("outline"))
+ {
+ Color c = JColorChooser.showDialog(getPanel(), "Choose new outline color", _an.getOutlineColor());
+ if (c!= null)
+ { _an.setOutlineColor(c); }
+ }
+ else if (e.getActionCommand().equals("fill"))
+ {
+ Color c = JColorChooser.showDialog(getPanel(), "Choose new fill color", _an.getFillColor());
+ if (c!= null)
+ { _an.setFillColor(c); }
+ }
+ outlineShow.setBackground(_an.getOutlineColor());
+ fillShow.setBackground(_an.getFillColor());
+ _vp.repaint();
+
+ }
+ }
+