X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=f81ecce0e7a85853f21a51aea64cc4d977fff019;hb=b1613533d44e86c95bb2ae1e1428330b314df1f6;hp=6a59e1989f295b8f738877375242f9c3a7bff43c;hpb=2bd87d696f010a6364fca99c3137d6a06b9af23b;p=jalview.git
diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java
index 6a59e19..f81ecce 100644
--- a/src/jalview/gui/FeatureSettings.java
+++ b/src/jalview/gui/FeatureSettings.java
@@ -22,7 +22,6 @@ package jalview.gui;
import jalview.api.FeatureColourI;
import jalview.api.FeatureSettingsControllerI;
-import jalview.bin.Jalview;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.SequenceI;
import jalview.datamodel.features.FeatureMatcher;
@@ -36,7 +35,6 @@ import jalview.io.JalviewFileView;
import jalview.schemes.FeatureColour;
import jalview.util.MessageManager;
import jalview.util.Platform;
-import jalview.util.dialogrunner.RunResponse;
import jalview.viewmodel.seqfeatures.FeatureRendererModel.FeatureSettingsBean;
import jalview.xml.binding.jalview.JalviewUserColours;
import jalview.xml.binding.jalview.JalviewUserColours.Colour;
@@ -99,8 +97,8 @@ import javax.swing.ToolTipManager;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.plaf.TableUI;
import javax.swing.table.AbstractTableModel;
+import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
@@ -133,7 +131,8 @@ public class FeatureSettings extends JPanel
private static final int MIN_HEIGHT = 400;
- private final static String BASE_TOOLTIP = MessageManager.getString("label.click_to_edit");
+ private final static String BASE_TOOLTIP = MessageManager
+ .getString("label.click_to_edit");
final FeatureRenderer fr;
@@ -165,12 +164,6 @@ public class FeatureSettings extends JPanel
int selectedRow = -1;
- JButton fetchDAS = new JButton();
-
- JButton saveDAS = new JButton();
-
- JButton cancelDAS = new JButton();
-
boolean resettingTable = false;
/*
@@ -232,16 +225,16 @@ public class FeatureSettings extends JPanel
FeatureMatcherSet o = (FeatureMatcherSet) table.getValueAt(row,
column);
tip = o.isEmpty()
- ? MessageManager.getString("label.filters_tooltip")
+ ? MessageManager
+ .getString("label.configure_feature_tooltip")
: o.toString();
break;
default:
break;
}
-
+
return tip;
}
-
/**
* Position the tooltip near the bottom edge of, and half way across, the
@@ -258,27 +251,23 @@ public class FeatureSettings extends JPanel
return loc;
}
};
-
- // next line is needed to avoid (quiet) exceptions thrown
- // when column ordering changes so that the above constants
- // no longer apply.
- table.getTableHeader().setReorderingAllowed(false); // BH 2018
-
- table.getTableHeader().setFont(new Font("Verdana", Font.PLAIN, 12));
+ JTableHeader tableHeader = table.getTableHeader();
+ tableHeader.setFont(new Font("Verdana", Font.PLAIN, 12));
+ tableHeader.setReorderingAllowed(false);
+ table.setFont(new Font("Verdana", Font.PLAIN, 12));
ToolTipManager.sharedInstance().registerComponent(table);
-
- table.setDefaultEditor(FeatureColour.class, new ColorEditor(this));
+ table.setDefaultEditor(FeatureColour.class, new ColorEditor());
table.setDefaultRenderer(FeatureColour.class, new ColorRenderer());
- table.setDefaultEditor(FeatureMatcherSet.class, new FilterEditor(this));
+ table.setDefaultEditor(FeatureMatcherSet.class, new FilterEditor());
table.setDefaultRenderer(FeatureMatcherSet.class, new FilterRenderer());
-
+
TableColumn colourColumn = new TableColumn(COLOUR_COLUMN, 75,
- new ColorRenderer(), new ColorEditor(this));
+ new ColorRenderer(), new ColorEditor());
table.addColumn(colourColumn);
TableColumn filterColumn = new TableColumn(FILTER_COLUMN, 75,
- new FilterRenderer(), new FilterEditor(this));
+ new FilterRenderer(), new FilterEditor());
table.addColumn(filterColumn);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
@@ -342,7 +331,7 @@ public class FeatureSettings extends JPanel
data[i + direction] = temp;
}
updateFeatureRenderer(data);
- repaintTable();
+ table.repaint();
selectedRow = newRow;
}
}
@@ -377,18 +366,9 @@ public class FeatureSettings extends JPanel
frame = new JInternalFrame();
frame.setContentPane(this);
- if (Platform.isAMac())
- {
- Desktop.addInternalFrame(frame,
- MessageManager.getString("label.sequence_feature_settings"),
- 600, 480);
- }
- else
- {
- Desktop.addInternalFrame(frame,
- MessageManager.getString("label.sequence_feature_settings"),
- 600, 450);
- }
+ Desktop.addInternalFrame(frame,
+ MessageManager.getString("label.sequence_feature_settings"),
+ 600, Platform.isAMacAndNotJS() ? 480 : 450);
frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
frame.addInternalFrameListener(
@@ -405,62 +385,31 @@ public class FeatureSettings extends JPanel
inConstruction = false;
}
- /**
- * Constructs and shows a popup menu of possible actions on the selected row and
- * feature type
- *
- * @param rowSelected
- * @param type
- * @param typeCol
- * @param pt
- */
+ /**
+ * Constructs and shows a popup menu of possible actions on the selected row
+ * and feature type
+ *
+ * @param rowSelected
+ * @param type
+ * @param typeCol
+ * @param pt
+ */
protected void showPopupMenu(final int rowSelected, final String type,
final Object typeCol, final Point pt)
{
- final FeatureColourI featureColour = (FeatureColourI) typeCol;
-
JPopupMenu men = new JPopupMenu(MessageManager
.formatMessage("label.settings_for_param", new String[]
{ type }));
- JMenuItem scr = new JMenuItem(
- MessageManager.getString("label.sort_by_score"));
- men.add(scr);
- final FeatureSettings me = this;
- scr.addActionListener(new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- me.af.avc
- .sortAlignmentByFeatureScore(Arrays.asList(new String[]
- { type }));
- }
- });
- JMenuItem dens = new JMenuItem(
- MessageManager.getString("label.sort_by_density"));
- dens.addActionListener(new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- me.af.avc
- .sortAlignmentByFeatureDensity(Arrays.asList(new String[]
- { type }));
- }
- });
- men.add(dens);
+ final FeatureColourI featureColour = (FeatureColourI) typeCol;
/*
- * variable colour options include colour by label, by score,
- * by selected attribute text, or attribute value
+ * menu option to select (or deselect) variable colour
*/
final JCheckBoxMenuItem variableColourCB = new JCheckBoxMenuItem(
MessageManager.getString("label.variable_colour"));
variableColourCB.setSelected(!featureColour.isSimpleColour());
men.add(variableColourCB);
-
+
/*
* checkbox action listener doubles up as listener to OK
* from the variable colour / filters dialog
@@ -472,12 +421,16 @@ public class FeatureSettings extends JPanel
{
if (e.getSource() == variableColourCB)
{
+ men.setVisible(true); // BH 2018 for JavaScript because this is a
+ // checkbox
+ men.setVisible(false); // BH 2018 for JavaScript because this is a
+ // checkbox
if (featureColour.isSimpleColour())
{
/*
* toggle simple colour to variable colour - show dialog
*/
- FeatureTypeSettings fc = new FeatureTypeSettings(me.fr, type);
+ FeatureTypeSettings fc = new FeatureTypeSettings(fr, type);
fc.addActionListener(this);
}
else
@@ -485,7 +438,8 @@ public class FeatureSettings extends JPanel
/*
* toggle variable to simple colour - show colour chooser
*/
- String title = MessageManager.formatMessage("label.select_colour_for", type);
+ String title = MessageManager
+ .formatMessage("label.select_colour_for", type);
ColourChooserListener listener = new ColourChooserListener()
{
@Override
@@ -494,15 +448,16 @@ public class FeatureSettings extends JPanel
table.setValueAt(new FeatureColour(c), rowSelected,
COLOUR_COLUMN);
table.validate();
- me.updateFeatureRenderer(
+ updateFeatureRenderer(
((FeatureTableModel) table.getModel()).getData(),
false);
}
};
- JalviewColourChooser.showColourChooser(me, title, featureColour.getMaxColour(), listener);
+ JalviewColourChooser.showColourChooser(FeatureSettings.this,
+ title, featureColour.getMaxColour(), listener);
}
}
- else
+ else
{
if (e.getSource() instanceof FeatureTypeSettings)
{
@@ -512,12 +467,43 @@ public class FeatureSettings extends JPanel
*/
FeatureColourI fci = fr.getFeatureColours().get(type);
table.setValueAt(fci, rowSelected, COLOUR_COLUMN);
- table.validate();
+ // BH 2018 setting a table value does not invalidate it.
+ // System.out.println("FeatureSettings is valied" +
+ // table.validate();
}
}
}
});
+ men.addSeparator();
+
+ JMenuItem scr = new JMenuItem(
+ MessageManager.getString("label.sort_by_score"));
+ men.add(scr);
+ scr.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ af.avc.sortAlignmentByFeatureScore(Arrays.asList(new String[]
+ { type }));
+ }
+ });
+ JMenuItem dens = new JMenuItem(
+ MessageManager.getString("label.sort_by_density"));
+ dens.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ af.avc.sortAlignmentByFeatureDensity(Arrays.asList(new String[]
+ { type }));
+ }
+ });
+ men.add(dens);
+
JMenuItem selCols = new JMenuItem(
MessageManager.getString("label.select_columns_containing"));
selCols.addActionListener(new ActionListener()
@@ -777,8 +763,8 @@ public class FeatureSettings extends JPanel
}
/**
- * Updates 'originalData' (used for restore on Cancel) if we detect that changes
- * have been made outwith this dialog
+ * Updates 'originalData' (used for restore on Cancel) if we detect that
+ * changes have been made outwith this dialog
*
* - a new feature type added (and made visible)
* - a feature colour changed (in the Amend Features dialog)
@@ -842,8 +828,8 @@ public class FeatureSettings extends JPanel
/**
* Remove from the groups panel any checkboxes for groups that are not in the
- * foundGroups set. This enables removing a group from the display when the last
- * feature in that group is deleted.
+ * foundGroups set. This enables removing a group from the display when the
+ * last feature in that group is deleted.
*
* @param foundGroups
*/
@@ -898,13 +884,15 @@ public class FeatureSettings extends JPanel
chooser.setDialogTitle(
MessageManager.getString("label.load_feature_colours"));
chooser.setToolTipText(MessageManager.getString("action.load"));
- chooser.response(new RunResponse(JalviewFileChooser.APPROVE_OPTION){
-
- @Override
- public void run() {
- File file = chooser.getSelectedFile();
- load(file);
- }});
+ chooser.setResponseHandler(0, new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ File file = chooser.getSelectedFile();
+ load(file);
+ }
+ });
chooser.showOpenDialog(this);
}
@@ -965,11 +953,10 @@ public class FeatureSettings extends JPanel
if (table != null)
{
resetTable(null);
- Object[][] data = ((FeatureTableModel) table.getModel())
- .getData();
+ Object[][] data = ((FeatureTableModel) table.getModel()).getData();
ensureOrder(data);
updateFeatureRenderer(data, false);
- repaintTable();
+ table.repaint();
}
} catch (Exception ex)
{
@@ -990,11 +977,11 @@ public class FeatureSettings extends JPanel
MessageManager.getString("label.save_feature_colours"));
chooser.setToolTipText(MessageManager.getString("action.save"));
int option = chooser.showSaveDialog(this);
- if (option == JalviewFileChooser.APPROVE_OPTION)
- {
- File file = chooser.getSelectedFile();
- save(file);
- }
+ if (option == JalviewFileChooser.APPROVE_OPTION)
+ {
+ File file = chooser.getSelectedFile();
+ save(file);
+ }
}
/**
@@ -1008,8 +995,8 @@ public class FeatureSettings extends JPanel
ucs.setSchemeName("Sequence Features");
try
{
- PrintWriter out = new PrintWriter(new OutputStreamWriter(
- new FileOutputStream(file), "UTF-8"));
+ PrintWriter out = new PrintWriter(
+ new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
/*
* sort feature types by colour order, from 0 (highest)
@@ -1046,11 +1033,11 @@ public class FeatureSettings extends JPanel
FeatureMatcherSetI filter = fr.getFeatureFilter(featureType);
if (filter != null && !filter.isEmpty())
{
- Iterator iterator = filter.getMatchers().iterator();
+ Iterator iterator = filter.getMatchers()
+ .iterator();
FeatureMatcherI firstMatcher = iterator.next();
jalview.xml.binding.jalview.FeatureMatcherSet ms = jalview.project.Jalview2XML
- .marshalFilter(firstMatcher, iterator,
- filter.isAnded());
+ .marshalFilter(firstMatcher, iterator, filter.isAnded());
Filter filterModel = new Filter();
filterModel.setFeatureType(featureType);
filterModel.setMatcherSet(ms);
@@ -1083,7 +1070,7 @@ public class FeatureSettings extends JPanel
data[i][SHOW_COLUMN] = !(Boolean) data[i][SHOW_COLUMN];
}
updateFeatureRenderer(data, true);
- repaintTable();
+ table.repaint();
}
public void orderByAvWidth()
@@ -1132,7 +1119,8 @@ public class FeatureSettings extends JPanel
else
{
width[i] /= max; // normalize
- fr.setOrder(data[i][TYPE_COLUMN].toString(), width[i]); // store for later
+ fr.setOrder(data[i][TYPE_COLUMN].toString(), width[i]); // store for
+ // later
}
if (i > 0)
{
@@ -1146,28 +1134,7 @@ public class FeatureSettings extends JPanel
}
updateFeatureRenderer(data, false);
- repaintTable();
- }
-
- /**
- * Repaints the table using alternative code for Java and J2S
- */
- private void repaintTable()
- {
- // BH 2018
- // Here is a needed intervention
- // because generally we don't "repaint"
- // the table. We re-create the HTML divs
- // that is associated with it. A better
- // way to do this would be to fire a property change.
- @SuppressWarnings("unused")
- TableUI ui = table.getUI();
- /**
- * @j2sNative ui.repaintTable$();
- */
- {
- table.repaint();
- }
+ table.repaint();
}
public void close()
@@ -1187,8 +1154,8 @@ public class FeatureSettings extends JPanel
}
/**
- * Update the priority order of features; only repaint if this changed the order
- * of visible features
+ * Update the priority order of features; only repaint if this changed the
+ * order of visible features
*
* @param data
* @param visibleNew
@@ -1297,22 +1264,6 @@ public class FeatureSettings extends JPanel
}
}
});
- help.setFont(JvSwingUtils.getLabelFont());
- help.setText(MessageManager.getString("action.help"));
- help.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- try
- {
- Help.showHelpWindow(HelpId.SequenceFeatureSettings);
- } catch (HelpSetException e1)
- {
- e1.printStackTrace();
- }
- }
- });
JButton cancel = new JButton(MessageManager.getString("action.cancel"));
cancel.setFont(JvSwingUtils.getLabelFont());
@@ -1441,7 +1392,7 @@ public class FeatureSettings extends JPanel
{
boolean thr = false;
StringBuilder tx = new StringBuilder();
-
+
if (gcol.isColourByAttribute())
{
tx.append(FeatureMatcher
@@ -1498,7 +1449,7 @@ public class FeatureSettings extends JPanel
private String[] columnNames = {
MessageManager.getString("label.feature_type"),
MessageManager.getString("action.colour"),
- MessageManager.getString("label.filter"),
+ MessageManager.getString("label.configuration"),
MessageManager.getString("label.show") };
private Object[][] data;
@@ -1698,11 +1649,10 @@ public class FeatureSettings extends JPanel
renderGraduatedColor(comp, gcol, w, h);
}
+ @SuppressWarnings("serial")
class ColorEditor extends AbstractCellEditor
implements TableCellEditor, ActionListener
{
- FeatureSettings me;
-
FeatureColourI currentColor;
FeatureTypeSettings chooser;
@@ -1715,9 +1665,8 @@ public class FeatureSettings extends JPanel
int rowSelected = 0;
- public ColorEditor(FeatureSettings fs)
+ public ColorEditor()
{
- 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,
@@ -1742,31 +1691,39 @@ public class FeatureSettings extends JPanel
/*
* simple colour chooser
*/
- String ttl = MessageManager.formatMessage("label.select_colour_for", type);
- ColourChooserListener listener = new ColourChooserListener()
+ String ttl = MessageManager
+ .formatMessage("label.select_colour_for", type);
+ ColourChooserListener listener = new ColourChooserListener()
{
@Override
public void colourSelected(Color c)
{
currentColor = new FeatureColour(c);
- me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
+ table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
+ fireEditingStopped();
+ }
+
+ @Override
+ public void cancel()
+ {
fireEditingStopped();
}
- @Override
- public void cancel()
- {
- fireEditingStopped();
- }
};
- JalviewColourChooser.showColourChooser(button, ttl, currentColor.getColour(), listener);
+ JalviewColourChooser.showColourChooser(button, ttl,
+ currentColor.getColour(), listener);
}
else
{
/*
* variable colour and filters dialog
*/
- chooser = new FeatureTypeSettings(me.fr, type);
- if (!Jalview.isJS())
+ chooser = new FeatureTypeSettings(fr, type);
+ if (!Platform.isJS())
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
chooser.setRequestFocusEnabled(true);
chooser.requestFocus();
@@ -1783,7 +1740,7 @@ public class FeatureSettings extends JPanel
* update table data without triggering updateFeatureRenderer
*/
currentColor = fr.getFeatureColours().get(type);
- FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type);
+ FeatureMatcherSetI currentFilter = fr.getFeatureFilter(type);
if (currentFilter == null)
{
currentFilter = new FeatureMatcherSet();
@@ -1792,12 +1749,25 @@ public class FeatureSettings extends JPanel
.getData()[rowSelected];
data[COLOUR_COLUMN] = currentColor;
data[FILTER_COLUMN] = currentFilter;
-
fireEditingStopped();
- me.table.validate();
+ // SwingJS needs an explicit repaint() here,
+ // rather than relying upon no validation having
+ // occurred since the stopEditing call was made.
+ // Its laying out has not been stopped by the modal frame
+ table.validate();
+ table.repaint();
}
}
+ /**
+ * Override allows access to this method from anonymous inner classes
+ */
+ @Override
+ protected void fireEditingStopped()
+ {
+ super.fireEditingStopped();
+ }
+
// Implement the one CellEditor method that AbstractCellEditor doesn't.
@Override
public Object getCellEditorValue()
@@ -1807,14 +1777,14 @@ public class FeatureSettings extends JPanel
// Implement the one method defined by TableCellEditor.
@Override
- public Component getTableCellEditorComponent(JTable theTable, Object value,
- boolean isSelected, int row, int column)
+ public Component getTableCellEditorComponent(JTable theTable,
+ Object value, boolean isSelected, int row, int column)
{
currentColor = (FeatureColourI) value;
this.rowSelected = row;
- type = me.table.getValueAt(row, TYPE_COLUMN).toString();
+ type = table.getValueAt(row, TYPE_COLUMN).toString();
button.setOpaque(true);
- button.setBackground(me.getBackground());
+ button.setBackground(FeatureSettings.this.getBackground());
if (!currentColor.isSimpleColour())
{
JLabel btn = new JLabel();
@@ -1836,14 +1806,14 @@ public class FeatureSettings extends JPanel
/**
* The cell editor for the Filter column. It displays the text of any filters
- * for the feature type in that row (in full as a tooltip, possible abbreviated
- * as display text). On click in the cell, opens the Feature Display Settings
- * dialog at the Filters tab.
+ * for the feature type in that row (in full as a tooltip, possible
+ * abbreviated as display text). On click in the cell, opens the Feature
+ * Display Settings dialog at the Filters tab.
*/
+ @SuppressWarnings("serial")
class FilterEditor extends AbstractCellEditor
implements TableCellEditor, ActionListener
{
- FeatureSettings me;
FeatureMatcherSetI currentFilter;
@@ -1857,9 +1827,8 @@ public class FeatureSettings extends JPanel
int rowSelected = 0;
- public FilterEditor(FeatureSettings me)
+ public FilterEditor()
{
- this.me = me;
button = new JButton();
button.setActionCommand(EDIT);
button.addActionListener(this);
@@ -1874,7 +1843,7 @@ public class FeatureSettings extends JPanel
{
if (button == e.getSource())
{
- FeatureTypeSettings chooser = new FeatureTypeSettings(me.fr, type);
+ FeatureTypeSettings chooser = new FeatureTypeSettings(fr, type);
chooser.addActionListener(this);
chooser.setRequestFocusEnabled(true);
chooser.requestFocus();
@@ -1896,17 +1865,23 @@ public class FeatureSettings extends JPanel
* update table data without triggering updateFeatureRenderer
*/
FeatureColourI currentColor = fr.getFeatureColours().get(type);
- currentFilter = me.fr.getFeatureFilter(type);
+ currentFilter = fr.getFeatureFilter(type);
if (currentFilter == null)
{
currentFilter = new FeatureMatcherSet();
}
+
Object[] data = ((FeatureTableModel) table.getModel())
.getData()[rowSelected];
data[COLOUR_COLUMN] = currentColor;
data[FILTER_COLUMN] = currentFilter;
fireEditingStopped();
- me.table.validate();
+ // SwingJS needs an explicit repaint() here,
+ // rather than relying upon no validation having
+ // occurred since the stopEditing call was made.
+ // Its laying out has not been stopped by the modal frame
+ table.validate();
+ table.repaint();
}
}
@@ -1917,14 +1892,14 @@ public class FeatureSettings extends JPanel
}
@Override
- public Component getTableCellEditorComponent(JTable theTable, Object value,
- boolean isSelected, int row, int column)
+ public Component getTableCellEditorComponent(JTable theTable,
+ Object value, boolean isSelected, int row, int column)
{
currentFilter = (FeatureMatcherSetI) value;
this.rowSelected = row;
- type = me.table.getValueAt(row, TYPE_COLUMN).toString();
+ type = table.getValueAt(row, TYPE_COLUMN).toString();
button.setOpaque(true);
- button.setBackground(me.getBackground());
+ button.setBackground(FeatureSettings.this.getBackground());
button.setText(currentFilter.toString());
button.setIcon(null);
return button;
@@ -2009,7 +1984,8 @@ class FeatureIcon implements Icon
g.fillRect(s1, 0, e1 - s1, height);
}
g.setColor(gcol.getMaxColour());
- g.fillRect(0, e1, width - e1, height);
+ // g.fillRect(0, e1, width - e1, height); // BH 2018
+ g.fillRect(e1, 0, width - e1, height);
}
}
}