copy constructor and ascii type change.
[jalview.git] / src / jalview / gui / AppJMol.java
index 50e2b96..da94e4c 100644 (file)
@@ -56,6 +56,7 @@ public class AppJMol
   String fileLoadingError;
   boolean colourBySequence = true;
   boolean loadingFromArchive = false;
+  Vector atomsPicked = new Vector();
 
   public AppJMol(String file, String id,
                  SequenceI[] seq,
@@ -88,6 +89,21 @@ public class AppJMol
     });
   }
 
+public synchronized void addSequence(SequenceI [] seq)
+   {
+    Vector v = new Vector();
+     for(int i=0; i<sequence.length; i++)
+       v.addElement(sequence[i]);
+
+     for(int i=0; i<seq.length; i++)
+      if(!v.contains(seq[i]))
+          v.addElement(seq[i]);
+
+     SequenceI [] tmp = new SequenceI[v.size()];
+     v.copyInto(tmp);
+     sequence = tmp;
+   }
+
   public AppJMol(PDBEntry pdbentry, SequenceI[] seq, AlignmentPanel ap)
   {
     //////////////////////////////////
@@ -108,8 +124,10 @@ public class AppJMol
       {
         StructureSelectionManager.getStructureSelectionManager()
             .setMapping(seq, alreadyMapped, AppletFormatAdapter.FILE);
-        ap.seqPanel.seqCanvas.fr.featuresAdded();
-        ap.paintAlignment(true);
+        if (ap.seqPanel.seqCanvas.fr!=null) {
+          ap.seqPanel.seqCanvas.fr.featuresAdded();
+          ap.paintAlignment(true);
+        }
         return;
       }
     }
@@ -140,6 +158,7 @@ public class AppJMol
     });
   }
 
+
   void initJmol(String command)
   {
     renderPanel = new RenderPanel();
@@ -176,6 +195,8 @@ public class AppJMol
     jmolpopup = JmolPopup.newJmolPopup(viewer);
 
     viewer.evalStringQuiet(command);
+
+    colourBySequence = true;
   }
 
 
@@ -570,7 +591,7 @@ public class AppJMol
 //End StructureListener
 ////////////////////////////
 
-  FeatureRenderer fr;
+  FeatureRenderer fr=null;
   public void colourBySequence(AlignmentPanel ap)
   {
     if(!colourBySequence)
@@ -585,12 +606,13 @@ public class AppJMol
     SequenceRenderer sr = ap.seqPanel.seqCanvas.getSequenceRenderer();
 
     boolean showFeatures = false;
+
     if (ap.av.showSequenceFeatures)
     {
       showFeatures = true;
       if (fr == null)
       {
-        fr = new jalview.gui.FeatureRenderer(ap.av);
+        fr = new jalview.gui.FeatureRenderer(ap);
       }
 
       fr.transferSettings(ap.seqPanel.seqCanvas.getFeatureRenderer());
@@ -603,7 +625,8 @@ public class AppJMol
     {
       for (int m = 0; m < mapping.length; m++)
       {
-        if (mapping[m].getSequence() == sequence[s])
+        if (mapping[m].getSequence() == sequence[s]
+            && ap.av.alignment.findIndex(sequence[s])>-1)
         {
           for (int r = 0; r < sequence[s].getLength(); r++)
           {
@@ -712,7 +735,6 @@ public class AppJMol
       ssm = StructureSelectionManager.getStructureSelectionManager();
       MCview.PDBfile pdbFile = ssm.setMapping(sequence, pdbentry.getFile(), AppletFormatAdapter.FILE);
       ssm.addStructureViewerListener(this);
-
       Vector chains = new Vector();
       for(int i=0; i<pdbFile.chains.size(); i++)
       {
@@ -729,6 +751,8 @@ public class AppJMol
 
         colourBySequence(ap);
       }
+      if (fr!=null)
+        fr.featuresAdded();
 
       loadingFromArchive = false;
     }
@@ -777,6 +801,34 @@ public class AppJMol
 
   public void notifyAtomPicked(int atomIndex, String strInfo)
   {
+    Matcher matcher = pattern.matcher(strInfo);
+    matcher.find();
+
+    matcher.group(1);
+    String resnum = new String(matcher.group(2));
+    String chainId = matcher.group(3);
+
+    String picked = resnum;
+
+    if (chainId != null)
+      picked+=(":"+chainId.substring(1, chainId.length()));
+
+    picked+=".C";
+
+    if (!atomsPicked.contains(picked))
+    {
+      if(chainId!=null)
+      viewer.evalString("select "+picked+";label %n %r:%c");
+    else
+      viewer.evalString("select "+picked+";label %n %r");
+      atomsPicked.addElement(picked);
+    }
+    else
+    {
+      viewer.evalString("select "+picked+";label off");
+      atomsPicked.removeElement(picked);
+    }
+
     if (scriptWindow != null)
     {
       scriptWindow.sendConsoleMessage(strInfo);