/*
 * FrontEndo for TErminal
 * Zaurus SLシリーズのターミナルでの日本語入力をサポートするプログラム。
 * 岡田洋氏の ToyEdit を元に作成。
 *
 * Copyright (c) 2002 HIGAKI, Kenji <kaze@yk.rim.or.jp>
 *
 * ToyEdit original author:
 * Copyright (c) 2002 Hiroshi Okada <oka@kt.rim.or.jp>
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 */

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.awt.datatransfer.*;

/**
 *  Fete アプリケーションのメインクラス
 */
public class Fete implements ActionListener,WindowListener{
  /*
   * 定数
   */
  final static String TITLE_HEAD = "Fete:";   // タイトルバーに表示されるテキストの頭
  final static int FRAME_W = 240;   // メインフレームのサイズ
  final static int FRAME_H = 195; 

  /*
   * 表示するコンポーネント
   */
  TextArea theTextArea;  
  Frame theFrame;

  /**
   * 初期化
   * コンポーネントを作成し設定する
   */
  public void init() {
    theFrame = new Frame("Fete");
    theFrame.addWindowListener( this);
    theTextArea = new TextArea();
    theTextArea.setText("");
    theFrame.add( theTextArea);
    theFrame.setSize( FRAME_W, FRAME_H);
    theFrame.show();
    theFrame.setSize( FRAME_W, FRAME_H);  // show したあとでないと正しく setSize されない?
  }

  /*
   * イベントのハンドラ
   */
  public void windowActivated( WindowEvent e) {
  }
  public void windowClosed( WindowEvent e) {
  }
  public void windowClosing( WindowEvent e) {
    doCommand( "quit");
  }
  /**
   * ウインドウが隠れた場合。
   * 入力テキストがあればそれをクリップボードに。
   * その後全テキストクリア。
   * なければなにもせず。
   */
  public void windowDeactivated( WindowEvent e) {
    String s = theTextArea.getText();
	if (!s.equals("")) {
      StringSelection ss = new StringSelection( s);
      Clipboard c =  theTextArea.getToolkit().getSystemClipboard();
      c.setContents( ss, ss);
      theTextArea.setText("");
	}
  }
  public void windowDeiconified( WindowEvent e) {
  }
  public void windowIconified( WindowEvent e) {
  }
  public void windowOpened( WindowEvent e) {
  }  
   
  /**
   * アクションイベントを受け取ったら、コマンド実行メソッドを呼び出す
   */
  public void actionPerformed( ActionEvent ae) {
    String cmd = ae.getActionCommand();
    doCommand( cmd);
  }

  /**
   * コマンド実行メソッド
   * コマンドによってこのオブジェクトの適切なメソッドを呼び出す。
   * とりあえず quit だけ。
   */
  public void doCommand( String cmd) {
    if( cmd.equals( "quit")) {
      doQuit();
    }
  }

  /**
   * 終了する
   */
  public void doQuit() {
    System.exit(0);
  }

  /**
   * プログラム開始メソッド
   * インスタンスを作成して実行する
   */
  public static void main( String[] argv) {
    Fete fe = new Fete();
    fe.init();
  }
}
