Merge branch 'develop' into features/JAL-892varnaToProject
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 3 Jul 2015 10:18:22 +0000 (11:18 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 3 Jul 2015 10:18:22 +0000 (11:18 +0100)
1  2 
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/gui/PopupMenu.java

@@@ -48,6 -48,7 +48,7 @@@ import jalview.commands.TrimRegionComma
  import jalview.datamodel.AlignedCodonFrame;
  import jalview.datamodel.Alignment;
  import jalview.datamodel.AlignmentAnnotation;
+ import jalview.datamodel.AlignmentExportData;
  import jalview.datamodel.AlignmentI;
  import jalview.datamodel.AlignmentOrder;
  import jalview.datamodel.AlignmentView;
@@@ -1139,8 -1140,13 +1140,13 @@@ public class AlignFrame extends GAlignF
          return false;
        }
  
-       ExportData exportData = getAlignmentForExport(format);
-       FormatAdapter f = new FormatAdapter(alignPanel);
+       AlignmentExportData exportData = getAlignmentForExport(format, viewport);
+       if (exportData.getSettings().isCancelled())
+       {
+         return false;
+       }
+       FormatAdapter f = new FormatAdapter(alignPanel,
+               exportData.getSettings());
        String output = f.formatSequences(format,
                exportData.getAlignment(), // class cast exceptions will
                // occur in the distant future
    protected void outputText_actionPerformed(ActionEvent e)
    {
  
-     ExportData exportData = getAlignmentForExport(e.getActionCommand());
+     AlignmentExportData exportData = getAlignmentForExport(
+             e.getActionCommand(), viewport);
      if (exportData.getSettings().isCancelled())
      {
        return;
  
    }
  
-   public ExportData getAlignmentForExport(String exportFomat)
+   public static AlignmentExportData getAlignmentForExport(String exportFomat,
+           AlignViewportI viewport)
    {
      AlignmentI alignmentToExport = null;
      String[] omitHidden = null;
        alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
                .getColumnSelection().getHiddenColumns());
      }
-     return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd,
+     AlignmentExportData ed = new AlignmentExportData(alignmentToExport, omitHidden, alignmentStartEnd,
              settings);
+     return ed;
    }
  
    private static int[] getStartEnd(int[] aligmentStartEnd,
                viewport.getSelectionGroup().getEndRes() + groupAdjustment);
      }
  
+     /*
+      * just extend the last slide command if compatible; but not if in
+      * SplitFrame mode (to ensure all edits are broadcast - JAL-1802)
+      */
      boolean appendHistoryItem = false;
      Deque<CommandI> historyList = viewport.getHistoryList();
