FeatureRenderer takes alignmentPanel
authoramwaterhouse <Andrew Waterhouse>
Fri, 13 Apr 2007 15:52:18 +0000 (15:52 +0000)
committeramwaterhouse <Andrew Waterhouse>
Fri, 13 Apr 2007 15:52:18 +0000 (15:52 +0000)
src/jalview/gui/AlignFrame.java
src/jalview/gui/AppJMol.java
src/jalview/gui/FeatureRenderer.java
src/jalview/gui/FeatureSettings.java
src/jalview/gui/Finder.java
src/jalview/gui/OverviewPanel.java
src/jalview/gui/PopupMenu.java
src/jalview/gui/SeqCanvas.java
src/jalview/gui/SeqPanel.java
src/jalview/io/HTMLOutput.java

index 8ece83f..1396c93 100755 (executable)
@@ -853,7 +853,7 @@ public class AlignFrame
    */
   protected void htmlMenuItem_actionPerformed(ActionEvent e)
   {
-    new HTMLOutput(viewport,
+    new HTMLOutput(alignPanel,
                    alignPanel.seqPanel.seqCanvas.getSequenceRenderer(),
         alignPanel.seqPanel.seqCanvas.getFeatureRenderer());
   }
index 14acb14..da94e4c 100644 (file)
@@ -195,6 +195,8 @@ public synchronized void addSequence(SequenceI [] seq)
     jmolpopup = JmolPopup.newJmolPopup(viewer);
 
     viewer.evalStringQuiet(command);
+
+    colourBySequence = true;
   }
 
 
@@ -604,12 +606,13 @@ public synchronized void addSequence(SequenceI [] seq)
     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());
