X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FFeatureRenderer.java;h=003200d754eedbd6406fc6797773305026754e36;hb=4d2e0d36506302cc00677527725bcccbdf27d766;hp=591fa79acc6b1f05044d684a90a8608f329ccb18;hpb=50779cf7013a8db695c53637578ab135da3ce5b1;p=jalview.git diff --git a/src/jalview/gui/FeatureRenderer.java b/src/jalview/gui/FeatureRenderer.java index 591fa79..003200d 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.*; /** @@ -41,18 +44,19 @@ public class FeatureRenderer FontMetrics fm; int charOffset; + Hashtable featureColours = new Hashtable(); + + // A higher level for grouping features of a // particular type Hashtable featureGroups = null; - // This is actually an Integer held in the hashtable, // Retrieved using the key feature type Object currentColour; String [] renderOrder; - /** * Creates a new FeatureRenderer object. * @@ -61,7 +65,6 @@ public class FeatureRenderer public FeatureRenderer(AlignViewport av) { this.av = av; - initColours(); } public void transferSettings(FeatureRenderer fr) @@ -76,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(); @@ -120,7 +120,7 @@ public class FeatureRenderer { offscreenImage.setRGB(0,0,initialCol); drawSequence(offscreenImage.getGraphics(), - lastSequence, + lastSeq, column,column,0); return offscreenImage.getRGB(0,0); @@ -128,8 +128,8 @@ public class FeatureRenderer else { drawSequence(null, - lastSequence, - lastSequence.findPosition(column), + lastSeq, + lastSeq.findPosition(column), -1, -1); if (currentColour == null) @@ -157,8 +157,7 @@ public class FeatureRenderer */ // String type; // SequenceFeature sf; - int lastSequenceIndex=-1; - SequenceI lastSequence; + SequenceI lastSeq; SequenceFeature [] sequenceFeatures; int sfSize, sfindex, spos, epos; @@ -169,12 +168,13 @@ public class FeatureRenderer || seq.getDatasetSequence().getSequenceFeatures().length==0) return; - if(g!=null) fm = g.getFontMetrics(); - if (av.featuresDisplayed == null || renderOrder==null) + if (av.featuresDisplayed == null + || renderOrder==null + || newFeatureAdded) { findAllFeatures(); if(av.featuresDisplayed.size()<1) @@ -184,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; } @@ -202,8 +202,8 @@ public class FeatureRenderer if(!offscreenRender) { - spos = lastSequence.findPosition(start); - epos = lastSequence.findPosition(end); + spos = lastSeq.findPosition(start); + epos = lastSeq.findPosition(end); } @@ -211,7 +211,8 @@ public class FeatureRenderer for(int renderIndex=0; renderIndex