+ /**
+ * prototype of an automatically enabled/disabled analysis function
+ *
+ */
+ protected void setShowProductsEnabled()
+ {
+ SequenceI [] selection = viewport.getSequenceSelection();
+ if (canShowProducts(selection, viewport.getSelectionGroup()!=null, viewport.getAlignment().getDataset()))
+ {
+ showProducts.setEnabled(true);
+
+ } else {
+ showProducts.setEnabled(false);
+ }
+ }
+ /**
+ * search selection for sequence xRef products and build the
+ * show products menu.
+ * @param selection
+ * @param dataset
+ * @return true if showProducts menu should be enabled.
+ */
+ public boolean canShowProducts(SequenceI[] selection, boolean isRegionSelection, Alignment dataset)
+ {
+ boolean showp=false;
+ try {
+ showProducts.removeAll();
+ final boolean dna = viewport.getAlignment().isNucleotide();
+ final Alignment ds = dataset;
+ String[] ptypes = CrossRef.findSequenceXrefTypes(dna, selection, dataset);
+ //Object[] prods = CrossRef.buildXProductsList(viewport.getAlignment().isNucleotide(), selection, dataset, true);
+ final SequenceI[] sel = selection;
+ for (int t=0; ptypes!=null && t<ptypes.length; t++)
+ {
+ showp=true;
+ final boolean isRegSel = isRegionSelection;
+ final AlignFrame af = this;
+ final String source = ptypes[t];
+ JMenuItem xtype = new JMenuItem(ptypes[t]);
+ xtype.addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e)
+ {
+ // TODO: new thread for this call with vis-delay
+ af.showProductsFor(sel, ds, isRegSel, dna, source);
+ }
+
+ });
+ showProducts.add(xtype);
+ }
+ showProducts.setVisible(showp);
+ showProducts.setEnabled(showp);
+ } catch (Exception e)
+ {
+ jalview.bin.Cache.log.warn("canTranslate threw an exception - please report to help@jalview.org",e);
+ return false;
+ }
+ return showp;
+ }
+protected void showProductsFor(SequenceI[] sel, Alignment ds, boolean isRegSel, boolean dna, String source)
+ {
+ final boolean fisRegSel = isRegSel;
+ final boolean fdna = dna;
+ final String fsrc = source;
+ final AlignFrame ths = this;
+ final SequenceI[] fsel = sel;
+ Runnable foo = new Runnable() {