new window discovery and alignment view navigation methods
authorjprocter <Jim Procter>
Wed, 12 Nov 2008 16:59:32 +0000 (16:59 +0000)
committerjprocter <Jim Procter>
Wed, 12 Nov 2008 16:59:32 +0000 (16:59 +0000)
src/jalview/gui/Desktop.java

index 9a89b0a..a0b93fb 100755 (executable)
@@ -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;
+  }
 }