/// <summary>
        ///     項目値変更前の処理
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="province">プロヴィンス</param>
        /// <param name="settings">国家設定</param>
        public void PreItemChanged(ScenarioEditorItemId itemId, object val, Province province, CountrySettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.CountryCapital:
                    PreItemChangedCapital(_form.GetItemControl(itemId), val, province, settings);
                    break;

                case ScenarioEditorItemId.CountryOwnedProvinces:
                    PreItemChangedOwnedProvinces(_form.GetItemControl(itemId), val, province);
                    break;

                case ScenarioEditorItemId.CountryControlledProvinces:
                    PreItemChangedControlledProvinces(_form.GetItemControl(itemId), val, province);
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="unit">ユニット</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, Unit unit)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.UnitType:
                    Scenarios.SetType(unit.Id, (int) val);
                    break;

                case ScenarioEditorItemId.UnitId:
                    Scenarios.SetId(unit.Id, (int) val);
                    break;

                case ScenarioEditorItemId.UnitName:
                    unit.Name = (string) val;
                    break;

                case ScenarioEditorItemId.UnitLocationId:
                case ScenarioEditorItemId.UnitLocation:
                    unit.Location = (int) val;
                    break;

                case ScenarioEditorItemId.UnitBaseId:
                case ScenarioEditorItemId.UnitBase:
                    unit.Base = (int) val;
                    break;

                case ScenarioEditorItemId.UnitLeaderId:
                case ScenarioEditorItemId.UnitLeader:
                    unit.Leader = (int) val;
                    break;

                case ScenarioEditorItemId.UnitMorale:
                    unit.Morale = (double) val;
                    break;

                case ScenarioEditorItemId.UnitDigIn:
                    unit.DigIn = (double) val;
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を取得する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <returns>編集項目の値</returns>
        public object GetItemValue(ScenarioEditorItemId itemId)
        {
            Scenario scenario = Scenarios.Data;

            switch (itemId)
            {
                case ScenarioEditorItemId.ScenarioName:
                    return Config.ExistsKey(scenario.Name) ? Config.GetText(scenario.Name) : scenario.Name;

                case ScenarioEditorItemId.ScenarioPanelName:
                    return scenario.PanelName;

                case ScenarioEditorItemId.ScenarioStartYear:
                    return scenario.GlobalData.StartDate?.Year;

                case ScenarioEditorItemId.ScenarioStartMonth:
                    return scenario.GlobalData.StartDate?.Month;

                case ScenarioEditorItemId.ScenarioStartDay:
                    return scenario.GlobalData.StartDate?.Day;

                case ScenarioEditorItemId.ScenarioEndYear:
                    return scenario.GlobalData.EndDate?.Year;

                case ScenarioEditorItemId.ScenarioEndMonth:
                    return scenario.GlobalData.EndDate?.Month;

                case ScenarioEditorItemId.ScenarioEndDay:
                    return scenario.GlobalData.EndDate?.Day;

                case ScenarioEditorItemId.ScenarioIncludeFolder:
                    return scenario.IncludeFolder;

                case ScenarioEditorItemId.ScenarioBattleScenario:
                    return scenario.Header.IsBattleScenario;

                case ScenarioEditorItemId.ScenarioFreeSelection:
                    return scenario.Header.IsFreeSelection;

                case ScenarioEditorItemId.ScenarioAllowDiplomacy:
                    return (scenario.GlobalData.Rules == null) || scenario.GlobalData.Rules.AllowDiplomacy;

                case ScenarioEditorItemId.ScenarioAllowProduction:
                    return (scenario.GlobalData.Rules == null) || scenario.GlobalData.Rules.AllowProduction;

                case ScenarioEditorItemId.ScenarioAllowTechnology:
                    return (scenario.GlobalData.Rules == null) || scenario.GlobalData.Rules.AllowTechnology;

                case ScenarioEditorItemId.ScenarioAiAggressive:
                    return scenario.Header.AiAggressive;

                case ScenarioEditorItemId.ScenarioDifficulty:
                    return scenario.Header.Difficulty;

                case ScenarioEditorItemId.ScenarioGameSpeed:
                    return scenario.Header.GameSpeed;
            }

            return null;
        }
 /// <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="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="province">プロヴィンス</param>
        /// <param name="settings">国家設定</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, Province province, CountrySettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.CountryCapital:
                    settings.Capital = province.Id;
                    break;

                case ScenarioEditorItemId.CountryCoreProvinces:
                    if ((bool) val)
                    {
                        Scenarios.AddCoreProvince(province.Id, settings);
                    }
                    else
                    {
                        Scenarios.RemoveCoreProvince(province.Id, settings);
                    }
                    break;

                case ScenarioEditorItemId.CountryOwnedProvinces:
                    if ((bool) val)
                    {
                        Scenarios.AddOwnedProvince(province.Id, settings);
                    }
                    else
                    {
                        Scenarios.RemoveOwnedProvince(province.Id, settings);
                    }
                    break;

                case ScenarioEditorItemId.CountryControlledProvinces:
                    if ((bool) val)
                    {
                        Scenarios.AddControlledProvince(province.Id, settings);
                    }
                    else
                    {
                        Scenarios.RemoveControlledProvince(province.Id, settings);
                    }
                    break;

                case ScenarioEditorItemId.CountryClaimedProvinces:
                    if ((bool) val)
                    {
                        Scenarios.AddClaimedProvince(province.Id, settings);
                    }
                    else
                    {
                        Scenarios.RemoveClaimedProvince(province.Id, settings);
                    }
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="alliance">同盟</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, Alliance alliance)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.AllianceName:
                    if (!string.IsNullOrEmpty(alliance.Name))
                    {
                        Config.SetText("ALLIANCE_" + alliance.Name, (string) val, Game.ScenarioTextFileName);
                    }
                    else
                    {
                        ScenarioGlobalData data = Scenarios.Data.GlobalData;
                        if (alliance == data.Axis)
                        {
                            Config.SetText(TextId.AllianceAxis, (string) val, Game.ScenarioTextFileName);
                        }
                        else if (alliance == data.Allies)
                        {
                            Config.SetText(TextId.AllianceAllies, (string) val, Game.ScenarioTextFileName);
                        }
                        else if (alliance == data.Comintern)
                        {
                            Config.SetText(TextId.AllianceComintern, (string) val, Game.ScenarioTextFileName);
                        }
                    }
                    break;

                case ScenarioEditorItemId.AllianceType:
                    alliance.Id.Type = (int) val;
                    break;

                case ScenarioEditorItemId.AllianceId:
                    alliance.Id.Id = (int) val;
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="relation">国家関係</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, Relation relation)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.DiplomacyRelationValue:
                    relation.Value = (double) val;
                    break;

                case ScenarioEditorItemId.DiplomacyMilitaryAccess:
                    relation.Access = (bool) val;
                    break;

                case ScenarioEditorItemId.DiplomacyGuaranteed:
                    relation.Guaranteed = (bool) val ? new GameDate() : null;
                    break;

                case ScenarioEditorItemId.DiplomacyGuaranteedEndYear:
                    relation.Guaranteed.Year = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyGuaranteedEndMonth:
                    relation.Guaranteed.Month = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyGuaranteedEndDay:
                    relation.Guaranteed.Day = (int) val;
                    break;
            }
        }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="alliance">同盟</param>
 public void SetItemDirty(ScenarioEditorItemId itemId, Alliance alliance)
 {
     alliance.SetDirty((Alliance.ItemId) ItemDirtyFlags[(int) itemId]);
     Scenarios.Data.SetDirty();
     Scenarios.SetDirty();
 }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="war">戦争</param>
 public void SetItemDirty(ScenarioEditorItemId itemId, War war)
 {
     war.SetDirty((War.ItemId) ItemDirtyFlags[(int) itemId]);
     Scenarios.Data.SetDirty();
     Scenarios.SetDirty();
 }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 public void SetItemDirty(ScenarioEditorItemId itemId)
 {
     Scenarios.Data.SetDirty((Scenario.ItemId) ItemDirtyFlags[(int) itemId]);
     Scenarios.SetDirty();
 }
 /// <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="division">師団</param>
        /// <param name="settings">国家設定</param>
        public void PreItemChanged(ScenarioEditorItemId itemId, object val, Division division, CountrySettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.DivisionType:
                    if (division.Id == null)
                    {
                        division.Id = new TypeId();
                        PreItemChangedDivisionType((TextBox) _form.GetItemControl(ScenarioEditorItemId.DivisionId), val,
                            division,
                            settings);
                    }
                    break;

                case ScenarioEditorItemId.DivisionId:
                    if (division.Id == null)
                    {
                        division.Id = new TypeId();
                        PreItemChangedDivisionId((TextBox) _form.GetItemControl(ScenarioEditorItemId.DivisionType), val,
                            division,
                            settings);
                    }
                    break;
            }
        }
        /// <summary>
        ///     項目値変更前の処理
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="unit">ユニット</param>
        /// <param name="settings">国家設定</param>
        public void PreItemChanged(ScenarioEditorItemId itemId, object val, Unit unit, CountrySettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.UnitType:
                    if (unit.Id == null)
                    {
                        unit.Id = new TypeId();
                        PreItemChangedUnitType((TextBox) _form.GetItemControl(ScenarioEditorItemId.UnitId), val, unit,
                            settings);
                    }
                    break;

                case ScenarioEditorItemId.UnitId:
                    if (unit.Id == null)
                    {
                        unit.Id = new TypeId();
                        PreItemChangedUnitId((TextBox) _form.GetItemControl(ScenarioEditorItemId.UnitType), val, unit,
                            settings);
                    }
                    break;
            }
        }
        /// <summary>
        ///     項目変更前の処理
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="settings">プロヴィンス設定</param>
        public void PreItemChanged(ScenarioEditorItemId itemId, ProvinceSettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceIcCurrent:
                case ScenarioEditorItemId.ProvinceIcMax:
                case ScenarioEditorItemId.ProvinceIcRelative:
                    if (settings.Ic == null)
                    {
                        settings.Ic = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                    if (settings.Infrastructure == null)
                    {
                        settings.Infrastructure = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                case ScenarioEditorItemId.ProvinceLandFortMax:
                case ScenarioEditorItemId.ProvinceLandFortRelative:
                    if (settings.LandFort == null)
                    {
                        settings.LandFort = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                    if (settings.CoastalFort == null)
                    {
                        settings.CoastalFort = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                case ScenarioEditorItemId.ProvinceAntiAirMax:
                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                    if (settings.AntiAir == null)
                    {
                        settings.AntiAir = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                case ScenarioEditorItemId.ProvinceAirBaseMax:
                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                    if (settings.AirBase == null)
                    {
                        settings.AirBase = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                    if (settings.NavalBase == null)
                    {
                        settings.NavalBase = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                case ScenarioEditorItemId.ProvinceRadarStationMax:
                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                    if (settings.RadarStation == null)
                    {
                        settings.RadarStation = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                    if (settings.NuclearReactor == null)
                    {
                        settings.NuclearReactor = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                case ScenarioEditorItemId.ProvinceRocketTestMax:
                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                    if (settings.RocketTest == null)
                    {
                        settings.RocketTest = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                    if (settings.SyntheticOil == null)
                    {
                        settings.SyntheticOil = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                    if (settings.SyntheticRares == null)
                    {
                        settings.SyntheticRares = new BuildingSize();
                    }
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                    if (settings.NuclearPower == null)
                    {
                        settings.NuclearPower = new BuildingSize();
                    }
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val)
        {
            Scenario scenario = Scenarios.Data;

            switch (itemId)
            {
                case ScenarioEditorItemId.ScenarioName:
                    if (Config.ExistsKey(scenario.Name))
                    {
                        Config.SetText(scenario.Name, (string) val, Game.ScenarioTextFileName);
                    }
                    else
                    {
                        scenario.Name = (string) val;
                    }
                    break;

                case ScenarioEditorItemId.ScenarioPanelName:
                    scenario.PanelName = (string) val;
                    break;

                case ScenarioEditorItemId.ScenarioStartYear:
                    scenario.GlobalData.StartDate.Year = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioStartMonth:
                    scenario.GlobalData.StartDate.Month = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioStartDay:
                    scenario.GlobalData.StartDate.Day = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioEndYear:
                    scenario.GlobalData.EndDate.Year = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioEndMonth:
                    scenario.GlobalData.EndDate.Month = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioEndDay:
                    scenario.GlobalData.EndDate.Day = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioIncludeFolder:
                    scenario.IncludeFolder = (string) val;
                    break;

                case ScenarioEditorItemId.ScenarioBattleScenario:
                    scenario.Header.IsBattleScenario = (bool) val;
                    break;

                case ScenarioEditorItemId.ScenarioFreeSelection:
                    scenario.Header.IsFreeSelection = (bool) val;
                    break;

                case ScenarioEditorItemId.ScenarioAllowDiplomacy:
                    scenario.GlobalData.Rules.AllowDiplomacy = (bool) val;
                    break;

                case ScenarioEditorItemId.ScenarioAllowProduction:
                    scenario.GlobalData.Rules.AllowProduction = (bool) val;
                    break;

                case ScenarioEditorItemId.ScenarioAllowTechnology:
                    scenario.GlobalData.Rules.AllowTechnology = (bool) val;
                    break;

                case ScenarioEditorItemId.ScenarioAiAggressive:
                    scenario.Header.AiAggressive = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioDifficulty:
                    scenario.Header.Difficulty = (int) val;
                    break;

                case ScenarioEditorItemId.ScenarioGameSpeed:
                    scenario.Header.GameSpeed = (int) val;
                    break;
            }
        }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="relation">国家関係</param>
 /// <param name="settings">国家設定</param>
 public void SetItemDirty(ScenarioEditorItemId itemId, Relation relation, CountrySettings settings)
 {
     relation.SetDirty((Relation.ItemId) ItemDirtyFlags[(int) itemId]);
     settings.SetDirty();
     Scenarios.SetDirty();
 }
        /// <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="itemId">項目ID</param>
        /// <param name="treaty">協定</param>
        public void SetItemDirty(ScenarioEditorItemId itemId, Treaty treaty)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.DiplomacyNonAggression:
                case ScenarioEditorItemId.DiplomacyPeace:
                    if (treaty != null)
                    {
                        treaty.SetDirty(Treaty.ItemId.StartYear);
                        treaty.SetDirty(Treaty.ItemId.StartMonth);
                        treaty.SetDirty(Treaty.ItemId.StartDay);
                        treaty.SetDirty(Treaty.ItemId.EndYear);
                        treaty.SetDirty(Treaty.ItemId.EndMonth);
                        treaty.SetDirty(Treaty.ItemId.EndDay);
                        treaty.SetDirty(Treaty.ItemId.Type);
                        treaty.SetDirty(Treaty.ItemId.Id);
                        treaty.SetDirty();
                    }
                    break;

                default:
                    treaty.SetDirty((Treaty.ItemId) ItemDirtyFlags[(int) itemId]);
                    break;
            }
            Scenarios.Data.SetDirty();
            Scenarios.SetDirty();
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="war">戦争</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, War war)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.WarStartYear:
                    war.StartDate.Year = (int) val;
                    break;

                case ScenarioEditorItemId.WarStartMonth:
                    war.StartDate.Month = (int) val;
                    break;

                case ScenarioEditorItemId.WarStartDay:
                    war.StartDate.Day = (int) val;
                    break;

                case ScenarioEditorItemId.WarEndYear:
                    war.EndDate.Year = (int) val;
                    break;

                case ScenarioEditorItemId.WarEndMonth:
                    war.EndDate.Month = (int) val;
                    break;

                case ScenarioEditorItemId.WarEndDay:
                    war.EndDate.Day = (int) val;
                    break;

                case ScenarioEditorItemId.WarType:
                    war.Id.Type = (int) val;
                    break;

                case ScenarioEditorItemId.WarId:
                    war.Id.Id = (int) val;
                    break;

                case ScenarioEditorItemId.WarAttackerType:
                    war.Attackers.Id.Type = (int) val;
                    break;

                case ScenarioEditorItemId.WarAttackerId:
                    war.Attackers.Id.Id = (int) val;
                    break;

                case ScenarioEditorItemId.WarDefenderType:
                    war.Defenders.Id.Type = (int) val;
                    break;

                case ScenarioEditorItemId.WarDefenderId:
                    war.Defenders.Id.Id = (int) val;
                    break;
            }
        }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="settings">国家設定</param>
 public void SetItemDirty(ScenarioEditorItemId itemId, CountrySettings settings)
 {
     settings.SetDirty((CountrySettings.ItemId) ItemDirtyFlags[(int) itemId]);
     Scenarios.SetDirty();
 }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="treaty">協定</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, Treaty treaty)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.DiplomacyNonAggressionStartYear:
                case ScenarioEditorItemId.DiplomacyPeaceStartYear:
                case ScenarioEditorItemId.TradeStartYear:
                    treaty.StartDate.Year = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyNonAggressionStartMonth:
                case ScenarioEditorItemId.DiplomacyPeaceStartMonth:
                case ScenarioEditorItemId.TradeStartMonth:
                    treaty.StartDate.Month = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyNonAggressionStartDay:
                case ScenarioEditorItemId.DiplomacyPeaceStartDay:
                case ScenarioEditorItemId.TradeStartDay:
                    treaty.StartDate.Day = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyNonAggressionEndYear:
                case ScenarioEditorItemId.DiplomacyPeaceEndYear:
                case ScenarioEditorItemId.TradeEndYear:
                    treaty.EndDate.Year = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyNonAggressionEndMonth:
                case ScenarioEditorItemId.DiplomacyPeaceEndMonth:
                case ScenarioEditorItemId.TradeEndMonth:
                    treaty.EndDate.Month = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyNonAggressionEndDay:
                case ScenarioEditorItemId.DiplomacyPeaceEndDay:
                case ScenarioEditorItemId.TradeEndDay:
                    treaty.EndDate.Day = (int) val;
                    break;

                case ScenarioEditorItemId.DiplomacyNonAggressionType:
                case ScenarioEditorItemId.DiplomacyPeaceType:
                case ScenarioEditorItemId.TradeType:
                    Scenarios.SetType(treaty.Id, (int) val);
                    break;

                case ScenarioEditorItemId.DiplomacyNonAggressionId:
                case ScenarioEditorItemId.DiplomacyPeaceId:
                case ScenarioEditorItemId.TradeId:
                    Scenarios.SetId(treaty.Id, (int) val);
                    break;

                case ScenarioEditorItemId.TradeCancel:
                    treaty.Cancel = (bool) val;
                    break;

                case ScenarioEditorItemId.TradeCountry1:
                    treaty.Country1 = (Country) val;
                    break;

                case ScenarioEditorItemId.TradeCountry2:
                    treaty.Country2 = (Country) val;
                    break;

                case ScenarioEditorItemId.TradeEnergy1:
                    treaty.Energy = -(double) val;
                    break;

                case ScenarioEditorItemId.TradeEnergy2:
                    treaty.Energy = (double) val;
                    break;

                case ScenarioEditorItemId.TradeMetal1:
                    treaty.Metal = -(double) val;
                    break;

                case ScenarioEditorItemId.TradeMetal2:
                    treaty.Metal = (double) val;
                    break;

                case ScenarioEditorItemId.TradeRareMaterials1:
                    treaty.RareMaterials = -(double) val;
                    break;

                case ScenarioEditorItemId.TradeRareMaterials2:
                    treaty.RareMaterials = (double) val;
                    break;

                case ScenarioEditorItemId.TradeOil1:
                    treaty.Oil = -(double) val;
                    break;

                case ScenarioEditorItemId.TradeOil2:
                    treaty.Oil = (double) val;
                    break;

                case ScenarioEditorItemId.TradeSupplies1:
                    treaty.Supplies = -(double) val;
                    break;

                case ScenarioEditorItemId.TradeSupplies2:
                    treaty.Supplies = (double) val;
                    break;

                case ScenarioEditorItemId.TradeMoney1:
                    treaty.Money = -(double) val;
                    break;

                case ScenarioEditorItemId.TradeMoney2:
                    treaty.Money = (double) val;
                    break;
            }
        }
        /// <summary>
        ///     編集項目の編集済みフラグを設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="province">プロヴィンス</param>
        /// <param name="settings">国家設定</param>
        public void SetItemDirty(ScenarioEditorItemId itemId, Province province, CountrySettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.CountryCapital:
                    settings.SetDirty((CountrySettings.ItemId) ItemDirtyFlags[(int) itemId]);
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.CountryCoreProvinces:
                    settings.SetDirtyCoreProvinces(province.Id);
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.CountryOwnedProvinces:
                    settings.SetDirtyOwnedProvinces(province.Id);
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.CountryControlledProvinces:
                    settings.SetDirtyControlledProvinces(province.Id);
                    Scenarios.Data.SetDirtyProvinces();
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.CountryClaimedProvinces:
                    settings.SetDirtyClaimedProvinces(province.Id);
                    Scenarios.SetDirty();
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">国家設定</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, CountrySettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.DiplomacyMaster:
                    settings.Master = (Country) val;
                    break;

                case ScenarioEditorItemId.DiplomacyMilitaryControl:
                    settings.Control = (Country) val;
                    break;

                case ScenarioEditorItemId.CountryNameKey:
                    settings.Name = (string) val;
                    break;

                case ScenarioEditorItemId.CountryNameString:
                    Config.SetText(settings.Name, (string) val, Game.WorldTextFileName);
                    break;

                case ScenarioEditorItemId.CountryFlagExt:
                    settings.FlagExt = (string) val;
                    break;

                case ScenarioEditorItemId.CountryRegularId:
                    settings.RegularId = (Country) val;
                    break;

                case ScenarioEditorItemId.CountryBelligerence:
                    settings.Belligerence = (int) val;
                    break;

                case ScenarioEditorItemId.CountryDissent:
                    settings.Dissent = (double) val;
                    break;

                case ScenarioEditorItemId.CountryExtraTc:
                    settings.ExtraTc = (double) val;
                    break;

                case ScenarioEditorItemId.CountryNuke:
                    settings.Nuke = (int) val;
                    break;

                case ScenarioEditorItemId.CountryNukeYear:
                    settings.NukeDate.Year = (int) val;
                    break;

                case ScenarioEditorItemId.CountryNukeMonth:
                    settings.NukeDate.Month = (int) val;
                    break;

                case ScenarioEditorItemId.CountryNukeDay:
                    settings.NukeDate.Day = (int) val;
                    break;

                case ScenarioEditorItemId.CountryGroundDefEff:
                    settings.GroundDefEff = (double) val;
                    break;

                case ScenarioEditorItemId.CountryPeacetimeIcModifier:
                    settings.PeacetimeIcModifier = (double) val;
                    break;

                case ScenarioEditorItemId.CountryWartimeIcModifier:
                    settings.WartimeIcModifier = (double) val;
                    break;

                case ScenarioEditorItemId.CountryIndustrialModifier:
                    settings.IndustrialModifier = (double) val;
                    break;

                case ScenarioEditorItemId.CountryRelativeManpower:
                    settings.RelativeManpower = (double) val;
                    break;

                case ScenarioEditorItemId.CountryEnergy:
                    settings.Energy = (double) val;
                    break;

                case ScenarioEditorItemId.CountryMetal:
                    settings.Metal = (double) val;
                    break;

                case ScenarioEditorItemId.CountryRareMaterials:
                    settings.RareMaterials = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOil:
                    settings.Oil = (double) val;
                    break;

                case ScenarioEditorItemId.CountrySupplies:
                    settings.Supplies = (double) val;
                    break;

                case ScenarioEditorItemId.CountryMoney:
                    settings.Money = (double) val;
                    break;

                case ScenarioEditorItemId.CountryTransports:
                    settings.Transports = (int) val;
                    break;

                case ScenarioEditorItemId.CountryEscorts:
                    settings.Escorts = (int) val;
                    break;

                case ScenarioEditorItemId.CountryManpower:
                    settings.Manpower = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapEnergy:
                    settings.Offmap.Energy = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapMetal:
                    settings.Offmap.Metal = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapRareMaterials:
                    settings.Offmap.RareMaterials = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapOil:
                    settings.Offmap.Oil = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapSupplies:
                    settings.Offmap.Supplies = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapMoney:
                    settings.Offmap.Money = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapTransports:
                    settings.Offmap.Transports = (int) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapEscorts:
                    settings.Offmap.Escorts = (int) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapManpower:
                    settings.Offmap.Manpower = (double) val;
                    break;

                case ScenarioEditorItemId.CountryOffmapIc:
                    settings.Offmap.Ic = (double) val;
                    break;

                case ScenarioEditorItemId.CountryAiFileName:
                    settings.AiFileName = (string) val;
                    break;

                case ScenarioEditorItemId.SliderYear:
                    settings.Policy.Date.Year = (int) val;
                    break;

                case ScenarioEditorItemId.SliderMonth:
                    settings.Policy.Date.Month = (int) val;
                    break;

                case ScenarioEditorItemId.SliderDay:
                    settings.Policy.Date.Day = (int) val;
                    break;

                case ScenarioEditorItemId.SliderDemocratic:
                    settings.Policy.Democratic = (int) val;
                    break;

                case ScenarioEditorItemId.SliderPoliticalLeft:
                    settings.Policy.PoliticalLeft = (int) val;
                    break;

                case ScenarioEditorItemId.SliderFreedom:
                    settings.Policy.Freedom = (int) val;
                    break;

                case ScenarioEditorItemId.SliderFreeMarket:
                    settings.Policy.FreeMarket = (int) val;
                    break;

                case ScenarioEditorItemId.SliderProfessionalArmy:
                    settings.Policy.ProfessionalArmy = (int) val;
                    break;

                case ScenarioEditorItemId.SliderDefenseLobby:
                    settings.Policy.DefenseLobby = (int) val;
                    break;

                case ScenarioEditorItemId.SliderInterventionism:
                    settings.Policy.Interventionism = (int) val;
                    break;

                case ScenarioEditorItemId.CabinetHeadOfState:
                case ScenarioEditorItemId.CabinetHeadOfStateId:
                    Scenarios.SetId(settings.HeadOfState, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetHeadOfStateType:
                    Scenarios.SetType(settings.HeadOfState, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetHeadOfGovernment:
                case ScenarioEditorItemId.CabinetHeadOfGovernmentId:
                    Scenarios.SetId(settings.HeadOfGovernment, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetHeadOfGovernmentType:
                    Scenarios.SetType(settings.HeadOfGovernment, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetForeignMinister:
                case ScenarioEditorItemId.CabinetForeignMinisterId:
                    Scenarios.SetId(settings.ForeignMinister, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetForeignMinisterType:
                    Scenarios.SetType(settings.ForeignMinister, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetArmamentMinister:
                case ScenarioEditorItemId.CabinetArmamentMinisterId:
                    Scenarios.SetId(settings.ArmamentMinister, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetArmamentMinisterType:
                    Scenarios.SetType(settings.ArmamentMinister, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfSecurity:
                case ScenarioEditorItemId.CabinetMinisterOfSecurityId:
                    Scenarios.SetId(settings.MinisterOfSecurity, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfSecurityType:
                    Scenarios.SetType(settings.MinisterOfSecurity, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfIntelligence:
                case ScenarioEditorItemId.CabinetMinisterOfIntelligenceId:
                    Scenarios.SetId(settings.MinisterOfIntelligence, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfIntelligenceType:
                    Scenarios.SetType(settings.MinisterOfIntelligence, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfStaff:
                case ScenarioEditorItemId.CabinetChiefOfStaffId:
                    Scenarios.SetId(settings.ChiefOfStaff, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfStaffType:
                    Scenarios.SetType(settings.ChiefOfStaff, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfArmy:
                case ScenarioEditorItemId.CabinetChiefOfArmyId:
                    Scenarios.SetId(settings.ChiefOfArmy, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfArmyType:
                    Scenarios.SetType(settings.ChiefOfArmy, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfNavy:
                case ScenarioEditorItemId.CabinetChiefOfNavyId:
                    Scenarios.SetId(settings.ChiefOfNavy, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfNavyType:
                    Scenarios.SetType(settings.ChiefOfNavy, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfAir:
                case ScenarioEditorItemId.CabinetChiefOfAirId:
                    Scenarios.SetId(settings.ChiefOfAir, (int) val);
                    break;

                case ScenarioEditorItemId.CabinetChiefOfAirType:
                    Scenarios.SetType(settings.ChiefOfAir, (int) val);
                    break;
            }
        }
        /// <summary>
        ///     編集項目の編集済みフラグを設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="settings">プロヴィンス設定</param>
        public void SetItemDirty(ScenarioEditorItemId itemId, ProvinceSettings settings)
        {
            settings.SetDirty((ProvinceSettings.ItemId) ItemDirtyFlags[(int) itemId]);
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceNameKey:
                case ScenarioEditorItemId.ProvinceManpowerCurrent:
                case ScenarioEditorItemId.ProvinceManpowerMax:
                case ScenarioEditorItemId.ProvinceEnergyCurrent:
                case ScenarioEditorItemId.ProvinceEnergyMax:
                case ScenarioEditorItemId.ProvinceMetalCurrent:
                case ScenarioEditorItemId.ProvinceMetalMax:
                case ScenarioEditorItemId.ProvinceRareMaterialsCurrent:
                case ScenarioEditorItemId.ProvinceRareMaterialsMax:
                case ScenarioEditorItemId.ProvinceOilCurrent:
                case ScenarioEditorItemId.ProvinceOilMax:
                    if (Scenarios.Data.IsBaseProvinceSettings || Scenarios.Data.IsCountryProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyProvinces();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.ProvinceEnergyPool:
                case ScenarioEditorItemId.ProvinceMetalPool:
                case ScenarioEditorItemId.ProvinceRareMaterialsPool:
                case ScenarioEditorItemId.ProvinceOilPool:
                case ScenarioEditorItemId.ProvinceSupplyPool:
                    if (Scenarios.Data.IsDepotsProvinceSettings || Scenarios.Data.IsBaseProvinceSettings ||
                        Scenarios.Data.IsCountryProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyProvinces();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.ProvinceIcCurrent:
                case ScenarioEditorItemId.ProvinceIcMax:
                case ScenarioEditorItemId.ProvinceIcRelative:
                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                case ScenarioEditorItemId.ProvinceLandFortMax:
                case ScenarioEditorItemId.ProvinceLandFortRelative:
                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                case ScenarioEditorItemId.ProvinceAntiAirMax:
                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                case ScenarioEditorItemId.ProvinceAirBaseMax:
                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                case ScenarioEditorItemId.ProvinceRadarStationMax:
                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                case ScenarioEditorItemId.ProvinceRocketTestMax:
                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                case ScenarioEditorItemId.ProvinceRevoltRisk:
                    if (Scenarios.Data.IsBaseDodProvinceSettings || Scenarios.Data.IsBaseProvinceSettings ||
                        Scenarios.Data.IsCountryProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyProvinces();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;

                case ScenarioEditorItemId.ProvinceVp:
                    if (Scenarios.Data.IsVpProvinceSettings)
                    {
                        Scenarios.Data.SetDirtyVpInc();
                    }
                    else
                    {
                        Scenarios.Data.SetDirty();
                    }
                    Scenarios.SetDirty();
                    break;
            }
        }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">プロヴィンス設定</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, ProvinceSettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.ProvinceNameKey:
                    settings.Name = (string) val;
                    break;

                case ScenarioEditorItemId.ProvinceNameString:
                    Config.SetText(settings.Name, (string) val, Game.ProvinceTextFileName);
                    break;

                case ScenarioEditorItemId.ProvinceVp:
                    settings.Vp = (int) val;
                    break;

                case ScenarioEditorItemId.ProvinceRevoltRisk:
                    settings.RevoltRisk = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceManpowerCurrent:
                    settings.Manpower = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceManpowerMax:
                    settings.MaxManpower = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceEnergyPool:
                    settings.EnergyPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceEnergyCurrent:
                    settings.Energy = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceEnergyMax:
                    settings.MaxEnergy = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceMetalPool:
                    settings.MetalPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceMetalCurrent:
                    settings.Metal = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceMetalMax:
                    settings.MaxMetal = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsPool:
                    settings.RareMaterialsPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsCurrent:
                    settings.RareMaterials = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRareMaterialsMax:
                    settings.MaxRareMaterials = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceOilPool:
                    settings.OilPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceOilCurrent:
                    settings.Oil = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceOilMax:
                    settings.MaxOil = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSupplyPool:
                    settings.SupplyPool = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceIcCurrent:
                    settings.Ic.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceIcMax:
                    settings.Ic.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceIcRelative:
                    settings.Ic.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureCurrent:
                    settings.Infrastructure.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureMax:
                    settings.Infrastructure.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceInfrastructureRelative:
                    settings.Infrastructure.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceLandFortCurrent:
                    settings.LandFort.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceLandFortMax:
                    settings.LandFort.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceLandFortRelative:
                    settings.LandFort.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortCurrent:
                    settings.CoastalFort.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortMax:
                    settings.CoastalFort.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceCoastalFortRelative:
                    settings.CoastalFort.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirCurrent:
                    settings.AntiAir.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirMax:
                    settings.AntiAir.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAntiAirRelative:
                    settings.AntiAir.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseCurrent:
                    settings.AirBase.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseMax:
                    settings.AirBase.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceAirBaseRelative:
                    settings.AirBase.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseCurrent:
                    settings.NavalBase.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseMax:
                    settings.NavalBase.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNavalBaseRelative:
                    settings.NavalBase.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationCurrent:
                    settings.RadarStation.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationMax:
                    settings.RadarStation.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRadarStationRelative:
                    settings.RadarStation.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorCurrent:
                    settings.NuclearReactor.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorMax:
                    settings.NuclearReactor.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearReactorRelative:
                    settings.NuclearReactor.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestCurrent:
                    settings.RocketTest.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestMax:
                    settings.RocketTest.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceRocketTestRelative:
                    settings.RocketTest.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilCurrent:
                    settings.SyntheticOil.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilMax:
                    settings.SyntheticOil.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticOilRelative:
                    settings.SyntheticOil.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresCurrent:
                    settings.SyntheticRares.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresMax:
                    settings.SyntheticRares.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceSyntheticRaresRelative:
                    settings.SyntheticRares.Size = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerCurrent:
                    settings.NuclearPower.CurrentSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerMax:
                    settings.NuclearPower.MaxSize = (double) val;
                    break;

                case ScenarioEditorItemId.ProvinceNuclearPowerRelative:
                    settings.NuclearPower.Size = (double) val;
                    break;
            }
        }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="unit">ユニット</param>
 /// <param name="settings">国家設定</param>
 public void SetItemDirty(ScenarioEditorItemId itemId, Unit unit, CountrySettings settings)
 {
     unit.SetDirty((Unit.ItemId) ItemDirtyFlags[(int) itemId]);
     settings.SetDirty();
     Scenarios.SetDirty();
 }
        /// <summary>
        ///     編集項目の値を設定する
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="division">師団</param>
        public void SetItemValue(ScenarioEditorItemId itemId, object val, Division division)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.DivisionType:
                    Scenarios.SetType(division.Id, (int) val);
                    break;

                case ScenarioEditorItemId.DivisionId:
                    Scenarios.SetId(division.Id, (int) val);
                    break;

                case ScenarioEditorItemId.DivisionName:
                    division.Name = (string) val;
                    break;

                case ScenarioEditorItemId.DivisionUnitType:
                    division.Type = (UnitType) val;
                    break;

                case ScenarioEditorItemId.DivisionModel:
                    division.Model = (int) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeType1:
                    division.Extra1 = (UnitType) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeType2:
                    division.Extra2 = (UnitType) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeType3:
                    division.Extra3 = (UnitType) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeType4:
                    division.Extra4 = (UnitType) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeType5:
                    division.Extra5 = (UnitType) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeModel1:
                    division.BrigadeModel1 = (int) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeModel2:
                    division.BrigadeModel2 = (int) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeModel3:
                    division.BrigadeModel3 = (int) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeModel4:
                    division.BrigadeModel4 = (int) val;
                    break;

                case ScenarioEditorItemId.DivisionBrigadeModel5:
                    division.BrigadeModel5 = (int) val;
                    break;

                case ScenarioEditorItemId.DivisionStrength:
                    division.Strength = (double) val;
                    break;

                case ScenarioEditorItemId.DivisionMaxStrength:
                    division.MaxStrength = (double) val;
                    break;

                case ScenarioEditorItemId.DivisionOrganisation:
                    division.Organisation = (double) val;
                    break;

                case ScenarioEditorItemId.DivisionMaxOrganisation:
                    division.MaxOrganisation = (double) val;
                    break;

                case ScenarioEditorItemId.DivisionMorale:
                    division.Morale = (double) val;
                    break;

                case ScenarioEditorItemId.DivisionExperience:
                    division.Experience = (double) val;
                    break;

                case ScenarioEditorItemId.DivisionLocked:
                    division.Locked = (bool) val;
                    break;

                case ScenarioEditorItemId.DivisionDormant:
                    division.Dormant = (bool) val;
                    break;
            }
        }
 /// <summary>
 ///     編集項目の編集済みフラグを設定する
 /// </summary>
 /// <param name="itemId">項目ID</param>
 /// <param name="division">師団</param>
 /// <param name="settings">国家設定</param>
 public void SetItemDirty(ScenarioEditorItemId itemId, Division division, CountrySettings settings)
 {
     division.SetDirty((Division.ItemId) ItemDirtyFlags[(int) itemId]);
     settings.SetDirty();
     Scenarios.SetDirty();
 }
 /// <summary>
 ///     編集項目IDに関連付けられたコントロールを取得する
 /// </summary>
 /// <param name="itemId"></param>
 /// <returns></returns>
 public Control GetItemControl(ScenarioEditorItemId itemId)
 {
     return _itemControls.ContainsKey(itemId) ? _itemControls[itemId] : null;
 }
        /// <summary>
        ///     項目値変更前の処理
        /// </summary>
        /// <param name="itemId">項目ID</param>
        /// <param name="val">編集項目の値</param>
        /// <param name="settings">国家設定</param>
        public void PreItemChanged(ScenarioEditorItemId itemId, object val, CountrySettings settings)
        {
            switch (itemId)
            {
                case ScenarioEditorItemId.DiplomacyMaster:
                    PreItemChangedRelation((Country) val, (Country) GetItemValue(itemId, settings), 2);
                    break;

                case ScenarioEditorItemId.DiplomacyMilitaryControl:
                    PreItemChangedRelation((Country) val, (Country) GetItemValue(itemId, settings), 3);
                    break;

                case ScenarioEditorItemId.CountryNukeYear:
                    PreItemChangedNukeDate((TextBox) _form.GetItemControl(ScenarioEditorItemId.CountryNukeMonth),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.CountryNukeDay), settings);
                    break;

                case ScenarioEditorItemId.CountryNukeMonth:
                    PreItemChangedNukeDate((TextBox) _form.GetItemControl(ScenarioEditorItemId.CountryNukeYear),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.CountryNukeDay), settings);
                    break;

                case ScenarioEditorItemId.CountryNukeDay:
                    PreItemChangedNukeDate((TextBox) _form.GetItemControl(ScenarioEditorItemId.CountryNukeYear),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.CountryNukeMonth), settings);
                    break;

                case ScenarioEditorItemId.CountryOffmapEnergy:
                case ScenarioEditorItemId.CountryOffmapMetal:
                case ScenarioEditorItemId.CountryOffmapRareMaterials:
                case ScenarioEditorItemId.CountryOffmapOil:
                case ScenarioEditorItemId.CountryOffmapSupplies:
                case ScenarioEditorItemId.CountryOffmapMoney:
                case ScenarioEditorItemId.CountryOffmapTransports:
                case ScenarioEditorItemId.CountryOffmapEscorts:
                case ScenarioEditorItemId.CountryOffmapManpower:
                case ScenarioEditorItemId.CountryOffmapIc:
                    if (settings.Offmap == null)
                    {
                        settings.Offmap = new ResourceSettings();
                    }
                    break;

                case ScenarioEditorItemId.SliderYear:
                    PreItemChangedSliderDate((TextBox) _form.GetItemControl(ScenarioEditorItemId.SliderMonth),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.SliderDay), settings);
                    break;

                case ScenarioEditorItemId.SliderMonth:
                    PreItemChangedSliderDate((TextBox) _form.GetItemControl(ScenarioEditorItemId.SliderYear),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.SliderDay), settings);
                    break;

                case ScenarioEditorItemId.SliderDay:
                    PreItemChangedSliderDate((TextBox) _form.GetItemControl(ScenarioEditorItemId.SliderYear),
                        (TextBox) _form.GetItemControl(ScenarioEditorItemId.SliderMonth), settings);
                    break;

                case ScenarioEditorItemId.SliderDemocratic:
                case ScenarioEditorItemId.SliderPoliticalLeft:
                case ScenarioEditorItemId.SliderFreedom:
                case ScenarioEditorItemId.SliderFreeMarket:
                case ScenarioEditorItemId.SliderProfessionalArmy:
                case ScenarioEditorItemId.SliderDefenseLobby:
                case ScenarioEditorItemId.SliderInterventionism:
                    if (settings.Policy == null)
                    {
                        settings.Policy = new CountryPolicy();
                    }
                    break;

                case ScenarioEditorItemId.CabinetHeadOfState:
                case ScenarioEditorItemId.CabinetHeadOfStateId:
                    if (settings.HeadOfState == null)
                    {
                        settings.HeadOfState = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetHeadOfStateType), settings,
                            settings.HeadOfState);
                    }
                    break;

                case ScenarioEditorItemId.CabinetHeadOfStateType:
                    if (settings.HeadOfState == null)
                    {
                        settings.HeadOfState = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetHeadOfStateId), val, settings,
                            settings.HeadOfState);
                    }
                    break;

                case ScenarioEditorItemId.CabinetHeadOfGovernment:
                case ScenarioEditorItemId.CabinetHeadOfGovernmentId:
                    if (settings.HeadOfGovernment == null)
                    {
                        settings.HeadOfGovernment = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetHeadOfGovernmentType), settings,
                            settings.HeadOfGovernment);
                    }
                    break;

                case ScenarioEditorItemId.CabinetHeadOfGovernmentType:
                    if (settings.HeadOfGovernment == null)
                    {
                        settings.HeadOfGovernment = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetHeadOfGovernmentId), val,
                            settings, settings.HeadOfGovernment);
                    }
                    break;

                case ScenarioEditorItemId.CabinetForeignMinister:
                case ScenarioEditorItemId.CabinetForeignMinisterId:
                    if (settings.ForeignMinister == null)
                    {
                        settings.ForeignMinister = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetForeignMinisterType), settings,
                            settings.ForeignMinister);
                    }
                    break;

                case ScenarioEditorItemId.CabinetForeignMinisterType:
                    if (settings.ForeignMinister == null)
                    {
                        settings.ForeignMinister = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetForeignMinisterId), val, settings,
                            settings.ForeignMinister);
                    }
                    break;

                case ScenarioEditorItemId.CabinetArmamentMinister:
                case ScenarioEditorItemId.CabinetArmamentMinisterId:
                    if (settings.ArmamentMinister == null)
                    {
                        settings.ArmamentMinister = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetArmamentMinisterType), settings,
                            settings.ArmamentMinister);
                    }
                    break;

                case ScenarioEditorItemId.CabinetArmamentMinisterType:
                    if (settings.ArmamentMinister == null)
                    {
                        settings.ArmamentMinister = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetArmamentMinisterId), val,
                            settings, settings.ArmamentMinister);
                    }
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfSecurity:
                case ScenarioEditorItemId.CabinetMinisterOfSecurityId:
                    if (settings.MinisterOfSecurity == null)
                    {
                        settings.MinisterOfSecurity = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetMinisterOfSecurityType), settings,
                            settings.MinisterOfSecurity);
                    }
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfSecurityType:
                    if (settings.MinisterOfSecurity == null)
                    {
                        settings.MinisterOfSecurity = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetMinisterOfSecurityId), val,
                            settings, settings.MinisterOfSecurity);
                    }
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfIntelligence:
                case ScenarioEditorItemId.CabinetMinisterOfIntelligenceId:
                    if (settings.MinisterOfIntelligence == null)
                    {
                        settings.MinisterOfIntelligence = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetMinisterOfIntelligenceType),
                            settings, settings.MinisterOfIntelligence);
                    }
                    break;

                case ScenarioEditorItemId.CabinetMinisterOfIntelligenceType:
                    if (settings.MinisterOfIntelligence == null)
                    {
                        settings.MinisterOfIntelligence = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetMinisterOfIntelligenceId), val,
                            settings, settings.MinisterOfIntelligence);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfStaff:
                case ScenarioEditorItemId.CabinetChiefOfStaffId:
                    if (settings.ChiefOfStaff == null)
                    {
                        settings.ChiefOfStaff = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfStaffType), settings,
                            settings.ChiefOfStaff);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfStaffType:
                    if (settings.ChiefOfStaff == null)
                    {
                        settings.ChiefOfStaff = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfStaffId), val, settings,
                            settings.ChiefOfStaff);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfArmy:
                case ScenarioEditorItemId.CabinetChiefOfArmyId:
                    if (settings.ChiefOfArmy == null)
                    {
                        settings.ChiefOfArmy = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfArmyType), settings,
                            settings.ChiefOfArmy);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfArmyType:
                    if (settings.ChiefOfArmy == null)
                    {
                        settings.ChiefOfArmy = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfArmyId), val, settings,
                            settings.ChiefOfArmy);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfNavy:
                case ScenarioEditorItemId.CabinetChiefOfNavyId:
                    if (settings.ChiefOfNavy == null)
                    {
                        settings.ChiefOfNavy = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfNavyType), settings,
                            settings.ChiefOfNavy);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfNavyType:
                    if (settings.ChiefOfNavy == null)
                    {
                        settings.ChiefOfNavy = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfNavyId), val, settings,
                            settings.ChiefOfNavy);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfAir:
                case ScenarioEditorItemId.CabinetChiefOfAirId:
                    if (settings.ChiefOfAir == null)
                    {
                        settings.ChiefOfAir = new TypeId();
                        PreItemChangedCabinetId(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfAirType), settings,
                            settings.ChiefOfAir);
                    }
                    break;

                case ScenarioEditorItemId.CabinetChiefOfAirType:
                    if (settings.ChiefOfAir == null)
                    {
                        settings.ChiefOfAir = new TypeId();
                        PreItemChangedCabinetType(
                            (TextBox) _form.GetItemControl(ScenarioEditorItemId.CabinetChiefOfAirId), val, settings,
                            settings.ChiefOfAir);
                    }
                    break;
            }
        }