group associated annotation and logos JAL-516 JAL-759
authorjprocter <Jim Procter>
Fri, 4 Feb 2011 11:07:42 +0000 (11:07 +0000)
committerjprocter <Jim Procter>
Fri, 4 Feb 2011 11:07:42 +0000 (11:07 +0000)
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/AlignViewport.java
src/jalview/appletgui/TreeCanvas.java
src/jalview/appletgui/TreePanel.java

index bad7848..2e9b7ea 100755 (executable)
@@ -70,6 +70,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     annotationPanelMenuItem.setState(viewport.showAnnotation);
     displayNonconservedMenuItem.setState(viewport.getShowunconserved());
     followMouseOverFlag.setState(viewport.getFollowHighlight());
+    showGroupConsensus.setState(viewport.showGroupConsensus);
+    showGroupConservation.setState(viewport.showGroupConservation);
+    showConsensusHistogram.setState(viewport.showConsensusHistogram);
+    showSequenceLogo.setState(viewport.showSequenceLogo);
 
     seqLimits.setState(viewport.showJVSuffix);
 
@@ -597,7 +601,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     {
       mouseOverFlag_stateChanged();
     }
-
+    else if (evt.getSource() == showGroupConsensus)
+    {
+      showGroupConsensus_actionPerformed();
+    }
+    else if (evt.getSource() == showGroupConservation)
+    {
+      showGroupConservation_actionPerformed();
+    }
+    else if (evt.getSource() == showSequenceLogo)
+    {
+      showSequenceLogo_actionPerformed();
+    }
+    else if (evt.getSource() == showConsensusHistogram)
+    {
+      showConsensusHistogram_actionPerformed();
+    }
+    else if (evt.getSource() == applyAutoAnnotationSettings)
+    {
+      applyAutoAnnotationSettings_actionPerformed();
+    }
     alignPanel.paintAlignment(true);
   }
 
@@ -787,6 +810,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       viewport.showAllHiddenSeqs();
       alignPanel.paintAlignment(true);
     }
+    else if (source == showGroupConsensus)
+    {
+      showGroupConsensus_actionPerformed();
+    }
+    else if (source == showGroupConservation)
+    {
+      showGroupConservation_actionPerformed();
+    }
+    else if (source == showSequenceLogo)
+    {
+      showSequenceLogo_actionPerformed();
+    }
+    else if (source == showConsensusHistogram)
+    {
+      showConsensusHistogram_actionPerformed();
+    }
+    else if (source == applyAutoAnnotationSettings)
+    {
+      applyAutoAnnotationSettings_actionPerformed();
+    }
     else if (source == featureSettings)
     {
       new FeatureSettings(alignPanel);
@@ -1641,6 +1684,56 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     viewport.sendSelection();
   }
 
+  /**
+   * group consensus toggled
+   * 
+   */
+  protected void showGroupConsensus_actionPerformed()
+  {
+    viewport.setShowGroupConsensus(showGroupConsensus.getState());
+    alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
+
+  }
+
+  /**
+   * group conservation toggled.
+   */
+  protected void showGroupConservation_actionPerformed()
+  {
+    viewport.setShowGroupConservation(showGroupConservation.getState());
+    alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see
+   * jalview.jbgui.GAlignFrame#showConsensusHistogram_actionPerformed(java.awt
+   * .event.ActionEvent)
+   */
+  protected void showConsensusHistogram_actionPerformed()
+  {
+    viewport.setShowConsensusHistogram(showConsensusHistogram.getState());
+    alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
+  }
+  /*
+   * (non-Javadoc)
+   * 
+   * @see
+   * jalview.jbgui.GAlignFrame#showConsensusProfile_actionPerformed(java.awt
+   * .event.ActionEvent)
+   */
+  protected void showSequenceLogo_actionPerformed()
+  {
+    viewport.setShowSequenceLogo(showSequenceLogo.getState());
+    alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
+  }
+
+  protected void applyAutoAnnotationSettings_actionPerformed()
+  {
+    alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState());
+  }
+
   protected void makeGrpsFromSelection_actionPerformed()
   {
     if (viewport.getSelectionGroup() != null)
@@ -1668,7 +1761,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
           ;
       }
       PaintRefresher.Refresh(this, viewport.getSequenceSetId());
-      // alignPanel.updateAnnotation();
+      alignPanel.updateAnnotation();
       alignPanel.paintAlignment(true);
     }
   }
