Merge remote-tracking branch 'origin/features/JAL-2814ftsHelp' into merge/JAL-2814
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 5 Mar 2019 12:01:37 +0000 (12:01 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 5 Mar 2019 12:01:37 +0000 (12:01 +0000)
1  2 
help/help.jhm
src/jalview/gui/FeatureSettings.java

diff --combined help/help.jhm
@@@ -22,7 -22,7 +22,7 @@@
     <mapID target="home" url="html/index.html" />
     
     <mapID target="new" url="html/whatsNew.html"/>
 -   <mapID target="release" url="html/releases.html#Jalview.2.10.4"/>
 +   <mapID target="release" url="html/releases.html#Jalview.$$Version-Rel$$"/>
     <mapID target="alannotation" url="html/features/annotation.html"/>
     <mapID target="keys" url="html/keys.html"/>
     <mapID target="newkeys" url="html/features/newkeystrokes.html"/>
@@@ -70,6 -70,8 +70,6 @@@
     <mapID target="annotations.fileformat" url="html/features/annotationsFormat.html"/>
     <mapID target="features.fileformat" url="html/features/featuresFormat.html"/>
     <mapID target="features.featureschemes" url="html/features/featureschemes.html"/>
 -   <mapID target="das.settings" url="html/features/dassettings.html"/>
 -   <mapID target="das.viewing" url="html/features/dasfeatures.html"/>
     <mapID target="edit" url="html/editing/index.html"/>
     <mapID target="jalarchive" url="html/features/jalarchive.html"/>
     <mapID target="multipleviews" url="html/features/multipleViews.html"/>
     
     <mapID target="biojson" url="html/features/bioJsonFormat.html" />
     <mapID target="pdbfetcher" url="html/features/pdbsequencefetcher.html" />
+    <mapID target="pdbfts" url="html/features/pdbsequencefetcher.html#pdbfts" />
     <mapID target="siftsmapping" url="html/features/siftsmapping.html" />
     <mapID target="pdbchooser" url="html/features/structurechooser.html" />
     <mapID target="selectcolbyannot" url="html/features/columnFilterByAnnotation.html" />
     <mapID target="ensemblfetch" url="html/features/ensemblsequencefetcher.html" />
     
     <mapID target="uniprotfetcher" url="html/features/uniprotsequencefetcher.html" />
+    <mapID target="uniprotfts" url="html/features/uniprotsequencefetcher.html#uniprotfts" />
     
     <mapID target="urllinks" url="html/webServices/urllinks.html" />
     <mapID target="linksprefs" url="html/features/preferences.html#links" />
@@@ -24,21 -24,22 +24,21 @@@ import jalview.api.FeatureColourI
  import jalview.api.FeatureSettingsControllerI;
  import jalview.datamodel.AlignmentI;
  import jalview.datamodel.SequenceI;
 +import jalview.datamodel.features.FeatureMatcher;
  import jalview.datamodel.features.FeatureMatcherI;
  import jalview.datamodel.features.FeatureMatcherSet;
  import jalview.datamodel.features.FeatureMatcherSetI;
  import jalview.gui.Help.HelpId;
  import jalview.io.JalviewFileChooser;
  import jalview.io.JalviewFileView;
  import jalview.schemes.FeatureColour;
  import jalview.util.MessageManager;
  import jalview.util.Platform;
 -import jalview.viewmodel.AlignmentViewport;
  import jalview.viewmodel.seqfeatures.FeatureRendererModel.FeatureSettingsBean;
 -import jalview.ws.DasSequenceFeatureFetcher;
 -import jalview.ws.dbsources.das.api.jalviewSourceI;
 +import jalview.xml.binding.jalview.JalviewUserColours;
 +import jalview.xml.binding.jalview.JalviewUserColours.Colour;
 +import jalview.xml.binding.jalview.JalviewUserColours.Filter;
 +import jalview.xml.binding.jalview.ObjectFactory;
  
  import java.awt.BorderLayout;
  import java.awt.Color;
@@@ -73,6 -74,7 +73,6 @@@ import java.util.Iterator
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
 -import java.util.Vector;
  
  import javax.help.HelpSetException;
  import javax.swing.AbstractCellEditor;
@@@ -80,6 -82,7 +80,6 @@@ import javax.swing.BorderFactory
  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;
@@@ -93,19 -96,13 +93,19 @@@ import javax.swing.JSlider
  import javax.swing.JTable;
  import javax.swing.ListSelectionModel;
  import javax.swing.SwingConstants;
 -import javax.swing.SwingUtilities;
 +import javax.swing.border.Border;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  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;
 +import javax.xml.bind.JAXBContext;
 +import javax.xml.bind.JAXBElement;
 +import javax.xml.bind.Marshaller;
 +import javax.xml.stream.XMLInputFactory;
 +import javax.xml.stream.XMLStreamReader;
  
  public class FeatureSettings extends JPanel
          implements FeatureSettingsControllerI
  
    private static final int MIN_HEIGHT = 400;
  
 -  DasSourceBrowser dassourceBrowser;
 -
 -  DasSequenceFeatureFetcher dasFeatureFetcher;
 -
 -  JPanel dasSettingsPane = new JPanel();
 +  private final static String BASE_TOOLTIP = MessageManager.getString("label.click_to_edit");
  
    final FeatureRenderer fr;
  
  
    int selectedRow = -1;
  
 -  JButton fetchDAS = new JButton();
 -
 -  JButton saveDAS = new JButton();
 -
 -  JButton cancelDAS = new JButton();
 -
    boolean resettingTable = false;
  
    /*
        {
          String tip = null;
          int column = table.columnAtPoint(e.getPoint());
 +        int row = table.rowAtPoint(e.getPoint());
 +
          switch (column)
          {
          case TYPE_COLUMN:
            tip = JvSwingUtils.wrapTooltip(true, MessageManager
                    .getString("label.feature_settings_click_drag"));
            break;
 +        case COLOUR_COLUMN:
 +          FeatureColourI colour = (FeatureColourI) table.getValueAt(row,
 +                  column);
 +          tip = getColorTooltip(colour, true);
 +          break;
          case FILTER_COLUMN:
            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
 +       * 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));
 +    JTableHeader tableHeader = table.getTableHeader();
 +    tableHeader.setFont(new Font("Verdana", Font.PLAIN, 12));
 +    tableHeader.setReorderingAllowed(false);
      table.setFont(new Font("Verdana", Font.PLAIN, 12));
  
 -    // 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());
  
      // MessageManager.getString("label.feature_settings_click_drag")));
      scrollPane.setViewportView(table);
  
 -    dassourceBrowser = new DasSourceBrowser(this);
 -    dasSettingsPane.add(dassourceBrowser, BorderLayout.CENTER);
 -
      if (af.getViewport().isShowSequenceFeatures() || !fr.hasRenderOrder())
      {
        fr.findAllFeatures(true); // display everything!
                        javax.swing.event.InternalFrameEvent evt)
                {
                  fr.removePropertyChangeListener(change);
 -                dassourceBrowser.fs = null;
                };
              });
      frame.setLayer(JLayeredPane.PALETTE_LAYER);
      });
      men.add(dens);
  
 -    /*
 -     * variable colour options include colour by label, by score,
 -     * by selected attribute text, or attribute value
 -     */
 -    final JCheckBoxMenuItem mxcol = new JCheckBoxMenuItem(
 -            MessageManager.getString("label.variable_colour"));
 -    mxcol.setSelected(!featureColour.isSimpleColour());
 -    men.add(mxcol);
 -    mxcol.addActionListener(new ActionListener()
 -    {
 -      JColorChooser colorChooser;
 -
 -      @Override
 -      public void actionPerformed(ActionEvent e)
 -      {
 -        if (e.getSource() == mxcol)
 -        {
 -          if (featureColour.isSimpleColour())
 -          {
 -            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);
 -          }
 -        }
 -        else
 -        {
 -          if (e.getSource() instanceof FeatureTypeSettings)
 -          {
 -            /*
 -             * update after OK in feature colour dialog; the updated
 -             * 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.validate();
 -            me.updateFeatureRenderer(
 -                    ((FeatureTableModel) table.getModel()).getData(),
 -                    false);
 -          }
 -        }
 -      }
 -
 -    });
 -
      JMenuItem selCols = new JMenuItem(
              MessageManager.getString("label.select_columns_containing"));
      selCols.addActionListener(new ActionListener()
        InputStreamReader in = new InputStreamReader(
                new FileInputStream(file), "UTF-8");
  
 -      JalviewUserColours jucs = JalviewUserColours.unmarshal(in);
 +      JAXBContext jc = JAXBContext
 +              .newInstance("jalview.xml.binding.jalview");
 +      javax.xml.bind.Unmarshaller um = jc.createUnmarshaller();
 +      XMLStreamReader streamReader = XMLInputFactory.newInstance()
 +              .createXMLStreamReader(in);
 +      JAXBElement<JalviewUserColours> jbe = um.unmarshal(streamReader,
 +              JalviewUserColours.class);
 +      JalviewUserColours jucs = jbe.getValue();
 +
 +      // JalviewUserColours jucs = JalviewUserColours.unmarshal(in);
  
        /*
         * load feature colours
         */
 -      for (int i = jucs.getColourCount() - 1; i >= 0; i--)
 +      for (int i = jucs.getColour().size() - 1; i >= 0; i--)
        {
 -        jalview.schemabinding.version2.Colour newcol = jucs.getColour(i);
 -        FeatureColourI colour = Jalview2XML.unmarshalColour(newcol);
 +        Colour newcol = jucs.getColour().get(i);
 +        FeatureColourI colour = jalview.project.Jalview2XML
 +                .parseColour(newcol);
          fr.setColour(newcol.getName(), colour);
 -        fr.setOrder(newcol.getName(), i / (float) jucs.getColourCount());
 +        fr.setOrder(newcol.getName(), i / (float) jucs.getColour().size());
        }
  
        /*
         * load feature filters; loaded filters will replace any that are
         * currently defined, other defined filters are left unchanged 
         */
 -      for (int i = 0; i < jucs.getFilterCount(); i++)
 +      for (int i = 0; i < jucs.getFilter().size(); i++)
        {
 -        jalview.schemabinding.version2.Filter filterModel = jucs
 -                .getFilter(i);
 +        Filter filterModel = jucs.getFilter().get(i);
          String featureType = filterModel.getFeatureType();
 -        FeatureMatcherSetI filter = Jalview2XML.unmarshalFilter(featureType,
 -                filterModel.getMatcherSet());
 +        FeatureMatcherSetI filter = jalview.project.Jalview2XML
 +                .parseFilter(featureType, filterModel.getMatcherSet());
          if (!filter.isEmpty())
          {
            fr.setFeatureFilter(featureType, filter);
        for (String featureType : sortedTypes)
        {
          FeatureColourI fcol = fr.getFeatureStyle(featureType);
 -        jalview.schemabinding.version2.Colour col = Jalview2XML.marshalColour(
 -                featureType, fcol);
 -        ucs.addColour(col);
 +        Colour col = jalview.project.Jalview2XML.marshalColour(featureType,
 +                fcol);
 +        ucs.getColour().add(col);
        }
  
        /*
          {
            Iterator<FeatureMatcherI> iterator = filter.getMatchers().iterator();
            FeatureMatcherI firstMatcher = iterator.next();
 -          MatcherSet ms = Jalview2XML.marshalFilter(firstMatcher, iterator,
 +          jalview.xml.binding.jalview.FeatureMatcherSet ms = jalview.project.Jalview2XML
 +                  .marshalFilter(firstMatcher, iterator,
                    filter.isAnded());
            Filter filterModel = new Filter();
            filterModel.setFeatureType(featureType);
            filterModel.setMatcherSet(ms);
 -          ucs.addFilter(filterModel);
 +          ucs.getFilter().add(filterModel);
          }
        }
 +      JAXBContext jaxbContext = JAXBContext
 +              .newInstance(JalviewUserColours.class);
 +      Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
 +      jaxbMarshaller.marshal(
 +              new ObjectFactory().createJalviewUserColours(ucs), out);
  
 -      ucs.marshal(out);
 +      // jaxbMarshaller.marshal(object, pout);
 +      // marshaller.marshal(object);
 +      out.flush();
 +
 +      // ucs.marshal(out);
        out.close();
      } catch (Exception ex)
      {
      JPanel settingsPane = new JPanel();
      settingsPane.setLayout(new BorderLayout());
  
 -    dasSettingsPane.setLayout(new BorderLayout());
 -
      JPanel bigPanel = new JPanel();
      bigPanel.setLayout(new BorderLayout());
  
          }
        }
      });
-     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());
      transparency.setMaximum(70);
      transparency.setToolTipText(
              MessageManager.getString("label.transparency_tip"));
 -    fetchDAS.setText(MessageManager.getString("label.fetch_das_features"));
 -    fetchDAS.addActionListener(new ActionListener()
 -    {
 -      @Override
 -      public void actionPerformed(ActionEvent e)
 -      {
 -        fetchDAS_actionPerformed(e);
 -      }
 -    });
 -    saveDAS.setText(MessageManager.getString("action.save_as_default"));
 -    saveDAS.addActionListener(new ActionListener()
 -    {
 -      @Override
 -      public void actionPerformed(ActionEvent e)
 -      {
 -        saveDAS_actionPerformed(e);
 -      }
 -    });
 -
 -    JPanel dasButtonPanel = new JPanel();
 -    dasButtonPanel.setBorder(BorderFactory.createEtchedBorder());
 -    dasSettingsPane.setBorder(null);
 -    cancelDAS.setEnabled(false);
 -    cancelDAS.setText(MessageManager.getString("action.cancel_fetch"));
 -    cancelDAS.addActionListener(new ActionListener()
 -    {
 -      @Override
 -      public void actionPerformed(ActionEvent e)
 -      {
 -        cancelDAS_actionPerformed(e);
 -      }
 -    });
  
      JPanel transPanel = new JPanel(new GridLayout(1, 2));
      bigPanel.add(transPanel, BorderLayout.SOUTH);
      buttonPanel.add(loadColours);
      buttonPanel.add(saveColours);
      bigPanel.add(scrollPane, BorderLayout.CENTER);
 -    dasSettingsPane.add(dasButtonPanel, BorderLayout.SOUTH);
 -    dasButtonPanel.add(fetchDAS);
 -    dasButtonPanel.add(cancelDAS);
 -    dasButtonPanel.add(saveDAS);
      settingsPane.add(bigPanel, BorderLayout.CENTER);
      settingsPane.add(buttonPanel, BorderLayout.SOUTH);
      this.add(settingsPane);
    }
  
 -  public void fetchDAS_actionPerformed(ActionEvent e)
 -  {
 -    fetchDAS.setEnabled(false);
 -    cancelDAS.setEnabled(true);
 -    dassourceBrowser.setGuiEnabled(false);
 -    Vector<jalviewSourceI> selectedSources = dassourceBrowser
 -            .getSelectedSources();
 -    doDasFeatureFetch(selectedSources, true, true);
 -  }
 -
    /**
 -   * get the features from selectedSources for all or the current selection
 +   * Answers a suitable tooltip to show on the colour cell of the table
     * 
 -   * @param selectedSources
 -   * @param checkDbRefs
 -   * @param promptFetchDbRefs
 +   * @param fcol
 +   * @param withHint
 +   *          if true include 'click to edit' and similar text
 +   * @return
     */
 -  private void doDasFeatureFetch(List<jalviewSourceI> selectedSources,
 -          boolean checkDbRefs, boolean promptFetchDbRefs)
 +  public static String getColorTooltip(FeatureColourI fcol,
 +          boolean withHint)
    {
 -    SequenceI[] dataset, seqs;
 -    int iSize;
 -    AlignmentViewport vp = af.getViewport();
 -    if (vp.getSelectionGroup() != null
 -            && vp.getSelectionGroup().getSize() > 0)
 -    {
 -      iSize = vp.getSelectionGroup().getSize();
 -      dataset = new SequenceI[iSize];
 -      seqs = vp.getSelectionGroup().getSequencesInOrder(vp.getAlignment());
 +    if (fcol == null)
 +    {
 +      return null;
      }
 -    else
 +    if (fcol.isSimpleColour())
      {
 -      iSize = vp.getAlignment().getHeight();
 -      seqs = vp.getAlignment().getSequencesArray();
 +      return withHint ? BASE_TOOLTIP : null;
      }
 -
 -    dataset = new SequenceI[iSize];
 -    for (int i = 0; i < iSize; i++)
 +    String description = fcol.getDescription();
 +    description = description.replaceAll("<", "&lt;");
 +    description = description.replaceAll(">", "&gt;");
 +    StringBuilder tt = new StringBuilder(description);
 +    if (withHint)
      {
 -      dataset[i] = seqs[i].getDatasetSequence();
 +      tt.append("<br>").append(BASE_TOOLTIP).append("</br>");
      }
 -
 -    cancelDAS.setEnabled(true);
 -    dasFeatureFetcher = new jalview.ws.DasSequenceFeatureFetcher(dataset,
 -            this, selectedSources, checkDbRefs, promptFetchDbRefs);
 -    af.getViewport().setShowSequenceFeatures(true);
 -    af.showSeqFeatures.setSelected(true);
 +    return JvSwingUtils.wrapTooltip(true, tt.toString());
    }
  
 -  /**
 -   * blocking call to initialise the das source browser
 -   */
 -  public void initDasSources()
 -  {
 -    dassourceBrowser.initDasSources();
 -  }
 -
 -  /**
 -   * examine the current list of das sources and return any matching the given
 -   * nicknames in sources
 -   * 
 -   * @param sources
 -   *          Vector of Strings to resolve to DAS source nicknames.
 -   * @return sources that are present in source list.
 -   */
 -  public List<jalviewSourceI> resolveSourceNicknames(Vector<String> sources)
 -  {
 -    return dassourceBrowser.sourceRegistry.resolveSourceNicknames(sources);
 -  }
 -
 -  /**
 -   * get currently selected das sources. ensure you have called initDasSources
 -   * before calling this.
 -   * 
 -   * @return vector of selected das source nicknames
 -   */
 -  public Vector<jalviewSourceI> getSelectedSources()
 -  {
 -    return dassourceBrowser.getSelectedSources();
 -  }
 -
 -  /**
 -   * properly initialise DAS fetcher and then initiate a new thread to fetch
 -   * features from the named sources (rather than any turned on by default)
 -   * 
 -   * @param sources
 -   * @param block
 -   *          if true then runs in same thread, otherwise passes to the Swing
 -   *          executor
 -   */
 -  public void fetchDasFeatures(Vector<String> sources, boolean block)
 +  public static void renderGraduatedColor(JLabel comp, FeatureColourI gcol,
 +          int w, int h)
    {
 -    initDasSources();
 -    List<jalviewSourceI> resolved = dassourceBrowser.sourceRegistry
 -            .resolveSourceNicknames(sources);
 -    if (resolved.size() == 0)
 +    boolean thr = false;
 +    StringBuilder tx = new StringBuilder();
 +  
 +    if (gcol.isColourByAttribute())
      {
 -      resolved = dassourceBrowser.getSelectedSources();
 +      tx.append(FeatureMatcher
 +              .toAttributeDisplayName(gcol.getAttributeName()));
      }
 -    if (resolved.size() > 0)
 +    else if (!gcol.isColourByLabel())
      {
 -      final List<jalviewSourceI> dassources = resolved;
 -      fetchDAS.setEnabled(false);
 -      // cancelDAS.setEnabled(true); doDasFetch does this.
 -      Runnable fetcher = new Runnable()
 -      {
 -
 -        @Override
 -        public void run()
 -        {
 -          doDasFeatureFetch(dassources, true, false);
 -
 -        }
 -      };
 -      if (block)
 +      tx.append(MessageManager.getString("label.score"));
 +    }
 +    tx.append(" ");
 +    if (gcol.isAboveThreshold())
 +    {
 +      thr = true;
 +      tx.append(">");
 +    }
 +    if (gcol.isBelowThreshold())
 +    {
 +      thr = true;
 +      tx.append("<");
 +    }
 +    if (gcol.isColourByLabel())
 +    {
 +      if (thr)
        {
 -        fetcher.run();
 +        tx.append(" ");
        }
 -      else
 +      if (!gcol.isColourByAttribute())
        {
 -        SwingUtilities.invokeLater(fetcher);
 +        tx.append("Label");
        }
 +      comp.setIcon(null);
      }
 -  }
 -
 -  public void saveDAS_actionPerformed(ActionEvent e)
 -  {
 -    dassourceBrowser
 -            .saveProperties(jalview.bin.Cache.applicationProperties);
 -  }
 -
 -  public void complete()
 -  {
 -    fetchDAS.setEnabled(true);
 -    cancelDAS.setEnabled(false);
 -    dassourceBrowser.setGuiEnabled(true);
 -
 -  }
 -
 -  public void cancelDAS_actionPerformed(ActionEvent e)
 -  {
 -    if (dasFeatureFetcher != null)
 +    else
      {
 -      dasFeatureFetcher.cancel();
 +      Color newColor = gcol.getMaxColour();
 +      comp.setBackground(newColor);
 +      // System.err.println("Width is " + w / 2);
 +      Icon ficon = new FeatureIcon(gcol, comp.getBackground(), w, h, thr);
 +      comp.setIcon(ficon);
 +      // tt+="RGB value: Max (" + newColor.getRed() + ", "
 +      // + newColor.getGreen() + ", " + newColor.getBlue()
 +      // + ")\nMin (" + minCol.getRed() + ", " + minCol.getGreen()
 +      // + ", " + minCol.getBlue() + ")");
      }
 -    complete();
 -  }
 -
 -  public void noDasSourceActive()
 -  {
 -    complete();
 -    JvOptionPane.showInternalConfirmDialog(Desktop.desktop,
 -            MessageManager.getString("label.no_das_sources_selected_warn"),
 -            MessageManager.getString("label.no_das_sources_selected_title"),
 -            JvOptionPane.DEFAULT_OPTION, JvOptionPane.INFORMATION_MESSAGE);
 +    comp.setHorizontalAlignment(SwingConstants.CENTER);
 +    comp.setText(tx.toString());
    }
  
    // ///////////////////////////////////////////////////////////////////////
      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;
  
    class ColorRenderer extends JLabel implements TableCellRenderer
    {
 -    javax.swing.border.Border unselectedBorder = null;
 +    Border unselectedBorder = null;
  
 -    javax.swing.border.Border selectedBorder = null;
 -
 -    final String baseTT = "Click to edit, right/apple click for menu.";
 +    Border selectedBorder = null;
  
      public ColorRenderer()
      {
      {
        FeatureColourI cellColour = (FeatureColourI) color;
        setOpaque(true);
 -      setToolTipText(baseTT);
        setBackground(tbl.getBackground());
        if (!cellColour.isSimpleColour())
        {
      renderGraduatedColor(comp, gcol, w, h);
    }
  
 -  public static void renderGraduatedColor(JLabel comp, FeatureColourI gcol,
 -          int w, int h)
 -  {
 -    boolean thr = false;
 -    StringBuilder tt = new StringBuilder();
 -    StringBuilder tx = new StringBuilder();
 -
 -    if (gcol.isColourByAttribute())
 -    {
 -      tx.append(String.join(":", gcol.getAttributeName()));
 -    }
 -    else if (!gcol.isColourByLabel())
 -    {
 -      tx.append(MessageManager.getString("label.score"));
 -    }
 -    tx.append(" ");
 -    if (gcol.isAboveThreshold())
 -    {
 -      thr = true;
 -      tx.append(">");
 -      tt.append("Thresholded (Above ").append(gcol.getThreshold())
 -              .append(") ");
 -    }
 -    if (gcol.isBelowThreshold())
 -    {
 -      thr = true;
 -      tx.append("<");
 -      tt.append("Thresholded (Below ").append(gcol.getThreshold())
 -              .append(") ");
 -    }
 -    if (gcol.isColourByLabel())
 -    {
 -      tt.append("Coloured by label text. ").append(tt);
 -      if (thr)
 -      {
 -        tx.append(" ");
 -      }
 -      if (!gcol.isColourByAttribute())
 -      {
 -        tx.append("Label");
 -      }
 -      comp.setIcon(null);
 -    }
 -    else
 -    {
 -      Color newColor = gcol.getMaxColour();
 -      comp.setBackground(newColor);
 -      // System.err.println("Width is " + w / 2);
 -      Icon ficon = new FeatureIcon(gcol, comp.getBackground(), w, h, thr);
 -      comp.setIcon(ficon);
 -      // tt+="RGB value: Max (" + newColor.getRed() + ", "
 -      // + newColor.getGreen() + ", " + newColor.getBlue()
 -      // + ")\nMin (" + minCol.getRed() + ", " + minCol.getGreen()
 -      // + ", " + minCol.getBlue() + ")");
 -    }
 -    comp.setHorizontalAlignment(SwingConstants.CENTER);
 -    comp.setText(tx.toString());
 -    if (tt.length() > 0)
 -    {
 -      if (comp.getToolTipText() == null)
 -      {
 -        comp.setToolTipText(tt.toString());
 -      }
 -      else
 -      {
 -        comp.setToolTipText(
 -                tt.append(" ").append(comp.getToolTipText()).toString());
 -      }
 -    }
 -  }
 -
    class ColorEditor extends AbstractCellEditor
            implements TableCellEditor, ActionListener
    {
          {
            // bring up graduated chooser.
            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
        {
                    chooser.getWidth(), chooser.getHeight());
            chooser.validate();
          }
 -        chooser.showTab(false);
          fireEditingStopped();
        }
        else if (e.getSource() instanceof Component)
        button.setOpaque(true);
        button.setBackground(me.getBackground());
        button.setText(currentFilter.toString());
 -      button.setToolTipText(currentFilter.toString());
        button.setIcon(null);
        return button;
      }