Base.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. namespace OpenVIII.IGMData.Pool
  2. {
  3. public abstract class Base<T, T2> : IGMData.Base
  4. {
  5. private int _defaultPages;
  6. #region Constructors
  7. protected Base() => ExtraCount = 2;
  8. #endregion Constructors
  9. #region Properties
  10. public T2[] Contents { get; set; }
  11. /// <summary>
  12. /// Sets the Pages on refresh to this.
  13. /// </summary>
  14. public int DefaultPages
  15. {
  16. get => _defaultPages; protected set
  17. {
  18. _defaultPages = value;
  19. ResetPages();
  20. }
  21. }
  22. public int Page { get; protected set; }
  23. /// <summary>
  24. /// On refresh this is overrode by DefaultPages
  25. /// </summary>
  26. public int Pages { get; private set; }
  27. protected Menu_Base LeftArrow
  28. {
  29. get => ITEM?[Count - 2, 0];
  30. private set => SIZE[Count - 2] = ITEM[Count - 2, 0] = value;
  31. }
  32. protected Menu_Base RightArrow
  33. {
  34. get => ITEM?[Count - 1, 0];
  35. private set => SIZE[Count - 1] = ITEM[Count - 1, 0] = value;
  36. }
  37. protected T Source { get; set; }
  38. #endregion Properties
  39. #region Methods
  40. public static J Create<J>(int count, int depth, Menu_Base container = null, int? rows = null, int? pages = null, Damageable damageable = null, bool battle = false)
  41. where J : Base<T, T2>, new()
  42. {
  43. J r = IGMData.Base.Create<J>(count, depth, container, 1, rows, damageable, battle: battle);
  44. r.DefaultPages = pages ?? 1;
  45. return r;
  46. }
  47. public override bool Inputs()
  48. {
  49. bool ret = false;
  50. if (Pages > 1 && CONTAINER.Pos.Contains(MouseLocation))
  51. {
  52. if (Input2.DelayedButton(MouseButtons.MouseWheelup))
  53. {
  54. Inputs_Left();
  55. ret = true;
  56. }
  57. else if (Input2.DelayedButton(MouseButtons.MouseWheeldown))
  58. {
  59. Inputs_Right();
  60. ret = true;
  61. }
  62. }
  63. if (!ret)
  64. ret = base.Inputs();
  65. return ret;
  66. }
  67. public override void Inputs_Left()
  68. {
  69. if (Pages > 1)
  70. {
  71. base.Inputs_Left();
  72. PAGE_PREV();
  73. }
  74. }
  75. public override void Inputs_Right()
  76. {
  77. if (Pages > 1)
  78. {
  79. base.Inputs_Right();
  80. PAGE_NEXT();
  81. }
  82. }
  83. public void PagesOne()
  84. {
  85. Pages = 1;
  86. Cursor_Status |= Cursor_Status.Horizontal;
  87. RightArrow?.Hide();
  88. LeftArrow?.Hide();
  89. }
  90. public override void Refresh()
  91. {
  92. base.Refresh();
  93. ResetPages();
  94. }
  95. public virtual void ResetPages()
  96. {
  97. Pages = DefaultPages;
  98. if (Pages <= 1)
  99. PagesOne();
  100. else
  101. {
  102. Cursor_Status &= ~Cursor_Status.Horizontal;
  103. RightArrow?.Show();
  104. LeftArrow?.Show();
  105. }
  106. }
  107. public virtual void UpdateTitle()
  108. {
  109. }
  110. protected override void Init()
  111. {
  112. base.Init();
  113. Cursor_Status |= (Cursor_Status.Enabled | Cursor_Status.Vertical);
  114. Page = 0;
  115. Contents = new T2[Rows];
  116. LeftArrow = new IGMDataItem.Icon { Data = Icons.ID.Arrow_Left, X = X + 6, Y = Y + Height - 28, Palette = 2, Faded_Palette = 7, Blink = true };
  117. RightArrow = new IGMDataItem.Icon { Data = Icons.ID.Arrow_Right2, X = X + Width - 24, Y = Y + Height - 28, Palette = 2, Faded_Palette = 7, Blink = true };
  118. }
  119. protected virtual void PAGE_NEXT()
  120. {
  121. Page++;
  122. if (Page >= Pages)
  123. Page = 0;
  124. }
  125. protected virtual void PAGE_PREV()
  126. {
  127. Page--;
  128. if (Page < 0)
  129. Page = Pages - 1;
  130. }
  131. #endregion Methods
  132. }
  133. }