package de.roboshock.gui.util;

import java.awt.Component;
import java.awt.Frame;

import javax.swing.InputMap;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.UIManager;


public class InputDialogJOptionPane {
	

	private static void setupUIManager() {
		InputMap im = (InputMap)UIManager.get("Button.focusInputMap");
		im.put( KeyStroke.getKeyStroke( "ENTER" ), "pressed" );
		im.put( KeyStroke.getKeyStroke( "released ENTER" ), "released" );
	}
	
	public static boolean getInput(Frame parent, String title, Object mainPanel) {
		int ret = JOptionPane.showOptionDialog(
				parent, mainPanel, title, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE ,
				null, new Object[]{"Ok", "Cancel"}, null);

		return (ret == 0); 
	}
	
	/**
	 *  Testing / Usage Example (mainly for TablePanel)
	 */
	public static void main(String[] args) {
		setupUIManager();
		
		final JTextField name = new JTextField();
		name.setColumns(20);
		final JPasswordField pwd = new JPasswordField();
		pwd.setColumns(20);
		final JTextField nochwas = new JTextField();
		nochwas.setColumns(12);

		TablePanel mainPanel = new TablePanel();
		int baseCol=1;
		mainPanel.add(0, 0, new JLabel("             ")); // indent
		mainPanel.add(baseCol+ 0, 0, 2, new JLabel("Login Data:"));
		mainPanel.add(baseCol+ 0, 1, new JLabel("Name:"));
		mainPanel.add(baseCol+ 1, 1, name);
		mainPanel.add(baseCol+ 0, 2, new JLabel("Passwort:"));
		mainPanel.add(baseCol+ 1, 2, pwd);
		mainPanel.add(baseCol+ 0, 3, new JLabel(""));
		mainPanel.add(baseCol+ 0, 4, new JLabel(""));
		mainPanel.add(baseCol+ 0, 5, 2, new JLabel("A long section headline:"));
		mainPanel.add(baseCol+ 0, 6, new JLabel("Some more:"));
		mainPanel.add(baseCol+ 1, 6, nochwas);
		mainPanel.add(baseCol+ 0, 7, new JLabel(""));
		
		
		boolean ret =  InputDialogJOptionPane.getInput(null, "Dialog", mainPanel); 
				
		if (! ret) {
			System.out.println("Canceled");
		}
		else {
			System.out.println("User: " + name.getText());
			System.out.println("PWD : " + new String(pwd.getPassword()));
		}

		// ========== example 2 ==========================
		
		mainPanel = TablePanel.createTwoColumnPanel(
				new Component[]{
				new JLabel("Login Data:"), null,
				new JLabel("Name:"), name,
				new JLabel("Passwort:"), pwd,
				new JLabel(""), null,
				new JLabel(""), null,
				new JLabel("A long section headline:"), null,
				new JLabel("Some more:"), nochwas,
				new JLabel(""), null});

		ret =  InputDialogJOptionPane.getInput(null, "Dialog", mainPanel); 
		
		if (! ret) {
			System.out.println("Canceled");
		}
		else {
			System.out.println("User: " + name.getText());
			System.out.println("PWD : " + new String(pwd.getPassword()));
		}
	}
}
