/// <summary> /// [UI Thread] : engine_pathに一致するエンジン設定を引っ張ってくる。 /// </summary> /// <param name="config"></param> /// <param name="engine_path"></param> /// <returns></returns> public static IndivisualEngineOptions Find(EngineConfig config, string engine_folder_path) { // 要素をinsertするかも知れないので一応lockしておく。 // 呼び出すのはUI Threadのはずではあるが.. lock (config) { var options = config.IndivisualEnginesOptions.Find(x => x.FolderPath == engine_folder_path); if (options == null) { // ないので生成して返す。 options = new IndivisualEngineOptions(engine_folder_path); config.IndivisualEnginesOptions.Add(options); } return(options); } }
/// <summary> /// 思考エンジンに渡すべきエンジンオプションの値を求める。 /// nameで指定したoptionが存在しなければnullが返る。 /// </summary> /// <param name="name">option名</param> /// <param name="commonSetting">共通設定</param> /// <param name="indSetting">個別設定</param> /// <param name="preset">プリセット</param> /// <returns></returns> public string GetOptionValue(string name, List <EngineOption> commonSetting, IndivisualEngineOptions indSetting, List <EngineOption> preset) { string value = null; // 共通設定の反映 if (commonSetting != null) { var opt = commonSetting.Find(x => x.Name == name); if (opt != null) { value = opt.Value; } } // 個別設定の反映 if (indSetting != null && indSetting.Options != null) { var opt = indSetting.Options.Find(x => x.Name == name); if (opt != null) { if (!opt.FollowCommonSetting /* 共通設定に従わない */) { value = opt.Value; } else if (value == null) { // 共通設定、以前にあったこの項目が削除されている。この項目を共通設定に従うことは出来ない。ゆえに、ここで個別設定の値が代入されなければならない。 // 次回のエンジンの個別設定ダイアログを開いた時に、opt.FollowCommonSetting には falseが代入されるので辻褄は合う。 value = opt.Value; } } } // プリセットの適用 if (preset != null) { var opt = preset.Find(x => x.Name == name); if (opt != null) { value = opt.Value; } } return(value); }