123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using FastReport.Utils;
- using System.Drawing;
- using System.Windows.Forms;
- namespace FastReport.Preview
- {
- internal class OutlineControl : UserControl
- {
- private TreeView tree;
- private PreviewControl preview;
- private PreparedPages preparedPages;
- private UIStyle style;
- internal PreparedPages PreparedPages
- {
- get { return preparedPages; }
- set
- {
- preparedPages = value;
- UpdateContent();
- }
- }
- internal UIStyle Style
- {
- get { return style; }
- set
- {
- style = value;
- tree.Refresh();
- }
- }
- private void EnumNodes(XmlItem rootItem, TreeNodeCollection rootNode)
- {
- // skip root xml item
- if (rootItem.Parent != null)
- {
- string text = Converter.FromXml(rootItem.GetProp("Text"));
- TreeNode node = new TreeNode();
- node.Text = text;
- node.Tag = rootItem;
- rootNode.Add(node);
- rootNode = node.Nodes;
- }
- for (int i = 0; i < rootItem.Count; i++)
- {
- EnumNodes(rootItem[i], rootNode);
- }
- }
- private void UpdateContent()
- {
- tree.Nodes.Clear();
- if (PreparedPages == null)
- return;
- Outline outline = PreparedPages.Outline;
- tree.BeginUpdate();
- EnumNodes(outline.Xml, tree.Nodes);
- if (tree.Nodes.Count == 1)
- tree.Nodes[0].Expand();
- tree.EndUpdate();
- // to update tree's scrollbars
- Style = Style;
- }
- private void FTree_AfterSelect(object sender, TreeViewEventArgs e)
- {
- // avoid bug when closing the preview
- if (!Visible)
- return;
- if (e.Node == null)
- return;
- XmlItem item = e.Node.Tag as XmlItem;
- string s = item.GetProp("Page");
- if (s != "")
- {
- int pageNo = int.Parse(s);
- s = item.GetProp("Offset");
- if (s != "")
- {
- float offset = (float)Converter.FromString(typeof(float), s);
- preview.PositionTo(pageNo + 1, new PointF(0, offset));
- }
- }
- }
- internal void SetPreview(PreviewControl preview)
- {
- this.preview = preview;
- }
- internal void UpdateDpiDependencies()
- {
- tree.Font = this.LogicalToDevice(DrawUtils.DefaultFont);
- }
- /// <summary>
- /// Initializes a new instance of the <b>OutlineControl</b> class with default settings.
- /// </summary>
- public OutlineControl()
- {
- tree = new TreeView();
- tree.BackColor = SystemColors.Window;
- tree.Dock = DockStyle.Fill;
- tree.HideSelection = false;
- tree.HotTracking = true;
- tree.AfterSelect += new TreeViewEventHandler(FTree_AfterSelect);
- Controls.Add(tree);
- UpdateDpiDependencies();
- }
- }
- }
|