@@ -2371,7 +2464,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
             || (viewport.getSelectionGroup() == null && viewport.alignment
                     .getHeight() > 1))
     {
-      final TreePanel tp = new TreePanel(viewport, type, pwType);
+      final TreePanel tp = new TreePanel(alignPanel, type, pwType);
 
       addTreeMenuItem(tp, title);
 
@@ -2391,7 +2484,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
   public void loadTree(jalview.io.NewickFile tree, String treeFile)
   {
-    TreePanel tp = new TreePanel(viewport, treeFile, "From File - ", tree);
+    TreePanel tp = new TreePanel(alignPanel, treeFile, "From File - ", tree);
     jalview.bin.JalviewLite.addFrame(tp, treeFile, 600, 500);
     addTreeMenuItem(tp, treeFile);
   }
@@ -2756,8 +2849,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
   CheckboxMenuItem seqLimits = new CheckboxMenuItem();
 
   CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem();
-
+  
   CheckboxMenuItem followMouseOverFlag = new CheckboxMenuItem();
+  Menu autoAnnMenu=new Menu();
+  CheckboxMenuItem showSequenceLogo= new CheckboxMenuItem();
+  CheckboxMenuItem applyAutoAnnotationSettings = new CheckboxMenuItem();
+  CheckboxMenuItem showConsensusHistogram = new CheckboxMenuItem();
+  CheckboxMenuItem showGroupConsensus = new CheckboxMenuItem();
+  CheckboxMenuItem showGroupConservation = new CheckboxMenuItem();
 
   private void jbInit() throws Exception
   {
@@ -2961,6 +3060,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     hideAllButSelection.setLabel("All but Selected Region (Shift+Ctrl+H)");
     hideAllSelection.setLabel("Selected Region");
     showAllHidden.setLabel("All Sequences and Columns");
+    showGroupConsensus.setLabel("Group Consensus");
+    showGroupConservation.setLabel("Group Conservation");
+    showConsensusHistogram.setLabel("Show Consensus Histogram");
+    showSequenceLogo.setLabel("Show Consensus Logo");
+    applyAutoAnnotationSettings.setLabel("Apply to all groups");
+    applyAutoAnnotationSettings.setState(true);
+    autoAnnMenu.setLabel("Autocalculated Annotation");
+    
     invertColSel.addActionListener(this);
     showColumns.addActionListener(this);
     showSeqs.addActionListener(this);
@@ -2969,6 +3076,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     hideAllButSelection.addActionListener(this);
     hideAllSelection.addActionListener(this);
     showAllHidden.addActionListener(this);
+    showGroupConsensus.addItemListener(this);
+    showGroupConservation.addItemListener(this);
+    showConsensusHistogram.addItemListener(this);
+    showSequenceLogo.addItemListener(this);
+    applyAutoAnnotationSettings.addItemListener(this);
     formatMenu.setLabel("Format");
     selectMenu.setLabel("Select");
     newView.setLabel("New View");
@@ -3018,6 +3130,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     viewMenu.addSeparator();
     viewMenu.add(followMouseOverFlag);
     viewMenu.add(annotationPanelMenuItem);
+    autoAnnMenu.add(applyAutoAnnotationSettings);
+    autoAnnMenu.add(showConsensusHistogram);
+    autoAnnMenu.add(showSequenceLogo);
+    autoAnnMenu.addSeparator();
+    autoAnnMenu.add(showGroupConservation);
+    autoAnnMenu.add(showGroupConsensus);
+    viewMenu.add(autoAnnMenu);
     viewMenu.addSeparator();
     viewMenu.add(sequenceFeatures);
     viewMenu.add(featureSettings);
index 0dc60d1..87566c6 100755 (executable)
@@ -263,6 +263,19 @@ public class AlignViewport implements SelectionSource, VamsasSource
         followHighlight = Boolean.valueOf(param).booleanValue();
         followSelection = followHighlight;
       }
+      if ((param=applet.getParameter("showSequenceLogo"))!=null) {
+        showSequenceLogo=Boolean.valueOf(param).booleanValue();
+      }
+      if ((param=applet.getParameter("showGroupConsensus"))!=null) {
+        showGroupConsensus=Boolean.valueOf(param).booleanValue();
+      }
+      if ((param=applet.getParameter("showGroupConservation"))!=null) {
+        showGroupConservation=Boolean.valueOf(param).booleanValue();
+      }
+      if ((param=applet.getParameter("showConsensusHistogram"))!=null) {
+        showConsensusHistogram=Boolean.valueOf(param).booleanValue();
+      }
+      
     }
 
     if (applet != null)
