import jalview.datamodel.*;
import jalview.schemes.GraduatedColor;
+import jalview.util.FeatureColourI;
/**
* DOCUMENT ME!
sortOrder = null;
System.arraycopy(newf, 0, renderOrder, opos, newf.length);
}
-
- public Color getColour(String featureType)
- {
+ /**
+ * get a feature style object for the given type string.
+ * Creates a java.awt.Color for a featureType with no existing
+ * colourscheme.
+ * TODO: replace return type with object implementing standard abstract colour/style interface
+ * @param featureType
+ * @return java.awt.Color or GraduatedColor
+ */
+ public Object getFeatureStyle(String featureType) {
Object fc = featureColours.get(featureType);
if (fc == null)
{
jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme();
Color col = ucs.createColourFromName(featureType);
- featureColours.put(featureType, col);
- return col;
+ featureColours.put(featureType, fc = col);
}
- else if (fc instanceof Color)
+ return fc;
+ }
+ /**
+ * return a nominal colour for this feature
+ * @param featureType
+ * @return standard color, or maximum colour for graduated colourscheme
+ */
+ public Color getColour(String featureType)
+ {
+ Object fc = getFeatureStyle(featureType);
+
+ if (fc instanceof Color)
{
return (Color) fc;
}
{
return ((GraduatedColor) fc).getMaxColor();
}
- // TODO: raise an implementation error here.
- return null; // Color.white;
}
+ throw new Error("Implementation Error: Unrecognised render object "+fc.getClass()+" for features of type "+featureType);
}
/**
- * implement graduated colouring for features with scores
+ * calculate the render colour for a specific feature using current feature settings.
*
* @param feature
* @return render colour for the given feature
*/
public Color getColour(SequenceFeature feature)
{
- Object fc = featureColours.get(feature.type);
- if (fc == null)
- {
- jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme();
- Color col = ucs.createColourFromName(feature.type);
- featureColours.put(feature.type, col);
- return col;
- }
- else if (fc instanceof Color)
+ Object fc = getFeatureStyle(feature.getType());
+ if (fc instanceof Color)
{
return (Color) fc;
}
{
return ((GraduatedColor) fc).findColor(feature);
}
- // TODO: raise an implementation error here.
- return null; // Color.white;
}
+ throw new Error("Implementation Error: Unrecognised render object "+fc.getClass()+" for features of type "+feature.getType());
}
private boolean showFeature(SequenceFeature sequenceFeature)
{
- Object fc = featureColours.get(sequenceFeature.type);
+ Object fc = getFeatureStyle(sequenceFeature.type);
if (fc instanceof GraduatedColor)
{
return ((GraduatedColor) fc).isColored(sequenceFeature);
static String lastFeatureGroupAdded;
static String lastDescriptionAdded;
-
+ Object oldcol,fcol;
int featureIndex = 0;
boolean amendFeatures(final SequenceI[] sequences,
featureIndex = 0;
- JPanel bigPanel = new JPanel(new BorderLayout());
+ final JPanel bigPanel = new JPanel(new BorderLayout());
final JComboBox overlaps;
final JTextField name = new JTextField(25);
final JTextField source = new JTextField(25);
final JSpinner end = new JSpinner();
start.setPreferredSize(new Dimension(80, 20));
end.setPreferredSize(new Dimension(80, 20));
-
- final JPanel colour = new JPanel();
- colour.setBorder(BorderFactory.createEtchedBorder());
- colour.setMaximumSize(new Dimension(40, 10));
+ final FeatureRenderer me = this;
+ final JLabel colour = new JLabel();
+ colour.setOpaque(true);
+ //colour.setBorder(BorderFactory.createEtchedBorder());
+ colour.setMaximumSize(new Dimension(30, 16));
colour.addMouseListener(new MouseAdapter()
{
+ FeatureColourChooser fcc =null;
public void mousePressed(MouseEvent evt)
{
- // TODO: use featurecolourchooser here
+ if (fcol instanceof Color)
+ {
Color col = JColorChooser.showDialog(Desktop.desktop,
- "Select Feature Colour", colour.getBackground());
+ "Select Feature Colour", ((Color)fcol));
if (col != null)
- colour.setBackground(col);
+ {
+ fcol = col;
+ updateColourButton(bigPanel,colour,col);
+ }
+ } else {
+
+ if (fcc==null) {
+ final String type = features[featureIndex].getType();
+ fcc = new FeatureColourChooser(me, type);
+ fcc.setRequestFocusEnabled(true);
+ fcc.requestFocus();
+
+ fcc.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e)
+ {
+ fcol = fcc.getLastColour();
+ fcc = null;
+ setColour(type, fcol);
+ updateColourButton(bigPanel,colour,fcol);
+ }
+ }
+ );
+
+ }
+ }
}
});
-
JPanel tmp = new JPanel();
JPanel panel = new JPanel(new GridLayout(3, 1));
ap.seqPanel.seqCanvas.highlightSearchResults(highlight);
}
- Color col = getColour(name.getText());
+ Object col = getFeatureStyle(name.getText());
if (col == null)
{
col = new jalview.schemes.UserColourScheme()
.createColourFromName(name.getText());
}
-
- colour.setBackground(col);
+ oldcol = fcol = col;
+ updateColourButton(bigPanel, colour,col);
}
});
start.setValue(new Integer(features[0].getBegin()));
end.setValue(new Integer(features[0].getEnd()));
description.setText(features[0].getDescription());
- colour.setBackground(getColour(name.getText()));
-
+ updateColourButton(bigPanel, colour, (oldcol = fcol = getFeatureStyle(name.getText())));
Object[] options;
if (!newFeatures)
{
sf.featureGroup = lastFeatureGroupAdded;
sf.description = lastDescriptionAdded;
- setColour(sf.type, colour.getBackground());
- av.featuresDisplayed.put(sf.type, new Integer(colour
- .getBackground().getRGB()));
+ setColour(sf.type, fcol);
+ av.featuresDisplayed.put(sf.type, getColour(sf.type));
try
{
featureGroups = new Hashtable();
featureGroups.put(lastFeatureGroupAdded, new Boolean(true));
}
-
- Color col = colour.getBackground();
- setColour(lastFeatureAdded, colour.getBackground());
- av.featuresDisplayed.put(lastFeatureAdded,
- new Integer(col.getRGB()));
+ setColour(lastFeatureAdded, fcol);
+ av.featuresDisplayed.put(lastFeatureAdded, getColour(lastFeatureAdded));
findAllFeatures(false);
return true;
}
- public void setColour(String featureType, Color col)
+ /**
+ * update the amend feature button dependent on the given style
+ * @param bigPanel
+ * @param col
+ * @param col2
+ */
+ protected void updateColourButton(JPanel bigPanel, JLabel colour, Object col2)
+ {
+ colour.removeAll();
+ colour.setIcon(null);
+ colour.setToolTipText(null);
+ colour.setText("");
+ if (col2 instanceof Color) {
+ colour.setBackground((Color)col2);
+ } else {
+ colour.setBackground(bigPanel.getBackground());
+ colour.setForeground(bigPanel.getForeground());
+ FeatureSettings.renderGraduatedColor(colour, (GraduatedColor) col2);
+ //colour.setForeground(colour.getBackground());
+ }
+ }
+
+ public void setColour(String featureType, Object col)
{
- Object c = featureColours.get(featureType);
- if (c == null || c instanceof Color || (c instanceof GraduatedColor && !((GraduatedColor)c).getMaxColor().equals(col)))
+ // overwrite
+// Color _col = (col instanceof Color) ? ((Color) col) : (col instanceof GraduatedColor) ? ((GraduatedColor) col).getMaxColor() : null;
+// Object c = featureColours.get(featureType);
+// if (c == null || c instanceof Color || (c instanceof GraduatedColor && !((GraduatedColor)c).getMaxColor().equals(_col)))
{
featureColours.put(featureType, col);
}
for (int i = 0; i < data.length; i++)
{
String type = data[i][0].toString();
- setColour(type, (Color) data[i][1]);
+ setColour(type, data[i][1]); // todo : typesafety - feature color interface object
if (((Boolean) data[i][2]).booleanValue())
{
av.featuresDisplayed.put(type, new Integer(getColour(type)