/**
 * IgoModel クラスは、囲碁Viewerのモデルを提供する抽象クラスです。
 * @author Jiro Suzuki
 */
abstract class IgoModel{

    /** 保存して閉じる */
    protected static final int SaveAndClose=0;
    /** 保存しないで閉じる */
    protected static final int NotSaveAndClose=1;
    /** 保存しないで閉じない */
    protected static final int NotSaveAndNotClose=2;

    protected IgoView view;
    protected IgoModel parent;
    protected Kifu kifu;
    protected Kifu kifuForExam;
    protected int numOfMoves;
    protected IntBoard intBoard;
    protected Mode mode;
    protected boolean isExam;
    protected String fileName;
    protected Turn turn;

    /**
     * 空の IgoModel インスタンスを生成します。
     */
    IgoModel(){
    }

    /**
     * 親インスタンス指定した IgoModel インスタンスを生成します。
     * @param parent 所有者
     */
    IgoModel(IgoModel parent){
        this.parent=parent;
    }

    /**
     * 指定されたビューを設定し、インスタンスを初期化します。
     * @param view インターフェース IgoView を実装したオブジェクト
     */
    public void initialize(IgoView view){
        this.view=view;
        initialize();
    }

    /**
     * インスタンスを初期化します。
     */
    public void initialize(){
        kifu=new Kifu();
        kifuForExam=new Kifu();
        numOfMoves=-1;
        intBoard=new IntBoard();
        mode=new Mode();
        isExam=false;
        fileName=new String("");
        turn=new Turn();
    }

    /**
      * ファイルを開くときに呼び出します。
      */
    public void open(){}

    /**
      * ファイルを新規作成するときに呼び出します。
      */
    public void record(){}

    /**
      * ファイルを上書き保存するときに呼び出します。
      */
    public void save(){}

    /**
      * ファイルを新規保存するときに呼び出します。
      */
    public void saveAs(){}

    /**
      * 現行モードを終了するときに呼び出します。
      */
    public void exit(){}

    /**
      * メインダイアログを閉じるときに呼び出します。
      */
    public void close(){}

    /**
      * 編集状態にするときに呼び出します。
      */
    public void startEdit(){}

    /**
      * 一手戻るときに呼び出します。
      */
    public void back(){}

    /**
      * 一手進むときに呼び出します。
      */
    public void forward(){}

    /**
      * 五手戻るときに呼び出します。
      */
    public void back5(){}

    /**
      * 五手進むときに呼び出します。
      */
    public void forward5(){}

    /**
      * 初手に戻るときに呼び出します。
      */
    public void backAll(){}

    /**
      * 終局面にするときに呼び出します。
      */
    public void forwardAll(){}

    /**
      * パスをするときに呼び出します。
      */
    public void pass(){}

    /**
      * 設計途中で変更が生じたため、棚上げ。
      */
    public void pause(){}

    /**
      * 検討モードと再生モードを行き来するときに呼び出します。
      */
    public void examine(){}

    /**
     * 石を置くときに呼び出します。
     * @param row 行番号
     * @param col 列番号
     */
    public void putStone(int row,int col){}

    /**
      * 対局情報を表示ときに呼び出します。
      */
    public void displayGameInfo(){}

    /**
      * 対局情報を更新するときに呼び出します。
      */
    public void updateGameInfo(GameInformation gameInfo){}

    /**
      * 自動再生にするときに呼び出します。
      */
    public void autoPlay(){}

    /**
      * 自動再生の再生速度を変更するときに呼び出します。
      */
    public void updateInterval(){}

    /**
      * ビューを更新するときに呼び出します。
      */
    public void doUpdateView(){}

    /**
      * 初期モード・新規作成モードを開始するときに呼び出します。
      */
    public void start(){}

    /**
     * 更新モードを開始するときに呼び出します。
     * @param kifu 棋譜情報
     * @param numOfMoves 手数
     * @param fileName ファイル名(フルパス指定)
     * @param turn 手番
     */
    public void start(Kifu kifu,int numOfMoves,String fileName,Turn turn){}

    /**
      * 再生モードを開始するときに呼び出します。
      * @param fileName ファイル名(フルパス指定)
      */
    public void start(String fileName){}

    private void write(){}
}