Ejemplo n.º 1
0
        /// <summary>
        /// モジュール数変更時
        /// </summary>
        /// <param name="module">変更があったモジュール</param>
        /// <param name="prevModuleCount">前回値モジュール数</param>
        private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount)
        {
            ModulesGridItem[] modules = { module };

            var storageModules = AggregateStorage(modules);

            foreach (var kvp in storageModules)
            {
                // 変更対象のモジュールを検索
                Storages.FirstOrDefault(x => x.TransportType.Equals(kvp.Key))?.SetDetails(kvp.Value, prevModuleCount);
            }
        }
        /// <summary>
        /// モジュール数変更時
        /// </summary>
        /// <param name="module">変更があったモジュール</param>
        /// <param name="prevModuleCount">前回値モジュール数</param>
        private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount)
        {
            ModulesGridItem[] modules = { module };

            Dictionary <string, List <StorageDetailsListItem> > storageModules = AggregateStorage(modules);

            foreach (var kvp in storageModules)
            {
                // 変更対象のウェアを検索
                Storages.FirstOrDefault(x => x.TransportType.TransportTypeID == kvp.Key)?.SetDetails(kvp.Value, prevModuleCount);
            }
        }
        /// <summary>
        /// モジュール数変更時
        /// </summary>
        /// <param name="module">変更があったモジュール</param>
        /// <param name="prevModuleCount">変更前モジュール数</param>
        private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount)
        {
            ModulesGridItem[] modules = { module };

            Dictionary <string, List <IProductDetailsListItem> > prodDict = AggregateProduct(modules);

            foreach (var item in prodDict)
            {
                // 変更対象のウェアを検索
                Products.FirstOrDefault(x => x.Ware.WareID == item.Key)?.SetDetails(item.Value, prevModuleCount);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// モジュールを復元
        /// </summary>
        /// <param name="conn">DB接続情報</param>
        /// <param name="progress">進捗</param>
        /// <param name="maxProgress">進捗最大</param>
        protected virtual void RestoreModules(DBConnection conn, IProgress <int> progress, int maxProgress)
        {
            // レコード数取得
            var moduleCnt    = conn.QuerySingle <int>("SELECT count(*) AS Count from Modules");
            var equipmentCnt = conn.QuerySingle <int>("SELECT count(*) AS Count from Equipments");
            var records      = moduleCnt + equipmentCnt;


            var modules     = new List <ModulesGridItem>(moduleCnt);
            var progressCnt = 1;

            // モジュールを復元
            const string sql1 = "SELECT ModuleID, Count FROM Modules ORDER BY Row ASC";

            foreach (var(moduleID, count) in conn.Query <(string, long)>(sql1))
            {
                var module = Module.Get(moduleID);
                if (module != null)
                {
                    var mod = new ModulesGridItem(module, null, count)
                    {
                        EditStatus = EditStatus.Unedited
                    };
                    modules.Add(mod);
                }
                progress.Report((int)((double)progressCnt++ / records * maxProgress));
            }

            // モジュールの装備を復元
            const string sql2 = "SELECT Row, EquipmentID FROM Equipments";

            foreach (var(row, equipmentID) in conn.Query <(int, string)>(sql2))
            {
                var eqp = Equipment.Get(equipmentID);
                if (eqp != null)
                {
                    modules[row].AddEquipment(eqp);
                }
                progress.Report((int)((double)progressCnt++ / records * maxProgress));
            }

            _WorkArea.StationData.ModulesInfo.Modules.Reset(modules);
        }
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="module">編集対象モジュール</param>
        public EditEquipmentWindow(ModulesGridItem module)
        {
            InitializeComponent();

            DataContext = new EditEquipmentViewModel(module);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// モジュール数変更時に建造に必要なリソースを更新
 /// </summary>
 /// <param name="module">変更対象モジュール</param>
 /// <param name="prevModuleCount">モジュール数前回値</param>
 private void OnModuleCountChanged(ModulesGridItem module, long prevModuleCount)
 {
     (string ModuleID, string Method, long ModuleCount)[] modules =
        /// <summary>
        /// モジュール自動追加
        /// </summary>
        public void AutoAddModule()
        {
            var result = LocalizedMessageBox.Show("Lang:AutoAddConfirm", "Lang:Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);

            if (result != MessageBoxResult.Yes)
            {
                return;
            }

            var addedRecords = 0L;              // 追加レコード数
            var addedModules = 0L;              // 追加モジュール数

            AutoAddModuleWork.Clear();

            while (true)
            {
                // 追加モジュールIDとモジュール数のペア一覧
                var addModules = _ProductCalculator.CalcNeedModules(Products, _Settings);

                // 追加モジュールが無ければ(不足が無くなれば)終了
                if (!addModules.Any())
                {
                    break;
                }

                var addModulesGridItems = new List <ModulesGridItem>();      // 実際に追加するモジュール一覧

                foreach (var(moduleID, count) in addModules)
                {
                    // モジュール自動追加作業用に実際に追加するモジュールが存在するか?
                    if (AutoAddModuleWork.ContainsKey(moduleID))
                    {
                        // モジュール自動追加作業用に実際に追加するモジュールが存在する場合、
                        // モジュール数を増やしてレコードがなるべく増えないようにする
                        AutoAddModuleWork[moduleID].ModuleCount += count;
                    }
                    else
                    {
                        // モジュール自動追加作業用に実際に追加するモジュールが存在しない場合、
                        // 実際に追加するモジュールと見なす
                        var module = DB.X4DB.Module.Get(moduleID);
                        if (module == null)
                        {
                            return;
                        }

                        var mgi = new ModulesGridItem(module, null, count)
                        {
                            EditStatus = EditStatus.Edited
                        };
                        addModulesGridItems.Add(mgi);
                        AutoAddModuleWork.Add(moduleID, mgi);

                        // 追加レコード数更新
                        addedRecords++;
                    }

                    // 追加モジュール数更新
                    addedModules += count;
                }

                // モジュール一覧に追加対象モジュールを追加
                _Modules.Modules.AddRange(addModulesGridItems);
            }


            if (addedRecords == 0)
            {
                LocalizedMessageBox.Show("Lang:NoAddedModulesAutomaticallyMessage", "Lang:Confirmation", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                LocalizedMessageBox.Show("Lang:AddedModulesAutomaticallyMessage", "Lang:Confirmation", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK, addedRecords, addedModules);
            }

            AutoAddModuleWork.Clear();
        }