Example #1
0
        /// <summary>
        ///     選択可能国の編集項目を更新する
        /// </summary>
        /// <param name="major">主要国設定</param>
        private void UpdateSelectableItems(MajorCountrySettings major)
        {
            _controller.UpdateItemValue(majorCountryNameKeyTextBox, major);
            _controller.UpdateItemValue(majorCountryNameStringTextBox, major);
            _controller.UpdateItemValue(majorFlagExtTextBox, major);
            _controller.UpdateItemValue(countryDescKeyTextBox, major);
            _controller.UpdateItemValue(countryDescStringTextBox, major);
            _controller.UpdateItemValue(propagandaTextBox, major);

            _controller.UpdateItemColor(majorCountryNameKeyTextBox, major);
            _controller.UpdateItemColor(majorCountryNameStringTextBox, major);
            _controller.UpdateItemColor(majorFlagExtTextBox, major);
            _controller.UpdateItemColor(countryDescKeyTextBox, major);
            _controller.UpdateItemColor(countryDescStringTextBox, major);
            _controller.UpdateItemColor(propagandaTextBox, major);

            UpdatePropagandaImage(major.Country, major.PictureName);
        }
Example #2
0
        /// <summary>
        ///     主要国追加ボタン押下時の処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnMajorAddButtonClick(object sender, EventArgs e)
        {
            Scenario scenario = Scenarios.Data;
            ScenarioHeader header = scenario.Header;

            List<Country> countries =
                (from int index in selectableListBox.SelectedIndices select _majorFreeCountries[index]).ToList();
            majorListBox.BeginUpdate();
            selectableListBox.BeginUpdate();
            foreach (Country country in countries)
            {
                // 主要国リストボックスに追加する
                majorListBox.Items.Add(Countries.GetTagName(country));

                // 主要国リストに追加する
                MajorCountrySettings major = new MajorCountrySettings { Country = country };
                header.MajorCountries.Add(major);

                // 選択可能国リストボックスから削除する
                int index = _majorFreeCountries.IndexOf(country);
                selectableListBox.Items.RemoveAt(index);
                _majorFreeCountries.RemoveAt(index);

                // 編集済みフラグを設定する
                scenario.SetDirtySelectableCountry(country);
                Scenarios.SetDirty();

                Log.Info("[Scenario] major country: +{0}", Countries.Strings[(int) country]);
            }
            majorListBox.EndUpdate();
            selectableListBox.EndUpdate();

            // 主要国リストボックスに追加した項目を選択する
            majorListBox.SelectedIndex = majorListBox.Items.Count - 1;
        }
        /// <summary>
        ///     編集項目の値を更新する
        /// </summary>
        /// <param name="control">コントロール</param>
        /// <param name="major">主要国設定</param>
        public void UpdateItemValue(TextBox control, MajorCountrySettings major)
        {
            ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;
            control.Text = ObjectHelper.ToString(GetItemValue(itemId, major));
            switch (itemId)
            {
                case ScenarioEditorItemId.MajorCountryNameString:
                    // 主要国設定の国名定義がなければ編集不可
                    control.ReadOnly = string.IsNullOrEmpty(major.Name);
                    break;

                case ScenarioEditorItemId.MajorCountryDescString:
                    // 主要国設定の説明文定義がなければ編集不可
                    control.ReadOnly = string.IsNullOrEmpty(major.Desc);
                    break;
            }
        }