@@ -571,10 +584,11 @@ public class AlignViewport implements SelectionSource, VamsasSource
         AAFrequency.calculate(alignment.getSequencesArray(), 0,
                 alignment.getWidth(), hconsensus, true); // always calculate the
                                                          // full profile
-        AAFrequency.completeConsensus(consensus, hconsensus, 0, aWidth,
-                ignoreGapsInConsensusCalculation,
-                includeAllConsensusSymbols);
-
+        updateAnnotation(true);
+        //AAFrequency.completeConsensus(consensus, hconsensus, 0, aWidth,
+        //        ignoreGapsInConsensusCalculation,
+        //        true);
+        
         if (globalColourScheme != null)
         {
           globalColourScheme.setConsensus(hconsensus);
@@ -597,6 +611,28 @@ public class AlignViewport implements SelectionSource, VamsasSource
         ap.paintAlignment(true);
       }
     }
+
+    /**
+     * update the consensus annotation from the sequence profile data using
+     * current visualization settings.
+     */
+    public void updateAnnotation()
+    {
+      updateAnnotation(false);
+    }
+
+    protected void updateAnnotation(boolean immediate)
+    {
+      // TODO: make calls thread-safe, so if another thread calls this method,
+      // it will either return or wait until one calculation is finished.
+      if (immediate
+              || (!updatingConsensus && consensus != null && hconsensus != null))
+      {
+        AAFrequency.completeConsensus(consensus, hconsensus, 0,
+                hconsensus.length, ignoreGapsInConsensusCalculation,
+                showSequenceLogo);
+      }
+    }
   }
 
   /**
@@ -609,6 +645,10 @@ public class AlignViewport implements SelectionSource, VamsasSource
   {
     if (consensus == null)
     {
+      updateConsensus(null);
+    }
+    if (consensus == null)
+    {
       return null;
     }
     StringBuffer seqs = new StringBuffer();
@@ -1574,6 +1614,16 @@ public class AlignViewport implements SelectionSource, VamsasSource
     }
     return false;
   }
+  public void sendSelection()
+  {
+    jalview.structure.StructureSelectionManager
+            .getStructureSelectionManager().sendSelection(
+                    new SequenceGroup(getSelectionGroup()),
+                    new ColumnSelection(getColumnSelection()), this);
+  }
+
+
+
 
   /**
    * show non-conserved residues only
@@ -1603,27 +1653,17 @@ public class AlignViewport implements SelectionSource, VamsasSource
   }
 
   /**
-   * consensus annotation includes all percentage for all symbols in column
-   * DISABLED FOR 2.5 RELEASE (bug #60064 logo rendering is not AWT 1.1
-   * compatible)
-   */
-  private boolean includeAllConsensusSymbols = false;
-
-  /**
-   * should conservation rows be shown for groups DISABLED FOR 2.5 RELEASE (bug
-   * 62446)
+   * should conservation rows be shown for groups
    */
   boolean showGroupConservation = false;
 
   /**
-   * should consensus rows be shown for groups DISABLED FOR 2.5 RELEASE (bug
-   * 62446)
+   * should consensus rows be shown for groups
    */
   boolean showGroupConsensus = false;
 
   /**
-   * should consensus profile be rendered by default DISABLED FOR 2.5 RELEASE
-   * (bug #60064 logo rendering is not AWT 1.1 compatible)
+   * should consensus profile be rendered by default
    */
   public boolean showSequenceLogo = false;
 
@@ -1642,24 +1682,64 @@ public class AlignViewport implements SelectionSource, VamsasSource
 
   /**
    * @param showSequenceLogo
-   *          the new value public void setShowSequenceLogo(boolean
-   *          showSequenceLogo) { this.showSequenceLogo = showSequenceLogo; }
+   *          the new value
    */
+  public void setShowSequenceLogo(boolean showSequenceLogo)
+  {
+    if (showSequenceLogo != this.showSequenceLogo)
+    {
+      // TODO: decouple settings setting from calculation when refactoring
+      // annotation update method from alignframe to viewport
+      this.showSequenceLogo = showSequenceLogo;
+      if (consensusThread != null)
+      {
+        consensusThread.updateAnnotation();
+      }
+    }
+    this.showSequenceLogo = showSequenceLogo;
+  }
+
   /**
-   * @param showGroupConsensus
-   *          the showGroupConsensus to set
+   * @param showConsensusHistogram
+   *          the showConsensusHistogram to set
    */
