From 1c693e2e5ac767f88aaccf755deb44da3f581c1a Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Sat, 19 Sep 2009 07:58:58 +0000
Subject: [PATCH] fixes to zooming

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@11833 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../artemis/components/alignment/JamView.java | 93 ++++++++++++++-----
 1 file changed, 71 insertions(+), 22 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/alignment/JamView.java b/uk/ac/sanger/artemis/components/alignment/JamView.java
index 2a06ec636..0acd6ae9f 100644
--- a/uk/ac/sanger/artemis/components/alignment/JamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/JamView.java
@@ -328,6 +328,7 @@ public class JamView extends JPanel
       }
     }
     inputSam.close();
+    System.out.println("readFromBamPicard "+start+".."+end);
   }
   
   /**
@@ -340,7 +341,7 @@ public class JamView extends JPanel
 
 	String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
-	float pixPerBase = ((float)getWidth())/(float)(seqLength);
+	float pixPerBase = ((float)getWidth())/((float)seqLength);
 	
     int start;
     final int end;
@@ -350,16 +351,20 @@ public class JamView extends JPanel
     else
     {
       double x = jspView.getViewport().getViewRect().getX();
-      start = (int) (seqLength * ( (float)x / (float)getWidth()));
+      start = 1 + (int) (seqLength * ( (float)x / (float)getWidth()));
     }
     
     if(endBase > 0)
       end = endBase;
     else
-      end   = (int) (start + ((float)jspView.getViewport().getWidth() / 
-                              (float)pixPerBase));
+    {
+      int width = jspView.getViewport().getViewRect().width;
+      if(jspView.getVerticalScrollBar() != null)
+        width += jspView.getVerticalScrollBar().getWidth();
+      end   = (int) (start + ((float)width / (float)pixPerBase));
+    }
 
-    //System.out.println("paintComponent "+start+".."+end);
+    System.out.println("paintComponent "+start+".."+end+"       "+startBase+".."+endBase+"  pixPerBase="+pixPerBase);
     
     if(laststart != start ||
        lastend   != end)
@@ -428,6 +433,8 @@ public class JamView extends JPanel
           bases.getSubSequence(new Range(refSeqStart, seqEnd), Bases.FORWARD).toUpperCase();
         int xpos = (refSeqStart-1)*ALIGNMENT_PIX_PER_BASE;
         
+        System.out.println(refSeqStart+"  "+refSeq);
+        
         g2.setColor(light_grey);
         g2.fillRect(xpos, ypos-11, 
             jspView.getViewport().getWidth()+(ALIGNMENT_PIX_PER_BASE*2), 11);
@@ -932,8 +939,8 @@ public class JamView extends JPanel
         {
           int startBase = getBaseAtStartOfView();
           setZoomLevel((int) (JamView.this.nbasesInView * 1.1));
+          revalidate();
           goToBasePosition(startBase);
-          repaint();
         }
       });
       topPanel.add(zoomIn, gc);
@@ -947,8 +954,8 @@ public class JamView extends JPanel
             return;
           int startBase = getBaseAtStartOfView();
           setZoomLevel((int) (JamView.this.nbasesInView * .9));
+          revalidate();
           goToBasePosition(startBase);
-          repaint();
         }
       });
       topPanel.add(zoomOut, gc);
@@ -956,7 +963,7 @@ public class JamView extends JPanel
     
     topPanel.add(buttonAutoHide, gc);
 
-    mainPanel.setPreferredSize(new Dimension(800, 400));
+    mainPanel.setPreferredSize(new Dimension(900, 400));
     jspView = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
         JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
 
@@ -969,7 +976,7 @@ public class JamView extends JPanel
     jspView.getVerticalScrollBar().setValue(
         jspView.getVerticalScrollBar().getMaximum());
 
-    if (feature_display == null)
+    if(feature_display == null)
     {
       addKeyListener(new KeyAdapter()
       {
@@ -980,8 +987,8 @@ public class JamView extends JPanel
           case KeyEvent.VK_UP:
             int startBase = getBaseAtStartOfView();
             setZoomLevel((int) (JamView.this.nbasesInView * 1.1));
+            revalidate();
             goToBasePosition(startBase);
-            repaint();
             break;
           case KeyEvent.VK_DOWN:
             if (showBaseAlignment)
@@ -989,7 +996,6 @@ public class JamView extends JPanel
             startBase = getBaseAtStartOfView();
             setZoomLevel((int) (JamView.this.nbasesInView * .9));
             goToBasePosition(startBase);
-            repaint();
             break;
           default:
             break;
@@ -1036,7 +1042,7 @@ public class JamView extends JPanel
     String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
     double x = jspView.getViewport().getViewRect().getX();
-    return (int) (seqLength * ( x / getWidth()));
+    return (int) (seqLength * ( x / getWidth())) + 1;
   }
   
   /**
@@ -1048,8 +1054,36 @@ public class JamView extends JPanel
   {
     this.nbasesInView = nbasesInView;
     int start = getBaseAtStartOfView();
-    setDisplay(start,start+nbasesInView, null);
+
+    System.out.println("setZoomLevel "+start);
+    String refName = (String) combo.getSelectedItem();
+    int seqLength = seqLengths.get(refName);
+    int width = jspView.getViewport().getViewRect().width;
+    if(jspView.getVerticalScrollBar() != null)
+      width += jspView.getVerticalScrollBar().getWidth();
+    
+    float pixPerBase = ((float)width)/(float)(nbasesInView); 
+    
+    if(pixPerBase*2 > ALIGNMENT_PIX_PER_BASE)
+    {
+      pixPerBase = ALIGNMENT_PIX_PER_BASE;
+      checkBoxSingle.setVisible(false);
+      jspView.getVerticalScrollBar().setValue(0);
+      jspView.setColumnHeaderView(ruler);
+      showBaseAlignment = true;
+    }
+    else if(jspView != null)
+    {
+      checkBoxSingle.setVisible(true);
+      jspView.setColumnHeaderView(null);
+      showBaseAlignment = false;
+    }
+    
+    Dimension d = new Dimension();
+    d.setSize((seqLength*pixPerBase), 800.d);
+    setPreferredSize(d);
     revalidate();
+
     repaint();
   }
   
@@ -1062,8 +1096,15 @@ public class JamView extends JPanel
     Point p = jspView.getViewport().getViewPosition();
     String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
-    p.x = (int) ((getPreferredSize().width)*(((float)base-1)/(float)seqLength));
+    
+    int width = getPreferredSize().width;
+    
+    p.x = Math.round((float)width*((float)(base-1)/(float)seqLength));
     jspView.getViewport().setViewPosition(p);
+    
+    
+    System.out.println("goToBasePosition*** "+base+"  "+  
+        getBaseAtStartOfView()+" "+p.x+"  pixPerBase="+((float)width/(float)seqLength));
   }
   
   /**
@@ -1103,13 +1144,11 @@ public class JamView extends JPanel
     setPreferredSize(d);
     goToBasePosition(startBase);
     
-    repaint();
-    if(event == null || 
-       event.getType() == DisplayAdjustmentEvent.SCALE_ADJUST_EVENT)
-      revalidate();
-    
-    this.startBase = -1;
-    this.endBase   = -1;
+    if(event == null)
+    {
+      this.startBase = -1;
+      this.endBase   = -1;
+    }
   }
   
   private double getPixPerBase(int start, int end)
@@ -1375,7 +1414,17 @@ public class JamView extends JPanel
    */
   public void displayAdjustmentValueChanged(DisplayAdjustmentEvent event)
   {
-    setDisplay(event.getStart(), event.getEnd(), event);
+    System.out.println("displayAdjustmentValueChanged() "+event.getStart()+".."+event.getEnd());
+    
+    if(event.getType() == DisplayAdjustmentEvent.SCALE_ADJUST_EVENT)
+    {
+      this.nbasesInView = event.getWidthInBases();
+      setDisplay(event.getStart(), event.getEnd(), event);
+    }
+    else
+    {
+      setDisplay(event.getStart(), event.getEnd(), event);
+    }
   }
   
   public static void main(String[] args)
-- 
GitLab