/**
 * $Id: HistoryKeyPressListener.java,v 1.1 2005/04/05 15:38:41 rampil Exp $
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 *
 */
package org.logical_paradox.console.event.history;

import java.awt.event.KeyEvent;

import org.logical_paradox.console.Document;
import org.logical_paradox.console.event.ConsoleEventObject;
import org.logical_paradox.console.event.StandardKeyPressListener;
import org.logical_paradox.shell.Shell;

/**
 * 行入力ヒストリ機能つきキー押下イベントハンドラ
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public class HistoryKeyPressListener extends StandardKeyPressListener {
	/** ヒストリドライバ */
	private final HistoryDriver history = new HistoryDriver();
	/** ドキュメント */
	private final Document document;
	/**
	 * コンストラクタ
	 * @param d 操作対象のドキュメントクラス
	 * @param s シェル
	 */
	public HistoryKeyPressListener(Document d, Shell s) {
		super(d, s);
		document = d;
	}

	/**
	 * キー押下イベント
	 * 基本的にはスーパークラスに入力処理を任せるが，カーソルの上下だけはヒストリ操作用にこのメソッドでトラップする
	 * @param e キー押下イベント
	 */
	public void onKeyPressed(ConsoleEventObject e) {
		super.onKeyPressed(e);

		switch(e.getKeyCode()) {
			case KeyEvent.VK_UP:			// カーソル上
				document.deleteLine();
				document.insert(history.back());
				break;
			case KeyEvent.VK_DOWN:			// カーソル下
				document.deleteLine();
				document.insert(history.forward());
				break;
			case KeyEvent.VK_ENTER:		// ENTER
				// ヒストリに新しい行を追加する
				history.addHistory(document.getCommitedLine());
				break;
		}
	}
}
