X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=37258e427c791117e01b4c9cfc5e3ddf24015205;hb=2ca3e8f7613402996478e02579907bd0df8aa75d;hp=01a73109c9efa8f35343d68c9d13cc2d86c1e95e;hpb=00ec8073218a0788e62cc2aa22de9a1a14d81952;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 01a7310..37258e4 100644 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -29,6 +29,7 @@ import jalview.datamodel.features.FeatureMatcherI; 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; @@ -80,8 +81,6 @@ import javax.swing.Icon; 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; @@ -93,6 +92,7 @@ import javax.swing.JSlider; 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; @@ -135,9 +135,9 @@ public class FeatureSettings extends JPanel */ Object[][] originalData; - private float originalTransparency; + float originalTransparency; - private Map originalFilters; + Map originalFilters; final JInternalFrame frame; @@ -167,7 +167,7 @@ public class FeatureSettings extends JPanel /* * true when Feature Settings are updating from feature renderer */ - private boolean handlingUpdate = false; + boolean handlingUpdate = false; /* * holds {featureCount, totalExtent} for each feature type @@ -219,7 +219,7 @@ public class FeatureSettings extends JPanel 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, @@ -233,9 +233,25 @@ public class FeatureSettings extends JPanel } return tip; } + + /** + * Position the tooltip near the bottom edge of, and half way across, the + * current cell + */ + @Override + public Point getToolTipLocation(MouseEvent e) + { + Point point = e.getPoint(); + 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 - 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)); @@ -245,7 +261,7 @@ public class FeatureSettings extends JPanel 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); @@ -425,40 +441,53 @@ public class FeatureSettings extends JPanel * 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) { /* @@ -466,18 +495,8 @@ public class FeatureSettings extends JPanel * 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); } } } @@ -858,6 +877,9 @@ public class FeatureSettings extends JPanel */ void load() { + // TODO: JAL-3048 relies on Castor XML parsing: not needed for JS-jalview core + // functionalty + JalviewFileChooser chooser = new JalviewFileChooser("fc", SEQUENCE_FEATURE_COLOURS); chooser.setFileView(new JalviewFileView()); @@ -940,6 +962,7 @@ public class FeatureSettings extends JPanel */ void save() { + // TODO: JAL-3048 not needed for Jalview-JS - save colours JalviewFileChooser chooser = new JalviewFileChooser("fc", SEQUENCE_FEATURE_COLOURS); chooser.setFileView(new JalviewFileView()); @@ -1120,7 +1143,7 @@ public class FeatureSettings extends JPanel * @param data * @param visibleNew */ - private void updateFeatureRenderer(Object[][] data, boolean visibleNew) + void updateFeatureRenderer(Object[][] data, boolean visibleNew) { FeatureSettingsBean[] rowData = getTableAsBeans(data); @@ -1336,32 +1359,31 @@ public class FeatureSettings extends JPanel /** * Answers a suitable tooltip to show on the colour cell of the table * - * @param gcol + * @param fcol + * @param withHint + * if true include 'click to edit' and similar text * @return */ - public String getColorTooltip(FeatureColourI gcol) + public static String getColorTooltip(FeatureColourI fcol, + boolean withHint) { - if (gcol.isSimpleColour()) - { - return BASE_TOOLTIP; - } - StringBuilder tt = new StringBuilder(); - if (gcol.isAboveThreshold()) + if (fcol == null) { - tt.append("Thresholded (Above ").append(gcol.getThreshold()) - .append(")"); + return null; } - else if (gcol.isBelowThreshold()) + if (fcol.isSimpleColour()) { - tt.append("Thresholded (Below ").append(gcol.getThreshold()) - .append(")"); + return withHint ? BASE_TOOLTIP : null; } - else if (gcol.isColourByLabel()) + String description = fcol.getDescription(); + description = description.replaceAll("<", "<"); + description = description.replaceAll(">", ">"); + StringBuilder tt = new StringBuilder(description); + if (withHint) { - tt.insert(0, "Coloured by label text "); + tt.append("
").append(BASE_TOOLTIP).append("
"); } - tt.append("; ").append(BASE_TOOLTIP); - return tt.toString(); + return JvSwingUtils.wrapTooltip(true, tt.toString()); } public static void renderGraduatedColor(JLabel comp, FeatureColourI gcol, @@ -1639,17 +1661,13 @@ public class FeatureSettings extends JPanel 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, @@ -1658,73 +1676,69 @@ public class FeatureSettings extends JPanel 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(); } @@ -1817,7 +1831,6 @@ public class FeatureSettings extends JPanel chooser.getWidth(), chooser.getHeight()); chooser.validate(); } - chooser.showTab(false); fireEditingStopped(); } else if (e.getSource() instanceof Component) @@ -1859,7 +1872,6 @@ public class FeatureSettings extends JPanel button.setOpaque(true); button.setBackground(me.getBackground()); button.setText(currentFilter.toString()); - button.setToolTipText(currentFilter.toString()); button.setIcon(null); return button; }