-  public void setShowGroupConsensus(boolean showGroupConsensus)
+  public void setShowConsensusHistogram(boolean showConsensusHistogram)
   {
-    this.showGroupConsensus = showGroupConsensus;
+    this.showConsensusHistogram = showConsensusHistogram;
   }
 
   /**
-   * @return the includeAllConsensusSymbols
+   * @return the showGroupConservation
    */
-  public boolean isIncludeAllConsensusSymbols()
+  public boolean isShowGroupConservation()
   {
-    return false;
+    return showGroupConservation;
+  }
+
+  /**
+   * @param showGroupConservation
+   *          the showGroupConservation to set
+   */
+  public void setShowGroupConservation(boolean showGroupConservation)
+  {
+    this.showGroupConservation = showGroupConservation;
+  }
+
+  /**
+   * @return the showGroupConsensus
+   */
+  public boolean isShowGroupConsensus()
+  {
+    return showGroupConsensus;
+  }
+
+  /**
+   * @param showGroupConsensus
+   *          the showGroupConsensus to set
+   */
+  public void setShowGroupConsensus(boolean showGroupConsensus)
+  {
+    this.showGroupConsensus = showGroupConsensus;
   }
 
   /**
@@ -1704,13 +1784,4 @@ public class AlignViewport implements SelectionSource, VamsasSource
       }
     }
   }
-  public void sendSelection()
-  {
-    jalview.structure.StructureSelectionManager
-            .getStructureSelectionManager().sendSelection(
-                    new SequenceGroup(getSelectionGroup()),
-                    new ColumnSelection(getColumnSelection()), this);
-  }
-
-
 }
index 4a38767..a9a4bfe 100755 (executable)
@@ -64,9 +64,11 @@ public class TreeCanvas extends Panel implements MouseListener,
 
   SequenceNode highlightNode;
 
-  public TreeCanvas(AlignViewport av, ScrollPane scroller)
+  AlignmentPanel ap; 
+  public TreeCanvas(AlignmentPanel ap, ScrollPane scroller)
   {
-    this.av = av;
+    this.ap = ap;
+    this.av = ap.av;
     font = av.getFont();
     scrollPane = scroller;
     addMouseListener(this);
@@ -649,7 +651,8 @@ public class TreeCanvas extends Panel implements MouseListener,
       av.alignment.addGroup(sg);
 
     }
-
+    ap.updateAnnotation();
+    
   }
 
   public void setShowDistances(boolean state)
index 268fece..d424367 100755 (executable)
@@ -41,6 +41,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener,
   TreeCanvas treeCanvas;
 
   NJTree tree;
+  AlignmentPanel ap;
 
   AlignViewport av;
 
@@ -65,7 +66,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener,
    * @param e
    *          DOCUMENT ME!
    */
-  public TreePanel(AlignViewport av, String type, String pwtype)
+  public TreePanel(AlignmentPanel ap, String type, String pwtype)
   {
     try
     {
@@ -76,7 +77,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener,
       ex.printStackTrace();
     }
 
-    initTreePanel(av, type, pwtype, null);
+    initTreePanel(ap, type, pwtype, null);
   }
 
   /**
@@ -93,7 +94,7 @@ public class TreePanel extends EmbmenuFrame implements ActionListener,
    * @param pwtype
    *          DOCUMENT ME!
    */
-  public TreePanel(AlignViewport av, String type, String pwtype,
+  public TreePanel(AlignmentPanel ap, String type, String pwtype,
           NewickFile newtree)
   {
     try
@@ -105,18 +106,19 @@ public class TreePanel extends EmbmenuFrame implements ActionListener,
       e.printStackTrace();
     }
 
-    initTreePanel(av, type, pwtype, newtree);
+    initTreePanel(ap, type, pwtype, newtree);
   }
 
-  void initTreePanel(AlignViewport av, String type, String pwtype,
+  void initTreePanel(AlignmentPanel ap, String type, String pwtype,
           NewickFile newTree)
   {
 
-    this.av = av;
+    this.ap = ap;
+    this.av = ap.av;
     this.type = type;
     this.pwtype = pwtype;
 
-    treeCanvas = new TreeCanvas(av, scrollPane);
+    treeCanvas = new TreeCanvas(ap, scrollPane);
     TreeLoader tl = new TreeLoader(newTree);
     tl.start();
     embedMenuIfNeeded(treeCanvas);