X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureRenderer.java;h=b5b53fd86722bdbd336bf05a809fdebfeda3cefd;hb=6f72987ac17c0846a12b635c29fc1788b3c13b8c;hp=5843844fbeb8f7b362c622c6d23fd214a0aa0cec;hpb=9816dd282fa1ec6731dd8afe6c4f255f6d0a2dd4;p=jalview.git diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index 5843844..b5b53fd 100755 --- a/src/jalview/gui/FeatureRenderer.java +++ b/src/jalview/gui/FeatureRenderer.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -25,6 +25,9 @@ import java.awt.*; import java.util.*; import java.awt.image.*; +import javax.swing.*; +import javax.swing.JOptionPane; +import java.awt.event.*; /** @@ -54,9 +57,6 @@ public class FeatureRenderer String [] renderOrder; - boolean newFeatureAdded = false; - - /** * Creates a new FeatureRenderer object. * @@ -177,7 +177,6 @@ public class FeatureRenderer || newFeatureAdded) { findAllFeatures(); - newFeatureAdded = false; if(av.featuresDisplayed.size()<1) return; @@ -335,18 +334,23 @@ public class FeatureRenderer } + boolean newFeatureAdded = false; + public void featuresAdded() { - newFeatureAdded = true; findAllFeatures(); } boolean findingFeatures = false; synchronized void findAllFeatures() { + newFeatureAdded = false; if(findingFeatures) + { + newFeatureAdded = true; return; + } findingFeatures = true; jalview.schemes.UserColourScheme ucs = new @@ -412,17 +416,245 @@ public class FeatureRenderer } - public void addNewFeature(String name, Color col, String group) + static String lastFeatureAdded; + static String lastFeatureGroupAdded; + static String lastDescriptionAdded; + + public boolean createNewFeatures(SequenceI[] sequences, + SequenceFeature [] features) { + return amendFeatures(sequences, features, true); + } - setColour(name, col); - if(av.featuresDisplayed==null) - av.featuresDisplayed = new Hashtable(); + int featureIndex = 0; + boolean amendFeatures(SequenceI[] sequences, + final SequenceFeature [] features, + boolean newFeatures) + { + JPanel bigPanel = new JPanel(new BorderLayout()); + 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.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(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); + + bigPanel.add(panel, BorderLayout.NORTH); + panel = new JPanel(); + panel.add(new JLabel("Description: ", JLabel.RIGHT)); + description.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11)); + description.setLineWrap(true); + panel.add(new JScrollPane(description)); + + if(!newFeatures) + { + 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) + lastFeatureAdded = features[0].type; + else + lastFeatureAdded = "feature_1"; + + if (lastFeatureGroupAdded == null) + if (features[0].featureGroup != null) + lastFeatureGroupAdded = features[0].featureGroup; + else + lastFeatureAdded = "Jalview"; + + + 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); + + if (getColour(lastFeatureAdded) != null) + colour.setBackground(getColour(lastFeatureAdded)); + else + colour.setBackground(new Color(60, 160, 115)); + + } + else if (!newFeatures) + { + featureIndex = 0; + for(int f=0; f