public void Itemsプロパティを更新した場合にIndexが調整されるように() { var help = new HelpWithScroll<int>(); Assert.AreEqual(10, help.NumberOfItemsToBeShown); help.Items = new int[100]; help.ScrollDown(100); Assert.AreEqual(90, TestUtility.GetValue(help, "_index")); Assert.Throws<ArgumentNullException>(() => { help.Items = null; }); help.Items = new int[5]; Assert.AreEqual(0, TestUtility.GetValue(help, "_index")); }
public void Test0() { var help = new HelpWithScroll<int>(); Assert.Throws<ArgumentOutOfRangeException>(() => { help.NumberOfItemsToBeShown = 0; }); Assert.AreEqual(10, help.NumberOfItemsToBeShown); help.NumberOfItemsToBeShown = 1; Assert.AreEqual(1, help.NumberOfItemsToBeShown); var items = new [] { 1, 2, }; help.Items = items; Assert.AreEqual(0, help.NumberOfUpperItems); Assert.AreEqual(1, help.NumberOfLowerItems); CollectionAssert.AreEqual(new [] { 1, }, help.GetItemsToBeShown()); Assert.Throws<ArgumentOutOfRangeException>(() => { help.ScrollDown(0); }); Assert.Throws<ArgumentOutOfRangeException>(() => { help.ScrollUp(0); }); var count = 0; help.UpdateScreen += (sender, e) => { count++; }; Assert.AreEqual(0, count); help.ScrollDown(10); Assert.AreEqual(1, help.NumberOfUpperItems); Assert.AreEqual(0, help.NumberOfLowerItems); CollectionAssert.AreEqual(new [] { 2, }, help.GetItemsToBeShown()); Assert.AreEqual(1, count); Assert.True(help.NeedToShowButtonToScrollUp); Assert.False(help.NeedToShowButtonToScrollDown); help.ScrollDown(10); Assert.AreEqual(1, help.NumberOfUpperItems); Assert.AreEqual(0, help.NumberOfLowerItems); CollectionAssert.AreEqual(new [] { 2, }, help.GetItemsToBeShown()); Assert.AreEqual(1, count); Assert.True(help.NeedToShowButtonToScrollUp); Assert.False(help.NeedToShowButtonToScrollDown); help.ScrollUp(10); Assert.AreEqual(0, help.NumberOfUpperItems); Assert.AreEqual(1, help.NumberOfLowerItems); CollectionAssert.AreEqual(new [] { 1, }, help.GetItemsToBeShown()); Assert.AreEqual(2, count); Assert.False(help.NeedToShowButtonToScrollUp); Assert.True(help.NeedToShowButtonToScrollDown); help.ScrollUp(10); Assert.AreEqual(0, help.NumberOfUpperItems); Assert.AreEqual(1, help.NumberOfLowerItems); CollectionAssert.AreEqual(new [] { 1, }, help.GetItemsToBeShown()); Assert.AreEqual(2, count); Assert.False(help.NeedToShowButtonToScrollUp); Assert.True(help.NeedToShowButtonToScrollDown); var help2 = new HelpWithScroll<int>(99); Assert.AreEqual(99, help2.NumberOfItemsToBeShown); }
public DaimonState(EPuzzleWindow window, Daimon daimon, int numberOfItemsToBeShown = 16) : base(window) { _helpWithScroll = new HelpWithScroll<Chumon>(numberOfItemsToBeShown); Daimon = daimon; DrawingObjectRoot.BackColor = EPuzzleColors.DaimonStateBackColor; PropertyChanged += (sender, e) => { if ("CurrentItem" != e.PropertyName) return; var chumonButton = CurrentItem as ChumonButton; if (null != chumonButton) { _kirokuBox.Chumon = chumonButton.Chumon; _kirokuInfoBox.Chumon = chumonButton.Chumon; } }; Action0 += (sender, e) => { var chumonButton = CurrentItem as ChumonButton; if (null != chumonButton) { Chumonを開始する(chumonButton.Chumon, this); return; } var daimonButton = CurrentItem as DaimonButton; if (null != daimonButton) { Window.State = FoFi(this, new DaimonState(Window, daimonButton.Daimon)); return; } var button = CurrentItem as EigoTestButtonItem; if (null != button) { switch (button.Name) { case "upButton" : { _helpWithScroll.ScrollUp(); return; } case "downButton" : { _helpWithScroll.ScrollDown(); return; } } var chumon = button.Tag as Chumon; if (null != chumon) { Chumonを開始する(chumon, this); return; } } }; ActionLeft += (sender, e) => { MoveToPreviousDaimon(); /* if (null == Daimon.PreviousItem) return; Window.State = FoFi(this, new DaimonState(Window, (Daimon)Daimon.PreviousItem)); */ }; ActionRight += (sender, e) => { MoveToNextDaimon(); /* if (null == Daimon.NextItem) return; Window.State = FoFi(this, new DaimonState(Window, (Daimon)Daimon.NextItem)); */ }; ActionUp += (sender, e) => { if (null == Daimon.Parent.PreviousItem) return; MoveTo((MondaiDocument)Daimon.Parent.PreviousItem); }; ActionDown += (sender, e) => { if (null == Daimon.Parent.NextItem) return; MoveTo((MondaiDocument)Daimon.Parent.NextItem); }; _helpWithScroll.UpdateScreen += (sender, e) => { UpdateItemsToBeDrawn(); }; UpdateItemsToBeDrawn(); }
public void スクロールすると例外が発生する不具合() { { var help = new HelpWithScroll<int>(); help.Items = new int[0]; help.NumberOfItemsToBeShown = 1; help.ScrollDown(); help.ScrollUp(); } { var help = new HelpWithScroll<int>(); help.Items = new [] { 1, 2, 3, }; help.NumberOfItemsToBeShown = 5; help.ScrollDown(); help.ScrollUp(); } { var help = new HelpWithScroll<int>(); help.Items = new [] { 1, 2, 3, }; help.NumberOfItemsToBeShown = 3; help.ScrollDown(); help.ScrollUp(); } }
public override void UpdateItemsToBeDrawn() { _tutor.もっとやる係数を適正値に修正(); var currentItemInfo = SaveCurrentItem(); Items.Clear(); CurrentItem = null; var userInfo = Window.EPuzzleData.CurrentUserInfo; var chumonButtonBox = new DrawingObjectContainer() { Position = DrawingObjectPosition.Absolute, Left = 300, Top = 60, }; Items.Add(chumonButtonBox); var buttonColor = Color.FromArgb(0xff, 0x00, 0x00, 0x80); var buttonBackColor = Color.FromArgb(0xff, 0xb0, 0xc4, 0xde); var chumonButtonHeight = 36; var chumonButtonWidth = 714; _helpWithScroll = GetScrollHelper(_sortType); _helpWithScroll.Items = GetChumons(_tutor, _sortType); foreach (var chumon in _helpWithScroll.GetItemsToBeShown()) { var chumonButton = new ChumonButton(userInfo, chumon, true) { Color = buttonColor, BackColor = buttonBackColor, Width = chumonButtonWidth, Height = chumonButtonHeight, }; chumonButtonBox.Items.Add(chumonButton); } if (_helpWithScroll.NeedToShowButtonToScrollUp) { var upButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = DrawingObjectRoot.Width - (80 + 10), Top = 15, 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 = DrawingObjectRoot.Width - (80 + 10), Top = DrawingObjectRoot.Height - (40 + 10), Width = 80, Height = 40, Text = "↓ " + _helpWithScroll.NumberOfLowerItems, Name = "downButton", IsVisible = true, IsClickable = true, }; Items.Add(downButton); // downButton.水平方向に中央揃え(); } var xxx = !chumonButtonBox.Items.Any(); var mottoyaruButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 10, Top = 500, Width = 160, Height = 40, Text = string.Format("もっとやる ({0}回目)", もっとやる係数), Name = "mottoyaruButton", IsVisible = xxx, IsClickable = xxx, }; Items.Add(mottoyaruButton); /* var orderByGradeStringsButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 854, Top = 10, Width = 160, Height = 40, Name = "orderByGradeStringsButton", Text = OrderByGradeStrings ? "最新の成績順" : "復習猶予期間順", IsVisible = true, IsClickable = true, }; Items.Add(orderByGradeStringsButton);*/ var byGracePriodButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 300, Top = 15, Width = 160, Height = 40, Name = "byGracePriodButton", Text = "猶予順", IsVisible = true, IsClickable = TutorStateSortType.GracePriod != _sortType, ChangeColorWhenUnclickable = true, }; Items.Add(byGracePriodButton); var byDateYouDidThemButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 465, Top = 15, Width = 160, Height = 40, Name = "byDateYouDidThemButton", Text = "試験順", IsVisible = true, IsClickable = TutorStateSortType.DateYouDidThem != _sortType, ChangeColorWhenUnclickable = true, }; Items.Add(byDateYouDidThemButton); var byGradeButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 630, Top = 15, Width = 160, Height = 40, Name = "byGradeButton", Text = "成績順", IsVisible = true, IsClickable = TutorStateSortType.Grade != _sortType, ChangeColorWhenUnclickable = true, }; Items.Add(byGradeButton); var backToStartGameStateButton = new EigoTestButtonItem() { Position = DrawingObjectPosition.Absolute, Left = 10, Top = 10, Width = 160, Height = 40, Name = "backToStartGameStateButton", Text = "タイトルに戻る", IsVisible = true, IsClickable = true, }; Items.Add(backToStartGameStateButton); Items.Add(CreateLabelToShowNumberOfQuestionsThatHaveBeenFinished()); Items.Add(_kirokuBox); RestoreCurrentItem(currentItemInfo); if (null == CurrentItem) { CurrentItem = GetAllItems().OfType<ChumonButton>().FirstOrDefault(); } }