javascript callback for selection, mousover, and functions for selection and highligh...
[jalview.git] / src / jalview / appletgui / AlignViewport.java
index 62c313f..ed61bc5 100755 (executable)
@@ -25,8 +25,9 @@ import jalview.analysis.*;
 import jalview.bin.*;
 import jalview.datamodel.*;
 import jalview.schemes.*;
+import jalview.structure.SelectionSource;
 
-public class AlignViewport
+public class AlignViewport implements SelectionSource
 {
   int startRes;
 
@@ -1122,7 +1123,31 @@ public class AlignViewport
       firePropertyChange("alignment", null, alignment.getSequences());
     }
   }
+  public void showSequence(int index)
+  {
+    Vector tmp = alignment.getHiddenSequences().showSequence(index,
+            hiddenRepSequences);
+    if (tmp.size() > 0)
+    {
+      if (selectionGroup == null)
+      {
+        selectionGroup = new SequenceGroup();
+        selectionGroup.setEndRes(alignment.getWidth() - 1);
+      }
+
+      for (int t = 0; t < tmp.size(); t++)
+      {
+        selectionGroup.addSequence((SequenceI) tmp.elementAt(t), false);
+      }
+      firePropertyChange("alignment", null, alignment.getSequences());
+      sendSelection();
+    }
 
+    if (alignment.getHiddenSequences().getSize() < 1)
+    {
+      hasHiddenRows = false;
+    }
+  }
   public void showColumn(int col)
   {
     colSel.revealHiddenColumns(col);
@@ -1156,6 +1181,7 @@ public class AlignViewport
       firePropertyChange("alignment", null, alignment.getSequences());
       hasHiddenRows = false;
       hiddenRepSequences = null;
+      sendSelection();
     }
   }
 
@@ -1378,6 +1404,20 @@ public class AlignViewport
 
     return sequenceSetID;
   }
+  /**
+   * unique viewId for synchronizing state (e.g. with stored Jalview Project)
+   * 
+   */
+  private String viewId = null;
+
+  public String getViewId()
+  {
+    if (viewId == null)
+    {
+      viewId = this.getSequenceSetId() + "." + this.hashCode() + "";
+    }
+    return viewId;
+  }
 
   public void alignmentChanged(AlignmentPanel ap)
   {
@@ -1483,6 +1523,53 @@ public class AlignViewport
     return followHighlight;
   }
 
+  public boolean followSelection = true;
+
+  /**
+   * @return true if view selection should always follow the selections
+   *         broadcast by other selection sources
+   */
+  public boolean getFollowSelection()
+  {
+    return followSelection;
+  }
+
+  private long sgrouphash = -1, colselhash = -1;
+
+  /**
+   * checks current SelectionGroup against record of last hash value, and
+   * updates record.
+   * 
+   * @return true if SelectionGroup changed since last call
+   */
+  boolean isSelectionGroupChanged()
+  {
+    int hc = (selectionGroup == null) ? -1 : selectionGroup.hashCode();
+    if (hc != sgrouphash)
+    {
+      sgrouphash = hc;
+      return true;
+    }
+    return false;
+  }
+
+  /**
+   * checks current colsel against record of last hash value, and updates
+   * record.
+   * 
+   * @return true if colsel changed since last call
+   */
+  boolean isColSelChanged()
+  {
+    int hc = (colSel == null) ? -1 : colSel.hashCode();
+    if (hc != colselhash)
+    {
+      colselhash = hc;
+      return true;
+    }
+    return false;
+  }
+
   /**
    * show non-conserved residues only
    */
@@ -1612,5 +1699,13 @@ public class AlignViewport
       }
     }
   }
+  public void sendSelection()
+  {
+    jalview.structure.StructureSelectionManager
+            .getStructureSelectionManager().sendSelection(
+                    new SequenceGroup(getSelectionGroup()),
+                    new ColumnSelection(getColumnSelection()), this);
+  }
+
 
 }