Multiple Views
[jalview.git] / src / jalview / gui / Desktop.java
index 0b88bca..163e297 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
  * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
  *\r
  * This program is free software; you can redistribute it and/or\r
  * modify it under the terms of the GNU General Public License\r
@@ -513,7 +513,7 @@ public class Desktop extends jalview.jbgui.GDesktop
             "\nFor all issues relating to Jalview, email help@jalview.org" +\r
             "\n\nIf  you use JalView, please cite:" +\r
             "\n\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"" +\r
-            "\nBioinformatics,  2004 12;426-7.");\r
+            "\nBioinformatics,  2004 20;426-7.");\r
 \r
         JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
 \r
@@ -665,5 +665,88 @@ public class Desktop extends jalview.jbgui.GDesktop
       validate();\r
     }\r
 \r
+    public static int getViewCount(String viewId)\r
+    {\r
+      int count = 0;\r
+      JInternalFrame[] frames = Desktop.desktop.getAllFrames();\r
+      for (int t = 0; t < frames.length; t++)\r
+      {\r
+        if (frames[t] instanceof AlignFrame)\r
+        {\r
+          AlignFrame af = (AlignFrame) frames[t];\r
+          for(int a=0; a<af.alignPanels.size(); a++)\r
+          {\r
+            if(viewId.equals(\r
+                ((AlignmentPanel)af.alignPanels.elementAt(a)).av.getSequenceSetId() )\r
+                )\r
+            count ++;\r
+          }\r
+        }\r
+      }\r
+\r
+      return count;\r
+    }\r
+\r
+    public void explodeViews(AlignFrame af)\r
+    {\r
+      int size = af.alignPanels.size();\r
+      if(size<2)\r
+        return;\r
+      af.closeMenuItem_actionPerformed(null);\r
+\r
+      for(int i=0; i<size; i++)\r
+      {\r
+        AlignmentPanel ap = (AlignmentPanel)af.alignPanels.elementAt(i);\r
+        AlignFrame newaf = new AlignFrame(ap);\r
+        if(ap.av.explodedPosition!=null)\r
+          newaf.setBounds(ap.av.explodedPosition);\r
+\r
+        ap.av.gatherViewsHere = false;\r
+\r
+        PaintRefresher.Register(ap.seqPanel.seqCanvas, ap.av.getSequenceSetId());\r
+        PaintRefresher.Register(ap.idPanel.idCanvas, ap.av.getSequenceSetId());\r
+        PaintRefresher.Register(ap, ap.av.getSequenceSetId());\r
+\r
+\r
+        newaf.viewport = ap.av;\r
+        addInternalFrame(newaf, af.getTitle(),\r
+                         AlignFrame.DEFAULT_WIDTH,\r
+                         AlignFrame.DEFAULT_HEIGHT);\r
+      }\r
+\r
+    }\r
+\r
+    public void gatherViews(AlignFrame source)\r
+    {\r
+      source.viewport.gatherViewsHere = true;\r
+      source.viewport.explodedPosition = source.getBounds();\r
+      JInternalFrame[] frames = Desktop.desktop.getAllFrames();\r
+      String viewId = source.viewport.sequenceSetID;\r
+\r
+      for (int t = 0; t < frames.length; t++)\r
+      {\r
+        if (frames[t] instanceof AlignFrame && frames[t] != source)\r
+        {\r
+          AlignFrame af = (AlignFrame) frames[t];\r
+          boolean gatherThis = false;\r
+          for (int a = 0; a < af.alignPanels.size(); a++)\r
+          {\r
+            AlignmentPanel ap = (AlignmentPanel) af.alignPanels.elementAt(a);\r
+            if (viewId.equals(ap.av.getSequenceSetId()))\r
+            {\r
+              gatherThis = true;\r
+              ap.av.gatherViewsHere = false;\r
+              ap.av.explodedPosition = af.getBounds();\r
+              source.addAlignmentPanel(ap);\r
+            }\r
+          }\r
+          if (gatherThis)\r
+            af.closeMenuItem_actionPerformed(null);\r
+        }\r
+      }\r
+\r
+    }\r
+\r
+\r
 }\r
 \r