X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=src%2Fjalview%2Fworkers%2FAnnotationWorker.java;fp=src%2Fjalview%2Fworkers%2FAnnotationWorker.java;h=4d81307a2a6598d97cd39b1a03312832428858b6;hp=fbf7531dd97e00f3fa0fe721ef3eb9cc3833ae02;hb=f2b03e9fecf41886ebf5f747fd4be02edf042bee;hpb=d737688dfdb8d00ed63a699fb86548499d75bcf2 diff --git a/src/jalview/workers/AnnotationWorker.java b/src/jalview/workers/AnnotationWorker.java index fbf7531..4d81307 100644 --- a/src/jalview/workers/AnnotationWorker.java +++ b/src/jalview/workers/AnnotationWorker.java @@ -20,19 +20,19 @@ */ package jalview.workers; +import jalview.api.AlignViewportI; +import jalview.api.AlignmentViewPanel; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; -import jalview.gui.AlignFrame; -import jalview.gui.AlignmentPanel; -import jalview.gui.FeatureRenderer; +import jalview.renderer.seqfeatures.FeatureRenderer; import java.util.ArrayList; import java.util.List; /** * A class to create and update one or more alignment annotations, given a - * 'calculator'. - * + * 'calculator'. Intended to support a 'plug-in' annotation worker which + * implements the AnnotationProviderI interface. */ class AnnotationWorker extends AlignCalcWorker { @@ -47,9 +47,10 @@ class AnnotationWorker extends AlignCalcWorker * @param af * @param counter */ - public AnnotationWorker(AlignFrame af, AnnotationProviderI counter) + public AnnotationWorker(AlignViewportI viewport, + AlignmentViewPanel panel, AnnotationProviderI counter) { - super(af.getViewport(), af.alignPanel); + super(viewport, panel); ourAnnots = new ArrayList(); this.counter = counter; calcMan.registerWorker(this); @@ -78,20 +79,29 @@ class AnnotationWorker extends AlignCalcWorker return; } - removeAnnotations(); + // removeAnnotation(); AlignmentI alignment = alignViewport.getAlignment(); if (alignment != null) { try { List anns = counter.calculateAnnotation( - alignment, new FeatureRenderer((AlignmentPanel) ap)); + alignment, new FeatureRenderer(alignViewport)); for (AlignmentAnnotation ann : anns) { - ann.showAllColLabels = true; - ann.graph = AlignmentAnnotation.BAR_GRAPH; - ourAnnots.add(ann); - alignment.addAnnotation(ann); + AlignmentAnnotation theAnn = alignment.findOrCreateAnnotation( + ann.label, ann.description, false, null, null); + theAnn.showAllColLabels = true; + theAnn.graph = AlignmentAnnotation.BAR_GRAPH; + theAnn.scaleColLabel = true; + theAnn.annotations = ann.annotations; + setGraphMinMax(theAnn, theAnn.annotations); + theAnn.validateRangeAndDisplay(); + if (!ourAnnots.contains(theAnn)) + { + ourAnnots.add(theAnn); + } + // alignment.addAnnotation(ann); } } catch (IndexOutOfBoundsException x) { @@ -102,7 +112,7 @@ class AnnotationWorker extends AlignCalcWorker } catch (OutOfMemoryError error) { ap.raiseOOMWarning("calculating annotations", error); - calcMan.workerCannotRun(this); + calcMan.disableWorker(this); } finally { calcMan.workerComplete(this); @@ -113,24 +123,22 @@ class AnnotationWorker extends AlignCalcWorker ap.adjustAnnotationHeight(); ap.paintAlignment(true); } - } - /** - * Remove all our annotations before re-calculating them - */ - void removeAnnotations() + @Override + public void updateAnnotation() { - for (AlignmentAnnotation ann : ourAnnots) - { - alignViewport.getAlignment().deleteAnnotation(ann); - } - ourAnnots.clear(); + // do nothing } + /** + * Answers true to indicate that if this worker's annotation is deleted from + * the display, the worker should also be removed. This prevents it running + * and recreating the annotation when the alignment changes. + */ @Override - public void updateAnnotation() + public boolean isDeletable() { - // do nothing + return true; } }