public void SpySettings_ToggleLanguage() { AppLanguageEnum oldLanguage = SpySettings.Language; //toggle to a different language SpySettings.Language = (oldLanguage == AppLanguageEnum.English) ? AppLanguageEnum.Chinese : AppLanguageEnum.English; SpySettings.SaveUserSettings(); LPConfig.ReloadConfig(); Assert.AreNotEqual(oldLanguage, SpySettings.Language, "The toggled the language value should be different"); }
public void SpySettings_ToggleCaptureSnapshots() { bool captureSnapshots = SpySettings.CaptureSnapshots; //default should be true; Assert.AreEqual(true, captureSnapshots); //toggle to a different language SpySettings.CaptureSnapshots = !captureSnapshots; SpySettings.SaveUserSettings(); LPConfig.ReloadConfig(); Assert.AreNotEqual(captureSnapshots, SpySettings.CaptureSnapshots, "The toggled the CaptureSnapshots setting should be different"); }
/// <summary> /// テキストボックスのフォーカス移動後の処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnRelationIntelligenceItemNumericUpDownValueChanged(object sender, EventArgs e) { // 選択項目がなければ何もしない Country selected = GetSelectedRelationCountry(); if (selected == Country.None) { return; } Country target = GetTargetRelationCountry(); if (target == Country.None) { return; } NumericUpDown control = sender as NumericUpDown; if (control == null) { return; } ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag; CountrySettings settings = Scenarios.GetCountrySettings(selected); SpySettings spy = Scenarios.GetCountryIntelligence(selected, target); // 初期値から変更されていなければ何もしない int val = (int) control.Value; object prev = _controller.GetItemValue(itemId, spy); if ((prev == null) && (val == 0)) { return; } // 値に変化がなければ何もしない if ((prev != null) && (val == (int) prev)) { return; } // 無効な値ならば値を戻す if (!_controller.IsItemValueValid(itemId, val)) { _controller.UpdateItemValue(control, spy); return; } if (settings == null) { settings = Scenarios.CreateCountrySettings(selected); } if (spy == null) { spy = new SpySettings { Country = target }; Scenarios.SetCountryIntelligence(selected, spy); } _controller.OutputItemValueChangedLog(itemId, val, selected, spy); // 項目値変更前の処理 _controller.PreItemChanged(itemId, val, spy); // 値を更新する _controller.SetItemValue(itemId, val, spy); // 編集済みフラグを設定する _controller.SetItemDirty(itemId, spy, settings); // 文字色を変更する control.ForeColor = Color.Red; // 項目値変更後の処理 _controller.PostItemChanged(itemId, val, spy); }
/// <summary> /// 諜報情報の編集項目を更新する /// </summary> /// <param name="spy">諜報設定</param> private void UpdateIntelligenceItems(SpySettings spy) { _controller.UpdateItemValue(spyNumNumericUpDown, spy); _controller.UpdateItemColor(spyNumNumericUpDown, spy); }
/// <summary> /// 編集項目の値を更新する /// </summary> /// <param name="control">コントロール</param> /// <param name="spy">諜報設定</param> public void UpdateItemValue(NumericUpDown control, SpySettings spy) { ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag; control.Value = (int) GetItemValue(itemId, spy); }
/// <summary> /// 諜報設定を構文解析する /// </summary> /// <param name="lexer">字句解析器</param> /// <returns>諜報設定</returns> private static SpySettings ParseSpyInfo(TextLexer lexer) { // = Token token = lexer.GetToken(); if (token.Type != TokenType.Equal) { Log.InvalidToken(LogCategory, token, lexer); return null; } // { token = lexer.GetToken(); if (token.Type != TokenType.OpenBrace) { Log.InvalidToken(LogCategory, token, lexer); return null; } SpySettings spy = new SpySettings(); int lastLineNo = -1; while (true) { token = lexer.GetToken(); // ファイルの終端 if (token == null) { break; } // } (セクション終端) if (token.Type == TokenType.CloseBrace) { break; } // 無効なトークン if (token.Type != TokenType.Identifier) { Log.InvalidToken(LogCategory, token, lexer); lexer.SkipLine(); continue; } string keyword = token.Value as string; if (string.IsNullOrEmpty(keyword)) { continue; } keyword = keyword.ToLower(); // country if (keyword.Equals("country")) { Country? tag = ParseTag(lexer); if (!tag.HasValue) { Log.InvalidClause(LogCategory, "country", lexer); continue; } // 国タグ spy.Country = (Country) tag; // 最終解釈行を覚えておく lastLineNo = lexer.LineNo; continue; } // numberofspies if (keyword.Equals("numberofspies")) { int? n = ParseInt(lexer); if (!n.HasValue) { Log.InvalidClause(LogCategory, "numberofspies", lexer); continue; } // スパイの数 spy.Spies = (int) n; // 最終解釈行を覚えておく lastLineNo = lexer.LineNo; continue; } // 無効なトークン Log.InvalidToken(LogCategory, token, lexer); if (lexer.LineNo != lastLineNo) { // 現在行が最終解釈行と異なる場合、閉じ括弧が不足しているものと見なす lexer.ReserveToken(token); break; } lexer.SkipLine(); } return spy; }
/// <summary> /// 編集項目の値を設定する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="val">編集項目の値</param> /// <param name="spy">諜報設定</param> public void SetItemValue(ScenarioEditorItemId itemId, object val, SpySettings spy) { switch (itemId) { case ScenarioEditorItemId.IntelligenceSpies: spy.Spies = (int) val; break; } }
/// <summary> /// 編集項目の色を更新する /// </summary> /// <param name="control">コントロール</param> /// <param name="spy">諜報設定</param> public void UpdateItemColor(Control control, SpySettings spy) { ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag; control.ForeColor = IsItemDirty(itemId, spy) ? Color.Red : SystemColors.WindowText; }
/// <summary> /// 項目値変更前の処理 /// </summary> /// <param name="itemId">項目ID</param> /// <param name="val">編集項目の値</param> /// <param name="spy">諜報設定</param> public void PreItemChanged(ScenarioEditorItemId itemId, object val, SpySettings spy) { // 何もしない }
/// <summary> /// 編集項目の編集済みフラグを設定する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="spy">諜報設定</param> /// <param name="settings">国家設定</param> public void SetItemDirty(ScenarioEditorItemId itemId, SpySettings spy, CountrySettings settings) { spy.SetDirty((SpySettings.ItemId) ItemDirtyFlags[(int) itemId]); settings.SetDirty(); Scenarios.SetDirty(); }
/// <summary> /// 項目値変更後の処理 /// </summary> /// <param name="itemId">項目ID</param> /// <param name="val">編集項目の値</param> /// <param name="spy">諜報設定</param> public void PostItemChanged(ScenarioEditorItemId itemId, object val, SpySettings spy) { switch (itemId) { case ScenarioEditorItemId.IntelligenceSpies: _form.SetRelationListItemText(8, ObjectHelper.ToString(val)); break; } }
/// <summary> /// 編集項目の値変更時のログを出力する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="val">編集項目の値</param> /// <param name="country">選択国</param> /// <param name="spy">諜報設定</param> public void OutputItemValueChangedLog(ScenarioEditorItemId itemId, object val, Country country, SpySettings spy) { Log.Info("[Scenario] {0}: {1} -> {2} ({3}=>{4})", ItemStrings[(int) itemId], ObjectHelper.ToString(GetItemValue(itemId, spy)), ObjectHelper.ToString(val), Countries.Strings[(int) country], Countries.Strings[(int) spy.Country]); }
/// <summary> /// 編集項目の編集済みフラグを取得する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="spy">諜報設定</param> /// <returns>編集済みフラグ</returns> public bool IsItemDirty(ScenarioEditorItemId itemId, SpySettings spy) { return (spy != null) && spy.IsDirty((SpySettings.ItemId) ItemDirtyFlags[(int) itemId]); }
/// <summary> /// 編集項目の値を取得する /// </summary> /// <param name="itemId">項目ID</param> /// <param name="spy">諜報設定</param> /// <returns>編集項目の値</returns> public object GetItemValue(ScenarioEditorItemId itemId, SpySettings spy) { switch (itemId) { case ScenarioEditorItemId.IntelligenceSpies: return spy?.Spies ?? 0; } return null; }
/// <summary> /// 諜報設定を設定する /// </summary> /// <param name="country">対象国</param> /// <param name="spy">諜報設定</param> public static void SetCountryIntelligence(Country country, SpySettings spy) { if (!SpyTable.ContainsKey(country)) { SpyTable.Add(country, new Dictionary<Country, SpySettings>()); } SpyTable[country][spy.Country] = spy; }