X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFeatureRenderer.java;h=7cdc0e8419e24b7d2b72cf90942410616347dba0;hb=5b05749cab04092671551fbbcdc80406b53da7d0;hp=c2c24622490dc835e25e7df1834f7c86459a973d;hpb=262352d44a49e6102a9e80b0c006ea9331ed0c67;p=jalview.git diff --git a/src/jalview/appletgui/FeatureRenderer.java b/src/jalview/appletgui/FeatureRenderer.java index c2c2462..7cdc0e8 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.5) + * 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) { - int width=getWidth(),height=getHeight(); - if (isGcol) { - if (isColourByLabel) - { - g.setColor(Color.white); - g.fillRect(width/2, 0,width/2, height); - g.setColor(Color.black); - Font f=new Font("Verdana", Font.PLAIN, - 10); - g.setFont(f); - g.drawString("Label", 0, 0); - } - else + Dimension d = getSize(); + if (isGcol) { - g.setColor(maxCol); - g.fillRect(width/2, 0,width/2, 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; @@ -243,7 +254,7 @@ public class FeatureRenderer ap.seqPanel.seqCanvas.highlightSearchResults(highlight); } - Color col = getColour(name.getText()); + Object col = getFeatureStyle(name.getText()); if (col == null) { col = new jalview.schemes.UserColourScheme() @@ -363,29 +374,22 @@ public class FeatureRenderer colourPanel.updateColor(fcol); dialog.setResizable(true); // TODO: render the graduated color in the box. - if (fcol instanceof Color) + colourPanel.addMouseListener(new java.awt.event.MouseAdapter() { - 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) { new UserDefinedColours(fr, ap.alignFrame); } - }); - - } - else - { - colourPanel.addMouseListener(new java.awt.event.MouseAdapter() - { - public void mousePressed(java.awt.event.MouseEvent evt) + else { - FeatureColourChooser fcc = new FeatureColourChooser(ap.alignFrame, name.getText()); - fcc.setFocusable(true); + FeatureColourChooser fcc = new FeatureColourChooser( + ap.alignFrame, name.getText()); dialog.transferFocus(); } - }); - } + } + }); dialog.setVisible(true); jalview.io.FeaturesFile ffile = new jalview.io.FeaturesFile(); @@ -412,7 +416,8 @@ public class FeatureRenderer sf.type = lastFeatureAdded; sf.featureGroup = lastFeatureGroupAdded; sf.description = lastDescriptionAdded; - if (fcol instanceof Color) { + if (!colourPanel.isGcol) + { // update colour - otherwise its already done. setColour(sf.type, colourPanel.getBackground()); } @@ -456,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, @@ -474,17 +480,18 @@ public class FeatureRenderer tro[0] = renderOrder[renderOrder.length - 1]; System.arraycopy(renderOrder, 0, tro, 1, renderOrder.length - 1); renderOrder = tro; - - ap.paintAlignment(true); - - return true; } else { + // no update to the alignment return false; } } - + // refresh the alignment and the feature settings dialog + if (av.featureSettings != null) + { + av.featureSettings.refreshTable(); + } // findAllFeatures(); ap.paintAlignment(true); @@ -673,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); } } @@ -739,7 +747,19 @@ 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(); @@ -860,6 +880,7 @@ public class FeatureRenderer throw new Error("Implementation Error: Unrecognised render object " + fc.getClass() + " for features of type " + featureType); } + /** * * @param sequenceFeature @@ -871,7 +892,11 @@ public class FeatureRenderer if (fc instanceof GraduatedColor) { return ((GraduatedColor) fc).isColored(sequenceFeature); - } else { return true; } + } + else + { + return true; + } } /** @@ -934,7 +959,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)