X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureRenderer.java;h=2ca3ca37ee205282dbce0bf1c06f998fd58cf8a8;hb=488e3a038c2ba1a3926f2af5eaea97ba76e028d0;hp=b06cace9cd24551ad5567c96480b89a7af39e8bc;hpb=d2f3c59deebfd9ea52b0021ab31467c18b9d2c14;p=jalview.git diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index b06cace..2ca3ca3 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. * @@ -79,33 +79,30 @@ public class FeatureRenderer boolean offscreenRender = false; public Color findFeatureColour(Color initialCol, SequenceI seq, int res) { - int seqindex = av.alignment.findIndex(seq); - return new Color( findFeatureColour (initialCol.getRGB(), - seqindex, res )); + seq, res )); } /** - * This is used by the Molecule Viewer to get the accurate colour - * of the rendered sequence + * This is used by the Molecule Viewer and Overview to + * get the accurate colourof the rendered sequence */ - public int findFeatureColour(int initialCol, int seqIndex, int column) + public int findFeatureColour(int initialCol, SequenceI seq, int column) { if(!av.showSequenceFeatures) return initialCol; - if(seqIndex!=lastSequenceIndex) + if(seq!=lastSeq) { - lastSequence = av.alignment.getSequenceAt(seqIndex); - lastSequenceIndex = seqIndex; - sequenceFeatures = lastSequence.getDatasetSequence().getSequenceFeatures(); + lastSeq = seq; + sequenceFeatures = lastSeq.getDatasetSequence().getSequenceFeatures(); if(sequenceFeatures==null) return initialCol; sfSize = sequenceFeatures.length; } - if(jalview.util.Comparison.isGap(lastSequence.getCharAt(column))) + if(jalview.util.Comparison.isGap(lastSeq.getCharAt(column))) return Color.white.getRGB(); @@ -123,7 +120,7 @@ public class FeatureRenderer { offscreenImage.setRGB(0,0,initialCol); drawSequence(offscreenImage.getGraphics(), - lastSequence, + lastSeq, column,column,0); return offscreenImage.getRGB(0,0); @@ -131,8 +128,8 @@ public class FeatureRenderer else { drawSequence(null, - lastSequence, - lastSequence.findPosition(column), + lastSeq, + lastSeq.findPosition(column), -1, -1); if (currentColour == null) @@ -160,8 +157,7 @@ public class FeatureRenderer */ // String type; // SequenceFeature sf; - int lastSequenceIndex=-1; - SequenceI lastSequence; + SequenceI lastSeq; SequenceFeature [] sequenceFeatures; int sfSize, sfindex, spos, epos; @@ -172,7 +168,6 @@ public class FeatureRenderer || seq.getDatasetSequence().getSequenceFeatures().length==0) return; - if(g!=null) fm = g.getFontMetrics(); @@ -189,9 +184,9 @@ public class FeatureRenderer sfSize = sequenceFeatures.length; } - if(lastSequence==null || seq!=lastSequence) + if(lastSeq==null || seq!=lastSeq) { - lastSequence = seq; + lastSeq = seq; sequenceFeatures = seq.getDatasetSequence().getSequenceFeatures(); sfSize = sequenceFeatures.length; } @@ -207,8 +202,8 @@ public class FeatureRenderer if(!offscreenRender) { - spos = lastSequence.findPosition(start); - epos = lastSequence.findPosition(end); + spos = lastSeq.findPosition(start); + epos = lastSeq.findPosition(end); } @@ -338,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(); @@ -400,6 +405,8 @@ public class FeatureRenderer renderOrder[i] = en.nextElement().toString(); i--; } + + findingFeatures = false; } public Color getColour(String featureType) @@ -409,17 +416,240 @@ 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.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(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); + } + else if (!newFeatures) + { + featureIndex = 0; + for(int f=0; f