-/*
- * 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 <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.appletgui;
-
-import jalview.datamodel.SearchResults;
-import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.SequenceI;
-import jalview.io.FeaturesFile;
-import jalview.schemes.AnnotationColourGradient;
-import jalview.schemes.GraduatedColor;
-import jalview.schemes.UserColourScheme;
-import jalview.util.MessageManager;
-import jalview.viewmodel.AlignmentViewport;
-
-import java.awt.BorderLayout;
-import javax.swing.JButton;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.GridLayout;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Hashtable;
-
-/**
- * DOCUMENT ME!
- *
- * @author $author$
- * @version $Revision$
- */
-public class FeatureRenderer extends
- jalview.renderer.seqfeatures.FeatureRenderer
-{
-
- // Holds web links for feature groups and feature types
- // in the form label|link
- Hashtable featureLinks = null;
-
- /**
- * Creates a new FeatureRenderer object.
- *
- * @param av
- * DOCUMENT ME!
- */
- public FeatureRenderer(AlignmentViewport av)
- {
- super();
- this.av = av;
-
- setTransparencyAvailable(!System.getProperty("java.version")
- .startsWith("1.1"));
- }
-
- static String lastFeatureAdded;
-
- static String lastFeatureGroupAdded;
-
- static String lastDescriptionAdded;
-
- int featureIndex = 0;
-
- boolean deleteFeature = false;
-
- FeatureColourPanel colourPanel;
-
- class FeatureColourPanel extends JPanel
- {
- String label = "";
-
- private Color maxCol;
-
- private boolean isColourByLabel, isGcol;
-
- /**
- * render a feature style in the amend feature dialog box
- */
- public void updateColor(Object newcol)
- {
-
- Color bg, col = null;
- GraduatedColor gcol = null;
- String vlabel = "";
- if (newcol instanceof Color)
- {
- isGcol = false;
- col = (Color) newcol;
- gcol = null;
- }
- else if (newcol instanceof GraduatedColor)
- {
- isGcol = true;
- gcol = (GraduatedColor) newcol;
- col = null;
- }
- else
- {
- throw new Error(
- MessageManager
- .getString("error.invalid_colour_for_mycheckbox"));
- }
- if (col != null)
- {
- setBackground(bg = col);
- }
- else
- {
- if (gcol.getThreshType() != AnnotationColourGradient.NO_THRESHOLD)
- {
- vlabel += " "
- + ((gcol.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)"
- : "(<)");
- }
- if (isColourByLabel = gcol.isColourByLabel())
- {
- setBackground(bg = Color.white);
- vlabel += " (by Label)";
- }
- else
- {
- setBackground(bg = gcol.getMinColor());
- maxCol = gcol.getMaxColor();
- }
- }
- label = vlabel;
- setBackground(bg);
- repaint();
- }
-
- FeatureColourPanel()
- {
- super(null);
- }
-
- public void paint(Graphics g)
- {
- Dimension d = getSize();
- if (isGcol)
- {
- if (isColourByLabel)
- {
- g.setColor(Color.white);
- g.fillRect(d.width / 2, 0, d.width / 2, d.height);
- g.setColor(Color.black);
- Font f = new Font("Verdana", Font.PLAIN, 10);
- g.setFont(f);
- g.drawString(MessageManager.getString("label.label"), 0, 0);
- }
- else
- {
- g.setColor(maxCol);
- g.fillRect(d.width / 2, 0, d.width / 2, d.height);
-
- }
- }
- }
-
- }
-
- boolean amendFeatures(final SequenceI[] sequences,
- final SequenceFeature[] features, boolean newFeatures,
- final AlignmentPanel ap)
- {
- JPanel bigPanel = new JPanel(new BorderLayout());
- final JTextField name = new JTextField(16);
- final JTextField source = new JTextField(16);
- final JTextArea description = new JTextArea(3, 35);
- final JTextField start = new JTextField(8);
- final JTextField end = new JTextField(8);
- final Choice overlaps;
- JButton deleteButton = new JButton("Delete");
- deleteFeature = false;
-
- colourPanel = new FeatureColourPanel();
- colourPanel.setSize(110, 15);
- final FeatureRenderer fr = this;
-
- JPanel panel = new JPanel(new GridLayout(3, 1));
-
- featureIndex = 0; // feature to be amended.
- JPanel tmp;
-
- // /////////////////////////////////////
- // /MULTIPLE FEATURES AT SELECTED RESIDUE
- if (!newFeatures && features.length > 1)
- {
- panel = new JPanel(new GridLayout(4, 1));
- tmp = new JPanel();
- tmp.add(new JLabel("Select Feature: "));
- overlaps = new Choice();
- for (int i = 0; i < features.length; i++)
- {
- String item = features[i].getType() + "/" + features[i].getBegin()
- + "-" + features[i].getEnd();
-
- if (features[i].getFeatureGroup() != null)
- {
- item += " (" + features[i].getFeatureGroup() + ")";
- }
-
- overlaps.addItem(item);
- }
-
- tmp.add(overlaps);
-
- overlaps.addItemListener(new java.awt.event.ItemListener()
- {
- public void itemStateChanged(java.awt.event.ItemEvent e)
- {
- int index = overlaps.getSelectedIndex();
- if (index != -1)
- {
- featureIndex = index;
- name.setText(features[index].getType());
- description.setText(features[index].getDescription());
- source.setText(features[index].getFeatureGroup());
- start.setText(features[index].getBegin() + "");
- end.setText(features[index].getEnd() + "");
-
- SearchResults highlight = new SearchResults();
- highlight.addResult(sequences[0], features[index].getBegin(),
- features[index].getEnd());
-
- ap.seqPanel.seqCanvas.highlightSearchResults(highlight);
-
- }
- Object col = getFeatureStyle(name.getText());
- if (col == null)
- {
- col = new UserColourScheme().createColourFromName(name
- .getText());
- }
-
- colourPanel.updateColor(col);
- }
- });
-
- panel.add(tmp);
- }
- // ////////
- // ////////////////////////////////////
-
- tmp = new JPanel();
- panel.add(tmp);
- tmp.add(new JLabel("Name: ", JLabel.RIGHT));
- tmp.add(name);
-
- tmp = new JPanel();
- panel.add(tmp);
- tmp.add(new JLabel("Group: ", JLabel.RIGHT));
- tmp.add(source);
-
- tmp = new JPanel();
- panel.add(tmp);
- tmp.add(new JLabel("Colour: ", JLabel.RIGHT));
- tmp.add(colourPanel);
-
- bigPanel.add(panel, BorderLayout.NORTH);
-
- panel = new JPanel();
- panel.add(new JLabel("Description: ", JLabel.RIGHT));
- panel.add(new JScrollPane().add(description));
-
- if (!newFeatures)
- {
- bigPanel.add(panel, BorderLayout.SOUTH);
-
- panel = new JPanel();
- panel.add(new JLabel(" Start:", JLabel.RIGHT));
- panel.add(start);
- panel.add(new JLabel(" End:", JLabel.RIGHT));
- panel.add(end);
- bigPanel.add(panel, BorderLayout.CENTER);
- }
- else
- {
- bigPanel.add(panel, BorderLayout.CENTER);
- }
-
- if (lastFeatureAdded == null)
- {
- if (features[0].type != null)
- {
- lastFeatureAdded = features[0].type;
- }
- else
- {
- lastFeatureAdded = "feature_1";
- }
- }
-
- if (lastFeatureGroupAdded == null)
- {
- if (features[0].featureGroup != null)
- {
- lastFeatureGroupAdded = features[0].featureGroup;
- }
- else
- {
- lastFeatureAdded = "Jalview";
- }
- }
-
- String title = newFeatures ? MessageManager
- .getString("label.create_new_sequence_features")
- : MessageManager.formatMessage("label.amend_delete_features",
- new String[]
- { sequences[0].getName() });
-
- final JVDialog dialog = new JVDialog(ap.alignFrame, title, true, 385,
- 240);
-
- dialog.setMainPanel(bigPanel);
-
- if (newFeatures)
- {
- name.setText(lastFeatureAdded);
- source.setText(lastFeatureGroupAdded);
- }
- else
- {
- dialog.ok.setLabel(MessageManager.getString("label.amend"));
- dialog.buttonPanel.add(deleteButton, 1);
- deleteButton.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent evt)
- {
- deleteFeature = true;
- dialog.setVisible(false);
- }
- });
- name.setText(features[0].getType());
- source.setText(features[0].getFeatureGroup());
- }
-
- start.setText(features[0].getBegin() + "");
- end.setText(features[0].getEnd() + "");
- description.setText(features[0].getDescription());
- Color col = getColour(name.getText());
- if (col == null)
- {
- col = new UserColourScheme()
- .createColourFromName(name.getText());
- }
- Object fcol = getFeatureStyle(name.getText());
- // simply display the feature color in a box
- colourPanel.updateColor(fcol);
- dialog.setResizable(true);
- // TODO: render the graduated color in the box.
- colourPanel.addMouseListener(new java.awt.event.MouseAdapter()
- {
- public void mousePressed(java.awt.event.MouseEvent evt)
- {
- if (!colourPanel.isGcol)
- {
- new UserDefinedColours(fr, ap.alignFrame);
- }
- else
- {
- FeatureColourChooser fcc = new FeatureColourChooser(
- ap.alignFrame, name.getText());
- dialog.transferFocus();
- }
- }
- });
- dialog.setVisible(true);
-
- FeaturesFile ffile = new FeaturesFile();
-
- if (dialog.accept)
- {
- // This ensures that the last sequence
- // is refreshed and new features are rendered
- lastSeq = null;
- lastFeatureAdded = name.getText().trim();
- lastFeatureGroupAdded = source.getText().trim();
- lastDescriptionAdded = description.getText().replace('\n', ' ');
- }
-
- if (lastFeatureGroupAdded != null && lastFeatureGroupAdded.length() < 1)
- {
- lastFeatureGroupAdded = null;
- }
-
- if (!newFeatures)
- {
-
- SequenceFeature sf = features[featureIndex];
- if (dialog.accept)
- {
- sf.type = lastFeatureAdded;
- sf.featureGroup = lastFeatureGroupAdded;
- sf.description = lastDescriptionAdded;
- if (!colourPanel.isGcol)
- {
- // update colour - otherwise its already done.
- setColour(sf.type, colourPanel.getBackground());
- }
- try
- {
- sf.begin = Integer.parseInt(start.getText());
- sf.end = Integer.parseInt(end.getText());
- } catch (NumberFormatException ex)
- {
- }
-
- ffile.parseDescriptionHTML(sf, false);
- setVisible(lastFeatureAdded); // if user edited name then make sure new
- // type is visible
- }
- if (deleteFeature)
- {
- sequences[0].deleteFeature(sf);
- }
-
- }
- else
- {
- if (dialog.accept && name.getText().length() > 0)
- {
- for (int i = 0; i < sequences.length; i++)
- {
- features[i].type = lastFeatureAdded;
- features[i].featureGroup = lastFeatureGroupAdded;
- features[i].description = lastDescriptionAdded;
- sequences[i].addSequenceFeature(features[i]);
- ffile.parseDescriptionHTML(features[i], false);
- }
-
- Color newColour = colourPanel.getBackground();
- // setColour(lastFeatureAdded, fcol);
-
- if (lastFeatureGroupAdded != null)
- {
- setGroupVisibility(lastFeatureGroupAdded, true);
- }
- setColour(lastFeatureAdded, newColour); // was fcol
- setVisible(lastFeatureAdded);
- findAllFeatures(false); // different to original applet behaviour ?
- // findAllFeatures();
- }
- else
- {
- // no update to the alignment
- return false;
- }
- }
- // refresh the alignment and the feature settings dialog
- if (((AlignViewport) av).featureSettings != null)
- {
- ((AlignViewport) av).featureSettings.refreshTable();
- }
- // findAllFeatures();
-
- ap.paintAlignment(true);
-
- return true;
- }
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)\r
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3\r
+ * of the License, or (at your option) any later version.\r
+ * \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE. See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.\r
+ * The Jalview Authors are detailed in the 'AUTHORS' file.\r
+ */\r
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.SearchResults;\r
+import jalview.datamodel.SequenceFeature;\r
+import jalview.datamodel.SequenceI;\r
+import jalview.io.FeaturesFile;\r
+import jalview.schemes.AnnotationColourGradient;\r
+import jalview.schemes.GraduatedColor;\r
+import jalview.schemes.UserColourScheme;\r
+import jalview.util.MessageManager;\r
+import jalview.viewmodel.AlignmentViewport;\r
+\r
+import java.awt.BorderLayout;\r
+import javax.swing.JButton;\r
+import java.awt.Color;\r
+import java.awt.Dimension;\r
+import java.awt.Font;\r
+import java.awt.Graphics;\r
+import java.awt.GridLayout;\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTextArea;\r
+import javax.swing.JTextField;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.util.Hashtable;\r
+\r
+/**\r
+ * DOCUMENT ME!\r
+ * \r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
+public class FeatureRenderer extends\r
+ jalview.renderer.seqfeatures.FeatureRenderer\r
+{\r
+\r
+ // Holds web links for feature groups and feature types\r
+ // in the form label|link\r
+ Hashtable featureLinks = null;\r
+\r
+ /**\r
+ * Creates a new FeatureRenderer object.\r
+ * \r
+ * @param av\r
+ * DOCUMENT ME!\r
+ */\r
+ public FeatureRenderer(AlignmentViewport av)\r
+ {\r
+ super();\r
+ this.av = av;\r
+\r
+ setTransparencyAvailable(!System.getProperty("java.version")\r
+ .startsWith("1.1"));\r
+ }\r
+\r
+ static String lastFeatureAdded;\r
+\r
+ static String lastFeatureGroupAdded;\r
+\r
+ static String lastDescriptionAdded;\r
+\r
+ int featureIndex = 0;\r
+\r
+ boolean deleteFeature = false;\r
+\r
+ FeatureColourPanel colourPanel;\r
+\r
+ class FeatureColourPanel extends JPanel\r
+ {\r
+ String label = "";\r
+\r
+ private Color maxCol;\r
+\r
+ private boolean isColourByLabel, isGcol;\r
+\r
+ /**\r
+ * render a feature style in the amend feature dialog box\r
+ */\r
+ public void updateColor(Object newcol)\r
+ {\r
+\r
+ Color bg, col = null;\r
+ GraduatedColor gcol = null;\r
+ String vlabel = "";\r
+ if (newcol instanceof Color)\r
+ {\r
+ isGcol = false;\r
+ col = (Color) newcol;\r
+ gcol = null;\r
+ }\r
+ else if (newcol instanceof GraduatedColor)\r
+ {\r
+ isGcol = true;\r
+ gcol = (GraduatedColor) newcol;\r
+ col = null;\r
+ }\r
+ else\r
+ {\r
+ throw new Error(\r
+ MessageManager\r
+ .getString("error.invalid_colour_for_mycheckbox"));\r
+ }\r
+ if (col != null)\r
+ {\r
+ setBackground(bg = col);\r
+ }\r
+ else\r
+ {\r
+ if (gcol.getThreshType() != AnnotationColourGradient.NO_THRESHOLD)\r
+ {\r
+ vlabel += " "\r
+ + ((gcol.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)"\r
+ : "(<)");\r
+ }\r
+ if (isColourByLabel = gcol.isColourByLabel())\r
+ {\r
+ setBackground(bg = Color.white);\r
+ vlabel += " (by Label)";\r
+ }\r
+ else\r
+ {\r
+ setBackground(bg = gcol.getMinColor());\r
+ maxCol = gcol.getMaxColor();\r
+ }\r
+ }\r
+ label = vlabel;\r
+ setBackground(bg);\r
+ repaint();\r
+ }\r
+\r
+ FeatureColourPanel()\r
+ {\r
+ super(null);\r
+ }\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ Dimension d = getSize();\r
+ if (isGcol)\r
+ {\r
+ if (isColourByLabel)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(d.width / 2, 0, d.width / 2, d.height);\r
+ g.setColor(Color.black);\r
+ Font f = new Font("Verdana", Font.PLAIN, 10);\r
+ g.setFont(f);\r
+ g.drawString(MessageManager.getString("label.label"), 0, 0);\r
+ }\r
+ else\r
+ {\r
+ g.setColor(maxCol);\r
+ g.fillRect(d.width / 2, 0, d.width / 2, d.height);\r
+\r
+ }\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+ boolean amendFeatures(final SequenceI[] sequences,\r
+ final SequenceFeature[] features, boolean newFeatures,\r
+ final AlignmentPanel ap)\r
+ {\r
+ JPanel bigPanel = new JPanel(new BorderLayout());\r
+ final JTextField name = new JTextField(16);\r
+ final JTextField source = new JTextField(16);\r
+ final JTextArea description = new JTextArea(3, 35);\r
+ final JTextField start = new JTextField(8);\r
+ final JTextField end = new JTextField(8);\r
+ final Choice overlaps;\r
+ JButton deleteButton = new JButton("Delete");\r
+ deleteFeature = false;\r
+\r
+ colourPanel = new FeatureColourPanel();\r
+ colourPanel.setSize(110, 15);\r
+ final FeatureRenderer fr = this;\r
+\r
+ JPanel panel = new JPanel(new GridLayout(3, 1));\r
+\r
+ featureIndex = 0; // feature to be amended.\r
+ JPanel tmp;\r
+\r
+ // /////////////////////////////////////\r
+ // /MULTIPLE FEATURES AT SELECTED RESIDUE\r
+ if (!newFeatures && features.length > 1)\r
+ {\r
+ panel = new JPanel(new GridLayout(4, 1));\r
+ tmp = new JPanel();\r
+ tmp.add(new JLabel("Select Feature: "));\r
+ overlaps = new Choice();\r
+ for (int i = 0; i < features.length; i++)\r
+ {\r
+ String item = features[i].getType() + "/" + features[i].getBegin()\r
+ + "-" + features[i].getEnd();\r
+\r
+ if (features[i].getFeatureGroup() != null)\r
+ {\r
+ item += " (" + features[i].getFeatureGroup() + ")";\r
+ }\r
+\r
+ overlaps.addItem(item);\r
+ }\r
+\r
+ tmp.add(overlaps);\r
+\r
+ overlaps.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(java.awt.event.ItemEvent e)\r
+ {\r
+ int index = overlaps.getSelectedIndex();\r
+ if (index != -1)\r
+ {\r
+ featureIndex = index;\r
+ name.setText(features[index].getType());\r
+ description.setText(features[index].getDescription());\r
+ source.setText(features[index].getFeatureGroup());\r
+ start.setText(features[index].getBegin() + "");\r
+ end.setText(features[index].getEnd() + "");\r
+\r
+ SearchResults highlight = new SearchResults();\r
+ highlight.addResult(sequences[0], features[index].getBegin(),\r
+ features[index].getEnd());\r
+\r
+ ap.seqPanel.seqCanvas.highlightSearchResults(highlight);\r
+\r
+ }\r
+ Object col = getFeatureStyle(name.getText());\r
+ if (col == null)\r
+ {\r
+ col = new UserColourScheme().createColourFromName(name\r
+ .getText());\r
+ }\r
+\r
+ colourPanel.updateColor(col);\r
+ }\r
+ });\r
+\r
+ panel.add(tmp);\r
+ }\r
+ // ////////\r
+ // ////////////////////////////////////\r
+\r
+ tmp = new JPanel();\r
+ panel.add(tmp);\r
+ tmp.add(new JLabel("Name: ", JLabel.RIGHT));\r
+ tmp.add(name);\r
+\r
+ tmp = new JPanel();\r
+ panel.add(tmp);\r
+ tmp.add(new JLabel("Group: ", JLabel.RIGHT));\r
+ tmp.add(source);\r
+\r
+ tmp = new JPanel();\r
+ panel.add(tmp);\r
+ tmp.add(new JLabel("Colour: ", JLabel.RIGHT));\r
+ tmp.add(colourPanel);\r
+\r
+ bigPanel.add(panel, BorderLayout.NORTH);\r
+\r
+ panel = new JPanel();\r
+ panel.add(new JLabel("Description: ", JLabel.RIGHT));\r
+ panel.add(new JScrollPane().add(description));\r
+\r
+ if (!newFeatures)\r
+ {\r
+ bigPanel.add(panel, BorderLayout.SOUTH);\r
+\r
+ panel = new JPanel();\r
+ panel.add(new JLabel(" Start:", JLabel.RIGHT));\r
+ panel.add(start);\r
+ panel.add(new JLabel(" End:", JLabel.RIGHT));\r
+ panel.add(end);\r
+ bigPanel.add(panel, BorderLayout.CENTER);\r
+ }\r
+ else\r
+ {\r
+ bigPanel.add(panel, BorderLayout.CENTER);\r
+ }\r
+\r
+ if (lastFeatureAdded == null)\r
+ {\r
+ if (features[0].type != null)\r
+ {\r
+ lastFeatureAdded = features[0].type;\r
+ }\r
+ else\r
+ {\r
+ lastFeatureAdded = "feature_1";\r
+ }\r
+ }\r
+\r
+ if (lastFeatureGroupAdded == null)\r
+ {\r
+ if (features[0].featureGroup != null)\r
+ {\r
+ lastFeatureGroupAdded = features[0].featureGroup;\r
+ }\r
+ else\r
+ {\r
+ lastFeatureAdded = "Jalview";\r
+ }\r
+ }\r
+\r
+ String title = newFeatures ? MessageManager\r
+ .getString("label.create_new_sequence_features")\r
+ : MessageManager.formatMessage("label.amend_delete_features",\r
+ new String[]\r
+ { sequences[0].getName() });\r
+\r
+ final JVDialog dialog = new JVDialog(ap.alignFrame, title, true, 385,\r
+ 240);\r
+\r
+ dialog.setMainPanel(bigPanel);\r
+\r
+ if (newFeatures)\r
+ {\r
+ name.setText(lastFeatureAdded);\r
+ source.setText(lastFeatureGroupAdded);\r
+ }\r
+ else\r
+ {\r
+ dialog.ok.setLabel(MessageManager.getString("label.amend"));\r
+ dialog.buttonPanel.add(deleteButton, 1);\r
+ deleteButton.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent evt)\r
+ {\r
+ deleteFeature = true;\r
+ dialog.setVisible(false);\r
+ }\r
+ });\r
+ name.setText(features[0].getType());\r
+ source.setText(features[0].getFeatureGroup());\r
+ }\r
+\r
+ start.setText(features[0].getBegin() + "");\r
+ end.setText(features[0].getEnd() + "");\r
+ description.setText(features[0].getDescription());\r
+ Color col = getColour(name.getText());\r
+ if (col == null)\r
+ {\r
+ col = new UserColourScheme()\r
+ .createColourFromName(name.getText());\r
+ }\r
+ Object fcol = getFeatureStyle(name.getText());\r
+ // simply display the feature color in a box\r
+ colourPanel.updateColor(fcol);\r
+ dialog.setResizable(true);\r
+ // TODO: render the graduated color in the box.\r
+ colourPanel.addMouseListener(new java.awt.event.MouseAdapter()\r
+ {\r
+ public void mousePressed(java.awt.event.MouseEvent evt)\r
+ {\r
+ if (!colourPanel.isGcol)\r
+ {\r
+ new UserDefinedColours(fr, ap.alignFrame);\r
+ }\r
+ else\r
+ {\r
+ FeatureColourChooser fcc = new FeatureColourChooser(\r
+ ap.alignFrame, name.getText());\r
+ dialog.transferFocus();\r
+ }\r
+ }\r
+ });\r
+ dialog.setVisible(true);\r
+\r
+ FeaturesFile ffile = new FeaturesFile();\r
+\r
+ if (dialog.accept)\r
+ {\r
+ // This ensures that the last sequence\r
+ // is refreshed and new features are rendered\r
+ lastSeq = null;\r
+ lastFeatureAdded = name.getText().trim();\r
+ lastFeatureGroupAdded = source.getText().trim();\r
+ lastDescriptionAdded = description.getText().replace('\n', ' ');\r
+ }\r
+\r
+ if (lastFeatureGroupAdded != null && lastFeatureGroupAdded.length() < 1)\r
+ {\r
+ lastFeatureGroupAdded = null;\r
+ }\r
+\r
+ if (!newFeatures)\r
+ {\r
+\r
+ SequenceFeature sf = features[featureIndex];\r
+ if (dialog.accept)\r
+ {\r
+ sf.type = lastFeatureAdded;\r
+ sf.featureGroup = lastFeatureGroupAdded;\r
+ sf.description = lastDescriptionAdded;\r
+ if (!colourPanel.isGcol)\r
+ {\r
+ // update colour - otherwise its already done.\r
+ setColour(sf.type, colourPanel.getBackground());\r
+ }\r
+ try\r
+ {\r
+ sf.begin = Integer.parseInt(start.getText());\r
+ sf.end = Integer.parseInt(end.getText());\r
+ } catch (NumberFormatException ex)\r
+ {\r
+ }\r
+\r
+ ffile.parseDescriptionHTML(sf, false);\r
+ setVisible(lastFeatureAdded); // if user edited name then make sure new\r
+ // type is visible\r
+ }\r
+ if (deleteFeature)\r
+ {\r
+ sequences[0].deleteFeature(sf);\r
+ }\r
+\r
+ }\r
+ else\r
+ {\r
+ if (dialog.accept && name.getText().length() > 0)\r
+ {\r
+ for (int i = 0; i < sequences.length; i++)\r
+ {\r
+ features[i].type = lastFeatureAdded;\r
+ features[i].featureGroup = lastFeatureGroupAdded;\r
+ features[i].description = lastDescriptionAdded;\r
+ sequences[i].addSequenceFeature(features[i]);\r
+ ffile.parseDescriptionHTML(features[i], false);\r
+ }\r
+\r
+ Color newColour = colourPanel.getBackground();\r
+ // setColour(lastFeatureAdded, fcol);\r
+\r
+ if (lastFeatureGroupAdded != null)\r
+ {\r
+ setGroupVisibility(lastFeatureGroupAdded, true);\r
+ }\r
+ setColour(lastFeatureAdded, newColour); // was fcol\r
+ setVisible(lastFeatureAdded);\r
+ findAllFeatures(false); // different to original applet behaviour ?\r
+ // findAllFeatures();\r
+ }\r
+ else\r
+ {\r
+ // no update to the alignment\r
+ return false;\r
+ }\r
+ }\r
+ // refresh the alignment and the feature settings dialog\r
+ if (((AlignViewport) av).featureSettings != null)\r
+ {\r
+ ((AlignViewport) av).featureSettings.refreshTable();\r
+ }\r
+ // findAllFeatures();\r
+\r
+ ap.paintAlignment(true);\r
+\r
+ return true;\r
+ }\r
+}\r