refactored and patched for JAL-721
[jalview.git] / src / jalview / gui / AlignFrame.java
index b20314b..4c2e73a 100755 (executable)
@@ -2243,8 +2243,48 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   public void newView_actionPerformed(ActionEvent e)
   {
+    newView(true);
+  }
+  /**
+   * 
+   * @param copyAnnotation if true then duplicate all annnotation, groups and settings
+   * @return new alignment panel, already displayed.
+   */
+  public AlignmentPanel newView(boolean copyAnnotation)
+  {
+    return newView(null, copyAnnotation);
+  }
+  /**
+   * 
+   * @param viewTitle title of newly created view
+   * @return new alignment panel, already displayed.
+   */
+  public AlignmentPanel newView(String viewTitle)
+  {
+    return newView(viewTitle, true);
+  }
+  /**
+   * 
+   * @param viewTitle title of newly created view
+   * @param copyAnnotation if true then duplicate all annnotation, groups and settings
+   * @return new alignment panel, already displayed.
+   */
+  public AlignmentPanel newView(String viewTitle, boolean copyAnnotation)
+  {
     AlignmentPanel newap = new Jalview2XML().copyAlignPanel(alignPanel,
             true);
+    if (!copyAnnotation)
+    {
+      // just remove all the current annotation except for the automatic stuff
+      newap.av.alignment.deleteAllGroups();
+      for (AlignmentAnnotation alan: newap.av.alignment.getAlignmentAnnotation())
+      {
+        if (!alan.autoCalculated)
+        {
+          newap.av.alignment.deleteAnnotation(alan);
+        };
+      }
+    }
 
     newap.av.gatherViewsHere = false;
 
@@ -2257,8 +2297,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     newap.av.redoList = viewport.redoList;
 
     int index = Desktop.getViewCount(viewport.getSequenceSetId());
-    String newViewName = "View " + index;
-
+    // make sure the new view has a unique name - this is essential for Jalview 2 archives
+    boolean addFirstIndex = false;
+    if (viewTitle==null || viewTitle.trim().length()==0)
+    {
+      viewTitle = "View";
+      addFirstIndex = true;
+    } else {
+      index=1;// we count from 1 if given a specific name
+    }
+    String newViewName = viewTitle + ((addFirstIndex) ? " "+index : "");
     Vector comps = (Vector) PaintRefresher.components.get(viewport
             .getSequenceSetId());
     Vector existingNames = new Vector();
@@ -2276,7 +2324,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     while (existingNames.contains(newViewName))
     {
-      newViewName = "View " + (++index);
+      newViewName = viewTitle + " "+(++index);
     }
 
     newap.av.viewName = newViewName;
@@ -2288,6 +2336,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       viewport.gatherViewsHere = true;
     }
     tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
+    return newap;
   }
 
   public void expandViews_actionPerformed(ActionEvent e)
@@ -2663,57 +2712,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   {
     JEditorPane editPane = new JEditorPane("text/html", "");
     editPane.setEditable(false);
-    StringBuffer contents = new StringBuffer("<html>");
-
-    float avg = 0;
-    int min = Integer.MAX_VALUE, max = 0;
-    for (int i = 0; i < viewport.alignment.getHeight(); i++)
-    {
-      int size = viewport.alignment.getSequenceAt(i).getEnd()
-              - viewport.alignment.getSequenceAt(i).getStart();
-      avg += size;
-      if (size > max)
-        max = size;
-      if (size < min)
-        min = size;
-    }
-    avg = avg / (float) viewport.alignment.getHeight();
-
-    contents.append("<br>Sequences: " + viewport.alignment.getHeight());
-    contents.append("<br>Minimum Sequence Length: " + min);
-    contents.append("<br>Maximum Sequence Length: " + max);
-    contents.append("<br>Average Length: " + (int) avg);
-
-    if (((Alignment) viewport.alignment).getProperties() != null)
-    {
-      Hashtable props = ((Alignment) viewport.alignment).getProperties();
-      Enumeration en = props.keys();
-      contents.append("<br><br><table border=\"1\">");
-      while (en.hasMoreElements())
-      {
-        String key = en.nextElement().toString();
-        StringBuffer val = new StringBuffer();
-        String vals = props.get(key).toString();
-        int pos = 0, npos;
-        do
-        {
-          npos = vals.indexOf("\n", pos);
-          if (npos == -1)
-          {
-            val.append(vals.substring(pos));
-          }
-          else
-          {
-            val.append(vals.substring(pos, npos));
-            val.append("<br>");
-          }
-          pos = npos + 1;
-        } while (npos != -1);
-        contents.append("<tr><td>" + key + "</td><td>" + val + "</td></tr>");
-      }
-      contents.append("</table>");
-    }
-    editPane.setText(contents.toString() + "</html>");
+    StringBuffer contents = new AlignmentProperties(viewport.alignment).formatAsHtml();
+    editPane.setText("<html>"+contents.toString() + "</html>");
     JInternalFrame frame = new JInternalFrame();
     frame.getContentPane().add(new JScrollPane(editPane));
 
@@ -3994,6 +3994,24 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       jalview.ws.EnfinEnvision2OneWay.getInstance().attachWSMenuEntry(
               webService, this);
     }
+    // TODO: remove this code when 2.7 is released
+    // DEBUG - alignmentView
+    /*JMenuItem testAlView = new JMenuItem("Test AlignmentView");
+    final AlignFrame af = this;
+    testAlView.addActionListener(new ActionListener() {
+
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        jalview.datamodel.AlignmentView.testSelectionViews(af.viewport.alignment, af.viewport.colSel, af.viewport.selectionGroup);
+      }
+      
+    });
+    webService.add(testAlView);*/
+    // TODO: refactor to RestClient discoverer and merge menu entries for rest-style services with other types of analysis/calculation service
+    // SHmmr test client - still being implemented.
+    // jalview.ws.rest.RestClient.makeShmmrRestClient().attachWSMenuEntry(webService, this);
+    // DEBUG - alignmentView
   }
 
   /*