Bookmarks.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using FastReport.Utils;
  5. using System.Collections;
  6. namespace FastReport.Preview
  7. {
  8. internal class Bookmarks
  9. {
  10. private List<BookmarkItem> items;
  11. private List<BookmarkItem> firstPassItems;
  12. internal int CurPosition
  13. {
  14. get { return items.Count; }
  15. }
  16. internal void Shift(int index, float newY)
  17. {
  18. if (index < 0 || index >= items.Count)
  19. return;
  20. float topY = items[index].offsetY;
  21. float shift = newY - topY;
  22. for (int i = index; i < items.Count; i++)
  23. {
  24. items[i].pageNo++;
  25. items[i].offsetY += shift;
  26. }
  27. }
  28. public void Add(string name, int pageNo, float offsetY)
  29. {
  30. BookmarkItem item = new BookmarkItem();
  31. item.name = name;
  32. item.pageNo = pageNo;
  33. item.offsetY = offsetY;
  34. items.Add(item);
  35. }
  36. public int GetPageNo(string name)
  37. {
  38. BookmarkItem item = Find(name);
  39. if (item == null)
  40. item = Find(name, firstPassItems);
  41. return item == null ? 0 : item.pageNo + 1;
  42. }
  43. public BookmarkItem Find(string name)
  44. {
  45. return Find(name, items);
  46. }
  47. private BookmarkItem Find(string name, List<BookmarkItem> items)
  48. {
  49. if (items == null)
  50. return null;
  51. foreach (BookmarkItem item in items)
  52. {
  53. if (item.name == name)
  54. return item;
  55. }
  56. return null;
  57. }
  58. public void Clear()
  59. {
  60. items.Clear();
  61. }
  62. public void ClearFirstPass()
  63. {
  64. firstPassItems = items;
  65. items = new List<BookmarkItem>();
  66. }
  67. public void Save(XmlItem rootItem)
  68. {
  69. rootItem.Clear();
  70. foreach (BookmarkItem item in items)
  71. {
  72. XmlItem xi = rootItem.Add();
  73. xi.Name = "item";
  74. xi.SetProp("Name", item.name);
  75. xi.SetProp("Page", item.pageNo.ToString());
  76. xi.SetProp("Offset", Converter.ToString(item.offsetY));
  77. }
  78. }
  79. public void Load(XmlItem rootItem)
  80. {
  81. Clear();
  82. for (int i = 0; i < rootItem.Count; i++)
  83. {
  84. XmlItem item = rootItem[i];
  85. Add(item.GetProp("Name"), int.Parse(item.GetProp("Page")),
  86. (float)Converter.FromString(typeof(float), item.GetProp("Offset")));
  87. }
  88. }
  89. public Bookmarks()
  90. {
  91. items = new List<BookmarkItem>();
  92. }
  93. internal class BookmarkItem
  94. {
  95. public string name;
  96. public int pageNo;
  97. public float offsetY;
  98. }
  99. }
  100. }