Highlight doesnt use offset
[jalview.git] / src / MCview / AppletPDBCanvas.java
index 1ee0828..4c62b60 100755 (executable)
@@ -34,17 +34,6 @@ import java.util.*;
 \r
 public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotionListener\r
 {\r
-  public AppletPDBCanvas()\r
-  {\r
-    try\r
-    {\r
-      jbInit();\r
-    }\r
-    catch (Exception ex)\r
-    {\r
-      ex.printStackTrace();\r
-    }\r
-  }\r
 \r
   MCMatrix idmat = new MCMatrix(3, 3);\r
     MCMatrix objmat = new MCMatrix(3, 3);\r
@@ -80,10 +69,11 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
     jalview.appletgui.SequenceRenderer sr;\r
     jalview.appletgui.FeatureRenderer  fr;\r
     jalview.appletgui.SeqCanvas seqcanvas;\r
-    Sequence sequence;\r
+    public Sequence sequence;\r
     final StringBuffer mappingDetails = new StringBuffer();\r
     String appletToolTip = null;\r
     int toolx, tooly;\r
+    PDBChain mainchain;\r
 \r
     public AppletPDBCanvas(jalview.appletgui.SeqCanvas seqcanvas, Sequence seq)\r
     {\r
@@ -92,7 +82,7 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
       sr = seqcanvas.getSequenceRenderer();\r
       fr = seqcanvas.getFeatureRenderer();\r
 \r
-      seqcanvas.setPDBViewer(this);\r
+      seqcanvas.setPDBCanvas(this);\r
       addKeyListener(new KeyAdapter()\r
       {\r
 \r
@@ -101,9 +91,34 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
           doKeyPressed(evt);\r
         }\r
       });\r
-\r
     }\r
 \r
+    Bond highlightBond1, highlightBond2;\r
+    public void highlightRes(int ii)\r
+   {\r
+     highlightBond1 = null;\r
+     highlightBond2 = null;\r
+\r
+     int index = ii - mainchain.seqstart;\r
+     if(index <0 )\r
+       return;\r
+\r
+     if(index<=mainchain.bonds.size())\r
+     {\r
+       if(index>0)\r
+       {\r
+         highlightBond1 = (Bond) mainchain.bonds.elementAt(index - 1);\r
+       }\r
+\r
+       if(index!=mainchain.bonds.size())\r
+         highlightBond2 = (Bond) mainchain.bonds.elementAt(index);\r
+     }\r
+\r
+     redrawneeded = true;\r
+     repaint();\r
+  }\r
+\r
+\r
   public void setPDBFile(PDBfile pdb)\r
    {\r
         this.sr = sr;\r
@@ -155,12 +170,14 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
             mappingDetails.append("\nSEQ start/end "+ seqstart + " " + seqend);\r
         }\r
 \r
-        ((PDBChain) pdb.chains.elementAt(maxchain)).pdbstart = pdbstart;\r
-        ((PDBChain) pdb.chains.elementAt(maxchain)).pdbend = pdbend;\r
-        ((PDBChain) pdb.chains.elementAt(maxchain)).seqstart = seqstart;\r
-        ((PDBChain) pdb.chains.elementAt(maxchain)).seqend = seqend;\r
-        ((PDBChain) pdb.chains.elementAt(maxchain)).isVisible = true;\r
-        ((PDBChain) pdb.chains.elementAt(maxchain)).sequence = sequence;\r
+        mainchain = (PDBChain) pdb.chains.elementAt(maxchain);\r
+\r
+        mainchain.pdbstart = pdbstart;\r
+        mainchain.pdbend = pdbend;\r
+        mainchain.seqstart = seqstart;\r
+        mainchain.seqend = seqend;\r
+        mainchain.isVisible = true;\r
+        mainchain.sequence = sequence;\r
 \r
         this.pdb = pdb;\r
         this.prefsize = new Dimension(getSize().width, getSize().height);\r
@@ -373,14 +390,20 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
         //this saves much memory usage\r
         if ((img == null) || (prefsize.width != getSize().width) ||\r
                 (prefsize.height != getSize().height)) {\r
-            prefsize.width = getSize().width;\r
-            prefsize.height = getSize().height;\r
 \r
-            scale = findScale();\r
-            img = createImage(prefsize.width, prefsize.height);\r
-            ig = img.getGraphics();\r
+         try{     prefsize.width = getSize().width;\r
+           prefsize.height = getSize().height;\r
 \r
-            redrawneeded = true;\r
+           scale = findScale();\r
+           img = createImage(prefsize.width, prefsize.height);\r
+           ig = img.getGraphics();\r
+\r
+           redrawneeded = true;\r
+         }catch(Exception ex)\r
+         {\r
+           ex.printStackTrace();\r
+           System.out.println(getSize());\r
+         }\r
         }\r
 \r
 \r