@@ -622,7 +625,8 @@ public synchronized void addSequence(SequenceI [] seq)
     {
       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++)
           {
index 596203b..04324ac 100755 (executable)
@@ -38,6 +38,7 @@ import jalview.datamodel.*;
  */
 public class FeatureRenderer
 {
+  AlignmentPanel ap;
   AlignViewport av;
   Color resBoxColour;
   float transparency = 1.0f;
@@ -65,18 +66,20 @@ public class FeatureRenderer
    * @param av
    *          DOCUMENT ME!
    */
-  public FeatureRenderer(AlignViewport av)
+  public FeatureRenderer(AlignmentPanel ap)
   {
-    this.av = av;
+    this.ap = ap;
+    this.av = ap.av;
   }
 
+
   public void transferSettings(FeatureRenderer fr)
   {
-    renderOrder = fr.renderOrder;
-    featureGroups = fr.featureGroups;
-    featureColours = fr.featureColours;
-    transparency = fr.transparency;
-    featureOrder = fr.featureOrder;
+    this.renderOrder = fr.renderOrder;
+    this.featureGroups = fr.featureGroups;
+    this.featureColours = fr.featureColours;
+    this.transparency = fr.transparency;
+    this.featureOrder = fr.featureOrder;
   }
 
   BufferedImage offscreenImage;
@@ -268,7 +271,7 @@ public class FeatureRenderer
 
         if (featureGroups != null
             && sequenceFeatures[sfindex].featureGroup != null
-            && 
+            &&
             sequenceFeatures[sfindex].featureGroup.length()!=0
             && featureGroups.containsKey(sequenceFeatures[sfindex].featureGroup)
             &&
@@ -456,6 +459,21 @@ public class FeatureRenderer
       {
         if (!av.featuresDisplayed.containsKey(features[index].getType()))
         {
+          if(featureGroups.containsKey(features[index].getType()))
+          {
+            boolean visible = ( (Boolean) featureGroups.get(
+                features[index].featureGroup)).booleanValue();
+
+            if(!visible)
+            {
+              System.out.println(features[index].featureGroup
+                                 +" not visible");
+              index++;
+              continue;
+            }
+          }
+
+
           if (! (features[index].begin == 0 && features[index].end == 0))
           {
             // If beginning and end are 0, the feature is for the whole sequence
@@ -553,7 +571,7 @@ public class FeatureRenderer
   }
   public Color getColour(String featureType)
   {
-    if (featureColours.get(featureType) == null)
+    if (!featureColours.containsKey(featureType))
     {
       jalview.schemes.UserColourScheme ucs = new
           jalview.schemes.UserColourScheme();
@@ -569,19 +587,12 @@ public class FeatureRenderer
   static String lastFeatureGroupAdded;
   static String lastDescriptionAdded;
 
-  public boolean createNewFeatures(SequenceI[] sequences,
-                                   SequenceFeature[] features)
-  {
-    return amendFeatures(sequences, features, true, null);
-  }
-
   int featureIndex = 0;
   boolean amendFeatures(final SequenceI[] sequences,
                         final SequenceFeature[] features,
                         boolean newFeatures,
                         final AlignmentPanel ap)
   {
-    findAllFeatures();
 
     featureIndex = 0;
 
@@ -602,10 +613,12 @@ public class FeatureRenderer
     {
       public void mousePressed(MouseEvent evt)
       {
-        colour.setBackground(
-            JColorChooser.showDialog(Desktop.desktop,
-                                     "Select Feature Colour",
-                                     colour.getBackground()));
+        Color col = JColorChooser.showDialog(Desktop.desktop,
+                                             "Select Feature Colour",
+                                             colour.getBackground());
+        if (col != null)
+          colour.setBackground(col);
+
       }
     });
 
@@ -804,7 +817,11 @@ public class FeatureRenderer
         sf.type = lastFeatureAdded;
         sf.featureGroup = lastFeatureGroupAdded;
         sf.description = lastDescriptionAdded;
+
         setColour(sf.type, colour.getBackground());
+        av.featuresDisplayed.put(sf.type,
+                                 new Integer(colour.getBackground().getRGB()));
+
         try
         {
           sf.begin = ( (Integer) start.getValue()).intValue();
@@ -816,16 +833,16 @@ public class FeatureRenderer
         ffile.parseDescriptionHTML(sf, false);
       }
     }
-    else
+    else //NEW FEATURES ADDED
     {
       if (reply == JOptionPane.OK_OPTION
-          && name.getText() != null
-          && source.getText() != null)
+          && lastFeatureAdded.length()>0)
       {
         for (int i = 0; i < sequences.length; i++)
         {
           features[i].type = lastFeatureAdded;
-          features[i].featureGroup = lastFeatureGroupAdded;
+          if (lastFeatureGroupAdded!=null)
+            features[i].featureGroup = lastFeatureGroupAdded;
           features[i].description = lastDescriptionAdded;
           sequences[i].addSequenceFeature(features[i]);
           ffile.parseDescriptionHTML(features[i], false);
@@ -836,22 +853,22 @@ public class FeatureRenderer
           av.featuresDisplayed = new Hashtable();
         }
 
-        if (featureGroups == null)
+        if (lastFeatureGroupAdded != null)
         {
-          featureGroups = new Hashtable();
+          if (featureGroups == null)
+            featureGroups = new Hashtable();
+          featureGroups.put(lastFeatureGroupAdded, new Boolean(true));
         }
 
-
         Color col = colour.getBackground();
         setColour(lastFeatureAdded, colour.getBackground());
-
-        if(lastFeatureGroupAdded!=null)
-        {
-          featureGroups.put(lastFeatureGroupAdded, new Boolean(true));
-          av.featuresDisplayed.put(lastFeatureGroupAdded,
+        av.featuresDisplayed.put(lastFeatureAdded,
                                    new Integer(col.getRGB()));
-        }
-        findAllFeatures();
+
+        findAllFeatures(false);
+
+        ap.paintAlignment(true);
+
 
         return true;
       }
@@ -861,7 +878,7 @@ public class FeatureRenderer
       }
     }
 
-    findAllFeatures();
+    ap.paintAlignment(true);
 
     return true;
   }
index 4c0450c..96e82c1 100755 (executable)
@@ -136,9 +136,9 @@ public class FeatureSettings
           fs.handlingUpdate=false;
         }
       }
-      
+
     });
-    
+
     frame = new JInternalFrame();
     frame.setContentPane(this);
     Desktop.addInternalFrame(frame, "Sequence Feature Settings", 400, 450);
