X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewerBase.java;h=ed42ffa7c98761275a3e42a9015e8dc12e183c9e;hb=refs%2Fheads%2Ffeature%2FJAL-4274_configurable_bitmap_export_preferences;hp=b8d2cce838d85400166766ec0839453622c93e67;hpb=c932f0e85a8852824cdd8ce790af68682732c85c;p=jalview.git diff --git a/src/jalview/gui/StructureViewerBase.java b/src/jalview/gui/StructureViewerBase.java index b8d2cce..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; @@ -88,6 +89,29 @@ public abstract class StructureViewerBase extends GStructureViewer } /** + * 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<>(); + + /** + * + * @return list with all existing StructureViewers instance + */ + public static List getAllStructureViewerBases() + { + List goodSvbs = new ArrayList<>(); + for (JalviewStructureDisplayI s : svbs) + { + if (s != null && !goodSvbs.contains(s)) + { + goodSvbs.add(s); + } + } + return goodSvbs; + } + + /** * list of sequenceSet ids associated with the view */ protected List _aps = new ArrayList<>(); @@ -137,6 +161,7 @@ public abstract class StructureViewerBase extends GStructureViewer { super(); setFrameIcon(null); + svbs.add(this); } /** @@ -180,6 +205,7 @@ public abstract class StructureViewerBase extends GStructureViewer return _aps.contains(ap2.av.getSequenceSetId()); } + @Override public boolean isUsedforaligment(AlignmentViewPanel ap2) { @@ -1336,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(); }