Check alignment has same sequence
[jalview.git] / src / jalview / gui / SeqPanel.java
index a20165a..a5ffb80 100755 (executable)
@@ -27,6 +27,7 @@ import javax.swing.*;
 import jalview.commands.*;\r
 import jalview.datamodel.*;\r
 import jalview.schemes.*;\r
+import jalview.structure.*;\r
 \r
 /**\r
  * DOCUMENT ME!\r
@@ -36,7 +37,7 @@ import jalview.schemes.*;
  */\r
 public class SeqPanel\r
     extends JPanel implements MouseListener,\r
-    MouseMotionListener, MouseWheelListener\r
+    MouseMotionListener, MouseWheelListener, SequenceListener\r
 \r
 {\r
   /** DOCUMENT ME!! */\r
@@ -76,6 +77,9 @@ public class SeqPanel
 \r
   EditCommand editCommand;\r
 \r
+  StructureSelectionManager ssm;\r
+\r
+\r
   /**\r
    * Creates a new SeqPanel object.\r
    *\r
@@ -102,6 +106,8 @@ public class SeqPanel
       addMouseMotionListener(this);\r
       addMouseListener(this);\r
       addMouseWheelListener(this);\r
+      ssm = StructureSelectionManager.getStructureSelectionManager();\r
+      ssm.addStructureViewerListener(this);\r
     }\r
   }\r
 \r
@@ -207,36 +213,11 @@ public class SeqPanel
     }\r
 \r
     features = new SequenceFeature[tmp.size()];\r
-    for (int i = 0; i < tmp.size(); i++)\r
-    {\r
-      features[i] = (SequenceFeature) tmp.elementAt(i);\r
-    }\r
+    tmp.copyInto(features);\r
 \r
     return features;\r
   }\r
 \r
-  Vector getAllFeaturesAtRes(SequenceI seq, int res)\r
-  {\r
-    Vector allFeatures = new Vector();\r
-    int index = 0;\r
-    if (seq.getSequenceFeatures() != null && av.featuresDisplayed != null)\r
-    {\r
-      while (index < seq.getSequenceFeatures().length)\r
-      {\r
-        SequenceFeature sf = seq.getSequenceFeatures()[index];\r
-        if (sf.getBegin() <= res &&\r
-            sf.getEnd() >= res)\r
-        {\r
-          if (av.featuresDisplayed.containsKey(sf.getType()))\r
-          {\r
-            allFeatures.addElement(sf);\r
-          }\r
-        }\r
-        index++;\r
-      }\r
-    }\r
-    return allFeatures;\r
-  }\r
 \r
   void endEditing()\r
   {\r
@@ -258,13 +239,13 @@ public class SeqPanel
 \r
   void setCursorRow()\r
   {\r
-    seqCanvas.cursorY = getKeyboardNo(keyboardNo1) - 1;\r
+    seqCanvas.cursorY = getKeyboardNo1() - 1;\r
     scrollToVisible();\r
   }\r
 \r
   void setCursorColumn()\r
   {\r
-    seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
+    seqCanvas.cursorX = getKeyboardNo1() - 1;\r
     scrollToVisible();\r
   }\r
 \r
@@ -276,8 +257,8 @@ public class SeqPanel
     }\r
     else\r
     {\r
-      seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
-      seqCanvas.cursorY = getKeyboardNo(keyboardNo2) - 1;\r
+      seqCanvas.cursorX = getKeyboardNo1() - 1;\r
+      seqCanvas.cursorY = getKeyboardNo2() - 1;\r
       scrollToVisible();\r
     }\r
   }\r
@@ -288,7 +269,7 @@ public class SeqPanel
         (Sequence) av.getAlignment().getSequenceAt(seqCanvas.cursorY);\r
 \r
     seqCanvas.cursorX = sequence.findIndex(\r
-        getKeyboardNo(keyboardNo1) - 1\r
+        getKeyboardNo1() - 1\r
         );\r
     scrollToVisible();\r
   }\r
@@ -449,7 +430,7 @@ public class SeqPanel
       av.setSelectionGroup(sg);\r
     }\r
 \r
-    ap.repaint();\r
+    ap.paintAlignment(false);\r
   }\r
 \r
   void insertGapAtCursor(boolean group)\r
@@ -457,7 +438,7 @@ public class SeqPanel
     groupEditing = group;\r
     startseq = seqCanvas.cursorY;\r
     lastres = seqCanvas.cursorX;\r
-    editSequence(true, seqCanvas.cursorX + getKeyboardNo(keyboardNo1));\r
+    editSequence(true, seqCanvas.cursorX + getKeyboardNo1());\r
     endEditing();\r
   }\r
 \r
@@ -465,7 +446,7 @@ public class SeqPanel
   {\r
     groupEditing = group;\r
     startseq = seqCanvas.cursorY;\r
-    lastres = seqCanvas.cursorX + getKeyboardNo(keyboardNo1);\r
+    lastres = seqCanvas.cursorX + getKeyboardNo1();\r
     editSequence(false, seqCanvas.cursorX);\r
     endEditing();\r
   }\r
@@ -487,15 +468,27 @@ public class SeqPanel
     }\r
   }\r
 \r
-  int getKeyboardNo(StringBuffer kb)\r
+  int getKeyboardNo1()\r
   {\r
-    if (kb == null)\r
-    {\r
+    if (keyboardNo1 == null)\r
       return 1;\r
+    else\r
+    {\r
+      int value = Integer.parseInt(keyboardNo1.toString());\r
+      keyboardNo1 = null;\r
+      return value;\r
     }\r
+  }\r
+\r
+  int getKeyboardNo2()\r
+  {\r
+    if (keyboardNo2 == null)\r
+      return 1;\r
     else\r
     {\r
-      return Integer.parseInt(kb.toString());\r
+      int value = Integer.parseInt(keyboardNo2.toString());\r
+      keyboardNo2 = null;\r
+      return value;\r
     }\r
   }\r
 \r
@@ -517,7 +510,7 @@ public class SeqPanel
 \r
     endEditing();\r
 \r
-    ap.repaint();\r
+    ap.paintAlignment(true);\r
   }\r
 \r
   /**\r
@@ -573,6 +566,33 @@ public class SeqPanel
     return;\r
   }\r
 \r
+  String lastMessage;\r
+  public void mouseOverSequence(SequenceI sequence, int index)\r
+  {\r
+    String tmp = sequence.hashCode()+index+"";\r
+    if (lastMessage == null || !lastMessage.equals(tmp))\r
+      ssm.mouseOverSequence(sequence, index);\r
+\r
+    lastMessage = tmp;\r
+  }\r
+\r
+\r
+  public void highlightSequence(jalview.datamodel.SequenceI seq, int index)\r
+  {\r
+    if(av.alignment.findIndex(seq)>-1)\r
+    {\r
+      SearchResults highlight = new SearchResults();\r
+      highlight.addResult(seq,index,index);\r
+      seqCanvas.highlightSearchResults(highlight);\r
+    }\r
+  }\r
+\r
+  public void updateColours(SequenceI seq, int index)\r
+  {\r
+    System.out.println("update the seqPanel colours");\r
+    //repaint();\r
+  }\r
+\r
   /**\r
    * DOCUMENT ME!\r
    *\r
@@ -602,10 +622,8 @@ public class SeqPanel
       return;\r
     }\r
 \r
-    if (seqCanvas.pdbCanvas != null && sequence == seqCanvas.pdbCanvas.sequence)\r
-    {\r
-      seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res));\r
-    }\r
+    if (ssm != null)\r
+      mouseOverSequence(sequence, sequence.findPosition(res));\r
 \r
     setStatusMessage(sequence, res, seq);\r
 \r
@@ -837,7 +855,7 @@ public class SeqPanel
           av.charWidth++;\r
         }\r
 \r
-        ap.repaint();\r
+        ap.paintAlignment(false);\r
       }\r
 \r
       FontMetrics fm = getFontMetrics(av.getFont());\r
@@ -881,9 +899,10 @@ public class SeqPanel
     {\r
       scrollThread.setEvent(evt);\r
     }\r
-\r
   }\r
 \r
+\r
+\r
   synchronized void editSequence(boolean insertGap, int startres)\r
   {\r
     int fixedLeft = -1;\r
@@ -1355,23 +1374,6 @@ public class SeqPanel
   public void mouseWheelMoved(MouseWheelEvent e)\r
   {\r
     e.consume();\r
-    /* if (mouseWheelPressed)\r
-     {\r
-       Font font = av.getFont();\r
-       int fontSize = font.getSize();\r
-       if (e.getWheelRotation() > 0 && fontSize < 51)\r
-         fontSize++;\r
-       else if (fontSize > 1)\r
-         fontSize--;\r
-\r
-\r
-\r
-       av.setFont(new Font(font.getName(), font.getStyle(), fontSize));\r
-\r
-       ap.fontChanged();\r
-     }\r
-     else*/\r
-    {\r
       if (e.getWheelRotation() > 0)\r
       {\r
         ap.scrollUp(false);\r
@@ -1380,8 +1382,6 @@ public class SeqPanel
       {\r
         ap.scrollUp(true);\r
       }\r
-    }\r
-\r
   }\r
 \r
   /**\r
@@ -1461,17 +1461,16 @@ public class SeqPanel
 \r
     if (javax.swing.SwingUtilities.isRightMouseButton(evt))\r
     {\r
-      Vector allFeatures = getAllFeaturesAtRes(sequence.getDatasetSequence(),\r
+      SequenceFeature [] allFeatures = findFeaturesAtRes(sequence.getDatasetSequence(),\r
                                                sequence.findPosition(res));\r
       Vector links = new Vector();\r
-      for (int i = 0; i < allFeatures.size(); i++)\r
+      for (int i = 0; i < allFeatures.length; i++)\r
       {\r
-        SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(i);\r
-        if (sf.links != null)\r
+        if (allFeatures[i].links != null)\r
         {\r
-          for (int j = 0; j < sf.links.size(); j++)\r
+          for (int j = 0; j < allFeatures[i].links.size(); j++)\r
           {\r
-            links.addElement(sf.links.elementAt(j));\r
+            links.addElement(allFeatures[i].links.elementAt(j));\r
           }\r
         }\r
       }\r
@@ -1575,6 +1574,7 @@ public class SeqPanel
     stretchGroup = null;\r
 \r
     PaintRefresher.Refresh(this, av.getSequenceSetId());\r
+    ap.paintAlignment(true);\r
   }\r
 \r
   /**\r