package de.mpicbg.knime.scripting.r.node.plot; import de.mpicbg.knime.scripting.core.ScriptingNodeDialog; import de.mpicbg.knime.scripting.r.R4KnimeBundleActivator; import de.mpicbg.knime.scripting.r.RColumnSupport; import de.mpicbg.knime.scripting.r.plots.AbstractRPlotNodeModel; import de.mpicbg.knime.scripting.r.prefs.RPreferenceInitializer; import org.knime.core.node.InvalidSettingsException; import org.knime.core.node.defaultnodesettings.*; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.util.Arrays; /** * @author Holger Brandl */ public class RPlotNodeDialog extends ScriptingNodeDialog { public RPlotNodeDialog(String defaultScript, boolean enableTemplateRepository) { this(defaultScript, enableTemplateRepository, true); } public RPlotNodeDialog(String defaultScript, boolean enableTemplateRepository, boolean enableOpenExternal) { super(defaultScript, new RColumnSupport(), enableTemplateRepository, enableOpenExternal, true); final SettingsModelString fileSM = AbstractRPlotNodeModel.createOutputFileSM(); final SettingsModelBoolean overwriteSM = AbstractRPlotNodeModel.createOverwriteSM(); SettingsModelBoolean writeImageSM = AbstractRPlotNodeModel.createWriteFileSM(); createNewTab("Output Options"); addDialogComponent(new DialogComponentStringSelection(AbstractRPlotNodeModel.createImgTypeSM(), "File Type", Arrays.asList("png", "jpeg"))); addDialogComponent(new DialogComponentNumber(AbstractRPlotNodeModel.createWidthSM(), "Width", 10)); addDialogComponent(new DialogComponentNumber(AbstractRPlotNodeModel.createHeightSM(), "Height", 10)); createNewGroup("Save plot to file"); DialogComponentFileChooser chooser = new DialogComponentFileChooser(fileSM, "rplot.output.file", JFileChooser.SAVE_DIALOG, ".png",".jpeg") { // override this method to make the file-selection optional @SuppressWarnings("rawtypes") @Override protected void validateSettingsBeforeSave() throws InvalidSettingsException { try { super.validateSettingsBeforeSave(); } catch (InvalidSettingsException ise) { JComboBox fileComboBox = ((JComboBox) ((JPanel) getComponentPanel().getComponent(0)).getComponent(0)); final String file = fileComboBox.getEditor().getItem().toString(); ((SettingsModelString) getModel()).setStringValue((file == null || file.trim().length() == 0) ? "" : file); } } }; addDialogComponent(chooser); setHorizontalPlacement(true); writeImageSM.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { boolean enabled = ((SettingsModelBoolean)e.getSource()).getBooleanValue(); fileSM.setEnabled(enabled); overwriteSM.setEnabled(enabled); } }); addDialogComponent(new DialogComponentBoolean(writeImageSM, "Write image to file")); addDialogComponent(new DialogComponentBoolean(overwriteSM, "Overwrite existing file")); setHorizontalPlacement(false); closeCurrentGroup(); } @Override public String getTemplatesFromPreferences() { return R4KnimeBundleActivator.getDefault().getPreferenceStore().getString(RPreferenceInitializer.R_PLOT_TEMPLATES); } }