Merge branch 'develop' into features/JAL-2446NCList
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 15 May 2017 10:59:29 +0000 (11:59 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 15 May 2017 10:59:29 +0000 (11:59 +0100)
Conflicts:
src/jalview/gui/OverviewPanel.java

1  2 
src/jalview/appletgui/SeqPanel.java
src/jalview/io/JSONFile.java

@@@ -25,6 -25,7 +25,7 @@@ import jalview.commands.EditCommand
  import jalview.commands.EditCommand.Action;
  import jalview.datamodel.AlignmentI;
  import jalview.datamodel.ColumnSelection;
+ import jalview.datamodel.HiddenColumns;
  import jalview.datamodel.SearchResultMatchI;
  import jalview.datamodel.SearchResults;
  import jalview.datamodel.SearchResultsI;
@@@ -52,7 -53,6 +53,7 @@@ import java.awt.event.InputEvent
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseListener;
  import java.awt.event.MouseMotionListener;
 +import java.util.List;
  import java.util.Vector;
  
  public class SeqPanel extends Panel implements MouseMotionListener,
      seqCanvas.cursorX += dx;
      seqCanvas.cursorY += dy;
      if (av.hasHiddenColumns()
-             && !av.getColumnSelection().isVisible(seqCanvas.cursorX))
+             && !av.getAlignment().getHiddenColumns()
+                     .isVisible(seqCanvas.cursorX))
      {
        int original = seqCanvas.cursorX - dx;
        int maxWidth = av.getAlignment().getWidth();
  
-       while (!av.getColumnSelection().isVisible(seqCanvas.cursorX)
+       while (!av.getAlignment().getHiddenColumns()
+               .isVisible(seqCanvas.cursorX)
                && seqCanvas.cursorX < maxWidth && seqCanvas.cursorX > 0)
        {
          seqCanvas.cursorX += dx;
        }
  
        if (seqCanvas.cursorX >= maxWidth
-               || !av.getColumnSelection().isVisible(seqCanvas.cursorX))
+               || !av.getAlignment().getHiddenColumns()
+                       .isVisible(seqCanvas.cursorX))
        {
          seqCanvas.cursorX = original;
        }
      else
      {
        ViewportRanges ranges = av.getRanges();
+       HiddenColumns hidden = av.getAlignment().getHiddenColumns();
        while (seqCanvas.cursorY < ranges.getStartSeq())
        {
          ap.scrollUp(true);
        {
          ap.scrollUp(false);
        }
-       while (seqCanvas.cursorX < av.getColumnSelection()
-               .adjustForHiddenColumns(ranges.getStartRes()))
+       while (seqCanvas.cursorX < hidden.adjustForHiddenColumns(ranges
+               .getStartRes()))
        {
  
          if (!ap.scrollRight(false))
            break;
          }
        }
-       while (seqCanvas.cursorX > av.getColumnSelection()
-               .adjustForHiddenColumns(ranges.getEndRes()))
+       while (seqCanvas.cursorX > hidden.adjustForHiddenColumns(ranges
+               .getEndRes()))
        {
          if (!ap.scrollRight(true))
          {
          av.setSelectionGroup(null);
        }
  
 -      SequenceFeature[] features = findFeaturesAtRes(sequence,
 +      List<SequenceFeature> features = findFeaturesAtRes(sequence,
                sequence.findPosition(findRes(evt)));
  
 -      if (features != null && features.length > 0)
 +      if (!features.isEmpty())
        {
          SearchResultsI highlight = new SearchResults();
 -        highlight.addResult(sequence, features[0].getBegin(),
 -                features[0].getEnd());
 +        highlight.addResult(sequence, features.get(0).getBegin(), features
 +                .get(0).getEnd());
          seqCanvas.highlightSearchResults(highlight);
 -      }
 -      if (features != null && features.length > 0)
 -      {
 +        SequenceFeature[] featuresArray = features
 +                .toArray(new SequenceFeature[features.size()]);
          seqCanvas.getFeatureRenderer().amendFeatures(
 -                new SequenceI[] { sequence }, features, false, ap, null);
 +                new SequenceI[] { sequence }, featuresArray, false, ap,
 +                null);
  
          seqCanvas.highlightSearchResults(null);
        }
  
      if (av.hasHiddenColumns())
      {
-       res = av.getColumnSelection().adjustForHiddenColumns(res);
+       res = av.getAlignment().getHiddenColumns()
+               .adjustForHiddenColumns(res);
      }
  
      return res;
      }
  
      // use aa to see if the mouse pointer is on a
 -    SequenceFeature[] allFeatures = findFeaturesAtRes(sequence,
 +    List<SequenceFeature> allFeatures = findFeaturesAtRes(sequence,
              sequence.findPosition(res));
  
      int index = 0;
 -    while (index < allFeatures.length)
 +    while (index < allFeatures.size())
      {
 -      SequenceFeature sf = allFeatures[index];
 +      SequenceFeature sf = allFeatures.get(index);
  
        tooltipText.append(sf.getType() + " " + sf.begin + ":" + sf.end);
  
      }
    }
  
 -  SequenceFeature[] findFeaturesAtRes(SequenceI sequence, int res)
 +  List<SequenceFeature> findFeaturesAtRes(SequenceI sequence, int res)
    {
 -    Vector tmp = new Vector();
 -    SequenceFeature[] features = sequence.getSequenceFeatures();
 -    if (features != null)
 -    {
 -      for (int i = 0; i < features.length; i++)
 -      {
 -        if (av.getFeaturesDisplayed() == null
 -                || !av.getFeaturesDisplayed().isVisible(
 -                        features[i].getType()))
 -        {
 -          continue;
 -        }
 -
 -        if (features[i].featureGroup != null
 -                && !seqCanvas.fr.checkGroupVisibility(
 -                        features[i].featureGroup, false))
 -        {
 -          continue;
 -        }
 -
 -        if ((features[i].getBegin() <= res)
 -                && (features[i].getEnd() >= res))
 -        {
 -          tmp.addElement(features[i]);
 -        }
 -      }
 -    }
 -
 -    features = new SequenceFeature[tmp.size()];
 -    tmp.copyInto(features);
 -
 -    return features;
 +    return seqCanvas.getFeatureRenderer().findFeaturesAtRes(sequence, res);
    }
  
    Tooltip tooltip;
            fontSize = 1;
          }
  
-         av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize));
+         av.setFont(
+                 new Font(av.font.getName(), av.font.getStyle(), fontSize),
+                 true);
          av.setCharWidth(oldWidth);
        }
        else
      if (av.hasHiddenColumns())
      {
        fixedColumns = true;
-       int y1 = av.getColumnSelection().getHiddenBoundaryLeft(startres);
-       int y2 = av.getColumnSelection().getHiddenBoundaryRight(startres);
+       int y1 = av.getAlignment().getHiddenColumns()
+               .getHiddenBoundaryLeft(startres);
+       int y2 = av.getAlignment().getHiddenColumns()
+               .getHiddenBoundaryRight(startres);
  
        if ((insertGap && startres > y1 && lastres < y1)
                || (!insertGap && startres < y2 && lastres > y2))
          {
            if (sg.getSize() == av.getAlignment().getHeight())
            {
-             if ((av.hasHiddenColumns() && startres < av
-                     .getColumnSelection().getHiddenBoundaryRight(startres)))
+             if ((av.hasHiddenColumns() && startres < av.getAlignment()
+                     .getHiddenColumns().getHiddenBoundaryRight(startres)))
              {
                endEditing();
                return;
      // DETECT RIGHT MOUSE BUTTON IN AWT
      if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)
      {
 -      SequenceFeature[] allFeatures = findFeaturesAtRes(sequence,
 +      List<SequenceFeature> allFeatures = findFeaturesAtRes(sequence,
                sequence.findPosition(res));
  
        Vector<String> links = null;
 -      if (allFeatures != null)
 +      for (int i = 0; i < allFeatures.size(); i++)
        {
 -        for (int i = 0; i < allFeatures.length; i++)
 +        SequenceFeature sf = allFeatures.get(i);
 +        if (sf.links != null)
          {
 -          if (allFeatures[i].links != null)
 +          if (links == null)
            {
 -            if (links == null)
 -            {
 -              links = new Vector<String>();
 -            }
 -            for (int j = 0; j < allFeatures[i].links.size(); j++)
 -            {
 -              links.addElement(allFeatures[i].links.elementAt(j));
 -            }
 +            links = new Vector<String>();
            }
 +          links.addAll(sf.links);
          }
        }
        APopupMenu popup = new APopupMenu(ap, null, links);
     */
    @Override
    public void selection(SequenceGroup seqsel, ColumnSelection colsel,
-           SelectionSource source)
+           HiddenColumns hidden, SelectionSource source)
    {
      // TODO: fix this hack - source of messages is align viewport, but SeqPanel
      // handles selection messages...
       * Check for selection in a view of which this one is a dna/protein
       * complement.
       */
-     if (selectionFromTranslation(seqsel, colsel, source))
+     if (selectionFromTranslation(seqsel, colsel, hidden, source))
      {
        return;
      }
          }
          else
          {
-           av.getColumnSelection().setElementsFrom(colsel);
+           av.getColumnSelection().setElementsFrom(colsel,
+                   av.getAlignment().getHiddenColumns());
          }
        }
        repaint |= av.isColSelChanged(true);
      }
      if (copycolsel
              && av.hasHiddenColumns()
-             && (av.getColumnSelection() == null || av.getColumnSelection()
-                     .getHiddenColumns() == null))
+             && (av.getColumnSelection() == null || av.getAlignment()
+                     .getHiddenColumns().getHiddenRegions() == null))
      {
        System.err.println("Bad things");
      }
     * @param source
     */
    protected boolean selectionFromTranslation(SequenceGroup seqsel,
-           ColumnSelection colsel, SelectionSource source)
+           ColumnSelection colsel, HiddenColumns hidden,
+           SelectionSource source)
    {
      if (!(source instanceof AlignViewportI))
      {
      /*
       * Map column selection
       */
-     ColumnSelection cs = MappingUtils.mapColumnSelection(colsel, sourceAv,
-             av);
+     // ColumnSelection cs = MappingUtils.mapColumnSelection(colsel, sourceAv,
+     // av);
+     ColumnSelection cs = new ColumnSelection();
+     HiddenColumns hs = new HiddenColumns();
+     MappingUtils.mapColumnSelection(colsel, hidden, sourceAv, av, cs, hs);
      av.setColumnSelection(cs);
+     av.getAlignment().setHiddenColumns(hs);
  
      ap.scalePanelHolder.repaint();
      ap.repaint();
@@@ -32,7 -32,7 +32,7 @@@ import jalview.bin.BuildDetails
  import jalview.datamodel.AlignmentAnnotation;
  import jalview.datamodel.AlignmentI;
  import jalview.datamodel.Annotation;
- import jalview.datamodel.ColumnSelection;
+ import jalview.datamodel.HiddenColumns;
  import jalview.datamodel.HiddenSequences;
  import jalview.datamodel.Sequence;
  import jalview.datamodel.SequenceFeature;
@@@ -84,9 -84,7 +84,7 @@@ public class JSONFile extends AlignFil
  
    private FeatureRenderer fr;
  
-   private List<int[]> hiddenColumns;
-   private ColumnSelection columnSelection;
+   private HiddenColumns hiddenColumns;
  
    private List<String> hiddenSeqRefs;
  
      // hidden column business
      if (getViewport().hasHiddenColumns())
      {
-       List<int[]> hiddenCols = getViewport().getColumnSelection()
-               .getHiddenColumns();
+       List<int[]> hiddenCols = getViewport().getAlignment()
+               .getHiddenColumns()
+               .getHiddenRegions();
        StringBuilder hiddenColsBuilder = new StringBuilder();
        for (int[] range : hiddenCols)
        {
      String hiddenCols = (String) jvSettingsJson.get("hiddenCols");
      if (hiddenCols != null && !hiddenCols.isEmpty())
      {
-       columnSelection = new ColumnSelection();
+       hiddenColumns = new HiddenColumns();
        String[] rangeStrings = hiddenCols.split(";");
        for (String rangeString : rangeStrings)
        {
          String[] range = rangeString.split("-");
-         columnSelection.hideColumns(Integer.valueOf(range[0]),
+         hiddenColumns.hideColumns(Integer.valueOf(range[0]),
                  Integer.valueOf(range[1]));
        }
      }
          Long end = (Long) jsonFeature.get("xEnd");
          String type = (String) jsonFeature.get("type");
          String featureGrp = (String) jsonFeature.get("featureGroup");
 -        String descripiton = (String) jsonFeature.get("description");
 +        String description = (String) jsonFeature.get("description");
          String seqRef = (String) jsonFeature.get("sequenceRef");
          Float score = Float.valueOf(jsonFeature.get("score").toString());
  
          Sequence seq = seqMap.get(seqRef);
 -        SequenceFeature sequenceFeature = new SequenceFeature();
 +        int featureBegin = seq.findPosition(begin.intValue());
 +        int featureEnd = seq.findPosition(end.intValue()) - 1;
 +
 +        SequenceFeature sequenceFeature = new SequenceFeature(type,
 +                description, featureBegin, featureEnd, score, featureGrp);
 +
          JSONArray linksJsonArray = (JSONArray) jsonFeature.get("links");
          if (linksJsonArray != null && linksJsonArray.size() > 0)
          {
              sequenceFeature.addLink(link);
            }
          }
 -        sequenceFeature.setFeatureGroup(featureGrp);
 -        sequenceFeature.setScore(score);
 -        sequenceFeature.setDescription(descripiton);
 -        sequenceFeature.setType(type);
 -        sequenceFeature.setBegin(seq.findPosition(begin.intValue()));
 -        sequenceFeature.setEnd(seq.findPosition(end.intValue()) - 1);
 +
          seq.addSequenceFeature(sequenceFeature);
          displayedFeatures.setVisible(type);
        }
      return annotations;
    }
  
-   public List<int[]> getHiddenColumns()
-   {
-     return hiddenColumns;
-   }
    @Override
-   public ColumnSelection getColumnSelection()
+   public HiddenColumns getHiddenColumns()
    {
-     return columnSelection;
+     return hiddenColumns;
    }
  
-   public void setColumnSelection(ColumnSelection columnSelection)
+   public void setHiddenColumns(HiddenColumns hidden)
    {
-     this.columnSelection = columnSelection;
+     this.hiddenColumns = hidden;
    }
  
    @Override