JAL-1989 tightened up use of flag for 'column selection changed'
[jalview.git] / src / jalview / gui / ScalePanel.java
index 8a3138d..2165b2c 100755 (executable)
@@ -35,7 +35,6 @@ import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.swing.JMenuItem;
@@ -44,17 +43,14 @@ import javax.swing.JPopupMenu;
 import javax.swing.ToolTipManager;
 
 /**
- * DOCUMENT ME!
- * 
- * @author $author$
- * @version $Revision$
+ * The panel containing the sequence ruler (when not in wrapped mode), and
+ * supports a range of mouse operations to select, hide or reveal columns.
  */
 public class ScalePanel extends JPanel implements MouseMotionListener,
         MouseListener
 {
   protected int offy = 4;
 
-  /** DOCUMENT ME!! */
   public int width;
 
   protected AlignViewport av;
@@ -63,13 +59,26 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
 
   boolean stretchingGroup = false;
 
-  int min; // used by mouseDragged to see if user
+  /*
+   * min, max hold the extent of a mouse drag action
+   */
+  int min;
 
-  int max; // used by mouseDragged to see if user
+  int max;
 
   boolean mouseDragging = false;
 
-  // wants to delete columns
+  /*
+   * holds a hidden column range when the mouse is over an adjacent column
+   */
+  int[] reveal;
+
+  /**
+   * Constructor
+   * 
+   * @param av
+   * @param ap
+   */
   public ScalePanel(AlignViewport av, AlignmentPanel ap)
   {
     this.av = av;
@@ -394,6 +403,8 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
   @Override
   public void mouseMoved(MouseEvent evt)
   {
+    this.setToolTipText(null);
+    reveal = null;
     if (!av.hasHiddenColumns())
     {
       return;
@@ -403,7 +414,6 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
 
     res = av.getColumnSelection().adjustForHiddenColumns(res);
 
-    reveal = null;
     if (av.getColumnSelection().getHiddenColumns() != null)
     {
       for (int[] region : av.getColumnSelection().getHiddenColumns())
@@ -416,17 +426,11 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
                   .getString("label.reveal_hidden_columns"));
           break;
         }
-        else
-        {
-          this.setToolTipText(null);
-        }
       }
     }
     repaint();
   }
 
-  int[] reveal;
-
   /**
    * DOCUMENT ME!
    * 
@@ -461,7 +465,6 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
     ColumnSelection cs = av.getColumnSelection();
     int avCharWidth = av.getCharWidth(), avCharHeight = av.getCharHeight();
 
-    int s;
     if (cs != null)
     {
       gg.setColor(new Color(220, 0, 0));
@@ -526,8 +529,10 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
     // Draw the scale numbers
     gg.setColor(Color.black);
 
-    List<Object[]> marks = calculateMarks(startx, endx);
     int maxX = 0;
+    List<Object[]> marks = jalview.renderer.ScaleRenderer.calculateMarks(
+            av, startx, endx);
+
     for (Object[] mark : marks)
     {
       boolean major = Boolean.valueOf((Boolean) mark[0]);
@@ -563,89 +568,4 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
 
   }
 
-  /**
-   * calculate positions markers on the alignment ruler
-   * 
-   * @return List { Object { .. } } Boolean: true/false for major/minor mark,
-   *         Integer: marker position in alignment column coords, String: null
-   *         or a String to be rendered at the position.
-   */
-  public List<Object[]> calculateMarks(int startx, int endx)
-  {
-    new ArrayList<Object[]>();
-
-    int scalestartx = (startx / 10) * 10;
-
-    SequenceI refSeq = av.getAlignment().getSeqrep();
-    int refSp = 0, refEp = -1, refStart = 0, refEnd = -1, refStartI = 0, refEndI = -1;
-    if (refSeq != null)
-    {
-      // find bounds and set origin appopriately
-      // locate first visible position for this sequence
-      int[] refbounds = av.getColumnSelection()
-              .locateVisibleBoundsOfSequence(refSeq);
-
-      refSp = refbounds[0];
-      refEp = refbounds[1];
-      refStart = refbounds[2];
-      refEnd = refbounds[3];
-      refStartI = refbounds[4];
-      refEndI = refbounds[5];
-      scalestartx = refSp + ((scalestartx - refSp) / 10) * 10;
-    }
-
-
-    if (refSeq == null && scalestartx % 10 == 0)
-    {
-      scalestartx += 5;
-    }
-    List<Object[]> marks = new ArrayList<Object[]>();
-    String string;
-    int maxX = 0, refN, iadj;
-    // todo: add a 'reference origin column' to set column number relative to
-    for (int i = scalestartx; i < endx; i += 5)
-    {
-      Object[] amark = new Object[3];
-      if (((i - refSp) % 10) == 0)
-      {
-        if (refSeq == null)
-        {
-          iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1) + 1;
-          string = String.valueOf(iadj);
-        }
-        else
-        {
-          iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1);
-          refN = refSeq.findPosition(iadj);
-          // TODO show bounds if position is a gap
-          // - ie L--R -> "1L|2R" for
-          // marker
-          if (iadj < refStartI)
-          {
-            string = String.valueOf(iadj - refStartI);
-          }
-          else if (iadj > refEndI)
-          {
-            string = "+" + String.valueOf(iadj - refEndI);
-          }
-          else
-          {
-            string = String.valueOf(refN) + refSeq.getCharAt(iadj);
-          }
-        }
-        amark[0] = Boolean.TRUE;
-        amark[1] = Integer.valueOf(i - startx - 1);
-        amark[2] = string;
-
-      }
-      else
-      {
-        amark[0] = Boolean.FALSE;
-        amark[1] = Integer.valueOf(i - startx - 1);
-        amark[2] = null;
-      }
-      marks.add(amark);
-    }
-    return marks;
-  }
 }