X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FFeatureRenderer.java;h=b5b53fd86722bdbd336bf05a809fdebfeda3cefd;hb=df9eac352d5fc1252e6377fec7cfc29fd841c932;hp=7c6032716287cee54db9b9818b34690d2d0628c2;hpb=ef36c8bbd6c5eef95e4d1a2cff57ea772af5110b;p=jalview.git diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index 7c60327..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. * @@ -168,7 +168,6 @@ public class FeatureRenderer || seq.getDatasetSequence().getSequenceFeatures().length==0) return; - if(g!=null) fm = g.getFontMetrics(); @@ -334,16 +333,26 @@ public class FeatureRenderer } } - int count = 0; - synchronized public void featuresAdded() + + boolean newFeatureAdded = false; + + public void featuresAdded() { - newFeatureAdded = true; findAllFeatures(); - newFeatureAdded = false; } + boolean findingFeatures = false; synchronized void findAllFeatures() { + newFeatureAdded = false; + + if(findingFeatures) + { + newFeatureAdded = true; + return; + } + + findingFeatures = true; jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(); @@ -396,6 +405,8 @@ public class FeatureRenderer renderOrder[i] = en.nextElement().toString(); i--; } + + findingFeatures = false; } public Color getColour(String featureType) @@ -405,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