Example #4
0
        /// <summary>
        ///     主要国情報を構文解析する
        /// </summary>
        /// <param name="lexer">字句解析器</param>
        /// <returns>主要国情報</returns>
        private static MajorCountrySettings ParseMajorCountry(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;
            }

            MajorCountrySettings major = new MajorCountrySettings();
            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();

                // desc
                if (keyword.Equals("desc"))
                {
                    string s = ParseStringOrIdentifier(lexer);
                    if (string.IsNullOrEmpty(s))
                    {
                        Log.InvalidClause(LogCategory, "desc", lexer);
                        continue;
                    }

                    // 説明文
                    major.Desc = s;
                    continue;
                }

                // countrytactics
                if (keyword.Equals("countrytactics"))
                {
                    string s = ParseStringOrIdentifier(lexer);
                    if (string.IsNullOrEmpty(s))
                    {
                        Log.InvalidClause(LogCategory, "countrytactics", lexer);
                        continue;
                    }

                    // 国家戦略
                    major.CountryTactics = s;
                    continue;
                }

                // picture
                if (keyword.Equals("picture"))
                {
                    string s = ParseString(lexer);
                    if (s == null)
                    {
                        Log.InvalidClause(LogCategory, "picture", lexer);
                        continue;
                    }

                    // プロパガンダ画像名
                    major.PictureName = s;
                    continue;
                }

                // songs
                if (keyword.Equals("songs"))
                {
                    string s = ParseString(lexer);
                    if (s == null)
                    {
                        Log.InvalidClause(LogCategory, "songs", lexer);
                        continue;
                    }

                    // 音楽ファイル名
                    major.Songs = s;
                    continue;
                }

                // bottom
                if (keyword.Equals("bottom"))
                {
                    bool? b = ParseBool(lexer);
                    if (!b.HasValue)
                    {
                        Log.InvalidClause(LogCategory, "bottom", lexer);
                        continue;
                    }

                    // 右端に配置
                    major.Bottom = (bool) b;
                    continue;
                }

                if ((Game.Type == GameType.DarkestHour) && (Game.Version >= 104))
                {
                    // name
                    if (keyword.Equals("name"))
                    {
                        string s = ParseStringOrIdentifier(lexer);
                        if (string.IsNullOrEmpty(s))
                        {
                            Log.InvalidClause(LogCategory, "name", lexer);
                            continue;
                        }

                        // 国名
                        major.Name = s;
                        continue;
                    }

                    // flag_ext
                    if (keyword.Equals("flag_ext"))
                    {
                        string s = ParseStringOrIdentifier(lexer);
                        if (string.IsNullOrEmpty(s))
                        {
                            Log.InvalidClause(LogCategory, "flag_ext", lexer);
                            continue;
                        }

                        // 国旗接尾辞
                        major.FlagExt = s;
                        continue;
                    }
                }

                // 無効なトークン
                Log.InvalidToken(LogCategory, token, lexer);
                lexer.SkipLine();
            }

            return major;
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="major">主要国設定</param>
        /// <param name="val">編集項目の値</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, MajorCountrySettings major)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.MajorCountryNameKey:
                    major.Name = (string) val;
                    break;

                case ScenarioEditorItemId.MajorCountryNameString:
                    // 主要国設定の国名
                    if (!string.IsNullOrEmpty(major.Name))
                    {
                        Config.SetText(major.Name, (string) val, Game.WorldTextFileName);
                        break;
                    }
                    // 国家設定の国名
                    CountrySettings settings = Scenarios.GetCountrySettings(major.Country);
                    if (!string.IsNullOrEmpty(settings?.Name))
                    {
                        Config.SetText(settings.Name, (string) val, Game.WorldTextFileName);
                        break;
                    }
                    // 標準の国名
                    Config.SetText(Countries.Strings[(int) major.Country], (string) val, Game.WorldTextFileName);
                    break;

                case ScenarioEditorItemId.MajorFlagExt:
                    major.FlagExt = (string) val;
                    break;

                case ScenarioEditorItemId.MajorCountryDescKey:
                    major.Desc = (string) val;
                    break;

                case ScenarioEditorItemId.MajorCountryDescString:
                    // 主要国設定の説明文
                    if (!string.IsNullOrEmpty(major.Desc))
                    {
                        Config.SetText(major.Desc, (string) val, Game.ScenarioTextFileName);
                        break;
                    }
                    int year = Scenarios.Data.GlobalData.StartDate != null
                        ? Scenarios.Data.GlobalData.StartDate.Year
                        : Scenarios.Data.Header.StartDate != null
                            ? Scenarios.Data.Header.StartDate.Year
                            : Scenarios.Data.Header.StartYear;
                    // 年数の下2桁のみ使用する
                    year = year % 100;
                    // 年数別の説明文
                    string key = $"{major.Country}_{year}_DESC";
                    if (Config.ExistsKey(key))
                    {
                        Config.SetText(key, (string) val, Game.ScenarioTextFileName);
                        break;
                    }
                    // 標準の説明文
                    key = $"{major.Country}_DESC";
                    Config.SetText(key, (string) val, Game.ScenarioTextFileName);
                    break;

                case ScenarioEditorItemId.MajorPropaganada:
                    major.PictureName = (string) val;
                    break;
            }
        }
 /// <summary>
 ///     編集項目の色を更新する
 /// </summary>
 /// <param name="control">コントロール</param>
 /// <param name="major">主要国設定</param>
 public void UpdateItemColor(Control control, MajorCountrySettings major)
 {
     ScenarioEditorItemId itemId = (ScenarioEditorItemId) control.Tag;
     control.ForeColor = IsItemDirty(itemId, major) ? Color.Red : SystemColors.WindowText;
 }
 /// <summary>
 ///     項目値変更前の処理
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="val">編集項目の値</param>
 /// <param name="major">主要国設定</param>
 public void PreItemChanged(ScenarioEditorItemId itemId, object val, MajorCountrySettings major)
 {
     // 何もしない
 }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="major">主要国設定</param>
 public void SetItemDirty(ScenarioEditorItemId itemId, MajorCountrySettings major)
 {
     major.SetDirty((MajorCountrySettings.ItemId) ItemDirtyFlags[(int) itemId]);
     Scenarios.Data.SetDirty();
     Scenarios.SetDirty();
 }
 /// <summary>
 ///     編集項目の値変更時のログを出力する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="val">編集項目の値</param>
 /// <param name="major">主要国設定</param>
 public void OutputItemValueChangedLog(ScenarioEditorItemId itemId, object val, MajorCountrySettings major)
 {
     Log.Info("[Scenario] {0}: {1} -> {2} ({3})", ItemStrings[(int) itemId],
         ObjectHelper.ToString(GetItemValue(itemId, major)), ObjectHelper.ToString(val),
         Countries.Strings[(int) major.Country]);
 }
        /// <summary>
        ///     項目値変更後の処理
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="major">主要国設定</param>
        public void PostItemChanged(ScenarioEditorItemId itemId, object val, MajorCountrySettings major)
        {
            TextBox control;
            switch (itemId)
            {
                case ScenarioEditorItemId.MajorCountryNameKey:
                    control = (TextBox) _form.GetItemControl(ScenarioEditorItemId.MajorCountryNameString);
                    UpdateItemValue(control, major);
                    UpdateItemColor(control, major);
                    break;

                case ScenarioEditorItemId.MajorCountryDescKey:
                    control = (TextBox) _form.GetItemControl(ScenarioEditorItemId.MajorCountryDescString);
                    UpdateItemValue(control, major);
                    UpdateItemColor(control, major);
                    break;

                case ScenarioEditorItemId.MajorPropaganada:
                    _form.UpdatePropagandaImage(major.Country, (string) val);
                    break;
            }
        }
 /// <summary>
 ///     編集項目の編集済みフラグを取得する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="major">主要国設定</param>
 /// <returns>編集済みフラグ</returns>
 public bool IsItemDirty(ScenarioEditorItemId itemId, MajorCountrySettings major)
 {
     return major.IsDirty((MajorCountrySettings.ItemId) ItemDirtyFlags[(int) itemId]);
 }
        /// <summary>
        ///     編集項目の値を取得する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="major">主要国設定</param>
        /// <returns>編集項目の値</returns>
        public object GetItemValue(ScenarioEditorItemId itemId, MajorCountrySettings major)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.MajorCountryNameKey:
                    return major.Name;

                case ScenarioEditorItemId.MajorCountryNameString:
                    return Scenarios.GetCountryName(major.Country);

                case ScenarioEditorItemId.MajorFlagExt:
                    return major.FlagExt;

                case ScenarioEditorItemId.MajorCountryDescKey:
                    return major.Desc;

                case ScenarioEditorItemId.MajorCountryDescString:
                    if (!string.IsNullOrEmpty(major.Desc))
                    {
                        return Config.GetText(major.Desc);
                    }
                    int year = Scenarios.Data.GlobalData.StartDate != null
                        ? Scenarios.Data.GlobalData.StartDate.Year
                        : Scenarios.Data.Header.StartDate != null
                            ? Scenarios.Data.Header.StartDate.Year
                            : Scenarios.Data.Header.StartYear;
                    // 年数の下2桁のみ使用する
                    year = year % 100;
                    // 年数別の説明があれば使用する
                    string key = $"{major.Country}_{year}_DESC";
                    if (Config.ExistsKey(key))
                    {
                        return Config.GetText(key);
                    }
                    key = $"{major.Country}_DESC";
                    return Config.GetText(key);

                case ScenarioEditorItemId.MajorPropaganada:
                    return major.PictureName;
            }

            return null;
        }
