Has its own featureRenderer
[jalview.git] / src / MCview / AppletPDBCanvas.java
index d6247f4..107d98d 100755 (executable)
@@ -76,6 +76,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
     boolean pdbAction = false;\r
     Bond highlightBond1, highlightBond2;\r
     boolean errorLoading = false;\r
+    boolean seqColoursReady = false;\r
+    jalview.appletgui.FeatureRenderer fr;\r
 \r
     public AppletPDBCanvas(jalview.appletgui.SeqCanvas seqcanvas, Sequence seq)\r
     {\r
@@ -117,7 +119,7 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
                     ((PDBChain) pdb.chains.elementAt(i)).sequence, "pep");\r
             as.calcScoreMatrix();\r
             as.traceAlignment();\r
-            PrintStream  ps = new PrintStream(System.out)\r
+            PrintStream ps = new PrintStream(System.out)\r
            {\r
               public void print(String x) {\r
                    mappingDetails.append(x);\r
@@ -186,6 +188,7 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
     Vector visiblebonds;\r
     void setupBonds()\r
     {\r
+      seqColoursReady = false;\r
       // Sort the bonds by z coord\r
       visiblebonds = new Vector();\r
 \r
@@ -202,6 +205,7 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
         }\r
       }\r
       updateSeqColours();\r
+      seqColoursReady = true;\r
       redrawneeded = true;\r
       repaint();\r
     }\r
@@ -360,7 +364,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
         g.drawString("Error loading PDB data!!", 50, getSize().height/2);\r
         return;\r
       }\r
-      else if(visiblebonds==null)\r
+\r
+      if( !seqColoursReady )\r
       {\r
         g.setColor(Color.black);\r
         g.setFont(new Font("Verdana", Font.BOLD, 14));\r
@@ -414,7 +419,13 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
       drawLabels(ig);\r
     }\r
 \r
-\r
+   void setColours(jalview.schemes.ColourSchemeI cs)\r
+   {\r
+     bysequence = false;\r
+     pdb.setColours(cs);\r
+     redrawneeded = true;\r
+     repaint();\r
+   }\r
     public void updateSeqColours()\r
     {\r
       if (pdbAction)\r
@@ -469,6 +480,18 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
     // Applet and Application specific sequence renderers to be used\r
     void colourBySequence(PDBChain chain)\r
     {\r
+      boolean showFeatures = false;\r
+\r
+      if(seqcanvas.getViewport().getShowSequenceFeatures())\r
+        {\r
+          if(fr==null)\r
+          {\r
+            fr = new jalview.appletgui.FeatureRenderer(seqcanvas.getViewport());\r
+          }\r
+          fr.transferSettings( seqcanvas.getFeatureRenderer());\r
+          showFeatures = true;\r
+        }\r
+\r
       for (int i = 0; i < chain.bonds.size(); i++)\r
       {\r
         Bond tmp = (Bond) chain.bonds.elementAt(i);\r
@@ -488,8 +511,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
               tmp.startCol = seqcanvas.getSequenceRenderer().\r
                   getResidueBoxColour( sequence, index);\r
 \r
-          //    tmp.startCol = seqcanvas.getFeatureRenderer().\r
-         //         findFeatureColour(tmp.startCol, sequence, index);\r
+              if(showFeatures)\r
+              tmp.startCol = fr.findFeatureColour(tmp.startCol, sequence, index);\r
             }\r
         }\r
 \r
@@ -499,18 +522,23 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
         {\r
           tmp.endCol = seqcanvas.getSequenceRenderer().\r
               getResidueBoxColour( sequence, index);\r
-        //  tmp.endCol = seqcanvas.getFeatureRenderer().\r
-        //      findFeatureColour(tmp.endCol, sequence, index);\r
+\r
+          if(showFeatures)\r
+          tmp.endCol = fr.findFeatureColour(tmp.endCol, sequence, index);\r
         }\r
       }\r
     }\r
 \r
 \r
+    Zsort zsort;\r
     public void drawScene(Graphics g)\r
     {\r
+        if (zbuffer)\r
+        {\r
+          if(zsort ==null)\r
+            zsort = new Zsort();\r
 \r
-        if (zbuffer) {\r
-            Zsort.Zsort(visiblebonds);\r
+          zsort.Zsort(visiblebonds);\r
         }\r
 \r
 \r
@@ -706,35 +734,24 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
 \r
     void highlightSeqcanvas(int pos)\r
     {\r
-      int index = seqcanvas.getViewport().getAlignment().findIndex(sequence);\r
-\r
-      int size = pos==-1?0:3;\r
-\r
-      if(highlightRes!=null)\r
-        size += highlightRes.size()*3;\r
-\r
-      int [] array = new int[size];\r
-      int i=0;\r
+      SearchResults searchResults = new SearchResults();\r
       if(highlightRes!=null)\r
       {\r
-        for (i = 0; i < highlightRes.size(); i++)\r
+        for (int i = 0; i < highlightRes.size(); i++)\r
         {\r
           int a = Integer.parseInt(highlightRes.elementAt(\r
               i).toString())+1;\r
-          array[i * 3] = index;\r
-          array[ (i * 3) + 1] = a;\r
-          array[ (i * 3) + 2] = a;\r
+\r
+          searchResults.addResult(sequence, a, a);\r
         }\r
       }\r
 \r
       if(pos!=-1)\r
       {\r
-        array[i * 3] = index;\r
-        array[i * 3 + 1] = pos+1;\r
-        array[i * 3 + 2] = pos+1;\r
+        searchResults.addResult(sequence, pos+1, pos+1);\r
       }\r
 \r
-      seqcanvas.highlightSearchResults(array);\r
+      seqcanvas.highlightSearchResults(searchResults);\r
     }\r
 \r
 \r
@@ -925,6 +942,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener, MouseMotion
 \r
     public void highlightRes(int ii)\r
    {\r
+     if(!seqColoursReady)\r
+       return;\r
 \r
      if (highlightRes != null\r
          && highlightRes.contains((ii-1) + ""))\r