From 23dc8a670759fccf7f8f7a72d3a856645c06ae8f Mon Sep 17 00:00:00 2001 From: jprocter <Jim Procter> Date: Wed, 12 Nov 2008 16:59:32 +0000 Subject: [PATCH] new window discovery and alignment view navigation methods --- src/jalview/gui/Desktop.java | 98 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 4 deletions(-) diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 9a89b0a..a0b93fb 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -669,7 +669,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements } } System.out.println("ALL CLOSED"); - + if (v_client!=null) + { + // TODO clear binding to vamsas document objects on close_all + + } } public void raiseRelated_actionPerformed(ActionEvent e) @@ -920,8 +924,19 @@ public class Desktop extends jalview.jbgui.GDesktop implements public static int getViewCount(String viewId) { + AlignViewport[] aps = getViewports(viewId); + return (aps==null) ? 0 : aps.length; + } + /** + * + * @param viewId + * @return all AlignmentPanels concerning the viewId sequence set + */ + public static AlignmentPanel[] getAlignmentPanels(String viewId) + { int count = 0; JInternalFrame[] frames = Desktop.desktop.getAllFrames(); + ArrayList aps = new ArrayList(); for (int t = 0; t < frames.length; t++) { if (frames[t] instanceof AlignFrame) @@ -933,13 +948,67 @@ public class Desktop extends jalview.jbgui.GDesktop implements .equals(((AlignmentPanel) af.alignPanels.elementAt(a)).av .getSequenceSetId())) { - count++; + aps.add(af.alignPanels.elementAt(a)); } } } } - - return count; + if (aps.size()==0) + { + return null; + } + AlignmentPanel[] vap = new AlignmentPanel[aps.size()]; + for (int t=0;t<vap.length;t++) + { + vap[t] = (AlignmentPanel) aps.get(t); + } + return vap; + } + /** + * get all the viewports on an alignment. + * @param sequenceSetId unique alignment id + * @return all viewports on the alignment bound to sequenceSetId + */ + public static AlignViewport[] getViewports(String sequenceSetId) + { + Vector viewp = new Vector(); + if (desktop != null) + { + javax.swing.JInternalFrame[] frames = instance.getAllFrames(); + + for (int t = 0; t < frames.length; t++) + { + if (frames[t] instanceof AlignFrame) + { + AlignFrame afr = ((AlignFrame) frames[t]); + if (afr.getViewport().getSequenceSetId() + .equals(sequenceSetId)) + { + if (afr.alignPanels!=null) + { + for (int a = 0; a < afr.alignPanels.size(); a++) + { + if (sequenceSetId + .equals(((AlignmentPanel) afr.alignPanels.elementAt(a)).av + .getSequenceSetId())) + { + viewp.addElement(((AlignmentPanel)afr.alignPanels.elementAt(a)).av); + } + } + } else { + viewp.addElement(((AlignFrame) frames[t]).getViewport()); + } + } + } + } + if (viewp.size() > 0) + { + AlignViewport[] vp = new AlignViewport[viewp.size()]; + viewp.copyInto(vp); + return vp; + } + } + return null; } public void explodeViews(AlignFrame af) @@ -1479,4 +1548,25 @@ public class Desktop extends jalview.jbgui.GDesktop implements progressBars.put(new Long(id), addProgressPanel(message)); } } + + /** + * This will return the first AlignFrame viewing AlignViewport av. It will + * break if there are more than one AlignFrames viewing a particular av. This + * + * @param av + * @return alignFrame for av + */ + public static AlignFrame getAlignFrameFor(AlignViewport av) + { + if (desktop != null) + { + AlignmentPanel[] aps = getAlignmentPanels(av.getSequenceSetId()); + for (int panel=0;aps!=null && panel<aps.length;panel++) + { if (aps[panel]!=null && aps[panel].av==av) { + return aps[panel].alignFrame; + } + } + } + return null; + } } -- 1.7.10.2