@@ -157,7 +157,7 @@ public class FeatureSettings
    * true when Feature Settings are updating from feature renderer
    */
   private boolean handlingUpdate=false;
-  
+
   /**
    * contains a float[3] for each feature type string. created by setTableData
    */
@@ -212,13 +212,13 @@ public class FeatureSettings
         index++;
       }
     }
-    
+
     resetTable(null);
 
     validate();
   }
   /**
-   * 
+   *
    * @param group
    * @return true if group has been seen before and is already added to set.
    */
@@ -228,7 +228,7 @@ public class FeatureSettings
     {
       visible = ( (Boolean) fr.featureGroups.get(group)).booleanValue();
         } else {
-        visible=true; // new group is always made visible 
+        visible=true; // new group is always made visible
       }
 
       if (groupPanel == null)
@@ -250,7 +250,7 @@ public class FeatureSettings
 
       if (alreadyAdded)
       {
-        
+
         return true;
       }
 
@@ -564,16 +564,16 @@ public class FeatureSettings
     boolean sort=false;
     for (int i=0;i<width.length; i++) {
       //awidth = (float[]) typeWidth.get(data[i][0]);
-      if (width[i]==0) 
+      if (width[i]==0)
       {
         width[i] = fr.getOrder(data[i][0].toString());
         if (width[i]<0)
         {
           width[i] = fr.setOrder(data[i][0].toString(), i/data.length);
         }
-      } else { 
+      } else {
         width[i] /=max; // normalize
-        fr.setOrder(data[i][0].toString(), width[i]); // store for later 
+        fr.setOrder(data[i][0].toString(), width[i]); // store for later
       }
       if (i>0)
         sort = sort || width[i-1]>width[i];
@@ -581,7 +581,7 @@ public class FeatureSettings
     if (sort)
       jalview.util.QuickSort.sort(width, data);
     // update global priority order
-    
+
     updateFeatureRenderer(data,false);
     table.repaint();
   }
@@ -604,11 +604,6 @@ public class FeatureSettings
   {
     fr.setFeaturePriority(data, visibleNew);
     af.alignPanel.paintAlignment(true);
-
-    if (af.alignPanel.overviewPanel != null)
-    {
-      af.alignPanel.overviewPanel.updateOverviewImage();
-    }
   }
 
   int selectedRow = -1;
