/*
 * "Peko" Visual Novel System
 *
 * All Rights Reserved.
 * Copyright (c) 1999-2003 Tsukuba Bunko.
 *
 * $Id: SelectCoordinator.java,v 1.1.2.1 2003/12/11 10:15:10 ppoi Exp $
 */
package tsukuba_bunko.peko.scenario.select;

import	java.util.List;

import	tsukuba_bunko.peko.Logger;

import	tsukuba_bunko.peko.canvas.CanvasManager;

import	tsukuba_bunko.peko.canvas.select.SelectItem;

import	tsukuba_bunko.peko.scenario.Coordinator;


/**
 * SelectCanvas に対する処理を取り持つコーディネータモジュールです。
 * @author	$Author: ppoi $
 * @version	$Revision: 1.1.2.1 $
 */
public class SelectCoordinator	extends Coordinator	{

	/**
	 * 選択肢リスト
	 */
	protected List	_selectItems = null;

	/**
	 * 現在アクティブなスレッド
	 */
	protected Thread	_activeThread = null;


	/**
	 * <code>SelectCoordinator</code> のインスタンスを生成します。
	 */
	public SelectCoordinator()
	{
		super();
	}


	/**
	 * SelectCanvas に対する操作を開始します。
	 */
	public void begin()
	{
		if( isActiveThread() )	{
			getActionControler().setSaveEnabled( true );
			_selectItems = new java.util.ArrayList( 4 );
		}
	}

	/**
	 * SelectCanvas に対する操作を終了し、キャンバスの状態を確定します。
	 */
	public void commit()
	{
		if( isActiveThread() )	{
			getActionControler().setSaveEnabled( false );
		}
	}

	/**
	 * 選択肢を追加します。
	 * @param	id	選択肢 ID
	 * @param	text	選択肢の文章
	 */
	public void addSelectItem( String id, String text )
	{
		if( id == null )	{
			throw new IllegalArgumentException( "id is not specified." );
		}
		else if( text == null)	{
			throw new IllegalArgumentException( "text is not specified." );
		}

		if( isActiveThread() )	{
			SelectItem	item = new SelectItem();
			item.setID( id );
			item.setText( text );
			_selectItems.add( item );
		}
	}

	/**
	 * ユーザーに対し選択肢を表示し、選択された ID を取得します。
	 * @return	選択された選択肢の選択肢 ID
	 */
	public String select()
	{
		if( isActiveThread() )	{
			if( (_selectItems == null) || _selectItems.isEmpty() )	{
				Logger.debug( "[scenario.select] no select items!" );
				return null;
			}
			else	{
				CanvasManager	canvasManager = getCanvasManager();
				String	id = canvasManager.showSelect( _selectItems );
				if( id == null )	{
					Logger.debug( "[scenario.select] canceled." );
				}
				canvasManager.advancesNewPage();
				return id;
			}
		}
		else	{
			return null;
		}
	}

	/**
	 * SelectCanvas に対する操作を終了します。
	 */
	public void end()
	{
		if( isActiveThread() )	{
			_activeThread = null;
			if( _selectItems != null )	{
				_selectItems.clear();
				_selectItems = null;
			}
		}
	}
}
