import jalview.datamodel.features.FeatureMatcherSet;
import jalview.datamodel.features.FeatureMatcherSetI;
import jalview.gui.Help.HelpId;
+import jalview.gui.JalviewColourChooser.ColourChooserListener;
import jalview.io.JalviewFileChooser;
import jalview.io.JalviewFileView;
import jalview.schemabinding.version2.Filter;
import jalview.schemes.FeatureColour;
import jalview.util.MessageManager;
import jalview.util.Platform;
+import jalview.util.dialogrunner.RunResponse;
import jalview.viewmodel.seqfeatures.FeatureRendererModel.FeatureSettingsBean;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JColorChooser;
-import javax.swing.JDialog;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
+import javax.swing.ToolTipManager;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
private static final int MIN_HEIGHT = 400;
- private final static String BASE_TOOLTIP = "Click to edit, right-click for menu";
+ private final static String BASE_TOOLTIP = MessageManager.getString("label.click_to_edit");
final FeatureRenderer fr;
*/
Object[][] originalData;
- private float originalTransparency;
+ float originalTransparency;
- private Map<String, FeatureMatcherSetI> originalFilters;
+ Map<String, FeatureMatcherSetI> originalFilters;
final JInternalFrame frame;
/*
* true when Feature Settings are updating from feature renderer
*/
- private boolean handlingUpdate = false;
+ boolean handlingUpdate = false;
/*
* holds {featureCount, totalExtent} for each feature type
table = new JTable()
{
- static final String tt = "Click to edit, right-click for menu"; // todo i18n
-
@Override
public String getToolTipText(MouseEvent e)
{
case COLOUR_COLUMN:
FeatureColourI colour = (FeatureColourI) table.getValueAt(row,
column);
- tip = getColorTooltip(colour);
+ tip = getColorTooltip(colour, true);
break;
case FILTER_COLUMN:
FeatureMatcherSet o = (FeatureMatcherSet) table.getValueAt(row,
default:
break;
}
+
return tip;
}
/**
- * Position the tooltip at the bottom edge of, and half way across, the
+ * Position the tooltip near the bottom edge of, and half way across, the
* current cell
*/
@Override
int column = table.columnAtPoint(point);
int row = table.rowAtPoint(point);
Rectangle r = getCellRect(row, column, false);
- Point loc = new Point(r.x + r.width / 2, r.y + r.height);
+ Point loc = new Point(r.x + r.width / 2, r.y + r.height - 3);
return loc;
}
};
table.getTableHeader().setFont(new Font("Verdana", Font.PLAIN, 12));
- table.setFont(new Font("Verdana", Font.PLAIN, 12));
+ ToolTipManager.sharedInstance().registerComponent(table);
- // table.setDefaultRenderer(Color.class, new ColorRenderer());
- // table.setDefaultEditor(Color.class, new ColorEditor(this));
- //
table.setDefaultEditor(FeatureColour.class, new ColorEditor(this));
table.setDefaultRenderer(FeatureColour.class, new ColorRenderer());
table.setDefaultEditor(FeatureMatcherSet.class, new FilterEditor(this));
table.setDefaultRenderer(FeatureMatcherSet.class, new FilterRenderer());
-
+
TableColumn colourColumn = new TableColumn(COLOUR_COLUMN, 75,
new ColorRenderer(), new ColorEditor(this));
table.addColumn(colourColumn);
* variable colour options include colour by label, by score,
* by selected attribute text, or attribute value
*/
- final JCheckBoxMenuItem mxcol = new JCheckBoxMenuItem(
+ final JCheckBoxMenuItem variableColourCB = new JCheckBoxMenuItem(
MessageManager.getString("label.variable_colour"));
- mxcol.setSelected(!featureColour.isSimpleColour());
- men.add(mxcol);
- mxcol.addActionListener(new ActionListener()
+ variableColourCB.setSelected(!featureColour.isSimpleColour());
+ men.add(variableColourCB);
+
+ /*
+ * checkbox action listener doubles up as listener to OK
+ * from the variable colour / filters dialog
+ */
+ variableColourCB.addActionListener(new ActionListener()
{
- JColorChooser colorChooser;
-
@Override
public void actionPerformed(ActionEvent e)
{
- if (e.getSource() == mxcol)
+ if (e.getSource() == variableColourCB)
{
if (featureColour.isSimpleColour())
{
+ /*
+ * toggle simple colour to variable colour - show dialog
+ */
FeatureTypeSettings fc = new FeatureTypeSettings(me.fr, type);
fc.addActionListener(this);
}
else
{
- // bring up simple color chooser
- colorChooser = new JColorChooser();
- String title = MessageManager
- .getString("label.select_colour");
- JDialog dialog = JColorChooser.createDialog(me,
- title, true, // modal
- colorChooser, this, // OK button handler
- null); // no CANCEL button handler
- colorChooser.setColor(featureColour.getMaxColour());
- dialog.setVisible(true);
+ /*
+ * toggle variable to simple colour - show colour chooser
+ */
+ String title = MessageManager.getString("label.select_colour");
+ ColourChooserListener listener = new ColourChooserListener()
+ {
+ @Override
+ public void colourSelected(Color c)
+ {
+ table.setValueAt(new FeatureColour(c), rowSelected,
+ COLOUR_COLUMN);
+ table.validate();
+ me.updateFeatureRenderer(
+ ((FeatureTableModel) table.getModel()).getData(),
+ false);
+ }
+ };
+ JalviewColourChooser.showColourChooser(me, title, featureColour.getMaxColour(), listener);
}
}
- else
- {
+ else {
if (e.getSource() instanceof FeatureTypeSettings)
{
/*
* colour will have already been set in the FeatureRenderer
*/
FeatureColourI fci = fr.getFeatureColours().get(type);
- table.setValueAt(fci, rowSelected, 1);
- table.validate();
- }
- else
- {
- // probably the color chooser!
- table.setValueAt(new FeatureColour(colorChooser.getColor()),
- rowSelected, 1);
+ table.setValueAt(fci, rowSelected, COLOUR_COLUMN);
table.validate();
- me.updateFeatureRenderer(
- ((FeatureTableModel) table.getModel()).getData(),
- false);
}
}
}
chooser.setDialogTitle(
MessageManager.getString("label.load_feature_colours"));
chooser.setToolTipText(MessageManager.getString("action.load"));
-
- int value = chooser.showOpenDialog(this);
-
- if (value == JalviewFileChooser.APPROVE_OPTION)
- {
- File file = chooser.getSelectedFile();
- load(file);
- }
+ chooser.response(new RunResponse(JalviewFileChooser.APPROVE_OPTION){
+
+ @Override
+ public void run() {
+ File file = chooser.getSelectedFile();
+ load(file);
+ }});
+ chooser.showOpenDialog(this);
}
/**
chooser.setDialogTitle(
MessageManager.getString("label.save_feature_colours"));
chooser.setToolTipText(MessageManager.getString("action.save"));
-
- int value = chooser.showSaveDialog(this);
-
- if (value == JalviewFileChooser.APPROVE_OPTION)
- {
- save(chooser.getSelectedFile());
- }
+ int option = chooser.showSaveDialog(this);
+ if (option == JalviewFileChooser.APPROVE_OPTION)
+ {
+ File file = chooser.getSelectedFile();
+ save(file);
+ }
}
/**
* @param data
* @param visibleNew
*/
- private void updateFeatureRenderer(Object[][] data, boolean visibleNew)
+ void updateFeatureRenderer(Object[][] data, boolean visibleNew)
{
FeatureSettingsBean[] rowData = getTableAsBeans(data);
* Answers a suitable tooltip to show on the colour cell of the table
*
* @param fcol
+ * @param withHint
+ * if true include 'click to edit' and similar text
* @return
*/
- public static String getColorTooltip(FeatureColourI fcol)
+ public static String getColorTooltip(FeatureColourI fcol,
+ boolean withHint)
{
if (fcol == null)
{
}
if (fcol.isSimpleColour())
{
- return BASE_TOOLTIP;
+ return withHint ? BASE_TOOLTIP : null;
}
String description = fcol.getDescription();
description = description.replaceAll("<", "<");
description = description.replaceAll(">", ">");
StringBuilder tt = new StringBuilder(description);
- tt.append("<br>").append(BASE_TOOLTIP).append("</br>");
+ if (withHint)
+ {
+ tt.append("<br>").append(BASE_TOOLTIP).append("</br>");
+ }
return JvSwingUtils.wrapTooltip(true, tt.toString());
}
JButton button;
- JColorChooser colorChooser;
-
- JDialog dialog;
-
protected static final String EDIT = "edit";
int rowSelected = 0;
- public ColorEditor(FeatureSettings me)
+ public ColorEditor(FeatureSettings fs)
{
- this.me = me;
+ this.me = fs;
// Set up the editor (from the table's point of view),
// which is a button.
// This button brings up the color chooser dialog,
button.setActionCommand(EDIT);
button.addActionListener(this);
button.setBorderPainted(false);
- // Set up the dialog that the button brings up.
- colorChooser = new JColorChooser();
- dialog = JColorChooser.createDialog(button,
- MessageManager.getString("label.select_colour"), true, // modal
- colorChooser, this, // OK button handler
- null); // no CANCEL button handler
}
/**
- * Handles events from the editor button and from the dialog's OK button.
+ * Handles events from the editor button, and from the colour/filters
+ * dialog's OK button
*/
@Override
public void actionPerformed(ActionEvent e)
{
- // todo test e.getSource() instead here
- if (EDIT.equals(e.getActionCommand()))
+ if (button == e.getSource())
{
- // The user has clicked the cell, so
- // bring up the dialog.
if (currentColor.isSimpleColour())
{
- // bring up simple color chooser
- button.setBackground(currentColor.getColour());
- colorChooser.setColor(currentColor.getColour());
- dialog.setVisible(true);
+ /*
+ * simple colour chooser
+ */
+ String ttl = MessageManager.getString("label.select_colour");
+ ColourChooserListener listener = new ColourChooserListener() {
+ @Override
+ public void colourSelected(Color c)
+ {
+ currentColor = new FeatureColour(c);
+ me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
+ }
+ };
+ JalviewColourChooser.showColourChooser(button, ttl, currentColor.getColour(), listener);
}
else
{
- // bring up graduated chooser.
+ /*
+ * variable colour and filters dialog
+ */
chooser = new FeatureTypeSettings(me.fr, type);
- chooser.setRequestFocusEnabled(true);
- chooser.requestFocus();
+ /**
+ * @j2sNative
+ */
+ {
+ chooser.setRequestFocusEnabled(true);
+ chooser.requestFocus();
+ }
chooser.addActionListener(this);
- chooser.showTab(true);
+ // Make the renderer reappear.
+ fireEditingStopped();
}
- // Make the renderer reappear.
- fireEditingStopped();
-
}
else
{
- if (currentColor.isSimpleColour())
- {
- /*
- * read off colour picked in colour chooser after OK pressed
- */
- currentColor = new FeatureColour(colorChooser.getColor());
- me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
- }
- else
+ /*
+ * after OK in variable colour dialog, any changes to colour
+ * (or filters!) are already set in FeatureRenderer, so just
+ * update table data without triggering updateFeatureRenderer
+ */
+ currentColor = fr.getFeatureColours().get(type);
+ FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type);
+ if (currentFilter == null)
{
- /*
- * after OK in variable colour dialog, any changes to colour
- * (or filters!) are already set in FeatureRenderer, so just
- * update table data without triggering updateFeatureRenderer
- */
- currentColor = fr.getFeatureColours().get(type);
- FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type);
- if (currentFilter == null)
- {
- currentFilter = new FeatureMatcherSet();
- }
- Object[] data = ((FeatureTableModel) table.getModel())
- .getData()[rowSelected];
- data[COLOUR_COLUMN] = currentColor;
- data[FILTER_COLUMN] = currentFilter;
+ currentFilter = new FeatureMatcherSet();
}
+ Object[] data = ((FeatureTableModel) table.getModel())
+ .getData()[rowSelected];
+ data[COLOUR_COLUMN] = currentColor;
+ data[FILTER_COLUMN] = currentFilter;
+
fireEditingStopped();
me.table.validate();
}
chooser.getWidth(), chooser.getHeight());
chooser.validate();
}
- chooser.showTab(false);
fireEditingStopped();
}
else if (e.getSource() instanceof Component)