Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }