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);
        }
Esempio n. 2
0
        /// <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();
        }