refactor to allow distinct StructureSelectionManager instances for
[jalview.git] / src / jalview / gui / SeqPanel.java
old mode 100755 (executable)
new mode 100644 (file)
index 7502812..50ece22
@@ -33,7 +33,7 @@ import jalview.structure.*;
  * DOCUMENT ME!
  * 
  * @author $author$
- * @version $Revision$
+ * @version $Revision: 1.130 $
  */
 public class SeqPanel extends JPanel implements MouseListener,
         MouseMotionListener, MouseWheelListener, SequenceListener,
@@ -123,7 +123,7 @@ public class SeqPanel extends JPanel implements MouseListener,
       addMouseMotionListener(this);
       addMouseListener(this);
       addMouseWheelListener(this);
-      ssm = StructureSelectionManager.getStructureSelectionManager();
+      ssm = StructureSelectionManager.getStructureSelectionManager(Desktop.instance);
       ssm.addStructureViewerListener(this);
       ssm.addSelectionListener(this);
     }
@@ -168,6 +168,11 @@ public class SeqPanel extends JPanel implements MouseListener,
     }
     else
     {
+      if (x>seqCanvas.getWidth()+seqCanvas.getWidth())
+      {
+        // make sure we calculate relative to visible alignment, rather than right-hand gutter
+        x = seqCanvas.getX()+seqCanvas.getWidth();
+      }
       res = (x / av.getCharWidth()) + av.getStartRes();
     }
 
@@ -601,7 +606,7 @@ public class SeqPanel extends JPanel implements MouseListener,
     if (lastMessage == null || !lastMessage.equals(tmp))
     {
       // System.err.println("mouseOver Sequence: "+tmp);
-      ssm.mouseOverSequence(sequence, index, pos);
+      ssm.mouseOverSequence(sequence, index, pos, av);
     }
     lastMessage = tmp;
   }
@@ -610,8 +615,10 @@ public class SeqPanel extends JPanel implements MouseListener,
   {
     if (av.followHighlight)
     {
-      ap.scrollToPosition(results, false);
+      if (ap.scrollToPosition(results, false))
+      {
       seqCanvas.revalidate();
+      }
     }
     seqCanvas.highlightSearchResults(results);
   }
@@ -1875,6 +1882,7 @@ public class SeqPanel extends JPanel implements MouseListener,
     // shared between viewports.
     if (av == source
             || !av.followSelection
+            || (av.isSelectionGroupChanged(false) || av.isColSelChanged(false))
             || (source instanceof AlignViewport && ((AlignViewport) source)
                     .getSequenceSetId().equals(av.getSequenceSetId())))
     {
@@ -1885,10 +1893,10 @@ public class SeqPanel extends JPanel implements MouseListener,
     // rules are: colsel is copied if there is a real intersection between
     // sequence selection
     boolean repaint = false, copycolsel = true;
-    if (av.selectionGroup == null || !av.isSelectionGroupChanged())
+    // if (!av.isSelectionGroupChanged(false))
     {
       SequenceGroup sgroup = null;
-      if (seqsel != null)
+      if (seqsel != null && seqsel.getSize()>0)
       {
         if (av.alignment == null)
         {
@@ -1900,7 +1908,7 @@ public class SeqPanel extends JPanel implements MouseListener,
         sgroup = seqsel.intersect(av.alignment,
                 (av.hasHiddenRows) ? av.hiddenRepSequences : null);
         if ((sgroup == null || sgroup.getSize() == 0)
-                && (colsel == null || colsel.size() == 0))
+                || (colsel == null || colsel.size() == 0))
         {
           // don't copy columns if the region didn't intersect.
           copycolsel = false;
@@ -1914,9 +1922,10 @@ public class SeqPanel extends JPanel implements MouseListener,
       {
         av.setSelectionGroup(null);
       }
-      repaint = av.isSelectionGroupChanged();
+      av.isSelectionGroupChanged(true);
+      repaint = true;
     }
-    if (copycolsel && (av.colSel == null || !av.isColSelChanged()))
+    if (copycolsel)
     {
       // the current selection is unset or from a previous message
       // so import the new colsel.
@@ -1925,6 +1934,7 @@ public class SeqPanel extends JPanel implements MouseListener,
         if (av.colSel != null)
         {
           av.colSel.clear();
+          repaint=true;
         }
       }
       else
@@ -1939,7 +1949,8 @@ public class SeqPanel extends JPanel implements MouseListener,
           av.colSel.setElementsFrom(colsel);
         }
       }
-      repaint |= av.isColSelChanged();
+      av.isColSelChanged(true);
+      repaint = true;
     }
     if (copycolsel && av.hasHiddenColumns
             && (av.colSel == null || av.colSel.getHiddenColumns() == null))