X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=468791388fdf7d31f31561e7d755edc4923dd849;hb=94379c810f9115b8564ee7bac46ed119218d5fd2;hp=8ca9085e01b86a9bd4308bfbd79c79102cc3054f;hpb=775f6ea659bce2510739e5a5f8bd3f156662d6df;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 8ca9085..4687913 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -77,24 +77,13 @@ import jalview.io.JnetAnnotationMaker; import jalview.io.NewickFile; import jalview.io.TCoffeeScoreFile; import jalview.jbgui.GAlignFrame; -import jalview.schemes.Blosum62ColourScheme; -import jalview.schemes.BuriedColourScheme; -import jalview.schemes.ClustalxColourScheme; import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemeProperty; -import jalview.schemes.HelixColourScheme; -import jalview.schemes.HydrophobicColourScheme; -import jalview.schemes.NucleotideColourScheme; -import jalview.schemes.PIDColourScheme; -import jalview.schemes.PurinePyrimidineColourScheme; -import jalview.schemes.RNAHelicesColourChooser; +import jalview.schemes.ColourSchemes; +import jalview.schemes.ResidueColourScheme; import jalview.schemes.ResidueProperties; -import jalview.schemes.StrandColourScheme; import jalview.schemes.TCoffeeColourScheme; -import jalview.schemes.TaylorColourScheme; -import jalview.schemes.TurnColourScheme; import jalview.schemes.UserColourScheme; -import jalview.schemes.ZappoColourScheme; import jalview.util.MessageManager; import jalview.viewmodel.AlignmentViewport; import jalview.ws.DBRefFetcher; @@ -140,6 +129,7 @@ import java.util.Hashtable; import java.util.List; import java.util.Vector; +import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JEditorPane; import javax.swing.JInternalFrame; @@ -346,7 +336,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, alignPanel); if (viewport.getAlignmentConservationAnnotation() == null) { - BLOSUM62Colour.setEnabled(false); + // BLOSUM62Colour.setEnabled(false); conservationMenuItem.setEnabled(false); modifyConservation.setEnabled(false); // PIDColour.setEnabled(false); @@ -366,19 +356,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, sortPairwiseMenuItem_actionPerformed(null); } - if (Desktop.desktop != null) - { - this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); - addServiceListeners(); - setGUINucleotide(viewport.getAlignment().isNucleotide()); - } - this.alignPanel.av .setShowAutocalculatedAbove(isShowAutoCalculatedAbove()); setMenusFromViewport(viewport); buildSortByAnnotationScoresMenu(); buildTreeMenu(); + buildColourMenu(); + + if (Desktop.desktop != null) + { + this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); + addServiceListeners(); + setGUINucleotide(); + } if (viewport.getWrapAlignment()) { @@ -845,25 +836,49 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Configure menu items that vary according to whether the alignment is * nucleotide or protein - * - * @param nucleotide */ - public void setGUINucleotide(boolean nucleotide) + public void setGUINucleotide() { + boolean nucleotide = viewport.getAlignment().isNucleotide(); + showTranslation.setVisible(nucleotide); showReverse.setVisible(nucleotide); showReverseComplement.setVisible(nucleotide); conservationMenuItem.setEnabled(!nucleotide); modifyConservation.setEnabled(!nucleotide); showGroupConservation.setEnabled(!nucleotide); - rnahelicesColour.setEnabled(nucleotide); - purinePyrimidineColour.setEnabled(nucleotide); + + AlignmentI al = getViewport().getAlignment(); + + /* + * enable / disable colour schemes by querying whether they + * are applicable to the alignment data (for example, peptide or + * nucleotide specific, or require certain annotation present) + */ + for (Component menuItem : colourMenu.getMenuComponents()) + { + if (menuItem instanceof JRadioButtonMenuItem) + { + String colourName = ((JRadioButtonMenuItem) menuItem).getName(); + ColourSchemeI cs = ColourSchemes.getInstance().getColourScheme( + colourName, viewport); + if (cs != null) + { + ((JRadioButtonMenuItem) menuItem).setEnabled(cs + .isApplicableTo(al)); + } + } + } + showComplementMenuItem.setText(nucleotide ? MessageManager .getString("label.protein") : MessageManager .getString("label.nucleotide")); - setColourSelected(jalview.bin.Cache.getDefault( + + String selectedColourScheme = Cache.getDefault( nucleotide ? Preferences.DEFAULT_COLOUR_NUC - : Preferences.DEFAULT_COLOUR_PROT, "None")); + : Preferences.DEFAULT_COLOUR_PROT, + ResidueColourScheme.NONE); + setColourSelected(selectedColourScheme); } /** @@ -926,9 +941,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, autoCalculate.setSelected(av.autoCalculateConsensus); sortByTree.setSelected(av.sortByTree); listenToViewSelections.setSelected(av.followSelection); - rnahelicesColour.setEnabled(av.getAlignment().hasRNAStructure()); - rnahelicesColour - .setSelected(av.getGlobalColourScheme() instanceof jalview.schemes.RNAHelicesColour); showProducts.setEnabled(canShowProducts()); setGroovyEnabled(Desktop.getGroovyConsole() != null); @@ -1112,11 +1124,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void saveAs_actionPerformed(ActionEvent e) { + String format = currentFileFormat == null ? null : currentFileFormat + .toString(); JalviewFileChooser chooser = JalviewFileChooser.forWrite( - Cache.getProperty("LAST_DIRECTORY"), - // AppletFormatAdapter.WRITABLE_EXTENSIONS, - // AppletFormatAdapter.WRITABLE_FNAMES, - currentFileFormat.toString(), false); + Cache.getProperty("LAST_DIRECTORY"), format); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager @@ -3299,7 +3310,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } @Override - public void textColour_actionPerformed(ActionEvent e) + public void textColour_actionPerformed() { new TextColourChooser().chooseColour(alignPanel, null); } @@ -3311,134 +3322,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! */ @Override - protected void noColourmenuItem_actionPerformed(ActionEvent e) + protected void noColourmenuItem_actionPerformed() { changeColour(null); } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void clustalColour_actionPerformed(ActionEvent e) - { - changeColour(new ClustalxColourScheme(viewport.getAlignment(), - viewport.getHiddenRepSequences())); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void zappoColour_actionPerformed(ActionEvent e) - { - changeColour(new ZappoColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void taylorColour_actionPerformed(ActionEvent e) - { - changeColour(new TaylorColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void hydrophobicityColour_actionPerformed(ActionEvent e) - { - changeColour(new HydrophobicColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void helixColour_actionPerformed(ActionEvent e) - { - changeColour(new HelixColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void strandColour_actionPerformed(ActionEvent e) - { - changeColour(new StrandColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void turnColour_actionPerformed(ActionEvent e) - { - changeColour(new TurnColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void buriedColour_actionPerformed(ActionEvent e) - { - changeColour(new BuriedColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void nucleotideColour_actionPerformed(ActionEvent e) - { - changeColour(new NucleotideColourScheme()); - } - - @Override - public void purinePyrimidineColour_actionPerformed(ActionEvent e) - { - changeColour(new PurinePyrimidineColourScheme()); - } - /* - * public void covariationColour_actionPerformed(ActionEvent e) { + * public void covariationColour_actionPerformed() { * changeColour(new * CovariationColourScheme(viewport.getAlignment().getAlignmentAnnotation * ()[0])); } */ @Override - public void annotationColour_actionPerformed(ActionEvent e) + public void annotationColour_actionPerformed() { new AnnotationColourChooser(viewport, alignPanel); } @@ -3449,37 +3345,43 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, new AnnotationColumnChooser(viewport, alignPanel); } + /** + * Action on the user checking or unchecking the option to apply the selected + * colour scheme to all groups. If unchecked, groups may have their own + * independent colour schemes. + * + */ @Override - public void rnahelicesColour_actionPerformed(ActionEvent e) + protected void applyToAllGroups_actionPerformed() { - new RNAHelicesColourChooser(viewport, alignPanel); + viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected()); } /** - * DOCUMENT ME! + * Action on user selecting a colour from the colour menu * - * @param e - * DOCUMENT ME! + * @param name + * the name (not the menu item label!) of the colour scheme */ - @Override - protected void applyToAllGroups_actionPerformed(ActionEvent e) + public void changeColour_actionPerformed(String name) { - viewport.setColourAppliesToAllGroups(applyToAllGroups.isSelected()); + ColourSchemeI cs = ColourSchemes.getInstance().getColourScheme(name, + viewport); + changeColour(cs); } /** - * DOCUMENT ME! + * Actions on setting or changing the alignment colour scheme * * @param cs - * DOCUMENT ME! */ @Override public void changeColour(ColourSchemeI cs) { // TODO: pull up to controller method - if (cs != null) { + setColourSelected(cs.getSchemeName()); // Make sure viewport is up to date w.r.t. any sliders if (viewport.getAbovePIDThreshold()) { @@ -3493,11 +3395,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, cs.setConservationInc(SliderPanel.setConservationSlider(alignPanel, cs, "Background")); } - if (cs instanceof TCoffeeColourScheme) - { - tcoffeeColour.setEnabled(true); - tcoffeeColour.setSelected(true); - } } viewport.setGlobalColourScheme(cs); @@ -3512,7 +3409,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! */ @Override - protected void modifyPID_actionPerformed(ActionEvent e) + protected void modifyPID_actionPerformed() { if (viewport.getAbovePIDThreshold() && viewport.getGlobalColourScheme() != null) @@ -3530,7 +3427,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! */ @Override - protected void modifyConservation_actionPerformed(ActionEvent e) + protected void modifyConservation_actionPerformed() { if (viewport.getConservationSelected() && viewport.getGlobalColourScheme() != null) @@ -3548,7 +3445,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! */ @Override - protected void conservationMenuItem_actionPerformed(ActionEvent e) + protected void conservationMenuItem_actionPerformed() { viewport.setConservationSelected(conservationMenuItem.isSelected()); @@ -3557,7 +3454,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, changeColour(viewport.getGlobalColourScheme()); - modifyConservation_actionPerformed(null); + modifyConservation_actionPerformed(); } /** @@ -3567,7 +3464,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * DOCUMENT ME! */ @Override - public void abovePIDThreshold_actionPerformed(ActionEvent e) + public void abovePIDThreshold_actionPerformed() { viewport.setAbovePIDThreshold(abovePIDThreshold.isSelected()); @@ -3576,145 +3473,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, changeColour(viewport.getGlobalColourScheme()); - modifyPID_actionPerformed(null); + modifyPID_actionPerformed(); } /** - * DOCUMENT ME! + * Action on the user selecting the option "User Defined" to create or load a + * new colour scheme * * @param e - * DOCUMENT ME! */ @Override public void userDefinedColour_actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals( - MessageManager.getString("action.user_defined"))) - { - new UserDefinedColours(alignPanel, null); - } - else - { - UserColourScheme udc = (UserColourScheme) UserDefinedColours - .getUserColourSchemes().get(e.getActionCommand()); - - changeColour(udc); - } - } - - public void updateUserColourMenu() - { - - Component[] menuItems = colourMenu.getMenuComponents(); - int iSize = menuItems.length; - for (int i = 0; i < iSize; i++) - { - if (menuItems[i].getName() != null - && menuItems[i].getName().equals("USER_DEFINED")) - { - colourMenu.remove(menuItems[i]); - iSize--; - } - } - if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null) - { - java.util.Enumeration userColours = jalview.gui.UserDefinedColours - .getUserColourSchemes().keys(); - - while (userColours.hasMoreElements()) - { - final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem( - userColours.nextElement().toString()); - radioItem.setName("USER_DEFINED"); - radioItem.addMouseListener(new MouseAdapter() - { - @Override - public void mousePressed(MouseEvent evt) - { - if (evt.isPopupTrigger()) // Mac - { - offerRemoval(radioItem); - } - } - - @Override - public void mouseReleased(MouseEvent evt) - { - if (evt.isPopupTrigger()) // Windows - { - offerRemoval(radioItem); - } - } - - /** - * @param radioItem - */ - void offerRemoval(final JRadioButtonMenuItem radioItem) - { - radioItem.removeActionListener(radioItem.getActionListeners()[0]); - - int option = JvOptionPane.showInternalConfirmDialog( - jalview.gui.Desktop.desktop, MessageManager - .getString("label.remove_from_default_list"), - MessageManager - .getString("label.remove_user_defined_colour"), - JvOptionPane.YES_NO_OPTION); - if (option == JvOptionPane.YES_OPTION) - { - jalview.gui.UserDefinedColours - .removeColourFromDefaults(radioItem.getText()); - colourMenu.remove(radioItem); - } - else - { - radioItem.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent evt) - { - userDefinedColour_actionPerformed(evt); - } - }); - } - } - }); - radioItem.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent evt) - { - userDefinedColour_actionPerformed(evt); - } - }); - - colourMenu.insert(radioItem, 15); - colours.add(radioItem); - } - } - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void PIDColour_actionPerformed(ActionEvent e) - { - changeColour(new PIDColourScheme()); - } - - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - @Override - public void BLOSUM62Colour_actionPerformed(ActionEvent e) - { - changeColour(new Blosum62ColourScheme()); + new UserDefinedColours(alignPanel, null); } /** @@ -4351,12 +4122,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } - @Override - protected void tcoffeeColorScheme_actionPerformed(ActionEvent e) - { - changeColour(new TCoffeeColourScheme(alignPanel.getAlignment())); - } - public TreePanel ShowNewickTree(NewickFile nf, String title) { return ShowNewickTree(nf, title, 600, 500, 4, 5); @@ -5022,8 +4787,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (tcf.annotateAlignment(viewport.getAlignment(), true)) { - tcoffeeColour.setEnabled(true); - tcoffeeColour.setSelected(true); + // tcoffeeColour.setEnabled(true); + // tcoffeeColour.setSelected(true); + for (Component menuItem : colourMenu.getMenuComponents()) + { + if (menuItem instanceof JRadioButtonMenuItem + && ((JRadioButtonMenuItem) menuItem).getText() + .equals("T-Coffee Scores")) + { + ((JRadioButtonMenuItem) menuItem).setSelected(true); + } + } + buildColourMenu(); changeColour(new TCoffeeColourScheme(viewport.getAlignment())); isAnnotation = true; statusBar @@ -5837,7 +5612,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } AlignmentI cdna = new Alignment(cdnaSeqs.toArray(new SequenceI[cdnaSeqs .size()])); - AlignFrame alignFrame = new AlignFrame(cdna, AlignFrame.DEFAULT_WIDTH, + GAlignFrame alignFrame = new AlignFrame(cdna, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); cdna.alignAs(alignment); String newtitle = "cDNA " + MessageManager.getString("label.for") + " " @@ -5953,6 +5728,124 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, true, (actionEvent.getModifiers() & (ActionEvent.META_MASK | ActionEvent.CTRL_MASK)) != 0); } + + /** + * Rebuilds the Colour menu, including any user-defined colours which have + * been loaded either on startup or during the session + */ + public void buildColourMenu() + { + colourMenu.removeAll(); + + /* + * ButtonGroup groups those items whose + * selection is mutually exclusive + */ + ButtonGroup colours = new ButtonGroup(); + + colourMenu.add(applyToAllGroups); + colourMenu.add(textColour); + colourMenu.addSeparator(); + colourMenu.add(noColourmenuItem); + colours.add(noColourmenuItem); + + /* + * scan registered colour schemes (built-in or user-defined + * and add them to the menu (in the order they were added) + */ + Iterable colourSchemes = ColourSchemes.getInstance() + .getColourSchemes(); + for (ColourSchemeI scheme : colourSchemes) + { + /* + * button text is i18n'd but the name is the canonical name of + * the colour scheme (inspected in changeColour_actionPerformed) + */ + final String name = scheme.getSchemeName(); + String label = MessageManager.getString("label.colourScheme_" + + name.toLowerCase().replace(" ", "_")); + final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(label); + radioItem.setName(name); + if (scheme instanceof UserColourScheme) + { + /* + * user-defined colour scheme loaded on startup or during the + * Jalview session; right-click on this offers the option to + * remove it as a colour choice + */ + radioItem.setText(((UserColourScheme) scheme).getName()); + radioItem.addMouseListener(new MouseAdapter() + { + @Override + public void mousePressed(MouseEvent evt) + { + if (evt.isPopupTrigger()) // Mac + { + offerRemoval(); + } + } + + @Override + public void mouseReleased(MouseEvent evt) + { + if (evt.isPopupTrigger()) // Windows + { + offerRemoval(); + } + } + + void offerRemoval() + { + ActionListener al = radioItem.getActionListeners()[0]; + radioItem.removeActionListener(al); + int option = JvOptionPane.showInternalConfirmDialog( + Desktop.desktop, MessageManager + .getString("label.remove_from_default_list"), + MessageManager + .getString("label.remove_user_defined_colour"), + JvOptionPane.YES_NO_OPTION); + if (option == JvOptionPane.YES_OPTION) + { + UserDefinedColours.removeColourFromDefaults(radioItem + .getName()); + ColourSchemes.getInstance().removeColourScheme( + radioItem.getName()); + colourMenu.remove(radioItem); + } + else + { + radioItem.addActionListener(al); + } + } + }); + } + radioItem.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent evt) + { + changeColour_actionPerformed(name); + } + }); + colourMenu.add(radioItem); + colours.add(radioItem); + } + + colourMenu.add(userDefinedColour); + colours.add(userDefinedColour); + + colourMenu.addSeparator(); + colourMenu.add(conservationMenuItem); + colourMenu.add(modifyConservation); + colourMenu.add(abovePIDThreshold); + colourMenu.add(modifyPID); + colourMenu.add(annotationColour); + + setColourSelected(Cache.getDefault(Preferences.DEFAULT_COLOUR, + ResidueColourScheme.NONE)); + + setGUINucleotide(); + } } class PrintThread extends Thread