123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- using FastReport.Controls;
- using FastReport.Utils;
- using System;
- using System.Collections.Generic;
- using System.Windows.Forms;
- namespace FastReport.Design.ToolWindows
- {
- /// <summary>
- /// Represents the "Messages" window.
- /// </summary>
- /// <remarks>
- /// To get this window, use the following code:
- /// <code>
- /// Designer designer;
- /// MessagesWindow window = designer.Plugins.FindType("MessagesWindow") as MessagesWindow;
- /// </code>
- /// </remarks>
- public class MessagesWindow : ToolWindowBase
- {
- private List<MessageItem> errors;
- private List<MessageItem> warnings;
- private ToolbarBase toolbar;
- private ToolbarButton btnErrors;
- private ToolbarButton btnWarnings;
- private ToolbarButton btnValidate;
- private ToolbarButton btnClose;
- private StyledListView list;
- private void ShowMessageItems(List<MessageItem> items, bool isError)
- {
- for (int i = 0; i < items.Count && i < 100; i++)
- {
- var messageItem = items[i];
- if (string.IsNullOrEmpty(messageItem.ObjName))
- {
- // script error with line/column info
- ListViewItem item = new ListViewItem();
- item.Text = " " + messageItem.Message;
- item.ImageIndex = 80;
- ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem();
- if (messageItem.Line != -1)
- subItem.Text = messageItem.Line.ToString();
- subItem.Tag = messageItem.Line;
- item.SubItems.Add(subItem);
- subItem = new ListViewItem.ListViewSubItem();
- if (messageItem.Column != -1)
- subItem.Text = messageItem.Column.ToString();
- subItem.Tag = messageItem.Column;
- item.SubItems.Add(subItem);
- list.Items.Add(item);
- }
- else
- {
- // other message with object name info
- ListViewItem item = new ListViewItem();
- item.ImageIndex = isError ? 80 : 211;
- item.Text = " " + messageItem.Message;
- item.Tag = messageItem.ObjName;
- list.Items.Add(item);
- }
- }
- }
- private void UpdateListView()
- {
- list.Items.Clear();
- if (btnErrors.Checked)
- ShowMessageItems(errors, true);
- if (btnWarnings.Checked)
- ShowMessageItems(warnings, false);
- UpdateButtonsText();
- }
- private void UpdateButtonsText()
- {
- MyRes res = new MyRes("Designer,ToolWindow,Messages");
- btnErrors.Text = String.Format(res.Get("Errors"), errors.Count > 99 ? "99+" : errors.Count.ToString());
- btnWarnings.Text = String.Format(res.Get("Warnings"), warnings.Count > 99 ? "99+" : warnings.Count.ToString());
- }
- private void btnValidate_Click(object sender, EventArgs e)
- {
- if (Designer.cmdReportValidation.Enabled)
- Designer.cmdReportValidation.Invoke(this, new EventArgs());
- }
- private void btnWarnings_Click(object sender, EventArgs e)
- {
- UpdateListView();
- }
- private void btnErrors_Click(object sender, EventArgs e)
- {
- UpdateListView();
- }
- private void btnClose_Click(object sender, EventArgs e)
- {
- #if !MONO
- Close();
- #else
- Designer.MessageWindowEnabled = false;
- #endif
- }
- private void list_DoubleClick(object sender, EventArgs e)
- {
- ListViewItem item = list.SelectedItems[0];
- if (item.SubItems.Count > 1)
- {
- Designer.ActiveReportTab.SwitchToCode();
- Designer.ActiveReport.CodeHelper.Locate((int)item.SubItems[1].Tag, (int)item.SubItems[2].Tag);
- }
- else
- {
- Base obj = Designer.ActiveReport.FindObject((string)item.Tag);
- if (obj != null)
- {
- Designer.ActiveReportTab.ActivePage = obj.Page;
- Designer.SelectedObjects.Clear();
- Designer.SelectedObjects.Add(obj);
- Designer.SelectionChanged(null);
- }
- }
- }
- /// <summary>
- /// Clears the message list.
- /// </summary>
- public void ClearMessages()
- {
- errors.Clear();
- warnings.Clear();
- UpdateListView();
- }
- /// <summary>
- /// Adds a new message.
- /// </summary>
- /// <param name="description">The message text.</param>
- /// <param name="objName">The name of object related to a message.</param>
- /// <param name="isError">Determines whether the message is an error or a warning.</param>
- public void AddMessage(string description, string objName, bool isError = true)
- {
- var messageItem = new MessageItem() { Message = description, ObjName = objName };
- if (isError)
- errors.Add(messageItem);
- else
- warnings.Add(messageItem);
- }
- /// <summary>
- /// Adds a new script-related message.
- /// </summary>
- /// <param name="description">The message text.</param>
- /// <param name="line">The line of the script.</param>
- /// <param name="column">The column of the script.</param>
- public void AddMessage(string description, int line, int column)
- {
- var messageItem = new MessageItem() { Message = description, Line = line, Column = column };
- errors.Add(messageItem);
- }
- public new void Show()
- {
- UpdateListView();
- #if MONO
- Designer.MessageWindowEnabled = true;
- #else
- base.Show();
- #endif
- }
- /// <inheritdoc/>
- public override void UpdateUIStyle()
- {
- base.UpdateUIStyle();
- toolbar.UpdateUIStyle();
- list.SetStyle(Designer.UIStyle);
- }
- /// <inheritdoc/>
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- Image = Designer.GetImage(70);
- list.SmallImageList = Designer.GetImages();
- toolbar.Font = Designer.LogicalToDevice(DrawUtils.DefaultFont);
- toolbar.Height = Designer.LogicalToDevice(26);
- toolbar.UpdateDpiDependencies();
- }
- /// <inheritdoc/>
- public override void Localize()
- {
- MyRes res = new MyRes("Designer,ToolWindow,Messages");
- Text = res.Get("");
- UpdateButtonsText();
- btnValidate.Text = res.Get("Refresh");
- btnClose.Text = res.Get("Close");
- list.Columns.Clear();
- list.Columns.Add(res.Get("Description"));
- list.Columns.Add(res.Get("Line"));
- list.Columns.Add(res.Get("Column"));
- list.Columns[0].Width = (600);
- }
- /// <summary>
- /// Initializes a new instance of the <see cref="MessagesWindow"/> class with default settings.
- /// </summary>
- /// <param name="designer">The report designer.</param>
- public MessagesWindow(Designer designer) : base(designer)
- {
- Name = "MessagesWindow";
- errors = new List<MessageItem>();
- warnings = new List<MessageItem>();
- toolbar = new ToolbarBase(designer);
- toolbar.Dock = DockStyle.Top;
- toolbar.Fixed = true;
- #if (WPF || AVALONIA)
- toolbar.BorderThickness = new Padding(0);
- #endif
- btnErrors = AddButton(80, true, btnErrors_Click);
- btnErrors.CheckOnClick = true;
- btnErrors.Checked = true;
- btnWarnings = AddButton(211, true, btnWarnings_Click);
- btnWarnings.BeginGroup = true;
- btnWarnings.CheckOnClick = true;
- btnWarnings.Checked = true;
- btnValidate = AddButton(232, true, btnValidate_Click);
- btnValidate.BeginGroup = true;
- btnClose = AddButton(212, true, btnClose_Click);
- toolbar.AddItems(btnErrors, btnWarnings, btnValidate, btnClose);
- list = new StyledListView();
- list.Dock = DockStyle.Fill;
- list.BorderStyle = BorderStyle.None;
- list.FullRowSelect = true;
- list.View = View.Details;
- list.HideSelection = false;
- list.DoubleClick += list_DoubleClick;
- Controls.AddRange(new Control[] { list, toolbar });
- Localize();
- UpdateDpiDependencies();
- }
- private class MessageItem
- {
- public string Message { get; set; }
- public string ObjName { get; set; }
- public int Line { get; set; }
- public int Column { get; set; }
- }
- }
- }
|