// -*- Mode: Javascript -*- /*************************************** * [ctrl.txt] * * 概要 セッション管理、ファイル読み込み、flag管理、(キー処理)を担当する。 * * 参照ファイル settion.txt、jslb_dynamicload.txt、(input.txt) * * 作成 2006-06-07 by yoshida * 更新 2006-06-07 by yoshida エラー処理が入っていない。たとえばシナリオファイルに間違いがある場合のModel::initの処理とか。 * 更新 2006-06-07 by yoshida TODOが7つ残っている。 * 更新 2006-06-11 by yoshida nextの位置を考え直す。現在の仕様では、連続クリックをすると、どんどんnextが実行される。Update done後にnextし、onGO時にはUpdateだけするようにすれば良いのでは? * 更新 2006-06-21 by yoshida 2重にメッセージが出る問題は、update前にnextが発行され、一つ後ろのコマンドが実行された結果だった。 * 更新 2006-06-21 by yoshida フラグの自動テストを作成する。T_NWとFSELECTを使えば自動テストが可能なはず。 * 更新 2006-09-26 by yoshida フラグがチェックされない問題は、RANDAMの返し値がWnovCtrl_ENDになっている事が問題だった。WnovCtrl_ENDなのでキー入力可。なので、別ファイル読込み時にmodelがnextされ、結果先頭のコマンドが処理されない結果になっていた。新しい返し値「FILELOAD」を定義し、これが返ってきた時は、キー入力可にしないよう修正。ファイル読込み系のコマンド処理(GOTOENDING・FSELECT・RANDAM)は「FILELOAD」を返す。 ***************************************/ //////////////////////////////////////////////////////////// // 定数 //////////////////////////////////////////////////////////// var WnovCtrl_WAITING = 0; var CONTINUE = 1; var FILELOAD = 2; //////////////////////////////////////////////////////////// // ユーティリティ //////////////////////////////////////////////////////////// /** * 関数に引数を結びつけたクロージャを作成する * @param func 関数オブジェクト(thisを必要とするものは不可) * @param arg 関数に渡す引数 * @return 関数を引数付きで呼び出す関数を返す。 */ function makeClosure(func, arg){ var _func = func; var _arg = arg; var closure = function() { _func.apply(this, _arg); } return closure; } /** * 処理系がアイドルになったら呼び出したい関数を登録。 * @param func 関数オブジェクト(thisを必要とするものは不可) * @param arg 関数に渡す引数 * @return なし */ function setEvent(func, arg){ setTimeout(makeClosure(func, arg), 0); } //////////////////////////////////////////////////////////// // コンストラクタ //////////////////////////////////////////////////////////// /** * コントロールオブジェクトのコンストラクタ * @param model モデル部分(WnovModel)のインスタンス * @param view ビュー部分(WnovView)のインスタンス * @param fnDone 終了完了通知関数 * @return なし */ function WnovCtrl(model, view, fnDone){ this.model = model; this.view = view; this.flag = new Array; this.page = 0; this.filename = ""; this.fnDone = fnDone; this.bAccept = true; this.bSelecting = false; } //////////////////////////////////////////////////////////// // メンバメソッド //////////////////////////////////////////////////////////// /** * WnovCtrlのエントリーポイント * @param it WnovCtrlのインスタンス * @retval なし */ function WnovCtrl_restore(it){ var json = Wnov_getSession(); if(undefined == json.flag){ it.flag = new Array(512); for(var i=0;i