-     if (historyList != null
+     boolean inSplitFrame = getSplitViewContainer() != null;
+     if (!inSplitFrame && historyList != null
              && historyList.size() > 0
              && historyList.peek() instanceof SlideSequencesCommand)
      {
  
              // temporary flag until SplitFrame is released
              boolean asSplitFrame = Cache.getDefault(
 -                    Preferences.ENABLE_SPLIT_FRAME, false);
 +                    Preferences.ENABLE_SPLIT_FRAME, true);
              if (asSplitFrame)
              {
                /*
                "label.translation_of_params", new Object[]
                { this.getTitle() });
        af.setTitle(newTitle);
 -      if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, false))
 +      if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, true))
        {
          final SequenceI[] seqs = viewport.getSelectionAsNewSequence();
          viewport.openSplitFrame(af, new Alignment(seqs),
          aa.visible = visible;
        }
      }
-     alignPanel.validateAnnotationDimensions(false);
+     alignPanel.validateAnnotationDimensions(true);
      alignPanel.alignmentChanged();
    }
  
      }
    }
  
-   public class ExportData
-   {
-     private AlignmentI alignment;
-     private String[] omitHidden;
-     private int[] startEnd;
-     private AlignExportSettings settings;
-     public ExportData(AlignmentI align, String[] ommit, int[] startEnd,
-             AlignExportSettings settings)
-     {
-       this.alignment = align;
-       this.omitHidden = ommit;
-       this.startEnd = startEnd;
-       this.settings = settings;
-     }
-     public AlignmentI getAlignment()
-     {
-       return alignment;
-     }
-     public void setAlignment(AlignmentI alignment)
-     {
-       this.alignment = alignment;
-     }
-     public String[] getOmitHidden()
-     {
-       return omitHidden;
-     }
-     public void setOmitHidden(String[] omitHidden)
-     {
-       this.omitHidden = omitHidden;
-     }
-     public int[] getStartEndPostions()
-     {
-       return startEnd;
-     }
-     public void setStartEndPostions(int[] startEnd)
-     {
-       this.startEnd = startEnd;
-     }
-     public AlignExportSettings getSettings()
-     {
-       return settings;
-     }
-     public void setSettings(AlignExportSettings settings)
-     {
-       this.settings = settings;
-     }
-   }
  }
  
  class PrintThread extends Thread
@@@ -799,7 -799,7 +799,7 @@@ public class AlignViewport extends Alig
       * If any cDNA/protein mappings can be made between the alignments, offer to
       * open a linked alignment with split frame option.
       */
 -    if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, false))
 +    if (Cache.getDefault(Preferences.ENABLE_SPLIT_FRAME, true))
      {
        if (AlignmentUtils.isMappable(al, getAlignment()))
        {
  
      if (openSplitPane)
      {
+       al.alignAs(thisAlignment);
        protein = openSplitFrame(newAlignFrame, thisAlignment,
                protein.getCodonFrames());
      }
       * is found, the result will be empty.
       */
      SearchResults sr = new SearchResults();
-     int seqOffset = findComplementScrollTarget(sr);
+     int verticalOffset = findComplementScrollTarget(sr);
      if (!sr.isEmpty())
      {
        // TODO would like next line without cast but needs more refactoring...
        final AlignmentPanel complementPanel = ((AlignViewport) getCodingComplement()).getAlignPanel();
        complementPanel.setFollowingComplementScroll(true);
-       complementPanel.scrollToCentre(sr, seqOffset);
+       complementPanel.scrollToCentre(sr, verticalOffset);
      }
    }
  
   */
  package jalview.gui;
  
 +import java.awt.Color;
 +import java.awt.event.ActionEvent;
 +import java.awt.event.ActionListener;
 +import java.util.Arrays;
 +import java.util.Collections;
 +import java.util.Hashtable;
 +import java.util.LinkedHashMap;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.TreeMap;
 +import java.util.Vector;
 +
 +import javax.swing.ButtonGroup;
 +import javax.swing.JCheckBoxMenuItem;
 +import javax.swing.JColorChooser;
 +import javax.swing.JMenu;
 +import javax.swing.JMenuItem;
 +import javax.swing.JOptionPane;
 +import javax.swing.JPopupMenu;
 +import javax.swing.JRadioButtonMenuItem;
 +
  import jalview.analysis.AAFrequency;
  import jalview.analysis.AlignmentAnnotationUtils;
  import jalview.analysis.AlignmentUtils;
@@@ -80,6 -59,27 +80,6 @@@ import jalview.util.GroupUrlLink.UrlStr
  import jalview.util.MessageManager;
  import jalview.util.UrlLink;
  
 -import java.awt.Color;
 -import java.awt.event.ActionEvent;
 -import java.awt.event.ActionListener;
 -import java.util.Arrays;
 -import java.util.Collections;
 -import java.util.Hashtable;
 -import java.util.LinkedHashMap;
 -import java.util.List;
 -import java.util.Map;
 -import java.util.TreeMap;
 -import java.util.Vector;
 -
 -import javax.swing.ButtonGroup;
 -import javax.swing.JCheckBoxMenuItem;
 -import javax.swing.JColorChooser;
 -import javax.swing.JMenu;
 -import javax.swing.JMenuItem;
 -import javax.swing.JOptionPane;
 -import javax.swing.JPopupMenu;
 -import javax.swing.JRadioButtonMenuItem;
 -
  /**
   * DOCUMENT ME!
   * 
@@@ -322,54 -322,49 +322,54 @@@ public class PopupMenu extends JPopupMe
          makeReferenceSeq.setText("Mark as representative");
        }
  
 -      if (ap.av.getAlignment().isNucleotide() == false)
 +      if (!ap.av.getAlignment().isNucleotide())
        {
          remove(rnaStructureMenu);
        }
 -
 -      if (ap.av.getAlignment().isNucleotide() == true)
 +      else
        {
 -        AlignmentAnnotation[] aa = ap.av.getAlignment()
 +        /*
 +         * add menu items to 2D-render any alignment or sequence secondary
 +         * structure annotation
 +         */
 +        AlignmentAnnotation[] aas = ap.av.getAlignment()
                  .getAlignmentAnnotation();
 -        for (int i = 0; aa != null && i < aa.length; i++)
 +        if (aas != null)
          {
 -          if (aa[i].isValidStruc() && aa[i].sequenceRef == null)
 +          for (final AlignmentAnnotation aa : aas)
            {
 -            final String rnastruc = aa[i].getRNAStruc();
 -            final String structureLine = aa[i].label + " (alignment)";
 -            menuItem = new JMenuItem();
 -            menuItem.setText(MessageManager.formatMessage(
 -                    "label.2d_rna_structure_line", new Object[]
 -                    { structureLine }));
 -            menuItem.addActionListener(new java.awt.event.ActionListener()
 +            if (aa.isValidStruc() && aa.sequenceRef == null)
              {
 -              @Override
 -              public void actionPerformed(ActionEvent e)
 +              /*
 +               * valid alignment RNA secondary structure annotation
 +               */
 +              menuItem = new JMenuItem();
 +              menuItem.setText(MessageManager.formatMessage(
 +                      "label.2d_rna_structure_line", new Object[]
 +                      { aa.label }));
 +              menuItem.addActionListener(new java.awt.event.ActionListener()
                {
 -                new AppVarna(structureLine, seq, seq.getSequenceAsString(),
 -                        rnastruc, seq.getName(), ap);
 -                System.out.println("end");
 -              }
 -            });
 -            rnaStructureMenu.add(menuItem);
 +                @Override
 +                public void actionPerformed(ActionEvent e)
 +                {
 +                  new AppVarna(seq, aa, ap);
 +                }
 +              });
 +              rnaStructureMenu.add(menuItem);
 +            }
            }
          }
  
 -
          if (seq.getAnnotation() != null)
          {
 -          AlignmentAnnotation seqAnno[] = seq.getAnnotation();
 -          for (int i = 0; i < seqAnno.length; i++)
 +          AlignmentAnnotation seqAnns[] = seq.getAnnotation();
 +          for (final AlignmentAnnotation aa : seqAnns)
            {
 -            if (seqAnno[i].isValidStruc())
 +            if (aa.isValidStruc())
              {
 -              final String rnastruc = seqAnno[i].getRNAStruc();
 -
 +              /*
 +               * valid sequence RNA secondary structure annotation
 +               */
                // TODO: make rnastrucF a bit more nice
                menuItem = new JMenuItem();
                menuItem.setText(MessageManager.formatMessage(
                  public void actionPerformed(ActionEvent e)
                  {
                    // TODO: VARNA does'nt print gaps in the sequence
 -
 -                  new AppVarna(seq.getName() + " structure", seq, seq
 -                          .getSequenceAsString(), rnastruc, seq.getName(),
 -                          ap);
 +                  new AppVarna(seq, aa, ap);
                  }
                });
                rnaStructureMenu.add(menuItem);
      // or we simply trust the user wants
      // wysiwig behaviour
  
-     cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(),
+     cap.setText(new FormatAdapter(ap).formatSequences(e.getActionCommand(),
              ap, true));
    }