From ecb5ab32cb7599f6665117ad4e25c61f0a650720 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Mon, 30 Oct 2006 16:31:38 +0000 Subject: [PATCH] Update features --- src/jalview/gui/FeatureRenderer.java | 228 +++++++++++++++++++++++++--------- src/jalview/gui/SeqPanel.java | 36 ++++-- 2 files changed, 194 insertions(+), 70 deletions(-) diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index ec03b85..14dd1a0 100755 --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@ -27,6 +27,7 @@ import java.util.*; import java.awt.image.*; import javax.swing.*; import javax.swing.JOptionPane; +import java.awt.event.*; /** @@ -422,17 +423,43 @@ public class FeatureRenderer public boolean createNewFeatures(SequenceI[] sequences, SequenceFeature [] features) { + return amendFeatures(sequences, features, true); + } + boolean amendFeatures(SequenceI[] sequences, + final SequenceFeature [] features, + boolean newFeatures) + { JPanel bigPanel = new JPanel(new BorderLayout()); - JComboBox name = new JComboBox(); - JComboBox source = new JComboBox(); - JTextArea description = new JTextArea(3,25); + final JComboBox name = new JComboBox(); + final JComboBox source = new JComboBox(); + final JTextArea description = new JTextArea(3,25); + final JTextField start = new JTextField(6); + final JTextField end = new JTextField(6); + final JButton colour = new JButton(" "); + colour.setMaximumSize(new Dimension(40,10)); + colour.setBackground(new Color(60, 160, 115)); + colour.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent evt) + { + colour.setBackground( + JColorChooser.showDialog(Desktop.desktop, + "Select Feature Colour", + colour.getBackground())); + } + }); - JPanel panel = new JPanel(new GridLayout(2, 2)); - panel.add(new JLabel("New Sequence Feature Name: ",JLabel.RIGHT)); + JPanel panel = new JPanel(new GridLayout(3, 2)); + panel.add(new JLabel("Sequence Feature Name: ",JLabel.RIGHT)); panel.add(name); panel.add(new JLabel("Feature Group: ", JLabel.RIGHT)); panel.add(source); + panel.add(new JLabel("Feature Colour: ", JLabel.RIGHT)); + JPanel tmp = new JPanel(); + tmp.add(colour); + colour.setPreferredSize(new Dimension(150,15)); + panel.add(tmp); name.setEditable(true); source.setEditable(true); @@ -442,27 +469,20 @@ public class FeatureRenderer description.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); description.setLineWrap(true); panel.add(new JScrollPane(description)); - bigPanel.add(panel, BorderLayout.CENTER); - - Enumeration en; - if (av.featuresDisplayed != null) + if(!newFeatures) { - en = av.featuresDisplayed.keys(); - while (en.hasMoreElements()) - { - name.addItem(en.nextElement().toString()); - } - } - - if (featureGroups != null) - { - en = featureGroups.keys(); - while (en.hasMoreElements()) - { - source.addItem(en.nextElement().toString()); - } + bigPanel.add(panel, BorderLayout.SOUTH); + + panel = new JPanel(); + panel.add(new JLabel("Start: ", JLabel.RIGHT)); + panel.add(start); + panel.add(new JLabel("End: ", JLabel.RIGHT)); + panel.add(end); + bigPanel.add(panel, BorderLayout.CENTER); } + else + bigPanel.add(panel, BorderLayout.CENTER); if (lastFeatureAdded == null) if (features[0].type != null) @@ -477,60 +497,148 @@ public class FeatureRenderer lastFeatureAdded = "Jalview"; - name.setSelectedItem(lastFeatureAdded); - source.setSelectedItem(lastFeatureGroupAdded); - description.setText( - lastDescriptionAdded == null ? - features[0].description : lastDescriptionAdded); + Enumeration en; + if (featureGroups != null) + { + en = featureGroups.keys(); + while (en.hasMoreElements()) + { + source.addItem(en.nextElement().toString()); + } + } + + if (newFeatures) + { + if(av.featuresDisplayed != null) + { + en = av.featuresDisplayed.keys(); + while (en.hasMoreElements()) + { + name.addItem(en.nextElement().toString()); + } + } + + name.setSelectedItem(lastFeatureAdded); + source.setSelectedItem(lastFeatureGroupAdded); + description.setText( + lastDescriptionAdded == null ? + features[0].description : lastDescriptionAdded); + } + else if (!newFeatures) + { + for(int f=0; f= sequence.findPosition(res))) + if ( (features[i].getBegin() <= res) && + (features[i].getEnd() >= res)) { tmp.addElement(features[i]); } @@ -558,7 +557,7 @@ public class SeqPanel extends JPanel implements MouseListener, tooltipText.setLength(6); // Cuts the buffer back to SequenceFeature[] features = findFeaturesAtRes( - sequence.getDatasetSequence(), res); + sequence.getDatasetSequence(), sequence.findPosition(res)); if(features!=null) { @@ -649,7 +648,6 @@ public class SeqPanel extends JPanel implements MouseListener, } } - if(tooltipText.length()==6) // { @@ -1202,17 +1200,35 @@ public class SeqPanel extends JPanel implements MouseListener, public void mouseClicked(MouseEvent evt) { + SequenceI sequence = av.alignment.getSequenceAt( findSeq(evt) ); if(evt.getClickCount()>1) { + if (av.getSelectionGroup().getSize(false) == 1 + && av.getSelectionGroup().getEndRes() + - av.getSelectionGroup().getStartRes() < 2) + av.setSelectionGroup(null); SequenceFeature[] features = findFeaturesAtRes( - av.alignment.getSequenceAt( findSeq(evt) ).getDatasetSequence(), - findRes(evt) + sequence.getDatasetSequence(), + sequence.findPosition( findRes(evt) ) ); - for(int f=0; f