ItemPager.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /**
  2. * Project : Mono
  3. * Namespace : System.Web.UI.MobileControls
  4. * Class : ItemPager
  5. * Author : Gaurav Vaish
  6. *
  7. * Copyright : 2003 with Gaurav Vaish, and with
  8. * Ximian Inc
  9. */
  10. using System.Web.Mobile;
  11. namespace System.Web.UI.MobileControls
  12. {
  13. public class ItemPager
  14. {
  15. private MobileControl control;
  16. private int firstPage;
  17. private int lastPage;
  18. private int firstPageItemCount;
  19. private int fullPageItemCount;
  20. private int lastPageItemCount;
  21. public ItemPager()
  22. {
  23. }
  24. public ItemPager(ControlPager pager, MobileControl control,
  25. int itemCount, int itemsPerPage, int itemWeight)
  26. {
  27. this.control = control;
  28. if(itemsPerPage > 0)
  29. {
  30. if(itemCount < itemsPerPage)
  31. {
  32. firstPageItemCount = itemCount;
  33. firstPage = pager.GetPage(itemWeight * itemCount);
  34. lastPage = firstPage;
  35. } else
  36. {
  37. int ppic = (itemCount - 1)/itemsPerPage + 1;
  38. firstPageItemCount = itemsPerPage;
  39. fullPageItemCount = itemsPerPage;
  40. lastPageItemCount = ppic - (ppic - 1)*itemsPerPage;
  41. firstPage = pager.GetPage(itemsPerPage * itemWeight);
  42. pager.PageCount += (ppic - 1);
  43. if(ppic > 1)
  44. {
  45. pager.RemainingWeight = pager.PageWeight
  46. - (itemsPerPage * itemWeight);
  47. lastPage = firstPage + ppic - 1;
  48. }
  49. }
  50. } else
  51. {
  52. int totalWt = itemWeight * itemCount;
  53. if(totalWt <= pager.RemainingWeight)
  54. {
  55. firstPageItemCount = itemCount;
  56. firstPage = pager.GetPage(totalWt);
  57. lastPage = firstPage;
  58. } else
  59. {
  60. firstPageItemCount = pager.RemainingWeight / itemWeight;
  61. int rem = itemCount - firstPageItemCount;
  62. fullPageItemCount = Math.Max(itemWeight, pager.PageWeight);
  63. int pages = rem / fullPageItemCount;
  64. lastPageItemCount = rem % fullPageItemCount;
  65. firstPage = pager.PageCount;
  66. pager.PageCount += 1;
  67. pager.RemainingWeight = pager.PageWeight;
  68. pager.PageCount += pages;
  69. pager.RemainingWeight -= lastPageItemCount * itemWeight;
  70. if(firstPageItemCount == 0)
  71. {
  72. firstPage += 1;
  73. firstPageItemCount = Math.Min(fullPageItemCount,
  74. itemCount);
  75. }
  76. if(lastPageItemCount == 0)
  77. {
  78. pager.PageCount -= 1;
  79. lastPageItemCount = Math.Min(fullPageItemCount,
  80. itemCount);
  81. pager.RemainingWeight = 0;
  82. }
  83. lastPage = pager.PageCount;
  84. }
  85. control.FirstPage = firstPage;
  86. control.LastPage = lastPage;
  87. }
  88. }
  89. public int ItemCount
  90. {
  91. get
  92. {
  93. return GetItemCount();
  94. }
  95. }
  96. public int ItemIndex
  97. {
  98. get
  99. {
  100. return GetItemIndex();
  101. }
  102. }
  103. private int GetItemCount()
  104. {
  105. int cp = control.Form.CurrentPage;
  106. int retVal;
  107. if(cp >= firstPage && cp <= lastPage)
  108. {
  109. if(cp == firstPage)
  110. retVal = firstPageItemCount;
  111. else if(cp == lastPage)
  112. retVal = lastPageItemCount;
  113. else
  114. retVal = fullPageItemCount;
  115. } else
  116. {
  117. retVal = -1;
  118. }
  119. return retVal;
  120. }
  121. private int GetItemIndex()
  122. {
  123. int cp = control.Form.CurrentPage;
  124. int retVal;
  125. if(cp >= firstPage && cp <= lastPage)
  126. {
  127. if(cp == firstPage)
  128. retVal = 0;
  129. else
  130. {
  131. retVal = (cp - firstPage - 1)* fullPageItemCount
  132. + firstPageItemCount;
  133. }
  134. } else
  135. {
  136. retVal = -1;
  137. }
  138. return retVal;
  139. }
  140. }
  141. }