/**************************************************************************
/* This class shows a simple GUI created with Swt
/*
/* Copyright (c) 2002 by Bernhard Bablok (mail@bablokb.de)
/*
/* This program is free software; you can redistribute it and/or modify
/* it under the terms of the GNU General Public License as published
/* by  the Free Software Foundation; either version 2 of the License or
/* (at your option) any later version.
/*
/* This program 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 General Public License for more details.
/*
/* You should have received a copy of the GNU General Public License
/* along with this program; see the file COPYING.  If not, write to
/* the Free Software Foundation Inc., 59 Temple Place - Suite 330,
/* Boston, MA  02111-1307 USA
/**************************************************************************/

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.graphics.*;

/**
   This class shows a simple GUI created with Swt

   @version $Revision: 1.1 $
   @author  $Author: Bablokb $
*/

public class SwtGui {

  private final int WINDOW_WIDTH = 300, WINDOW_HEIGHT = 200;

  private Display     iDisplay;
  private Shell       iMainWindow;
  private Composite   iInputPanel;
  private Label       iLabel;
  private Text        iTextArea;
  private Text        iEntryField;
  private Button      iButton;
  private Color       iColorWhite;

  //////////////////////////////////////////////////////////////////////////////

  /**
     Constructor.
  */

  public SwtGui() {
    iDisplay = new Display();
    iMainWindow = new Shell(iDisplay);
    iMainWindow.setText("SWT-Example");
    iColorWhite = new Color(iDisplay,255,255,255);
  }

  //////////////////////////////////////////////////////////////////////////////

  /**
     Create GUI using Swt.
  */

  private void createGUI() {
    FillLayout layout = new FillLayout();
    // layout.justify = true;
    // layout.pack = true;
    // layout.wrap = false;
    layout.type = SWT.VERTICAL;
    iMainWindow.setLayout(layout);
    iTextArea = new Text(iMainWindow,SWT.MULTI);
    iTextArea.setBackground(iColorWhite);
    createPanel();

    iMainWindow.setMenuBar(createMenuBar());
    iMainWindow.setSize(WINDOW_WIDTH,WINDOW_HEIGHT);
    Rectangle screenSize = iDisplay.getClientArea();
    iMainWindow.setLocation((screenSize.width - WINDOW_WIDTH)/2,
			    (screenSize.height - WINDOW_HEIGHT)/2);
    iEntryField.setFocus();
  }

  //////////////////////////////////////////////////////////////////////////////

  /**
     Create input panel using Swt.
  */

  private void createPanel() {
    iInputPanel = new Composite(iMainWindow,SWT.NULL);
    RowLayout layout = new RowLayout();
    layout.justify = true;
    layout.wrap = false;
    layout.type = SWT.HORIZONTAL;
    iInputPanel.setLayout(new RowLayout());

    iLabel     = new Label(iInputPanel,SWT.LEFT);
    iLabel.setText("Text: ");

    iEntryField = new Text(iInputPanel,SWT.SINGLE);
    iEntryField.setBackground(iColorWhite);

    iButton = new Button(iInputPanel,SWT.PUSH | SWT.CENTER);
    iButton.setText("Add");

    iButton.addSelectionListener(new SelectionAdapter() {
	public void widgetSelected(SelectionEvent e) {
	  iTextArea.append(iEntryField.getText());
	  iTextArea.append("\n");
	}
      }
    );
  }

  //////////////////////////////////////////////////////////////////////////////

  /**
     Create menu using Swt.
  */

  private Menu createMenuBar() {
    Menu mb = new Menu(iMainWindow,SWT.BAR);

    Menu fileMenu = new Menu(mb);
    MenuItem fileMenuItem = new MenuItem(mb,SWT.CASCADE);
    fileMenuItem.setText("File");
    fileMenuItem.setMenu(fileMenu);

    MenuItem exitItem = new MenuItem(fileMenu,SWT.PUSH);
    exitItem.setText("Exit");
    exitItem.addSelectionListener(new SelectionAdapter () {
	public void widgetSelected(SelectionEvent e) {
	  exit();
	}
      });

    Menu helpMenu = new Menu(mb);
    MenuItem helpMenuItem = new MenuItem(mb,SWT.CASCADE);
    helpMenuItem.setText("Help");
    helpMenuItem.setMenu(helpMenu);

    MenuItem aboutItem = new MenuItem(helpMenu,SWT.PUSH);
    aboutItem.setText("About...");
    aboutItem.addSelectionListener(new SelectionAdapter() {
	public void widgetSelected(SelectionEvent e) {
	  about();
	}
      }
    );
    return mb;
  }

  //////////////////////////////////////////////////////////////////////////////

  /**
     Close window and leave application.
  */

  void exit() {
    iMainWindow.setVisible(false);
    iMainWindow.dispose();
  }

  //////////////////////////////////////////////////////////////////////////////

  /**
     Show about-dialog.
  */

  void about() {
    MessageBox box = new MessageBox(iMainWindow,SWT.ICON_INFORMATION|SWT.OK);
    box.setText("About SWT-Example");
    box.setMessage("SWT-Example class: " + SwtGui.class.getName());
    box.open();
  }

  //////////////////////////////////////////////////////////////////////////////

  /**
     Main event loop
  */

  private void processLoop() {
    iMainWindow.open();
    while (!iMainWindow.isDisposed()) {
      if (!iDisplay.readAndDispatch())
	iDisplay.sleep();
    }
    iDisplay.dispose();
  }

  //////////////////////////////////////////////////////////////////////////////


  /**
     Main entry point
  */

  public static void main(String[] args) {
    SwtGui gui = new SwtGui();
    gui.createGUI();
    gui.processLoop();
  }
}

