OutlineControl.Mono.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using FastReport.Utils;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. namespace FastReport.Preview
  5. {
  6. internal class OutlineControl : UserControl
  7. {
  8. private TreeView tree;
  9. private PreviewControl preview;
  10. private PreparedPages preparedPages;
  11. private UIStyle style;
  12. internal PreparedPages PreparedPages
  13. {
  14. get { return preparedPages; }
  15. set
  16. {
  17. preparedPages = value;
  18. UpdateContent();
  19. }
  20. }
  21. internal UIStyle Style
  22. {
  23. get { return style; }
  24. set
  25. {
  26. style = value;
  27. tree.Refresh();
  28. }
  29. }
  30. private void EnumNodes(XmlItem rootItem, TreeNodeCollection rootNode)
  31. {
  32. // skip root xml item
  33. if (rootItem.Parent != null)
  34. {
  35. string text = Converter.FromXml(rootItem.GetProp("Text"));
  36. TreeNode node = new TreeNode();
  37. node.Text = text;
  38. node.Tag = rootItem;
  39. rootNode.Add(node);
  40. rootNode = node.Nodes;
  41. }
  42. for (int i = 0; i < rootItem.Count; i++)
  43. {
  44. EnumNodes(rootItem[i], rootNode);
  45. }
  46. }
  47. private void UpdateContent()
  48. {
  49. tree.Nodes.Clear();
  50. if (PreparedPages == null)
  51. return;
  52. Outline outline = PreparedPages.Outline;
  53. tree.BeginUpdate();
  54. EnumNodes(outline.Xml, tree.Nodes);
  55. if (tree.Nodes.Count == 1)
  56. tree.Nodes[0].Expand();
  57. tree.EndUpdate();
  58. // to update tree's scrollbars
  59. Style = Style;
  60. }
  61. private void FTree_AfterSelect(object sender, TreeViewEventArgs e)
  62. {
  63. // avoid bug when closing the preview
  64. if (!Visible)
  65. return;
  66. if (e.Node == null)
  67. return;
  68. XmlItem item = e.Node.Tag as XmlItem;
  69. string s = item.GetProp("Page");
  70. if (s != "")
  71. {
  72. int pageNo = int.Parse(s);
  73. s = item.GetProp("Offset");
  74. if (s != "")
  75. {
  76. float offset = (float)Converter.FromString(typeof(float), s);
  77. preview.PositionTo(pageNo + 1, new PointF(0, offset));
  78. }
  79. }
  80. }
  81. internal void SetPreview(PreviewControl preview)
  82. {
  83. this.preview = preview;
  84. }
  85. internal void UpdateDpiDependencies()
  86. {
  87. tree.Font = this.LogicalToDevice(DrawUtils.DefaultFont);
  88. }
  89. /// <summary>
  90. /// Initializes a new instance of the <b>OutlineControl</b> class with default settings.
  91. /// </summary>
  92. public OutlineControl()
  93. {
  94. tree = new TreeView();
  95. tree.BackColor = SystemColors.Window;
  96. tree.Dock = DockStyle.Fill;
  97. tree.HideSelection = false;
  98. tree.HotTracking = true;
  99. tree.AfterSelect += new TreeViewEventHandler(FTree_AfterSelect);
  100. Controls.Add(tree);
  101. UpdateDpiDependencies();
  102. }
  103. }
  104. }