123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- using System;
- using System.Collections.Generic;
- using System.Windows.Forms;
- using System.Drawing;
- using FastReport.Utils;
- using FastReport.Controls;
- using System.Runtime.InteropServices;
- #if !MONO
- using FastReport.DevComponents.DotNetBar;
- using FastReport.DevComponents.DotNetBar.Controls;
- #endif
- namespace FastReport.Design.ToolWindows
- {
- /// <summary>
- /// Represents the "Properties" window.
- /// </summary>
- public class PropertiesWindow : ToolWindowBase
- {
- #region Fields
- private bool updating;
- private FRPropertyGrid propertiesGrid;
- private FRPropertyGrid eventsGrid;
- private PageControl pageControl;
- private bool saving;
- #if !MONO
- private ComboBoxEx cbxObjects;
- private Bar toolbar;
- private ButtonItem btnCategory;
- private ButtonItem btnAlphabetical;
- private ButtonItem btnProperties;
- private ButtonItem btnEvents;
- #else
- private ComboBox cbxObjects;
- private ToolStrip toolbar;
- private ToolStripButton btnCategory;
- private ToolStripButton btnAlphabetical;
- private ToolStripButton btnProperties;
- private ToolStripButton btnEvents;
- #endif
- #endregion
- #region Public properties
- /// <inheritdoc/>
- public bool Saving
- {
- get { return saving; }
- set { saving = value; }
- }
- #endregion
- #region Private Methods
- private void cbxObjects_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();
- Graphics g = e.Graphics;
- 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, new Point(e.Bounds.X, e.Bounds.Y), e.ForeColor);
- }
- else
- {
- TextRenderer.DrawText(g, c.Name, f, e.Bounds,
- e.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
- TextRenderer.DrawText(g, c.ClassName, e.Font,
- new Rectangle(e.Bounds.X + (int)sz.Width, e.Bounds.Y, e.Bounds.Width - (int)sz.Width, e.Bounds.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, new Point(e.Bounds.X, e.Bounds.Y), e.ForeColor);
- }
- }
- 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;
- }
- #endregion
- #region Public Methods
- /// <inheritdoc/>
- public override void SaveState()
- {
- XmlItem xi = Config.Root.FindItem("Designer").FindItem(Name);
- xi.SetProp("Sort", propertiesGrid.PropertySort.ToString());
- xi.SetProp("TabIndex", pageControl.ActivePageIndex.ToString());
- }
- /// <inheritdoc/>
- public override void RestoreState()
- {
- XmlItem xi = Config.Root.FindItem("Designer").FindItem(Name);
- propertiesGrid.PropertySort = xi.GetProp("Sort") == "Alphabetical" ? PropertySort.Alphabetical : PropertySort.CategorizedAlphabetical;
- eventsGrid.PropertySort = propertiesGrid.PropertySort;
- string tabIndexProp = xi.GetProp("TabIndex");
- if (!String.IsNullOrEmpty(tabIndexProp))
- {
- int tabIndex = 0;
- Int32.TryParse(tabIndexProp, out 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;
- // 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;
- }
- }
- 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);
- }
- }
- /// <inheritdoc/>
- public override void UpdateContent()
- {
- cbxObjects.BeginUpdate();
- try
- {
- if (!Saving)
- {
- 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()
- {
- Text = Res.Get("Designer,ToolWindow,Properties");
- UpdateContent();
- }
- /// <inheritdoc/>
- public override void UpdateUIStyle()
- {
- base.UpdateUIStyle();
- #if !MONO
- toolbar.Style = UIStyleUtils.GetDotNetBarStyle(Designer.UIStyle);
- cbxObjects.Style = toolbar.Style;
- Color color = UIStyleUtils.GetControlColor(Designer.UIStyle);
- ParentControl.BackColor = color;
- #else
- toolbar.Renderer = UIStyleUtils.GetToolStripRenderer(Designer.UIStyle);
- propertiesGrid.Style = Designer.UIStyle;
- eventsGrid.Style = propertiesGrid.Style;
- Color color = UIStyleUtils.GetColorTable(Designer.UIStyle).ControlBackColor;
- #endif
- propertiesGrid.BackColor = color;
- propertiesGrid.LineColor = color;
- propertiesGrid.HelpBackColor = color;
- eventsGrid.BackColor = color;
- eventsGrid.LineColor = color;
- eventsGrid.HelpBackColor = color;
- }
- /// <inheritdoc/>
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- toolbar.Font = Designer.LogicalToDevice(DrawUtils.DefaultFont);
- cbxObjects.ItemHeight = Designer.LogicalToDevice(15);
- Image = Designer.GetImage(78);
- #if !MONO
- ImageIndex = 78;
- toolbar.UpdateDpiDependencies();
- UpdateImages(toolbar.Items);
- #endif
- }
- #if !MONO
- [DllImport("user32.dll", CharSet = CharSet.Auto)]
- internal static extern int SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
- #endif
- internal void TypeChar(char c)
- {
- #if !MONO
- FRPropertyGrid grid = pageControl.ActivePageIndex == 0 ? propertiesGrid : eventsGrid;
- grid.Focus();
- SendMessage(grid.ActiveControl.Handle, 0x0102, (int)c, IntPtr.Zero);
- #endif
- }
- #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 = eShortcut.F4;
- cbxObjects = new ComboBoxEx();
- cbxObjects.Dock = DockStyle.Top;
- cbxObjects.DisableInternalDrawing = true;
- cbxObjects.DropDownStyle = ComboBoxStyle.DropDownList;
- cbxObjects.DrawMode = DrawMode.OwnerDrawFixed;
- cbxObjects.DrawItem += new DrawItemEventHandler(cbxObjects_DrawItem);
- cbxObjects.SelectedValueChanged += new EventHandler(cbxObjects_SelectedValueChanged);
- toolbar = new Bar();
- toolbar.Dock = DockStyle.Top;
- toolbar.RoundCorners = false;
- btnCategory = AddButton(69, btnCategory_Click);
- btnCategory.AutoCheckOnClick = true;
- btnCategory.OptionGroup = "1";
-
- btnAlphabetical = AddButton(67, btnAlphabetical_Click);
- btnAlphabetical.AutoCheckOnClick = true;
- btnAlphabetical.OptionGroup = "1";
-
- btnProperties = AddButton(78, btnProperties_Click);
- btnProperties.BeginGroup = true;
- btnProperties.AutoCheckOnClick = true;
- btnProperties.OptionGroup = "2";
- btnProperties.Checked = true;
-
- btnEvents = AddButton(79, btnEvents_Click);
- btnEvents.AutoCheckOnClick = true;
- btnEvents.OptionGroup = "2";
- toolbar.Items.AddRange(new ButtonItem[] { btnCategory, btnAlphabetical, btnProperties, btnEvents });
- #else
- cbxObjects = new ComboBox();
- cbxObjects.Dock = DockStyle.Top;
- cbxObjects.FlatStyle = FlatStyle.Popup;
- cbxObjects.DropDownStyle = ComboBoxStyle.DropDownList;
- cbxObjects.DrawMode = DrawMode.OwnerDrawFixed;
- cbxObjects.ItemHeight = 16;
- cbxObjects.DrawItem += cbxObjects_DrawItem;
- cbxObjects.SelectedValueChanged += cbxObjects_SelectedValueChanged;
- toolbar = new ToolStrip();
- toolbar.Dock = DockStyle.Top;
- toolbar.Font = DrawUtils.DefaultFont;
- toolbar.GripStyle = ToolStripGripStyle.Hidden;
- btnCategory = new ToolStripButton("", this.GetImage(69), btnCategory_Click);
- btnCategory.Checked = true;
- // mono fix
- btnCategory.AutoSize = false;
- btnCategory.Size = new Size(23, 22);
- btnAlphabetical = new ToolStripButton("", this.GetImage(67), btnAlphabetical_Click);
- btnProperties = new ToolStripButton("", this.GetImage(78), btnProperties_Click);
- btnProperties.Checked = true;
- btnEvents = new ToolStripButton("", this.GetImage(79), btnEvents_Click);
- toolbar.Items.AddRange(new ToolStripItem[] {
- btnCategory, btnAlphabetical, new ToolStripSeparator(),
- btnProperties, btnEvents });
- #endif
- 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 += new PropertyValueChangedEventHandler(grid_PropertyValueChanged);
- propertiesGrid.Parent = propPage;
- eventsGrid = new FREventsGrid();
- eventsGrid.ToolbarVisible = false;
- eventsGrid.Dock = DockStyle.Fill;
- eventsGrid.PropertyValueChanged += new PropertyValueChangedEventHandler(grid_PropertyValueChanged);
- eventsGrid.Parent = eventsPage;
- #if !MONO
- ParentControl.Controls.AddRange(new Control[] { pageControl, toolbar, cbxObjects });
- #else
- Controls.AddRange(new Control[] { pageControl, toolbar, cbxObjects });
- #endif
- Localize();
- UpdateDpiDependencies();
- }
- }
- }
|