/*
 * Copyright 2006 Bedag Informatik AG
 *
 */
import com.ulcjava.base.application.AbstractApplication;
import com.ulcjava.base.application.ULCBoxPane;
import com.ulcjava.base.application.ULCButton;
import com.ulcjava.base.application.ULCComponent;
import com.ulcjava.base.application.ULCFrame;
import com.ulcjava.base.application.ULCLabel;
import com.ulcjava.base.application.ULCTextField;
import com.ulcjava.base.application.event.ActionEvent;
import com.ulcjava.base.application.event.FocusEvent;
import com.ulcjava.base.application.event.IFocusListener;
import com.ulcjava.base.application.event.KeyEvent;
import com.ulcjava.base.application.event.serializable.IActionListener;
import com.ulcjava.base.application.util.KeyStroke;
import com.ulcjava.base.development.DevelopmentRunner;


public class DefaultButtonSnippet extends AbstractApplication {
	
	private static class DataBean {
		private String text = null;
		public String getText() { return text; }
		public void setText(String text) { 
			System.out.println("New text set on bean: "+text);
			this.text = text;
		}
	}

	public void start() {
		final DataBean bean = new DataBean();
		
		final ULCFrame frame = new ULCFrame();
		frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);

		final ULCBoxPane pane = new ULCBoxPane();
		frame.add(pane);
		
		final ULCTextField textField1 = new ULCTextField();
		final ULCTextField textField2 = new ULCTextField();
		final ULCTextField textField3 = new ULCTextField();
		
		ULCLabel label1 = new ULCLabel("Label1");
		ULCLabel label2 = new ULCLabel("Label2");
		ULCLabel label3 = new ULCLabel("Label3");
		
		label1.setLabelFor(textField1);

		// Bean isn't updated, if default button is hit, because the
		// text field does not loose its focus.
		//		textField1.addFocusListener(new IFocusListener(){
		//			public void focusGained(FocusEvent arg0) {
		//				// noop
		//			}
		//			public void focusLost(FocusEvent arg0) {
		//				bean.setText(textField1.getText());
		//			}});

		// Bean is updated, but the default button is not reached,
		// becaus the action consumes the key event
		textField1.addActionListener(new IActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				bean.setText(textField1.getText());
			}});

		// Same beaviour as with addActionListener
		//		textField1.registerKeyboardAction(new IActionListener(){
		//			public void actionPerformed(ActionEvent arg0) {
		//				bean.setText(textField1.getText());
		//			}},
		//			KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
		//			ULCComponent.WHEN_FOCUSED);
		
		ULCButton button = new ULCButton("Button");
		button.addActionListener(new IActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				System.out.println("Bean text is: "+bean.getText());
			}});

		pane.set(0, 0, ULCBoxPane.BOX_LEFT_CENTER, label1); 
		pane.set(0, 1, ULCBoxPane.BOX_LEFT_CENTER, label2); 
		pane.set(0, 2, ULCBoxPane.BOX_LEFT_CENTER, label3); 
		pane.set(1, 0, ULCBoxPane.BOX_EXPAND_CENTER, textField1); 
		pane.set(1, 1, ULCBoxPane.BOX_EXPAND_CENTER, textField2); 
		pane.set(1, 2, ULCBoxPane.BOX_EXPAND_CENTER, textField3);
		pane.set(0,3, 2, 1, ULCBoxPane.BOX_EXPAND_CENTER, button);
		
		pane.getRootPane().setDefaultButton(button);
		
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		DevelopmentRunner.setApplicationClass(DefaultButtonSnippet.class);
		DevelopmentRunner.run();
	}

}