Example #13
0
 /// <summary>
 ///     主要国設定を書き出す
 /// </summary>
 /// <param name="major">主要国設定</param>
 /// <param name="writer">ファイル書き込み用</param>
 private static void WriteMajorCountry(MajorCountrySettings major, TextWriter writer)
 {
     writer.Write("  {0}        = {{", Countries.Strings[(int) major.Country]);
     if (!string.IsNullOrEmpty(major.Desc))
     {
         writer.Write(" desc = \"{0}\"", major.Desc);
     }
     if (!string.IsNullOrEmpty(major.CountryTactics))
     {
         writer.Write($" countrytactics = \"{major.CountryTactics}\"");
     }
     if (major.Bottom)
     {
         writer.Write(" bottom = yes");
     }
     if (!string.IsNullOrEmpty(major.PictureName))
     {
         writer.Write(" picture = \"{0}\"", major.PictureName);
     }
     if (!string.IsNullOrEmpty(major.FlagExt))
     {
         writer.Write(" flag_ext = {0}", major.FlagExt);
     }
     if (!string.IsNullOrEmpty(major.Name))
     {
         writer.Write(" name = {0}", major.Name);
     }
     if (!string.IsNullOrEmpty(major.Songs))
     {
         writer.Write($" songs = \"{major.Songs}\"");
     }
     writer.WriteLine(" }");
 }
Example #14
0
 /// <summary>
 ///     主要国設定を削除する
 /// </summary>
 /// <param name="major">主要国設定</param>
 public static void RemoveMajorCountrySettings(MajorCountrySettings major)
 {
     if (MajorTable.ContainsKey(major.Country))
     {
         MajorTable.Remove(major.Country);
     }
 }
Example #15
0
 /// <summary>
 ///     主要国設定を設定する
 /// </summary>
 /// <param name="major">主要国設定</param>
 public static void SetMajorCountrySettings(MajorCountrySettings major)
 {
     MajorTable[major.Country] = major;
 }