From bb24cd9d9b542bde1408eeb29a38b1d7f3f5f699 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 24 Jul 2009 15:24:45 +0000 Subject: [PATCH] annotation update method synchronises group annotation --- src/jalview/gui/AlignmentPanel.java | 193 ++++++++++++++++++++++++----------- 1 file changed, 132 insertions(+), 61 deletions(-) diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 17a24f6..3316227 100755 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -20,6 +20,7 @@ package jalview.gui; import java.beans.*; import java.io.*; +import java.util.Vector; import java.awt.*; import java.awt.event.*; @@ -71,9 +72,9 @@ public class AlignmentPanel extends GAlignmentPanel implements * Creates a new AlignmentPanel object. * * @param af - * DOCUMENT ME! + * DOCUMENT ME! * @param av - * DOCUMENT ME! + * DOCUMENT ME! */ public AlignmentPanel(AlignFrame af, final AlignViewport av) { @@ -225,72 +226,88 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param results - * DOCUMENT ME! + * DOCUMENT ME! */ public void highlightSearchResults(SearchResults results) { scrollToPosition(results); seqPanel.seqCanvas.highlightSearchResults(results); } + /** - * scroll the view to show the position of the highlighted - * region in results (if any) and redraw the overview + * scroll the view to show the position of the highlighted region in results + * (if any) and redraw the overview + * * @param results */ - public boolean scrollToPosition(SearchResults results) { + public boolean scrollToPosition(SearchResults results) + { return scrollToPosition(results, true); } + /** - * scroll the view to show the position of the highlighted - * region in results (if any) + * scroll the view to show the position of the highlighted region in results + * (if any) + * * @param results - * @param redrawOverview - when set, the overview will be recalculated (takes longer) + * @param redrawOverview + * - when set, the overview will be recalculated (takes longer) * @return false if results were not found */ - public boolean scrollToPosition(SearchResults results, boolean redrawOverview) { - int startv,endv,starts,ends,width; - // TODO: properly locate search results in view when large numbers of hidden columns exist before highlighted region + public boolean scrollToPosition(SearchResults results, + boolean redrawOverview) + { + int startv, endv, starts, ends, width; + // TODO: properly locate search results in view when large numbers of hidden + // columns exist before highlighted region // do we need to scroll the panel? // TODO: tons of nullpointereexceptions raised here. - if (results != null && results.getSize()>0 && av!=null && av.alignment!=null) + if (results != null && results.getSize() > 0 && av != null + && av.alignment != null) { int seqIndex = av.alignment.findIndex(results); - if (seqIndex==-1) + if (seqIndex == -1) { return false; } SequenceI seq = av.alignment.getSequenceAt(seqIndex); - - int [] r = results.getResults(seq, 0, av.alignment.getWidth()); // results.getResults(seq, seq.getStart(), seq.getEnd()); - // TODO: VAMSAS: fix hidden column issue where scroll to left from C terminus is not visible - if (r==null) + + int[] r = results.getResults(seq, 0, av.alignment.getWidth()); // results.getResults(seq, + // seq.getStart(), + // seq.getEnd()); + // TODO: VAMSAS: fix hidden column issue where scroll to left from C + // terminus is not visible + if (r == null) { return false; } int start = r[0]; int end = r[1]; - if (start<0) + if (start < 0) { return false; } - if (end==seq.getEnd()) + if (end == seq.getEnd()) { return false; } if (!av.wrapAlignment) { - if ((startv=av.getStartRes()) >= start) + if ((startv = av.getStartRes()) >= start) { - setScrollValues(start-1, seqIndex); - } else if - ((endv=av.getEndRes()) <= end) + setScrollValues(start - 1, seqIndex); + } + else if ((endv = av.getEndRes()) <= end) + { + setScrollValues(startv + 1 + end - endv, seqIndex); + } + else if ((starts = av.getStartSeq()) > seqIndex) { - setScrollValues(startv+1+end-endv, seqIndex); - } else if ((starts=av.getStartSeq()) > seqIndex) { setScrollValues(av.getStartRes(), seqIndex); - } else if ((ends=av.getEndSeq()) <= seqIndex) + } + else if ((ends = av.getEndSeq()) <= seqIndex) { - setScrollValues(av.getStartRes(), starts+seqIndex-ends+1); + setScrollValues(av.getStartRes(), starts + seqIndex - ends + 1); } } else @@ -298,10 +315,10 @@ public class AlignmentPanel extends GAlignmentPanel implements scrollToWrappedVisible(start); } } - if (!redrawOverview && overviewPanel!=null) + if (!redrawOverview && overviewPanel != null) { overviewPanel.setBoxPosition(); - } + } paintAlignment(!redrawOverview); return true; } @@ -310,7 +327,7 @@ public class AlignmentPanel extends GAlignmentPanel implements { int cwidth = seqPanel.seqCanvas .getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()); - if (res < av.getStartRes() || res >= (av.getStartRes()+cwidth)) + if (res < av.getStartRes() || res >= (av.getStartRes() + cwidth)) { vscroll.setValue((res / cwidth)); av.startRes = vscroll.getValue() * cwidth; @@ -332,7 +349,7 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param op - * DOCUMENT ME! + * DOCUMENT ME! */ public void setOverviewPanel(OverviewPanel op) { @@ -343,7 +360,7 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param b - * DOCUMENT ME! + * DOCUMENT ME! */ public void setAnnotationVisible(boolean b) { @@ -390,7 +407,7 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param wrap - * DOCUMENT ME! + * DOCUMENT ME! */ public void setWrapAlignment(boolean wrap) { @@ -448,7 +465,7 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param right - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! */ @@ -484,14 +501,14 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param x - * DOCUMENT ME! + * DOCUMENT ME! * @param y - * DOCUMENT ME! + * DOCUMENT ME! */ public void setScrollValues(int x, int y) { -// System.err.println("Scroll to "+x+","+y); - if (av==null || av.alignment==null) + // System.err.println("Scroll to "+x+","+y); + if (av == null || av.alignment == null) { return; } @@ -546,7 +563,7 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param evt - * DOCUMENT ME! + * DOCUMENT ME! */ public void adjustmentValueChanged(AdjustmentEvent evt) { @@ -657,7 +674,7 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param g - * DOCUMENT ME! + * DOCUMENT ME! */ public void paintComponent(Graphics g) { @@ -700,16 +717,16 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param pg - * DOCUMENT ME! + * DOCUMENT ME! * @param pf - * DOCUMENT ME! + * DOCUMENT ME! * @param pi - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! * * @throws PrinterException - * DOCUMENT ME! + * DOCUMENT ME! */ public int print(Graphics pg, PageFormat pf, int pi) throws PrinterException @@ -733,18 +750,18 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param pg - * DOCUMENT ME! + * DOCUMENT ME! * @param pwidth - * DOCUMENT ME! + * DOCUMENT ME! * @param pheight - * DOCUMENT ME! + * DOCUMENT ME! * @param pi - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! * * @throws PrinterException - * DOCUMENT ME! + * DOCUMENT ME! */ public int printUnwrapped(Graphics pg, int pwidth, int pheight, int pi) throws PrinterException @@ -880,18 +897,18 @@ public class AlignmentPanel extends GAlignmentPanel implements * DOCUMENT ME! * * @param pg - * DOCUMENT ME! + * DOCUMENT ME! * @param pwidth - * DOCUMENT ME! + * DOCUMENT ME! * @param pheight - * DOCUMENT ME! + * DOCUMENT ME! * @param pi - * DOCUMENT ME! + * DOCUMENT ME! * * @return DOCUMENT ME! * * @throws PrinterException - * DOCUMENT ME! + * DOCUMENT ME! */ public int printWrappedAlignment(Graphics pg, int pwidth, int pheight, int pi) throws PrinterException @@ -1272,25 +1289,79 @@ public class AlignmentPanel extends GAlignmentPanel implements } /** - * close the panel - deregisters all listeners and nulls any references to alignment data. + * close the panel - deregisters all listeners and nulls any references to + * alignment data. */ public void closePanel() { - jalview.structure.StructureSelectionManager ssm = - jalview.structure.StructureSelectionManager + jalview.structure.StructureSelectionManager ssm = jalview.structure.StructureSelectionManager .getStructureSelectionManager(); ssm.removeStructureViewerListener(seqPanel, null); ssm.removeSelectionListener(seqPanel); PaintRefresher.RemoveComponent(seqPanel.seqCanvas); PaintRefresher.RemoveComponent(idPanel.idCanvas); PaintRefresher.RemoveComponent(this); - if (av!=null) { + if (av != null) + { av.alignment = null; av = null; - } else { - if (Cache.log.isDebugEnabled()) { + } + else + { + if (Cache.log.isDebugEnabled()) + { Cache.log.warn("Closing alignment panel which is already closed."); } } } + + /** + * hides or shows dynamic annotation rows based on groups and av state flags + */ + public void updateAnnotation() + { + boolean updateCalcs = false; + boolean conv = av.isShowGroupConservation(); + boolean cons = av.isShowGroupConsensus(); + boolean sortg = true; + + // remove old automatic annotation + // add any new annotation + + Vector gr = av.alignment.getGroups(); // OrderedBy(av.alignment.getSequencesArray()); + // intersect alignment annotation with alignment groups + + AlignmentAnnotation[] aan = av.alignment.getAlignmentAnnotation(); + for (int an = 0; an < aan.length; an++) + { + if (aan[an].autoCalculated && aan[an].groupRef != null) + { + av.alignment.deleteAnnotation(aan[an]); + aan[an] = null; + } + } + SequenceGroup sg; + for (int g = 0; g < gr.size(); g++) + { + updateCalcs = false; + sg = (SequenceGroup) gr.elementAt(g); + + if (cons) + { + updateCalcs = true; + av.alignment.addAnnotation(sg.getConsensus(),0); + } + if (conv) + { + updateCalcs = true; + av.alignment.addAnnotation(sg.getConservationRow(),0); + } + // refresh the annotation rows + if (updateCalcs) + { + sg.recalcConservation(); + } + } + adjustAnnotationHeight(); + } } -- 1.7.10.2