123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- using System;
- using System.Collections.Generic;
- using System.Windows.Forms;
- using System.Drawing;
- using FastReport.Utils;
- using FastReport.Controls;
- namespace FastReport.Design.ToolWindows
- {
- /// <summary>
- /// Represents the "Properties" window.
- /// </summary>
- public class PropertiesWindow : ToolWindowBase
- {
- #region Fields
- private bool updating;
- private FRPropertiesGrid propertiesGrid;
- private FREventsGrid eventsGrid;
- private PageControl pageControl;
- private StyledComboBox cbxObjects;
- private ToolbarBase toolbar;
- private ToolbarButton btnCategory;
- private ToolbarButton btnAlphabetical;
- private ToolbarButton btnProperties;
- private ToolbarButton btnEvents;
- private ToolbarButton btnFilter;
- #endregion
- #region Public properties
- /// <summary>
- /// Gets or sets a value indicating that properties are filtered.
- /// </summary>
- public bool Filtered { get; set; }
- #endregion
- #region Private Methods
- private void EnumComponents(Base rootComponent, SortedList<string, Base> list)
- {
- string name = rootComponent is Report ? "" : rootComponent.Name;
- if (!list.ContainsKey(name))
- list.Add(name, rootComponent);
- if (rootComponent.HasFlag(Flags.CanShowChildrenInReportTree))
- {
- foreach (Base component in rootComponent.ChildObjects)
- EnumComponents(component, list);
- }
- }
- private void cbxObjects_MeasureItem(object sender, MeasureItemEventArgs e)
- {
- e.ItemHeight = Designer.LogicalToDevice(18);
- }
- private void cbxObjects_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();
- Graphics g = e.Graphics;
- #if AVALONIA
- TextRenderer.FontScale = g.FontScale;
- #endif
- var rect = e.Bounds;
- rect.Inflate(Designer.LogicalToDevice(-2), 0);
- if (e.Index >= 0)
- {
- Base c = cbxObjects.Items[e.Index] as Base;
- using (Font f = new Font(e.Font, FontStyle.Bold))
- {
- SizeF sz = TextRenderer.MeasureText(c.Name, f);
- if (c is Report)
- {
- TextRenderer.DrawText(g, c.ClassName, f, rect, e.ForeColor, TextFormatFlags.VerticalCenter);
- }
- else
- {
- TextRenderer.DrawText(g, c.Name, f, rect,
- e.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
- TextRenderer.DrawText(g, c.ClassName, e.Font,
- new Rectangle(rect.X + (int)sz.Width, rect.Y, rect.Width - (int)sz.Width, rect.Height),
- e.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
- }
- }
- }
- else
- {
- SelectedObjectCollection selection = Designer.SelectedObjects;
- string s = selection.Count == 0 ? "" : selection.Count > 1 ?
- String.Format(Res.Get("Designer,ToolWindow,Properties,NObjectsSelected"), selection.Count) :
- selection[0].Name;
- TextRenderer.DrawText(g, s, e.Font, rect, e.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
- }
- }
- private void cbxObjects_SelectedValueChanged(object sender, EventArgs e)
- {
- if (updating)
- return;
- Base c = cbxObjects.SelectedItem as Base;
- if (!(c is Report) && Designer.ActiveReportTab != null)
- {
- updating = true;
- Designer.ActiveReportTab.ActivePage = c.Page;
- updating = false;
- }
- if (Designer.SelectedObjects != null)
- {
- Designer.SelectedObjects.Clear();
- Designer.SelectedObjects.Add(c);
- Designer.SelectionChanged(null);
- }
- }
- private void grid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
- {
- Designer.SetModified(null, "Change");
- }
- private void btnCategory_Click(object sender, EventArgs e)
- {
- propertiesGrid.PropertySort = PropertySort.Categorized;
- eventsGrid.PropertySort = propertiesGrid.PropertySort;
- btnCategory.Checked = true;
- btnAlphabetical.Checked = false;
- }
- private void btnAlphabetical_Click(object sender, EventArgs e)
- {
- propertiesGrid.PropertySort = PropertySort.Alphabetical;
- eventsGrid.PropertySort = propertiesGrid.PropertySort;
- btnCategory.Checked = false;
- btnAlphabetical.Checked = true;
- }
- private void btnProperties_Click(object sender, EventArgs e)
- {
- pageControl.ActivePageIndex = 0;
- btnProperties.Checked = true;
- btnEvents.Checked = false;
- }
- private void btnEvents_Click(object sender, EventArgs e)
- {
- pageControl.ActivePageIndex = 1;
- btnProperties.Checked = false;
- btnEvents.Checked = true;
- }
- private void btnFilter_Click(object sender, EventArgs e)
- {
- Filtered = btnFilter.Checked;
- UpdateContent();
- }
- #endregion
- #region Public Methods
- /// <inheritdoc/>
- public override void SaveState()
- {
- base.SaveState();
- Storage.SetStr("Sort", propertiesGrid.PropertySort.ToString());
- Storage.SetInt("TabIndex", pageControl.ActivePageIndex);
- }
- /// <inheritdoc/>
- public override void RestoreState()
- {
- base.RestoreState();
- propertiesGrid.PropertySort = eventsGrid.PropertySort = Storage.GetStr("Sort") == "Alphabetical" ? PropertySort.Alphabetical : PropertySort.CategorizedAlphabetical;
- int tabIndex = Storage.GetInt("TabIndex");
- pageControl.ActivePageIndex = tabIndex;
- btnProperties.Checked = (tabIndex == 0);
- btnEvents.Checked = (tabIndex == 1);
- btnCategory.Checked = propertiesGrid.PropertySort == PropertySort.CategorizedAlphabetical;
- btnAlphabetical.Checked = !btnCategory.Checked;
- }
- /// <inheritdoc/>
- public override void SelectionChanged()
- {
- if (updating)
- return;
- Throttle.Execute(() =>
- {
- // prevent fire SelectedValueChanged
- updating = true;
- try
- {
- if (Designer.SelectedObjects != null && Designer.SelectedObjects.Count == 1)
- {
- cbxObjects.SelectedIndex = cbxObjects.Items.IndexOf(Designer.SelectedObjects[0]);
- cbxObjects.Refresh();
- propertiesGrid.SelectedObjects = Designer.SelectedObjects.ToArray();
- eventsGrid.SelectedObjects = propertiesGrid.SelectedObjects;
- }
- else
- {
- cbxObjects.SelectedItem = null;
- if (Designer.SelectedObjects != null)
- propertiesGrid.SelectedObjects = Designer.SelectedObjects.ToArray();
- else
- propertiesGrid.SelectedObjects = null;
- eventsGrid.SelectedObjects = propertiesGrid.SelectedObjects;
- cbxObjects.Refresh();
- }
- }
- finally
- {
- updating = false;
- }
- });
- }
- /// <inheritdoc/>
- public override void UpdateContent()
- {
- cbxObjects.BeginUpdate();
- try
- {
- cbxObjects.Items.Clear();
- if (Designer.ActiveReport != null)
- {
- Report report = Designer.ActiveReport.Report;
- SortedList<string, Base> sl = new SortedList<string, Base>();
- EnumComponents(report, sl);
- foreach (Base c in sl.Values)
- {
- cbxObjects.Items.Add(c);
- }
- }
- SelectionChanged();
- }
- finally
- {
- cbxObjects.EndUpdate();
- }
- }
- /// <inheritdoc/>
- public override void Lock()
- {
- base.Lock();
- propertiesGrid.SelectedObjects = null;
- eventsGrid.SelectedObjects = propertiesGrid.SelectedObjects;
- }
- /// <inheritdoc/>
- public override void Localize()
- {
- MyRes res = new MyRes("Designer,ToolWindow,Properties");
- Text = res.Get("");
- btnCategory.ToolTipText = res.Get("Categorized");
- btnAlphabetical.ToolTipText = res.Get("Alphabetical");
- btnProperties.ToolTipText = res.Get("PropertiesTab");
- btnEvents.ToolTipText = res.Get("EventsTab");
- btnFilter.ToolTipText = res.Get("Filter");
- UpdateContent();
- }
- /// <inheritdoc/>
- public override void UpdateUIStyle()
- {
- base.UpdateUIStyle();
- toolbar.UpdateUIStyle();
- cbxObjects.SetStyle(Designer.UIStyle);
- Color color = UIStyleUtils.GetControlColor(Designer.UIStyle);
- propertiesGrid.BackColor = eventsGrid.BackColor = color;
- propertiesGrid.LineColor = eventsGrid.LineColor = color;
- propertiesGrid.HelpBackColor = eventsGrid.HelpBackColor = color;
- #if (WPF || AVALONIA)
- propertiesGrid.BorderStyle = eventsGrid.BorderStyle = BorderStyle.None;
- propertiesGrid.HelpBackColor = eventsGrid.HelpBackColor = Color.White;
- propertiesGrid.SplitterBackColor = eventsGrid.SplitterBackColor = color;
- #endif
- }
- /// <inheritdoc/>
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- Image = Designer.GetImage(78);
- toolbar.Font = propertiesGrid.Font = eventsGrid.Font = Designer.LogicalToDevice(DrawUtils.DefaultFont);
- toolbar.Height = Designer.LogicalToDevice(26);
- cbxObjects.ItemHeight = Designer.LogicalToDevice(15);
- toolbar.UpdateDpiDependencies();
- }
- #endregion
- /// <summary>
- /// Initializes a new instance of the <see cref="PropertiesWindow"/> class with default settings.
- /// </summary>
- /// <param name="designer">The report designer.</param>
- public PropertiesWindow(Designer designer) : base(designer)
- {
- Name = "PropertiesWindow";
- #if !MONO
- Shortcut = DevComponents.DotNetBar.eShortcut.F4;
- #endif
- cbxObjects = new StyledComboBox();
- cbxObjects.Dock = DockStyle.Top;
- cbxObjects.DropDownStyle = ComboBoxStyle.DropDownList;
- cbxObjects.DrawMode = DrawMode.OwnerDrawVariable;
- cbxObjects.MeasureItem += cbxObjects_MeasureItem;
- cbxObjects.DrawItem += cbxObjects_DrawItem;
- cbxObjects.SelectedValueChanged += cbxObjects_SelectedValueChanged;
- toolbar = new ToolbarBase(designer);
- toolbar.Dock = DockStyle.Top;
- toolbar.Fixed = true;
- #if (WPF || AVALONIA)
- toolbar.BorderThickness = new Padding(0);
- #endif
- btnCategory = AddButton(69, btnCategory_Click);
- btnCategory.Checked = true;
- btnAlphabetical = AddButton(67, btnAlphabetical_Click);
- btnProperties = AddButton(78, btnProperties_Click);
- btnProperties.BeginGroup = true;
- btnProperties.Checked = true;
- btnEvents = AddButton(79, btnEvents_Click);
- btnFilter = AddButton(180, btnFilter_Click);
- btnFilter.BeginGroup = true;
- btnFilter.CheckOnClick = true;
- toolbar.AddItems(btnCategory, btnAlphabetical, btnProperties, btnEvents, btnFilter);
- pageControl = new PageControl();
- pageControl.Dock = DockStyle.Fill;
- PageControlPage propPage = new PageControlPage();
- propPage.Dock = DockStyle.Fill;
- pageControl.Pages.Add(propPage);
- PageControlPage eventsPage = new PageControlPage();
- eventsPage.Dock = DockStyle.Fill;
- pageControl.Pages.Add(eventsPage);
- propertiesGrid = new FRPropertiesGrid();
- propertiesGrid.ToolbarVisible = false;
- propertiesGrid.Dock = DockStyle.Fill;
- propertiesGrid.PropertyValueChanged += grid_PropertyValueChanged;
- propertiesGrid.Parent = propPage;
- eventsGrid = new FREventsGrid();
- eventsGrid.ToolbarVisible = false;
- eventsGrid.Dock = DockStyle.Fill;
- eventsGrid.PropertyValueChanged += grid_PropertyValueChanged;
- eventsGrid.Parent = eventsPage;
- Controls.AddRange(new Control[] { pageControl, toolbar, cbxObjects });
- Localize();
- UpdateDpiDependencies();
- }
- }
- }
|