GridItemGroup.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace SuperScrollView
  6. {
  7. //if GridFixedType is GridFixedType.ColumnCountFixed, then the GridItemGroup is one row of the gridview
  8. //if GridFixedType is GridFixedType.RowCountFixed, then the GridItemGroup is one column of the gridview
  9. public class GridItemGroup
  10. {
  11. int mCount = 0;
  12. int mGroupIndex = -1;//the row index or the column index of this group
  13. LoopGridViewItem mFirst = null;
  14. LoopGridViewItem mLast = null;
  15. public int Count
  16. {
  17. get { return mCount; }
  18. }
  19. public LoopGridViewItem First
  20. {
  21. get { return mFirst; }
  22. }
  23. public LoopGridViewItem Last
  24. {
  25. get { return mLast; }
  26. }
  27. public int GroupIndex
  28. {
  29. get { return mGroupIndex; }
  30. set { mGroupIndex = value; }
  31. }
  32. public LoopGridViewItem GetItemByColumn(int column)
  33. {
  34. LoopGridViewItem cur = mFirst;
  35. while(cur != null)
  36. {
  37. if(cur.Column == column)
  38. {
  39. return cur;
  40. }
  41. cur = cur.NextItem;
  42. }
  43. return null;
  44. }
  45. public LoopGridViewItem GetItemByRow(int row)
  46. {
  47. LoopGridViewItem cur = mFirst;
  48. while (cur != null)
  49. {
  50. if (cur.Row == row)
  51. {
  52. return cur;
  53. }
  54. cur = cur.NextItem;
  55. }
  56. return null;
  57. }
  58. public void ReplaceItem(LoopGridViewItem curItem,LoopGridViewItem newItem)
  59. {
  60. newItem.PrevItem = curItem.PrevItem;
  61. newItem.NextItem = curItem.NextItem;
  62. if(newItem.PrevItem != null)
  63. {
  64. newItem.PrevItem.NextItem = newItem;
  65. }
  66. if(newItem.NextItem != null)
  67. {
  68. newItem.NextItem.PrevItem = newItem;
  69. }
  70. if(mFirst == curItem)
  71. {
  72. mFirst = newItem;
  73. }
  74. if(mLast == curItem)
  75. {
  76. mLast = newItem;
  77. }
  78. }
  79. public void AddFirst(LoopGridViewItem newItem)
  80. {
  81. newItem.PrevItem = null;
  82. newItem.NextItem = null;
  83. if (mFirst == null)
  84. {
  85. mFirst = newItem;
  86. mLast = newItem;
  87. mFirst.PrevItem = null;
  88. mFirst.NextItem = null;
  89. mCount++;
  90. }
  91. else
  92. {
  93. mFirst.PrevItem = newItem;
  94. newItem.PrevItem = null;
  95. newItem.NextItem = mFirst;
  96. mFirst = newItem;
  97. mCount++;
  98. }
  99. }
  100. public void AddLast(LoopGridViewItem newItem)
  101. {
  102. newItem.PrevItem = null;
  103. newItem.NextItem = null;
  104. if (mFirst == null)
  105. {
  106. mFirst = newItem;
  107. mLast = newItem;
  108. mFirst.PrevItem = null;
  109. mFirst.NextItem = null;
  110. mCount++;
  111. }
  112. else
  113. {
  114. mLast.NextItem = newItem;
  115. newItem.PrevItem = mLast;
  116. newItem.NextItem = null;
  117. mLast = newItem;
  118. mCount++;
  119. }
  120. }
  121. public LoopGridViewItem RemoveFirst()
  122. {
  123. LoopGridViewItem ret = mFirst;
  124. if (mFirst == null)
  125. {
  126. return ret;
  127. }
  128. if(mFirst == mLast)
  129. {
  130. mFirst = null;
  131. mLast = null;
  132. --mCount;
  133. return ret;
  134. }
  135. mFirst = mFirst.NextItem;
  136. mFirst.PrevItem = null;
  137. --mCount;
  138. return ret;
  139. }
  140. public LoopGridViewItem RemoveLast()
  141. {
  142. LoopGridViewItem ret = mLast;
  143. if (mFirst == null)
  144. {
  145. return ret;
  146. }
  147. if (mFirst == mLast)
  148. {
  149. mFirst = null;
  150. mLast = null;
  151. --mCount;
  152. return ret;
  153. }
  154. mLast = mLast.PrevItem;
  155. mLast.NextItem = null;
  156. --mCount;
  157. return ret;
  158. }
  159. public void Clear()
  160. {
  161. LoopGridViewItem current = mFirst;
  162. while (current != null)
  163. {
  164. current.PrevItem = null;
  165. current.NextItem = null;
  166. current = current.NextItem;
  167. }
  168. mFirst = null;
  169. mLast = null;
  170. mCount = 0;
  171. }
  172. }
  173. }