X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src2%2Ffr%2Forsay%2Flri%2Fvarna%2Fviews%2FVueHighlightRegionEdit.java;fp=src2%2Ffr%2Forsay%2Flri%2Fvarna%2Fviews%2FVueHighlightRegionEdit.java;h=ca01a2541d97acfb31e0c8dda1c26738d75d84dd;hb=9f55415c9f8005e9dcd8243453883ff853fd5b76;hp=0000000000000000000000000000000000000000;hpb=d8e8c742b864e58406d13e21d124699a26b6492f;p=jalview.git diff --git a/src2/fr/orsay/lri/varna/views/VueHighlightRegionEdit.java b/src2/fr/orsay/lri/varna/views/VueHighlightRegionEdit.java new file mode 100644 index 0000000..ca01a25 --- /dev/null +++ b/src2/fr/orsay/lri/varna/views/VueHighlightRegionEdit.java @@ -0,0 +1,200 @@ +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(); + + } + } +