X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fgui%2FColourMenuHelper.java;h=8f0b88c0a5f3e20ad0433368264178eb8beec45d;hb=a990c2c6facfd04d61d316dcafba31d03747d162;hp=52abfe1eff01fb107614e63684465e10e27b30e6;hpb=dfb3daaf3d75deda32e7622713ffb759aaadd18c;p=jalview.git
diff --git a/src/jalview/gui/ColourMenuHelper.java b/src/jalview/gui/ColourMenuHelper.java
index 52abfe1..8f0b88c 100644
--- a/src/jalview/gui/ColourMenuHelper.java
+++ b/src/jalview/gui/ColourMenuHelper.java
@@ -1,8 +1,29 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.gui;
import jalview.bin.Cache;
import jalview.datamodel.AnnotatedCollectionI;
import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemeLoader;
import jalview.schemes.ColourSchemes;
import jalview.schemes.ResidueColourScheme;
import jalview.schemes.UserColourScheme;
@@ -22,6 +43,12 @@ public class ColourMenuHelper
{
public interface ColourChangeListener
{
+ /**
+ * Change colour scheme to the selected scheme
+ *
+ * @param name
+ * the registered (unique) name of a colour scheme
+ */
void changeColour_actionPerformed(String name);
}
@@ -36,7 +63,7 @@ public class ColourMenuHelper
*
Clustal
* ...other 'built-in' colours
* ...any user-defined colours
- * User Defined..
+ * User Defined..(only for AlignFrame menu)
*
*
* @param colourMenu
@@ -76,8 +103,8 @@ public class ColourMenuHelper
}
/*
- * scan registered colour schemes (built-in or user-defined
- * and add them to the menu (in the order they were added)
+ * scan registered colour schemes (built-in or user-defined)
+ * and add them to the menu (in the order they were registered)
*/
Iterable colourSchemes = ColourSchemes.getInstance()
.getColourSchemes();
@@ -93,9 +120,11 @@ public class ColourMenuHelper
* the colour scheme (inspected in setColourSelected())
*/
final String name = scheme.getSchemeName();
- String label = MessageManager.getStringOrReturn("label.colourScheme_"
- + name.toLowerCase().replace(" ", "_"), name);
- final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(label);
+ String label = MessageManager.getStringOrReturn(
+ "label.colourScheme_" + name.toLowerCase().replace(" ", "_"),
+ name);
+ final JRadioButtonMenuItem radioItem = new JRadioButtonMenuItem(
+ label);
radioItem.setName(name);
radioItem.setEnabled(scheme.isApplicableTo(coll));
if (scheme instanceof UserColourScheme)
@@ -103,14 +132,14 @@ public class ColourMenuHelper
/*
* 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
+ * remove it as a colour choice (unless currently selected)
*/
radioItem.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent evt)
{
- if (evt.isPopupTrigger()) // Mac
+ if (evt.isPopupTrigger() && !radioItem.isSelected()) // Mac
{
offerRemoval();
}
@@ -119,7 +148,7 @@ public class ColourMenuHelper
@Override
public void mouseReleased(MouseEvent evt)
{
- if (evt.isPopupTrigger()) // Windows
+ if (evt.isPopupTrigger() && !radioItem.isSelected()) // Windows
{
offerRemoval();
}
@@ -130,15 +159,16 @@ public class ColourMenuHelper
ActionListener al = radioItem.getActionListeners()[0];
radioItem.removeActionListener(al);
int option = JvOptionPane.showInternalConfirmDialog(
- Desktop.desktop, MessageManager
+ 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)
{
- ColourSchemes.getInstance().removeColourScheme(
- radioItem.getName());
+ ColourSchemes.getInstance()
+ .removeColourScheme(radioItem.getName());
colourMenu.remove(radioItem);
updatePreferences();
}
@@ -170,12 +200,14 @@ public class ColourMenuHelper
final String label = MessageManager.getString("action.user_defined");
JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem(
label);
+ userDefinedColour.setName(ResidueColourScheme.USER_DEFINED_MENU);
userDefinedColour.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- client.changeColour_actionPerformed(ResidueColourScheme.USER_DEFINED);
+ client.changeColour_actionPerformed(
+ ResidueColourScheme.USER_DEFINED_MENU);
}
});
colourMenu.add(userDefinedColour);
@@ -186,20 +218,22 @@ public class ColourMenuHelper
}
/**
- * Marks as selected the colour menu item matching the given name, or the
- * first item ('None') if no match is found
+ * Marks as selected the colour menu item matching the given colour scheme, or
+ * the first item ('None') if no match is found. If the colour scheme is a
+ * user defined scheme, but not in the menu (this arises if a new scheme is
+ * defined and applied but not saved to file), then menu option "User
+ * Defined.." is selected.
*
* @param colourMenu
- * @param colourName
+ * @param cs
*/
- public static void setColourSelected(JMenu colourMenu, String colourName)
+ public static void setColourSelected(JMenu colourMenu, ColourSchemeI cs)
{
- if (colourName == null)
- {
- return;
- }
+ String colourName = cs == null ? ResidueColourScheme.NONE
+ : cs.getSchemeName();
JRadioButtonMenuItem none = null;
+ JRadioButtonMenuItem userDefined = null;
/*
* select the radio button whose name matches the colour name
@@ -209,38 +243,39 @@ public class ColourMenuHelper
{
if (menuItem instanceof JRadioButtonMenuItem)
{
- String buttonName = ((JRadioButtonMenuItem) menuItem).getName();
- if (colourName.equals(buttonName))
+ JRadioButtonMenuItem radioButton = (JRadioButtonMenuItem) menuItem;
+ String buttonName = radioButton.getName();
+ if (buttonName.equals(colourName))
{
- ((JRadioButtonMenuItem) menuItem).setSelected(true);
+ radioButton.setSelected(true);
return;
}
if (ResidueColourScheme.NONE.equals(buttonName))
{
- none = (JRadioButtonMenuItem) menuItem;
+ none = radioButton;
+ }
+ if (ResidueColourScheme.USER_DEFINED_MENU.equals(buttonName))
+ {
+ userDefined = radioButton;
}
}
}
- if (none != null)
+
+ /*
+ * no match by name; select User Defined.. if current scheme is a
+ * user defined one, else select None
+ */
+ if (cs instanceof UserColourScheme && userDefined != null)
+ {
+ userDefined.setSelected(true);
+ }
+ else if (none != null)
{
none.setSelected(true);
}
}
/**
- * Marks as selected the colour menu item matching the given colour scheme, or
- * the first item ('None') if no match is found
- *
- * @param colourMenu
- * @param cs
- */
- public static void setColourSelected(JMenu colourMenu, ColourSchemeI cs)
- {
- setColourSelected(colourMenu, cs == null ? ResidueColourScheme.NONE
- : cs.getSchemeName());
- }
-
- /**
* Updates the USER_DEFINE_COLOURS preference to remove any de-registered
* colour scheme
*/
@@ -258,7 +293,7 @@ public class ColourMenuHelper
{
try
{
- UserColourScheme ucs = ColourSchemes.loadColourScheme(file);
+ UserColourScheme ucs = ColourSchemeLoader.loadColourScheme(file);
if (ucs != null
&& ColourSchemes.getInstance().nameExists(ucs.getName()))
{