X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFeatureRenderer.java;h=6e9da1af560173be329e1c1ca0e929062859546d;hb=6b71746c98f7c1118b474b0b920db3bd7b2a15c0;hp=2f6fc1b98aeb11948315b67077ad20e92d758d9d;hpb=cc71444a32e510daaabef9e175e0ecb7a25a4c55;p=jalview.git diff --git a/src/jalview/appletgui/FeatureRenderer.java b/src/jalview/appletgui/FeatureRenderer.java index 2f6fc1b..6e9da1a 100755 --- a/src/jalview/appletgui/FeatureRenderer.java +++ b/src/jalview/appletgui/FeatureRenderer.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) + * Copyright (C) 2010 J Procter, AM Waterhouse, 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 - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ package jalview.appletgui; @@ -35,7 +34,7 @@ import jalview.schemes.GraduatedColor; * @author $author$ * @version $Revision$ */ -public class FeatureRenderer +public class FeatureRenderer implements jalview.api.FeatureRenderer { AlignViewport av; @@ -98,29 +97,33 @@ public class FeatureRenderer boolean deleteFeature = false; FeatureColourPanel colourPanel; - class FeatureColourPanel extends Panel { - String label=""; - + + class FeatureColourPanel extends Panel + { + String label = ""; + private Color maxCol; - private boolean isColourByLabel,isGcol; + + private boolean isColourByLabel, isGcol; + /** * render a feature style in the amend feature dialog box */ public void updateColor(Object newcol) { - - Color bg,col=null; - GraduatedColor gcol=null; + + Color bg, col = null; + GraduatedColor gcol = null; String vlabel = ""; if (newcol instanceof Color) { - isGcol=false; + isGcol = false; col = (Color) newcol; gcol = null; } else if (newcol instanceof GraduatedColor) { - isGcol=true; + isGcol = true; gcol = (GraduatedColor) newcol; col = null; } @@ -130,49 +133,57 @@ public class FeatureRenderer } if (col != null) { - setBackground(bg=col); + setBackground(bg = col); } else { - if (gcol.getThreshType()!=AnnotationColourGradient.NO_THRESHOLD) + if (gcol.getThreshType() != AnnotationColourGradient.NO_THRESHOLD) { - vlabel += " "+((gcol.getThreshType()==AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)" : "(<)"); + vlabel += " " + + ((gcol.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)" + : "(<)"); } - if (isColourByLabel=gcol.isColourByLabel()) { - setBackground(bg=Color.white); + if (isColourByLabel = gcol.isColourByLabel()) + { + setBackground(bg = Color.white); vlabel += " (by Label)"; - } else { - setBackground(bg=gcol.getMinColor()); + } + else + { + setBackground(bg = gcol.getMinColor()); maxCol = gcol.getMaxColor(); } } - label=vlabel; + label = vlabel; setBackground(bg); repaint(); } - FeatureColourPanel() { + + FeatureColourPanel() + { super(null); } - public void paint(Graphics g) + + public void paint(Graphics g) { Dimension d = getSize(); - if (isGcol) { - if (isColourByLabel) + if (isGcol) { - g.setColor(Color.white); - g.fillRect(d.width/2, 0,d.width/2, d.height); - g.setColor(Color.black); - Font f=new Font("Verdana", Font.PLAIN, - 10); - g.setFont(f); - g.drawString("Label", 0, 0); - } - else - { - g.setColor(maxCol); - g.fillRect(d.width/2, 0,d.width/2, d.height); - - } + if (isColourByLabel) + { + g.setColor(Color.white); + g.fillRect(d.width / 2, 0, d.width / 2, d.height); + g.setColor(Color.black); + Font f = new Font("Verdana", Font.PLAIN, 10); + g.setFont(f); + g.drawString("Label", 0, 0); + } + else + { + g.setColor(maxCol); + g.fillRect(d.width / 2, 0, d.width / 2, d.height); + + } } } @@ -197,7 +208,7 @@ public class FeatureRenderer final FeatureRenderer fr = this; Panel panel = new Panel(new GridLayout(3, 1)); - + featureIndex = 0; // feature to be amended. Panel tmp; @@ -364,18 +375,21 @@ public class FeatureRenderer dialog.setResizable(true); // TODO: render the graduated color in the box. colourPanel.addMouseListener(new java.awt.event.MouseAdapter() + { + public void mousePressed(java.awt.event.MouseEvent evt) { - public void mousePressed(java.awt.event.MouseEvent evt) + if (!colourPanel.isGcol) { - if (!colourPanel.isGcol) - { - new UserDefinedColours(fr, ap.alignFrame); - } else { - FeatureColourChooser fcc = new FeatureColourChooser(ap.alignFrame, name.getText()); - dialog.transferFocus(); - } + new UserDefinedColours(fr, ap.alignFrame); } - }); + else + { + FeatureColourChooser fcc = new FeatureColourChooser( + ap.alignFrame, name.getText()); + dialog.transferFocus(); + } + } + }); dialog.setVisible(true); jalview.io.FeaturesFile ffile = new jalview.io.FeaturesFile(); @@ -402,7 +416,8 @@ public class FeatureRenderer sf.type = lastFeatureAdded; sf.featureGroup = lastFeatureGroupAdded; sf.description = lastDescriptionAdded; - if (!colourPanel.isGcol) { + if (!colourPanel.isGcol) + { // update colour - otherwise its already done. setColour(sf.type, colourPanel.getBackground()); } @@ -446,13 +461,14 @@ public class FeatureRenderer } col = colourPanel.getBackground(); - //setColour(lastFeatureAdded, fcol); + // setColour(lastFeatureAdded, fcol); if (lastFeatureGroupAdded != null) { featureGroups.put(lastFeatureGroupAdded, new Boolean(true)); } - if (fcol instanceof Color) { + if (fcol instanceof Color) + { setColour(lastFeatureAdded, fcol); } av.featuresDisplayed.put(lastFeatureAdded, @@ -472,7 +488,7 @@ public class FeatureRenderer } } // refresh the alignment and the feature settings dialog - if (av.featureSettings!=null) + if (av.featureSettings != null) { av.featureSettings.refreshTable(); } @@ -645,16 +661,16 @@ public class FeatureRenderer else if (sequenceFeatures[sfindex].type.equals("disulfide bond")) { - renderFeature(g, seq, seq - .findIndex(sequenceFeatures[sfindex].begin) - 1, seq - .findIndex(sequenceFeatures[sfindex].begin) - 1, + renderFeature(g, seq, + seq.findIndex(sequenceFeatures[sfindex].begin) - 1, + seq.findIndex(sequenceFeatures[sfindex].begin) - 1, getColour(sequenceFeatures[sfindex]) // new Color(((Integer) av.featuresDisplayed // .get(sequenceFeatures[sfindex].type)).intValue()) , start, end, y1); - renderFeature(g, seq, seq - .findIndex(sequenceFeatures[sfindex].end) - 1, seq - .findIndex(sequenceFeatures[sfindex].end) - 1, + renderFeature(g, seq, + seq.findIndex(sequenceFeatures[sfindex].end) - 1, + seq.findIndex(sequenceFeatures[sfindex].end) - 1, getColour(sequenceFeatures[sfindex]) // new Color(((Integer) av.featuresDisplayed // .get(sequenceFeatures[sfindex].type)).intValue()) @@ -664,10 +680,11 @@ public class FeatureRenderer else { if (showFeature(sequenceFeatures[sfindex])) - { renderFeature(g, seq, seq - .findIndex(sequenceFeatures[sfindex].begin) - 1, seq - .findIndex(sequenceFeatures[sfindex].end) - 1, - getColour(sequenceFeatures[sfindex]), start, end, y1); + { + renderFeature(g, seq, + seq.findIndex(sequenceFeatures[sfindex].begin) - 1, + seq.findIndex(sequenceFeatures[sfindex].end) - 1, + getColour(sequenceFeatures[sfindex]), start, end, y1); } } @@ -731,6 +748,20 @@ public class FeatureRenderer Hashtable minmax = null; + /** + * Called when alignment in associated view has new/modified features to + * discover and display. + * + */ + public void featuresAdded() + { + lastSeq = null; + findAllFeatures(); + } + + /** + * find all features on the alignment + */ void findAllFeatures() { jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(); @@ -761,8 +792,8 @@ public class FeatureRenderer { if (getColour(features[index].getType()) == null) { - featureColours.put(features[index].getType(), ucs - .createColourFromName(features[index].getType())); + featureColours.put(features[index].getType(), + ucs.createColourFromName(features[index].getType())); } av.featuresDisplayed.put(features[index].getType(), new Integer( @@ -851,6 +882,7 @@ public class FeatureRenderer throw new Error("Implementation Error: Unrecognised render object " + fc.getClass() + " for features of type " + featureType); } + /** * * @param sequenceFeature @@ -862,7 +894,11 @@ public class FeatureRenderer if (fc instanceof GraduatedColor) { return ((GraduatedColor) fc).isColored(sequenceFeature); - } else { return true; } + } + else + { + return true; + } } /** @@ -925,7 +961,7 @@ public class FeatureRenderer for (int i = 0; i < data.length; i++) { String type = data[i][0].toString(); - setColour(type, data[i][1]); + setColour(type, data[i][1]); if (((Boolean) data[i][2]).booleanValue()) { av.featuresDisplayed.put(type, new Integer(getColour(type)