X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FStructureViewerBase.java;h=ed42ffa7c98761275a3e42a9015e8dc12e183c9e;hb=7f09e6ac5717bc78373c5d77f309831403e6ebf8;hp=6ebbf89425d532d017d9159a0fa05ac43f66ce7a;hpb=9ffbc78ef4639f680f304758c88d4e1d98c13859;p=jalview.git diff --git a/src/jalview/gui/StructureViewerBase.java b/src/jalview/gui/StructureViewerBase.java index 6ebbf89..ed42ffa 100644 --- a/src/jalview/gui/StructureViewerBase.java +++ b/src/jalview/gui/StructureViewerBase.java @@ -47,6 +47,7 @@ import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; import jalview.api.AlignmentViewPanel; +import jalview.api.structures.JalviewStructureDisplayI; import jalview.bin.Cache; import jalview.bin.Console; import jalview.datamodel.AlignmentI; @@ -87,12 +88,20 @@ public abstract class StructureViewerBase extends GStructureViewer BySequence, ByChain, ChargeCysteine, ByViewer } - private static List svbs = new ArrayList<>(); + /** + * Singleton list of all (open) instances of structureViewerBase + * TODO: JAL-3362 - review and adopt the swingJS-safe singleton pattern so each structure viewer base instance is kept to its own JalviewJS parent + */ + private static List svbs = new ArrayList<>(); - public static List getAllStructureViewerBases() + /** + * + * @return list with all existing StructureViewers instance + */ + public static List getAllStructureViewerBases() { - List goodSvbs = new ArrayList<>(); - for (StructureViewerBase s : svbs) + List goodSvbs = new ArrayList<>(); + for (JalviewStructureDisplayI s : svbs) { if (s != null && !goodSvbs.contains(s)) { @@ -196,6 +205,7 @@ public abstract class StructureViewerBase extends GStructureViewer return _aps.contains(ap2.av.getSequenceSetId()); } + @Override public boolean isUsedforaligment(AlignmentViewPanel ap2) { @@ -1352,6 +1362,13 @@ public abstract class StructureViewerBase extends GStructureViewer // TODO: check for memory leaks where instance isn't finalised because jmb // holds a reference to the window // jmb = null; + + try { + svbs.remove(this); + } catch (Throwable t) + { + Console.info("Unexpected exception when deregistering structure viewer",t); + } dispose(); }