public static GhostManager Load(Realize2Text realize2Text, string ghostDirPath, string filterWord, string sortType) { var manager = new GhostManager() { Realize2Text = realize2Text, GhostDirPath = ghostDirPath, FilterWord = filterWord, SortType = sortType }; var sw = new Stopwatch(); sw.Start(); manager.Load(); sw.Stop(); Debug.WriteLine(string.Format("GhostManager.Load : {0}", sw.Elapsed)); return(manager); }
/// <summary> /// ゴースト情報の読み込みと一覧表示更新 /// </summary> protected virtual void UpdateGhostList() { var selectedGhostDirPath = ((DropDownItem)cmbGhostDir.SelectedItem).Value; var filterWord = txtFilter.Text.Trim(); var sortType = ((DropDownItem)cmbSort.SelectedItem).Value; // Realize2Textを読み込む var realize2Path = Path.Combine(SSPDirPath, @"data\profile\realize2.txt"); if (File.Exists(realize2Path)) { Realize2Text = Realize2Text.Load(realize2Path); } // ゴースト情報読み込み GhostManager = GhostManager.Load(Realize2Text, selectedGhostDirPath, filterWord, sortType); // リスト構築 var listGroups = new Dictionary <string, ListViewGroup>(); lstGhost.Items.Clear(); // シェル読み込み時のエラー情報はクリア ErrorMessagesOnShellLoading.Clear(); // 1件以上存在する場合 if (GhostManager.Ghosts.Any()) { // リスト項目追加 foreach (var ghost in GhostManager.Ghosts) { var item = lstGhost.Items.Add(key: ghost.DirPath, text: ghost.Name ?? "", imageKey: ghost.DirPath); // ゴースト格納フォルダのパスを元に、グループも設定 if (!listGroups.ContainsKey(ghost.GhostBaseDirPath)) { listGroups[ghost.GhostBaseDirPath] = new ListViewGroup(ghost.GhostBaseDirPath); lstGhost.Groups.Add(listGroups[ghost.GhostBaseDirPath]); } item.Group = listGroups[ghost.GhostBaseDirPath]; } // 最初に1件目のシェル情報、顔画像のみ同期的に読み込んでおく var firstGhost = GhostManager.Ghosts[0]; LoadShellAndFaceImage(firstGhost); // 先頭を選択 lstGhost.Items[0].Focused = true; lstGhost.Items[0].Selected = true; lstGhost.EnsureVisible(0); } // 最後にメニュー項目追加 lstGhost.Items.Add(key: "option", text: "オプション", imageKey: null); // ゴーストごとのシェル・画像読み込み処理 prgLoading.Maximum = GhostManager.Ghosts.Count; prgLoading.Value = 0; GhostImageCancellationTokenSource = new CancellationTokenSource(); var token = GhostImageCancellationTokenSource.Token; GhostImageLoadingTask = Task.Factory.StartNew(() => LoadGhostShellsAsync(token), token); // ゴースト情報リストの更新に伴う画面表示更新 UpdateUIOnFMOChanged(); }