index 5366b37..5668b42 100755 (executable)
@@ -124,7 +124,7 @@ public class Finder
     }
 
     if (ap.seqPanel.seqCanvas.getFeatureRenderer()
-        .createNewFeatures(seqs, features))
+        .amendFeatures(seqs, features, true, ap))
     {
       ap.alignFrame.showSeqFeatures.setSelected(true);
       av.setShowSequenceFeatures(true);
index aa3c9ae..04e5f13 100755 (executable)
@@ -65,7 +65,7 @@ public class OverviewPanel
     sr = new SequenceRenderer(av);\r
     sr.renderGaps = false;\r
     sr.forOverview = true;\r
-    fr = new FeatureRenderer(av);\r
+    fr = new FeatureRenderer(ap);\r
 \r
     // scale the initial size of overviewpanel to shape of alignment\r
     float initialScale = (float) av.alignment.getWidth() /\r
@@ -429,7 +429,12 @@ public class OverviewPanel
    */\r
   public void paintComponent(Graphics g)\r
   {\r
-    if (miniMe != null && !resizing)\r
+    if(resizing)\r
+    {\r
+      g.setColor(Color.white);\r
+      g.fillRect(0,0,getWidth(),getHeight());\r
+    }\r
+    else if (miniMe != null)\r
     {\r
       g.drawImage(miniMe, 0, 0, this);\r
     }\r
index 09e2c01..45bf5ed 100755 (executable)
@@ -1344,7 +1344,7 @@ public class PopupMenu
     }\r
 \r
     if (ap.seqPanel.seqCanvas.getFeatureRenderer()\r
-        .createNewFeatures(seqs, features))\r
+        .amendFeatures(seqs, features, true, ap))\r
     {\r
       ap.alignFrame.showSeqFeatures.setSelected(true);\r
       ap.av.setShowSequenceFeatures(true);\r
index ec55600..eedb3eb 100755 (executable)
@@ -53,10 +53,10 @@ public class SeqCanvas
    *\r
    * @param av DOCUMENT ME!\r
    */\r
-  public SeqCanvas(AlignViewport av)\r
+  public SeqCanvas(AlignmentPanel ap)\r
   {\r
-    this.av = av;\r
-    fr = new FeatureRenderer(av);\r
+    this.av = ap.av;\r
+    fr = new FeatureRenderer(ap);\r
     sr = new SequenceRenderer(av);\r
     setLayout(new BorderLayout());\r
     PaintRefresher.Register(this, av.getSequenceSetId());\r
@@ -73,10 +73,6 @@ public class SeqCanvas
     return fr;\r
   }\r
 \r
-  public AlignViewport getViewport()\r
-  {\r
-    return av;\r
-  }\r
 \r
   /**\r
    * DOCUMENT ME!\r
index a5ffb80..774d6ad 100755 (executable)
@@ -86,20 +86,20 @@ public class SeqPanel
    * @param avp DOCUMENT ME!\r
    * @param p DOCUMENT ME!\r
    */\r
-  public SeqPanel(AlignViewport avp, AlignmentPanel p)\r
+  public SeqPanel(AlignViewport av, AlignmentPanel ap)\r
   {\r
     linkImageURL = getClass().getResource("/images/link.gif");\r
     ToolTipManager.sharedInstance().registerComponent(this);\r
     ToolTipManager.sharedInstance().setInitialDelay(0);\r
     ToolTipManager.sharedInstance().setDismissDelay(10000);\r
-    this.av = avp;\r
+    this.av = av;\r
     setBackground(Color.white);\r
 \r
-    seqCanvas = new SeqCanvas(avp);\r
+    seqCanvas = new SeqCanvas(ap);\r
     setLayout(new BorderLayout());\r
     add(seqCanvas, BorderLayout.CENTER);\r
 \r
-    ap = p;\r
+    this.ap = ap;\r
 \r
     if (!av.isDataset())\r
     {\r
@@ -204,6 +204,7 @@ public class SeqPanel
           continue;\r
         }\r
 \r
+\r
         if ( (features[i].getBegin() <= res) &&\r
             (features[i].getEnd() >= res))\r
         {\r
@@ -226,6 +227,7 @@ public class SeqPanel
       ap.alignFrame.addHistoryItem(editCommand);\r
       av.firePropertyChange("alignment", null,\r
                             av.getAlignment().getSequences());\r
+      ap.paintAlignment(true);\r
     }\r
 \r
     startseq = -1;\r
@@ -509,8 +511,6 @@ public class SeqPanel
     }\r
 \r
     endEditing();\r
-\r
-    ap.paintAlignment(true);\r
   }\r
 \r
   /**\r
@@ -1568,13 +1568,14 @@ public class SeqPanel
         SliderPanel.setPIDSliderSource(ap, stretchGroup.cs,\r
                                        stretchGroup.getName());\r
       }\r
+      PaintRefresher.Refresh(this, av.getSequenceSetId());\r
+      ap.paintAlignment(true);\r
     }\r
+\r
     changeEndRes = false;\r
     changeStartRes = false;\r
     stretchGroup = null;\r
 \r
-    PaintRefresher.Refresh(this, av.getSequenceSetId());\r
-    ap.paintAlignment(true);\r
   }\r
 \r
   /**\r
index 6c2c51e..8406f3d 100755 (executable)
@@ -32,12 +32,12 @@ public class HTMLOutput
   FeatureRenderer fr;\r
   Color color;\r
 \r
-  public HTMLOutput(AlignViewport av, SequenceRenderer sr, FeatureRenderer fr1)\r
+  public HTMLOutput(AlignmentPanel ap, SequenceRenderer sr, FeatureRenderer fr1)\r
   {\r
-    this.av = av;\r
+    this.av = ap.av;\r
     this.sr = sr;\r
 \r
-    fr = new FeatureRenderer(av);\r
+    fr = new FeatureRenderer(ap);\r
     fr.transferSettings(fr1);\r
 \r
     JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.\r