content: // This file is part of AceWiki.
  // Copyright 2008-2013, AceWiki developers.
  // 
  // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
  // Lesser General Public License as published by the Free Software Foundation, either version 3 of
  // the License, or (at your option) any later version.
  // 
  // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  // Lesser General Public License for more details.
  // 
  // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
  // not, see http://www.gnu.org/licenses/.
  
  package ch.uzh.ifi.attempto.echocomp;
  
  import nextapp.echo.app.Alignment;
  import nextapp.echo.app.Column;
  import nextapp.echo.app.Extent;
  import nextapp.echo.app.Font;
  import nextapp.echo.app.Insets;
  import nextapp.echo.app.Row;
  import nextapp.echo.app.WindowPane;
  import nextapp.echo.app.event.ActionEvent;
  import nextapp.echo.app.event.ActionListener;
  
  /**
   * This class represents a window that contains a text area plus "OK" and "Cancel" buttons.
   * 
   * @author Tobias Kuhn
   */
  public class TextAreaWindow extends WindowPane implements ActionListener {
  	
  	private static final long serialVersionUID = -8910244587508187438L;
  	
  	private ActionListener actionListener;
  	
  	private TextArea textArea;
  	
  	/**
  	 * Creates a new text area window with the given title, text, and action-listener.
  	 * 
  	 * @param title The title of the window.
  	 * @param actionListener The action-listener or null.
  	 */
  	public TextAreaWindow(String title, ActionListener actionListener) {
  		this.actionListener = actionListener;
  		
  		setModal(true);
  		setTitle(title);
  		setTitleFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
  		setResizable(false);
  		setTitleBackground(Style.windowTitleBackground);
  		setStyleName("Default");
  		
  		Column mainColumn = new Column();
  		mainColumn.setInsets(new Insets(10, 10, 0, 0));
  		mainColumn.setCellSpacing(new Extent(10));
  		
  		textArea = new TextArea();
  		textArea.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
  		mainColumn.add(textArea);
  		
  		Row buttonBar = new Row();
  		buttonBar.setAlignment(new Alignment(Alignment.RIGHT, Alignment.CENTER));
  		buttonBar.setInsets(new Insets(0, 0, 10, 0));
  		buttonBar.setCellSpacing(new Extent(5));
  		GeneralButton okButton = new GeneralButton("general_action_ok", this, 100);
  		okButton.setActionCommand("OK");
  		buttonBar.add(okButton);
  		GeneralButton cancelButton = new GeneralButton("general_action_cancel", this, 100);
  		cancelButton.setActionCommand("Cancel");
  		buttonBar.add(cancelButton);
  		mainColumn.add(buttonBar);
  		
  		add(mainColumn);
  		
  		setSize(450, 300);
  
  		EchoThread.getActiveApplication().setFocusedComponent(textArea);
  	}
  	
  	/**
  	 * Returns the text of the text area.
  	 * 
  	 * @return The text of the text area.
  	 */
  	public String getText() {
  		return textArea.getText();
  	}
  	
  	/**
  	 * Sets the text of the text area.
  	 * 
  	 * @param text The new text of the text area.
  	 */
  	public void setText(String text) {
  		textArea.setText(text);
  	}
  	
  	/**
  	 * Sets the size of the text area window. The size of the text area is set accordingly.
  	 * 
  	 * @param width The width of the window in pixels.
  	 * @param height The height of the window in pixels.
  	 */
  	public void setSize(int width, int height) {
  		if (width < 200) width = 200;
  		if (height < 120) height = 120;
  		setWidth(new Extent(width));
  		setHeight(new Extent(height));
  		textArea.setWidth(new Extent(width - 47));
  		textArea.setHeight(new Extent(height - 108));
  	}
  	
  	public void actionPerformed(ActionEvent e) {
  		if (actionListener != null) {
  			actionListener.actionPerformed(new ActionEvent(this, e.getActionCommand()));
  		}
  		setVisible(false);
  		dispose();
  	}
  
  }
  