public EPuzzleWindow(EPuzzleData ePuzzleData)
 {
     InputDevice = InputDevice.Mouse;
     EPuzzleData = ePuzzleData;
     WindowState.常にカーソルを表示 = (bool)ePuzzleData.Settings.GetValue("常にカーソルを表示");
     ChumonResult = new ChumonResult(ePuzzleData.CurrentUserInfo);
 }
        public EPuzzleTutor(EPuzzleData data, IEnumerable<string> ids, TimeSpan duration)
            : this(data.CurrentUserInfo, 
			GetMondaiDocumentsFromIds(data.MondaiDocuments, ids), 
			duration, 
			data.CurrentUserInfo.NumberOfQuestionsThatYouHaveToDoToday)
        {
        }
        public static EPuzzleData Create(string applicationDataDirectory)
        {
            // アプリケーションディレクトリの指定
            var data = new EPuzzleData();
            data.DataDir = new DirectoryItem(applicationDataDirectory);

            // 設定ファイルの読込か作成
            //			data.Directories = new EPuzzleDirectoryManager();
            data.Settings = FishSettingsBase.Create(data.SettingsFileName, "EPuzzle");
            data.Settings.CreateNewItem("常にカーソルを表示", false);
            data.Settings.CreateNewItem("CurrentUserId", default(Guid));
            data.Settings.CreateNewItem("HelpDocumentFileNames", Join(new [] { "HelpDocument.xml", }));
            data.Settings.CreateNewItem("カード選択時に音声ファイルを再生する", false);
            data.Settings.CreateNewItem("発音ファイルのディレクトリ名", "PronunciationSoundFiles");
            data.Settings.CreateNewItem("結果画像のディレクトリ名", "ResultImages");
            data.Settings.CreateNewItem("最後の問題を解いたあと次の画面に遷移しない", false);
            data.Settings.CreateNewItem("発音情報ファイルのパス", "PronunciationInfoContainer.xml");
            data.Settings.CreateNewItem("発音問題を有効にする", false);
            data.Settings.CreateNewItem("家庭教師モードの対象になる問題ファイルのIDの配列", new string[0]);
            data.Settings.CreateNewItem("家庭教師モードにてこの時間以内の問題は無視する", TimeSpan.FromHours(12d));

            // 問題ファイルの読込
            data.MondaiDocuments = MondaiDocument.LoadMondaiDocuments(data.DataDir.FullPath("mondai"));
            data.CurrentMondaiDocument = data.MondaiDocuments.First();

            // 発音ファイルの読込
            if (data.発音問題を有効にする)
            {
                foreach (var mondaiDocument in data.MondaiDocuments)
                {
                    Trace.WriteLine(string.Format("発音問題を追加しています: {0}", mondaiDocument.Name));
                    ChumonCreator.AddPronChumonsTo(data.PronunciationInfoContainer, mondaiDocument);
                }
            }

            if (!((string[])data.Settings.GetValue("家庭教師モードの対象になる問題ファイルのIDの配列")).Any())
            {
                data.Settings.SetValue("家庭教師モードの対象になる問題ファイルのIDの配列", data.MondaiDocuments.Select(x => x.Id).ToArray());
            }

            // ユーザー情報の読込か作成
            //			data._ePuzzleUserInfoContainer = EPuzzleUserInfoContainer.Create(data.DataDir.FullPath(UserInfoContainerFileName));
            data._ePuzzleUserInfoContainer = EPuzzleUserInfoContainer.CreateFrom(data.DataDir.DirectoryName);
            var userInfo = data._ePuzzleUserInfoContainer.GetUserInfo((Guid)data.Settings.GetValue("CurrentUserId"));
            if (null == userInfo)
            {
                data.Settings.SetValue("CurrentUserId", data._ePuzzleUserInfoContainer.Items.First().UserId);
            }

            // 結果画像のディレクトリの設定
            //			ResultImageManager.Instance.最後に表示してからもっとも時間が経過しているファイルから表示する = true;
            //			ResultImageManager.Instance.Load(data.ResultImageInfoContainerFileName);
            //			ResultImageManager.Instance.DirectoryName = data.結果画像のディレクトリ名;
            //			ResultImageManager.Instance.PrepareForImages();

            //			TimeLimit.TimeLimitTweak = data.CurrentUserInfo.TimeLimitTweak;

            data.CurrentUserInfo.ResultImageManager.DirectoryName = data.結果画像のディレクトリ名;
            data.CurrentUserInfo.ResultImageManager.PrepareForImages();

            // 設定ファイルがなければここで保存
            if (!File.Exists(data.SettingsFileName))
            {
                data.Save();
            }
            return data;
        }