package imagej.plugin.gui.swing;

import java.awt.Dimension;
import java.awt.Toolkit;

import imagej.plugin.Plugin;
import imagej.plugin.PluginModule;
import imagej.plugin.gui.AbstractInputHarvester;
import imagej.plugin.gui.InputPanel;
import imagej.plugin.process.PluginPreprocessor;

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 * SwingInputHarvester is a plugin preprocessor that collects input parameter
 * values from the user using a {@link SwingInputPanel} dialog box.
 */
@Plugin(type = PluginPreprocessor.class)
public class SwingInputHarvester extends AbstractInputHarvester {

	@Override
	public InputPanel createInputPanel() {
		return new SwingInputPanel();
	}

	@Override
	public boolean showDialog(final InputPanel inputPanel,
		final PluginModule<?> module)
	{
		final JOptionPane optionPane = new JOptionPane(null);
		optionPane.setOptionType(JOptionPane.OK_CANCEL_OPTION);
		final JDialog dialog = optionPane.createDialog(module.getInfo().getLabel());
		final JPanel mainPane = (JPanel) optionPane.getComponent(0);
		final JPanel widgetPane = (JPanel) mainPane.getComponent(0);
		widgetPane.add((SwingInputPanel) inputPanel);
		dialog.setModal(true);
		dialog.pack();
		ensureDialogSizeReasonable(dialog);
		dialog.setVisible(true);
		final Integer rval = (Integer) optionPane.getValue();
		return rval != null && rval == JOptionPane.OK_OPTION;
	}

	private void ensureDialogSizeReasonable(JDialog dialog)
	{
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		
		Dimension dialogSize = dialog.getSize();

		int newWidth = dialogSize.width;
		int newHeight = dialogSize.height;
		
		if (dialogSize.width > (0.75*screenSize.width))
			newWidth = (int)(0.75 * screenSize.width);
		
		if (dialogSize.height > (0.75*screenSize.height))
			newHeight = (int)(0.75 * screenSize.height);

		dialog.setSize(newWidth, newHeight);
	}
}

@@ -31,61 +31,8 @@
 g;%0A%0A
-import java.awt.Dimension;%0Aimport java.awt.Toolkit;%0A%0A
 impo
@@ -227,16 +227,69 @@
 essor;%0A%0A
+import java.awt.Dimension;%0Aimport java.awt.Toolkit;%0A%0A
 import j
@@ -1138,16 +1138,75 @@
 ent(0);%0A
+%09%09// TODO - use JScrollPane in case there are many widgets%0A
 %09%09widget
@@ -1509,16 +1509,22 @@
 sonable(
+final 
 JDialog 
@@ -1530,22 +1530,27 @@
  dialog)
-%0A%09
+ 
 %7B%0A%09%09
+final 
 Dimensio
@@ -1608,22 +1608,27 @@
 nSize();
-%0A
 %09%09%0A%09%09
+final 
 Dimensio
@@ -1737,208 +1737,208 @@
 ht;%0A
-%09%09
 %0A%09%09
-if (dialogSize.width %3E (0.75*screenSize.width))%0A%09%09%09newWidth = (int)(0.75 * screenSize.width);%0A%09%09%0A%09%09if (dialogSize.height %3E (0.75*screenSize.height))%0A%09%09%09newHeight = (int)(0.75 * screenSize.h
+final int maxWidth = 3 * screenSize.width / 4;%0A%09%09final int maxHeight = 3 * screenSize.height / 4;%0A%0A%09%09if (newWidth %3E maxWidth) newWidth = maxWidth;%0A%09%09if (newHeight %3E maxHeight) newHeight = maxH
 eight
-)
 ;%0A%0A%09

Clean up Swing input harvester dialog a little.