X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAnnotationPanel.java;h=39b718d5c250882f4ac258c215811a3ad73359e0;hb=93a90c5084d1e81afd65bf2e3063cde96d6b3b48;hp=dd652b1be7bdbf58d4f22ff9eedcab20c131458b;hpb=076e8c3064e29c735041c84abb792e60fa9522e5;p=jalview.git diff --git a/src/jalview/appletgui/AnnotationPanel.java b/src/jalview/appletgui/AnnotationPanel.java index dd652b1..39b718d 100755 --- a/src/jalview/appletgui/AnnotationPanel.java +++ b/src/jalview/appletgui/AnnotationPanel.java @@ -25,8 +25,12 @@ import jalview.datamodel.Annotation; import jalview.datamodel.SequenceI; import jalview.renderer.AnnotationRenderer; import jalview.renderer.AwtRenderPanelI; +import jalview.schemes.ResidueProperties; import jalview.util.Comparison; import jalview.util.MessageManager; +import jalview.util.Platform; +import jalview.viewmodel.ViewportListenerI; +import jalview.viewmodel.ViewportRanges; import java.awt.Color; import java.awt.Dimension; @@ -45,10 +49,11 @@ import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.beans.PropertyChangeEvent; public class AnnotationPanel extends Panel implements AwtRenderPanelI, AdjustmentListener, ActionListener, MouseListener, - MouseMotionListener + MouseMotionListener, ViewportListenerI { AlignViewport av; @@ -100,7 +105,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, public AnnotationPanel(AlignmentPanel ap) { - MAC = new jalview.util.Platform().isAMac(); + new jalview.util.Platform(); + MAC = Platform.isAMac(); this.ap = ap; av = ap.av; setLayout(null); @@ -113,12 +119,15 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, // ap.annotationScroller.getVAdjustable().addAdjustmentListener( this ); renderer = new AnnotationRenderer(); + + av.getRanges().addPropertyChangeListener(this); } public AnnotationPanel(AlignViewport av) { this.av = av; renderer = new AnnotationRenderer(); + } @Override @@ -160,12 +169,12 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, if (evt.getActionCommand().equals(REMOVE)) { - for (int sel : av.getColumnSelection().getSelected()) + for (int index : av.getColumnSelection().getSelected()) { - // TODO: JAL-2001 check if applet has faulty 'REMOVE' selected columns - // of - // annotation if selection includes hidden columns - anot[sel] = null; + if (av.getAlignment().getHiddenColumns().isVisible(index)) + { + anot[index] = null; + } } } else if (evt.getActionCommand().equals(LABEL)) @@ -186,7 +195,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, { // TODO: JAL-2001 - provide a fast method to list visible selected // columns - if (!av.getColumnSelection().isVisible(index)) + if (!av.getAlignment().getHiddenColumns().isVisible(index)) { continue; } @@ -208,7 +217,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, for (int index : av.getColumnSelection().getSelected()) { - if (!av.getColumnSelection().isVisible(index)) + if (!av.getAlignment().getHiddenColumns().isVisible(index)) { continue; } @@ -241,7 +250,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, else if (evt.getActionCommand().equals(STEM)) { type = 'S'; - symbol = "\u03C3"; + int column = av.getColumnSelection().getSelectedRanges().get(0)[0]; + symbol = aa[activeRow].getDefaultRnaHelixSymbol(column); } if (!aa[activeRow].hasIcons) @@ -267,7 +277,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, for (int index : av.getColumnSelection().getSelected()) { - if (!av.getColumnSelection().isVisible(index)) + if (!av.getAlignment().getHiddenColumns().isVisible(index)) { continue; } @@ -346,7 +356,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK && activeRow != -1) { - if (av.getColumnSelection() == null) + if (av.getColumnSelection() == null + || av.getColumnSelection().isEmpty()) { return; } @@ -354,10 +365,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, PopupMenu pop = new PopupMenu( MessageManager.getString("label.structure_type")); MenuItem item; - /* - * Just display the needed structure options - */ - if (av.getAlignment().isNucleotide() == true) + + if (av.getAlignment().isNucleotide()) { item = new MenuItem(STEM); item.addActionListener(this); @@ -459,11 +468,13 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, } } - int column = evt.getX() / av.getCharWidth() + av.getStartRes(); + int column = evt.getX() / av.getCharWidth() + + av.getRanges().getStartRes(); if (av.hasHiddenColumns()) { - column = av.getColumnSelection().adjustForHiddenColumns(column); + column = av.getAlignment().getHiddenColumns() + .adjustForHiddenColumns(column); } if (row > -1 && column < aa[row].annotations.length @@ -472,9 +483,10 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, StringBuilder text = new StringBuilder(); text.append(MessageManager.getString("label.column")).append(" ") .append(column + 1); - if (aa[row].annotations[column].description != null) + String description = aa[row].annotations[column].description; + if (description != null && description.length() > 0) { - text.append(" ").append(aa[row].annotations[column].description); + text.append(" ").append(description); } /* @@ -493,9 +505,28 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, char residue = seqref.getCharAt(column); if (!Comparison.isGap(residue)) { + text.append(" "); + String name; + if (av.getAlignment().isNucleotide()) + { + name = ResidueProperties.nucleotideName.get(String + .valueOf(residue)); + text.append(" Nucleotide: ").append( + name != null ? name : residue); + } + else + { + name = 'X' == residue ? "X" : ('*' == residue ? "STOP" + : ResidueProperties.aa2Triplet.get(String + .valueOf(residue))); + text.append(" Residue: ").append( + name != null ? name : residue); + } int residuePos = seqref.findPosition(column); - text.append(": ").append(residue).append(" (") - .append(residuePos).append(")"); + text.append(" (").append(residuePos).append(")"); + // int residuePos = seqref.findPosition(column); + // text.append(residue).append(" (") + // .append(residuePos).append(")"); } } } @@ -595,7 +626,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, gg.setColor(Color.white); gg.fillRect(0, 0, getSize().width, getSize().height); - drawComponent(gg, av.startRes, av.endRes + 1); + drawComponent(gg, av.getRanges().getStartRes(), av.getRanges() + .getEndRes() + 1); g.drawImage(image, 0, 0, this); } @@ -612,7 +644,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, gg.copyArea(0, 0, imgWidth, getSize().height, -horizontal * av.getCharWidth(), 0); - int sr = av.startRes, er = av.endRes + 1, transX = 0; + int sr = av.getRanges().getStartRes(), er = av.getRanges().getEndRes() + 1, transX = 0; if (horizontal > 0) // scrollbar pulled right, image to the left { @@ -724,4 +756,19 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, return null; } } + + @Override + public void propertyChange(PropertyChangeEvent evt) + { + // Respond to viewport range changes (e.g. alignment panel was scrolled) + // Both scrolling and resizing change viewport ranges: scrolling changes + // both start and end points, but resize only changes end values. + // Here we only want to fastpaint on a scroll, with resize using a normal + // paint, so scroll events are identified as changes to the horizontal or + // vertical start value. + if (evt.getPropertyName().equals(ViewportRanges.STARTRES)) + { + fastPaint((int) evt.getNewValue() - (int) evt.getOldValue()); + } + } }