/**
 * IgoView インターフェースは、囲碁ViewerのViewが持つメソッドを定義します。
 * @author Jiro Suzuki
 */
public interface IgoView{

    /**
     * インスタンスを初期化します。
     * @param controller コントローラー
     */
    public void initialize(IgoModel controller);

    /**
     * コントローラーを変更します。
     * @param controller コントローラー
     */
    public void changeController(IgoModel controller);

    /**
     * ビューを更新します。
     * @param mode 動作モード
     * @param isExam 検討モードかどうかの真偽値
     * @param intBoard 盤面データ
     * @param gameInfo 対局情報
     * @param numOfMoves 手数
     */
    public void updateView(Mode mode,boolean isExam,IntBoard intBoard,GameInformation gameInfo,int numOfMoves);

    /**
     * ビューを更新します。
     * @param mode 動作モード
     * @param isExam 検討モードかどうかの真偽値
     * @param intBoard 盤面データ
     * @param gameInfo 対局情報
     * @param numOfMoves 手数
     * @param isAutoPlay 自動再生かどうかの真偽値
     */
    public void updateView(Mode mode,boolean isExam,IntBoard intBoard,GameInformation gameInfo,int numOfMoves,boolean isAutoPlay);

    /**
     * 操作を終了するかどうか確認します。
     * @return 確認の結果コード
     */
    public int askClosedOperation();

    /**
     * 「保存ウィンドウ」を表示します。
     * @return 「保存ウィンドウ」を表示した結果コード
     */
    public String showSaveDialog();

    /**
     * 「開くウィンドウ」を表示します。
     * @return 「開くウィンドウ」を表示した結果コード
     */
    public String showOpenDialog();

    /**
     * 自動再生時の再生速度を確認します。
     * @return 確認の結果コード
     */
    public int askIntervalTime();

    /**
     * 対局情報を表示します。
     * @param gameInfo 対局情報
     */
    public void showGameInfoDialog(GameInformation gameInfo);
}