public HelpItemState(EPuzzleWindow window, HelpItemBase[] helpItems, int helpItemIndex, WindowState parentState) : base(window) { _helpItems = helpItems; _helpItemIndex = helpItemIndex; _parentState = parentState; var helpItemButtons = helpItems.Select(helpItem => { var helpItemButton = new EigoTestButtonItem("", 20f, 18f) { Position = DrawingObjectPosition.Absolute, MarginRight = 10f, MarginBottom = 10f, Tag = helpItem, }; return helpItemButton; }); var helpItemButtonContainer = new DrawingObjectContainer() { Position = DrawingObjectPosition.Absolute, MarginLeft = 50f, Height = 40f, }; helpItemButtonContainer.Items.AddRange(helpItemButtons); helpItemButtonContainer.Items[helpItemIndex].IsClickable = false; Items.Add(helpItemButtonContainer); for (int i = 1; i < helpItemButtonContainer.Items.Count(); i++) { var s = helpItemButtonContainer.Items[i - 1]; var t = helpItemButtonContainer.Items[i]; t.Left = s.Left + s.OuterWidth; } helpItemButtonContainer.下揃え(); var modoruButton = new EigoTestButtonItem("続ける", 80f, 50f) { Position = DrawingObjectPosition.Absolute, Name = "tsudukeru", MarginRight = 50f, MarginBottom = 10f, }; Items.Add(modoruButton); modoruButton.右揃え(); modoruButton.下揃え(); if (0 < helpItemIndex) { var previousButton = new PreviousButton() { Position = DrawingObjectPosition.Absolute, MarginLeft = 10f, Tag = helpItemIndex - 1, }; Items.Add(previousButton); previousButton.垂直方向に中央揃え(); } if (helpItemIndex < helpItemButtonContainer.Items.Count() - 1) { var nextButton = new NextButton() { Position = DrawingObjectPosition.Absolute, MarginRight = 10f, Tag = helpItemIndex + 1, }; Items.Add(nextButton); nextButton.垂直方向に中央揃え(); nextButton.右揃え(); } if (!string.IsNullOrWhiteSpace(_helpItems[helpItemIndex].ImageFile)) { var imageFile = Path.Combine(window.EPuzzleData.HelpDirectory, _helpItems[helpItemIndex].ImageFile); var imageItem = new ImageItem(imageFile) { Position = DrawingObjectPosition.Absolute, MarginTop = 20f, }; Items.Add(imageItem); imageItem.水平方向に中央揃え(); } Action0 += (sender, e) => { if (CurrentItem is NextButton) { MoveTo((int)CurrentItem.Tag); } else if (CurrentItem is PreviousButton) { MoveTo((int)CurrentItem.Tag); } else if (CurrentItem.Tag is HelpItem) { var index = Array.IndexOf(helpItems, CurrentItem.Tag); MoveTo(index); } else if ("tsudukeru" == CurrentItem.Name) { Window.State = parentState; } }; Action3 += (sender, e) => { Window.State = parentState; }; }
public override void UpdateItemsToBeDrawn() { Items.Clear(); var rect = Window.ClientRectangle; var button_color = Color.FromArgb(0xff, 0x00, 0x00, 0x80); var helpTextBox = CreateHelpTextBox(); helpTextBox.Left = 840; helpTextBox.Top = 100; helpTextBox.Width = 150; helpTextBox.Height = 400; // helpTextBox.Left = 0; // helpTextBox.Top = 0; Items.Add(helpTextBox); var title_label = new EigoTestLabelItem() { MarginTop = 30f, MarginBottom = 30f, Color = button_color, BackColor = Color.FromArgb(0xff, 0xb0, 0xc4, 0xde), BorderLine = true, Text = Daimon.Name, Height = 56f, }; title_label.Font = EPuzzleFonts.GetFont("Arial", (int)(title_label.Height / 2f)); title_label.MarginLeft = title_label.MarginRight = 300f; Items.Add(title_label); // 前の問題ドキュメントへ遷移するボタン var previousMondaiDocumentButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 800, Top = 10, Width = 40, Height = 40, Text = "↑", Name = "PreviousMondaiDocumentButton", IsVisible = Daimon.Parent.PreviousItem != null, IsClickable = Daimon.Parent.PreviousItem != null, HelpText = "前の問題ファイルに移動します。", }; previousMondaiDocumentButton.Click += (sender, e) => { if (e.Info.Button != MouseButtons.Left) return; OnActionUp(); }; Items.Add(previousMondaiDocumentButton); // 次の問題ドキュメントへ遷移するボタン var nextMondaiDocumentButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 850, Top = 10, Width = 40, Height = 40, Text = "↓", Name = "NextMondaiDocumentButton", IsVisible = Daimon.Parent.NextItem != null, IsClickable = Daimon.Parent.NextItem != null, HelpText = "次の問題ファイルに移動します。", }; nextMondaiDocumentButton.Click += (sender, e) => { if (e.Info.Button != MouseButtons.Left) return; OnActionDown(); }; Items.Add(nextMondaiDocumentButton); // 問題ドキュメントメニューへ遷移するボタン var mondaiDocumentMenuButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 900, Top = 10, Width = 40, Height = 40, Text = "=", Name = "MondaiMenuButton", HelpText = "問題ファイルの選択メニューに戻ります。", }; mondaiDocumentMenuButton.Click += (sender, e) => { MoveToMondaiDocumentMenuState(); }; Items.Add(mondaiDocumentMenuButton); // タイトルに戻るボタン _back_button = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 950, Top = 10, Width = 40, Height = 40, Text = "T", Name = "タイトル画面に戻る", HelpText = "タイトル画面に戻ります。", }; _back_button.Font = EPuzzleFonts.GetMsGothic((int)(_back_button.Height / 2f)); _back_button.Click += (sender, e) => { MoveToStartGameState(); }; Items.Add(_back_button); // 成績グラフ _kirokuBox = new KirokuBox2() { Position = DrawingObjectPosition.Absolute, Left = 10, Top = 100, Width = 180, Height = 180, UserInfo = Window.EPuzzleData.CurrentUserInfo, Chumon = (Chumon)Daimon.Items.First(), }; Items.Add(_kirokuBox); _kirokuInfoBox = new KirokuInfoBox() { Position = DrawingObjectPosition.Absolute, Left = 50, Top = 300, Width = 160, Height = 200, UserInfo = Window.EPuzzleData.CurrentUserInfo, Chumon = (Chumon)Daimon.Items.First(), }; Items.Add(_kirokuInfoBox); var chumonButtonHeight = 36; var chumonButtonWidth = 600; _helpWithScroll.Items = Daimon.Items.OfType<Chumon>().ToArray(); _chumonButtons = _helpWithScroll.GetItemsToBeShown().Select(x => { var mondaiResult = Window.EPuzzleData.CurrentUserInfo.MondaiResults.GetBest(x.Id); var shoyou = null == mondaiResult ? TimeSpan.Zero : mondaiResult.所要時間; // var button = new ChumonButton(new MondaiJirushi(Window.EPuzzleData.CurrentUserInfo, x), Window.EPuzzleData.CurrentUserInfo) var button = new ChumonButton(Window.EPuzzleData.CurrentUserInfo, x) { Color = button_color, BackColor = Color.FromArgb(0xff, 0xb0, 0xc4, 0xde), Height = chumonButtonHeight, Size = new SizeF(chumonButtonWidth, chumonButtonHeight), }; button.MarginLeft = button.MarginRight = (DrawingObjectRoot.Width - chumonButtonWidth) / 2f; button.Font = EPuzzleFonts.GetFont("Arial", (int)(button.Height / 2f)); return button; }).ToArray(); foreach (var chumonButton in _chumonButtons) { Items.Add(chumonButton); } // 発音問題ボタンを追加する /* if (Window.EPuzzleData.発音問題を有効にする) { var chumonCreator = new ChumonCreator(Window.EPuzzleData.PronunciationInfoContainer); foreach (var chumonButton in _chumonButtons) { var proChumon = chumonCreator.GetPronunciationChumon(chumonButton.Chumon); if (null == proChumon) continue; var button = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = chumonButton.BorderRight + 10, Top = chumonButton.BorderTop, Width = chumonButton.Height, Height = chumonButton.Height, Text = "P", Name = "pron-mondai", Tag = proChumon, BorderLine = true, }; Items.Add(button); } }*/ // 次のDaimonへ遷移するボタン var nextButtonSize = new SizeF(30, 45); if (null != Daimon.NextItem) { var nextDaimonButton = new NextButton() { Position = DrawingObjectPosition.Absolute, Color = button_color, BackColor = Color.FromArgb(0xff, 0xb0, 0xc4, 0xde), Location = new PointF(Window.ClientRectangle.Width - nextButtonSize.Width - 10, Window.ClientRectangle.Height / 2 - nextButtonSize.Height / 2), Size = nextButtonSize, Name = "NextDaimon", }; nextDaimonButton.Click += (sender, e) => { if (e.Info.Button != MouseButtons.Left) return; MoveToNextDaimon(); // OnActionRight(); }; Items.Add(nextDaimonButton); } // 前のDaimonへ遷移するボタン if (null != Daimon.PreviousItem) { var previousButton = new PreviousButton() { Position = DrawingObjectPosition.Absolute, Color = button_color, BackColor = Color.FromArgb(0xff, 0xb0, 0xc4, 0xde), Location = new PointF(10, Window.ClientRectangle.Height / 2 - nextButtonSize.Height / 2), Size = nextButtonSize, Name = "PreviousDaimon", }; previousButton.Click += (sender, e) => { if (e.Info.Button != MouseButtons.Left) return; MoveToPreviousDaimon(); // OnActionLeft(); }; Items.Add(previousButton); } if (_helpWithScroll.NeedToShowButtonToScrollUp) { var upButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 800, Top = 10, Width = 80, Height = 40, Text = "↑ " + _helpWithScroll.NumberOfUpperItems, Name = "upButton", IsVisible = true, IsClickable = true, }; Items.Add(upButton); upButton.水平方向に中央揃え(); } if (_helpWithScroll.NeedToShowButtonToScrollDown) { var downButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 800, Top = 718, Width = 80, Height = 40, Text = "↓ " + _helpWithScroll.NumberOfLowerItems, Name = "downButton", IsVisible = true, IsClickable = true, }; Items.Add(downButton); downButton.水平方向に中央揃え(); } { var label = CreateLabelToShowNumberOfQuestionsThatHaveBeenFinished(); label.Top -= 100f; Items.Add(label); } var daimons = Daimon.Parent.Items.OfType<Daimon>().ToArray(); var daimonIndex = daimons.GetIndexOf(x => object.ReferenceEquals(x, Daimon)); var daimonButtonBox = new DaimonButtonBox(daimons, daimonIndex, Window.EPuzzleData.CurrentUserInfo) { Position = DrawingObjectPosition.Absolute, MarginBottom = 30f, }; Items.Add(daimonButtonBox); daimonButtonBox.水平方向に中央揃え(); daimonButtonBox.下揃え(); LockButtons(); CurrentItemにロックされていない最後の問題を設定する(); }