From 75b32b502423d6f6181479ebdbf1d51b647034fa Mon Sep 17 00:00:00 2001 From: Jan Eglinger Date: Thu, 17 Jun 2021 13:39:55 +0200 Subject: [PATCH] Add StringToResultsTableConverter This converter allows to get a ResultsTable by its title string. In addition, the populateInputCandidates() method allows to get a list of open results tables, e.g. to generate a choice dropdown in ObjectWidget. Since we're using ImageJ1 classes directly, we need to add the new converter class to the exceptions in ImageJ1EncapsulationTest. --- .../convert/StringToResultTableConverter.java | 52 +++++++++++++++++++ .../legacy/ImageJ1EncapsulationTest.java | 1 + 2 files changed, 53 insertions(+) create mode 100644 src/main/java/net/imagej/legacy/convert/StringToResultTableConverter.java diff --git a/src/main/java/net/imagej/legacy/convert/StringToResultTableConverter.java b/src/main/java/net/imagej/legacy/convert/StringToResultTableConverter.java new file mode 100644 index 000000000..f507b4d76 --- /dev/null +++ b/src/main/java/net/imagej/legacy/convert/StringToResultTableConverter.java @@ -0,0 +1,52 @@ +package net.imagej.legacy.convert; + +import java.awt.Frame; +import java.util.Collection; + +import org.scijava.Priority; +import org.scijava.convert.Converter; +import org.scijava.plugin.Plugin; + +import ij.WindowManager; +import ij.measure.ResultsTable; +import ij.text.TextWindow; + +@Plugin(type = Converter.class, priority = Priority.LOW) +public class StringToResultTableConverter extends +AbstractLegacyConverter { + + @Override + public boolean canConvert(Object src, Class dest) { + return super.canConvert(src, dest) && convert(src, getOutputType()) != null; + } + + @Override + public T convert(Object src, Class dest) { + String title = (String) src; + @SuppressWarnings("unchecked") + T rt = (T) ResultsTable.getResultsTable(title); + return rt; + } + + @Override + public void populateInputCandidates(Collection objects) { + Frame[] nonImageWindows = WindowManager.getNonImageWindows(); + for (Frame frame : nonImageWindows) { + if (frame instanceof TextWindow) { + ResultsTable rt = ((TextWindow) frame).getTextPanel().getResultsTable(); + if (rt != null) objects.add(rt); + } + } + } + + @Override + public Class getInputType() { + return String.class; + } + + @Override + public Class getOutputType() { + return ResultsTable.class; + } + +} diff --git a/src/test/java/net/imagej/legacy/ImageJ1EncapsulationTest.java b/src/test/java/net/imagej/legacy/ImageJ1EncapsulationTest.java index 5c3051250..3b88812ff 100644 --- a/src/test/java/net/imagej/legacy/ImageJ1EncapsulationTest.java +++ b/src/test/java/net/imagej/legacy/ImageJ1EncapsulationTest.java @@ -102,6 +102,7 @@ public void verifyEncapsulation() throws Exception { className.startsWith(net.imagej.legacy.convert.ResultsTableWrapper.class.getName()) || className.startsWith(net.imagej.legacy.convert.ROITreeToOverlayConverter.class.getName()) || className.startsWith(net.imagej.legacy.convert.StringToImagePlusConverter.class.getName()) || + className.startsWith(net.imagej.legacy.convert.StringToResultTableConverter.class.getName()) || className.startsWith(net.imagej.legacy.convert.TableListWrapper.class.getName()) || className.startsWith(net.imagej.legacy.convert.TableToResultsTableConverters.class.getName()) || className.startsWith(net.imagej.legacy.convert.TableUnwrapper.class.getName()) ||