@@ -430,16 +453,21 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
       for (int i = 0; i < chain.bonds.size(); i++)\r
       {\r
         Bond tmp = (Bond) chain.bonds.elementAt(i);\r
-\r
         if ( (tmp.at1.resNumber >= ( (chain.offset + chain.pdbstart) - 1)) &&\r
             (tmp.at1.resNumber <= ( (chain.offset + chain.pdbend) - 1)))\r
         {\r
+\r
           int pos = chain.seqstart +\r
               (tmp.at1.resNumber - chain.pdbstart - chain.offset);\r
 \r
           int index = sequence.findIndex(pos);\r
 \r
-          tmp.startCol = sr.findSequenceColour(sequence, index);\r
+          if(jalview.util.Comparison.isGap((sequence.getCharAt(index))))\r
+           {\r
+             index--;\r
+           }\r
+\r
+           tmp.startCol = sr.findSequenceColour(sequence, index);\r
 \r
         //  tmp.startCol = fr.findFeatureColour(tmp.startCol, sequence, index);\r
 \r
@@ -455,8 +483,13 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
           int pos = chain.seqstart +\r
               (tmp.at2.resNumber - chain.pdbstart - chain.offset);\r
           int index = sequence.findIndex(pos);\r
+          if (jalview.util.Comparison.isGap( (sequence.getCharAt(index))))\r
+          {\r
+            index--;\r
+          }\r
+\r
 \r
-          tmp.endCol = sr.findSequenceColour( sequence, index);\r
+            tmp.endCol = sr.findSequenceColour(sequence, index);\r
       //    tmp.endCol = fr.findFeatureColour(tmp.endCol, sequence, index);\r
         }\r
         else\r
@@ -479,7 +512,7 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
 \r
             for (int i = 0; i < tmp.size(); i++)\r
             {\r
-              bonds.addElement(tmp.elementAt(i));\r
+                bonds.addElement(tmp.elementAt(i));\r
             }\r
           }\r
         }\r
@@ -491,6 +524,7 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
         for (int i = 0; i < bonds.size(); i++) {\r
             Bond tmpBond = (Bond) bonds.elementAt(i);\r
 \r
+\r
             xstart = (int) (((tmpBond.start[0] - centre[0]) * scale) +\r
                 (getSize().width / 2));\r
             ystart = (int) (((tmpBond.start[1] - centre[1]) * scale) +\r
@@ -504,7 +538,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
             xmid = (xend + xstart) / 2;\r
             ymid = (yend + ystart) / 2;\r
 \r
-            if (depthcue && !bymolecule) {\r
+            if (depthcue && !bymolecule)\r
+            {\r
                 if (tmpBond.start[2] < (centre[2] - (maxwidth / 6))) {\r
                     g.setColor(tmpBond.startCol.darker().darker());\r
                     drawLine(g, xstart, ystart, xmid, ymid);\r
@@ -543,6 +578,19 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
             } else {\r
                 drawLine(g, xstart, ystart, xend, yend);\r
             }\r
+\r
+            if(highlightBond1!=null && highlightBond1==tmpBond)\r
+            {\r
+              g.setColor(Color.white);\r
+              drawLine(g, xmid, ymid, xend, yend);\r
+            }\r
+\r
+            if(highlightBond2!=null && highlightBond2==tmpBond)\r
+            {\r
+              g.setColor(Color.white);\r
+              drawLine(g, xstart, ystart, xmid, ymid);\r
+            }\r
+\r
         }\r
     }\r
 \r
@@ -588,7 +636,7 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
     }\r
 \r
     public void mousePressed(MouseEvent e) {\r
-        myAtom fatom = findAtom(e.getX(), e.getY());\r
+        Atom fatom = findAtom(e.getX(), e.getY());\r
         if(fatom!=null)\r
         {\r
           fatom.isSelected = !fatom.isSelected;\r
@@ -604,17 +652,23 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
 \r
     public void mouseMoved(MouseEvent e) {\r
 \r
-        myAtom fatom = findAtom(e.getX(), e.getY());\r
+        Atom fatom = findAtom(e.getX(), e.getY());\r
 \r
+        PDBChain chain = null;\r
         if(foundchain!=-1)\r
         {\r
-          PDBChain chain = (PDBChain) pdb.chains.elementAt(foundchain);\r
-          int pos = chain.seqstart +\r
-              (fatom.resNumber - chain.pdbstart - chain.offset)+1;\r
+          chain = (PDBChain) pdb.chains.elementAt(foundchain);\r
+          if(chain == mainchain)\r
+          {\r
+            int pos = chain.seqstart +\r
+                (fatom.resNumber - chain.pdbstart - chain.offset) + 1;\r
 \r
-          int index = seqcanvas.getViewport().getAlignment().findIndex(sequence);\r
+            int index = seqcanvas.getViewport().getAlignment().findIndex(\r
+                sequence);\r
 \r
-          seqcanvas.highlightSearchResults(new int[]{index, pos, pos});\r
+            seqcanvas.highlightSearchResults(new int[]\r
+                                             {index, pos, pos});\r
+          }\r
         }\r
         else\r
           seqcanvas.highlightSearchResults(null);\r
@@ -622,7 +676,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
         if (fatom != null) {\r
             toolx = e.getX();\r
             tooly = e.getY();\r
-            appletToolTip = fatom.resNumber+" "+ fatom.resName;\r
+\r
+            appletToolTip = chain.id+":"+ fatom.resNumber+" "+ fatom.resName;\r
             redrawneeded = true;\r
             repaint();\r
         } else {\r
@@ -747,8 +802,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
     }\r
 \r
     int foundchain = -1;\r
-    public myAtom findAtom(int x, int y) {\r
-        myAtom fatom = null;\r
+    public Atom findAtom(int x, int y) {\r
+        Atom fatom = null;\r
 \r
         foundchain = -1;\r
 \r
@@ -792,8 +847,15 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
       paint(g);\r
     }\r
 \r
-  private void jbInit()\r
-      throws Exception\r
-  {\r
-  }\r
+    public void setAllchainsVisible(boolean b)\r
+    {\r
+      for (int ii = 0; ii < pdb.chains.size(); ii++)\r
+      {\r
+        PDBChain chain = (PDBChain) pdb.chains.elementAt(ii);\r
+        chain.isVisible = b;\r
+      }\r
+      mainchain.isVisible = true;\r
+      findCentre();\r
+    }\r
+\r
 }\r