DesignerControl.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using FastReport.Design;
  9. using FastReport.Utils;
  10. using System.IO;
  11. using FastReport.Forms;
  12. using FastReport.Design.Toolbars;
  13. using FastReport.DevComponents.DotNetBar;
  14. namespace FastReport.Design.StandardDesigner
  15. {
  16. /// <summary>
  17. /// Represents the standard report designer.
  18. /// </summary>
  19. /// <remarks>
  20. /// This control extends the <see cref="FastReport.Design.Designer"/> control with
  21. /// standard menu, status bar, and toolbars.
  22. /// <para/>To choose toolbars and tool windows in design-time, click the "View" menu
  23. /// in this control and select what you want to see. Toolbars can be reordered using the mouse.
  24. /// <para/>To restore the designer layout at runtime, you need to call the
  25. /// <see cref="FastReport.Design.Designer.RefreshLayout">RefreshLayout</see> method in your
  26. /// form's <b>Load</b> event handler.
  27. /// </remarks>
  28. [ToolboxItem(true), ToolboxBitmap(typeof(Report), "Resources.DesignerControl.bmp")]
  29. public partial class DesignerControl : Designer
  30. {
  31. #region Fields
  32. private DesignerMenu mainMenu;
  33. private DesignerStatusBar statusBar;
  34. private StandardToolbar standardToolbar;
  35. private TextToolbar textToolbar;
  36. private BorderToolbar borderToolbar;
  37. private LayoutToolbar layoutToolbar;
  38. private StyleToolbar styleToolbar;
  39. private ContextMenuBar mnuContext;
  40. private ButtonItem mnuContextRoot;
  41. private PolygonToolbar polygonToolBar;
  42. private bool showMainMenu;
  43. private bool showStatusBar;
  44. #endregion
  45. #region Properties
  46. /// <summary>
  47. /// Gets the main menu.
  48. /// </summary>
  49. [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  50. public DesignerMenu MainMenu
  51. {
  52. get { return mainMenu; }
  53. }
  54. /// <summary>
  55. /// Gets or sets a value indicating whether the main menu should be displayed or not.
  56. /// </summary>
  57. [SRCategory("Toolbars")]
  58. [DefaultValue(true)]
  59. public bool ShowMainMenu
  60. {
  61. get { return showMainMenu; }
  62. set
  63. {
  64. showMainMenu = value;
  65. mainMenu.Visible = value;
  66. }
  67. }
  68. /// <summary>
  69. /// Gets or sets a value indicating whether the status bar should be displayed or not.
  70. /// </summary>
  71. [SRCategory("Toolbars")]
  72. [DefaultValue(true)]
  73. public bool ShowStatusBar
  74. {
  75. get { return showStatusBar; }
  76. set
  77. {
  78. showStatusBar = value;
  79. statusBar.Visible = value;
  80. }
  81. }
  82. #endregion
  83. #region Private Methods
  84. private void CreateToolbarMenu()
  85. {
  86. mnuContext = new ContextMenuBar();
  87. mnuContextRoot = new ButtonItem();
  88. mnuContext.Items.Add(mnuContextRoot);
  89. foreach (IDesignerPlugin plugin in Plugins)
  90. {
  91. if (plugin is ToolbarBase)
  92. {
  93. ButtonItem menuItem = new ButtonItem();
  94. menuItem.Text = (plugin as ToolbarBase).Text;
  95. menuItem.Tag = plugin;
  96. menuItem.Click += new EventHandler(toolbar_Click);
  97. mnuContextRoot.SubItems.Add(menuItem);
  98. }
  99. }
  100. mnuContextRoot.PopupOpen += new DotNetBarManager.PopupOpenEventHandler(mnuContextRoot_PopupOpen);
  101. mnuContext.SetContextMenuEx(DotNetBarManager.ToolbarTopDockSite, mnuContextRoot);
  102. }
  103. private void mnuContextRoot_PopupOpen(object sender, PopupOpenEventArgs e)
  104. {
  105. mnuContext.Style = DotNetBarManager.Style;
  106. foreach (BaseItem item in mnuContextRoot.SubItems)
  107. {
  108. (item as ButtonItem).Checked = (item.Tag as ToolbarBase).Visible;
  109. }
  110. }
  111. private void toolbar_Click(object sender, EventArgs e)
  112. {
  113. ToolbarBase toolbar = (sender as ButtonItem).Tag as ToolbarBase;
  114. toolbar.Visible = !toolbar.Visible;
  115. }
  116. #endregion
  117. #region Protected Methods
  118. /// <inheritdoc/>
  119. protected override void InitPlugins()
  120. {
  121. base.InitPlugins();
  122. mainMenu = new DesignerMenu(this);
  123. statusBar = new DesignerStatusBar(this);
  124. standardToolbar = new StandardToolbar(this);
  125. textToolbar = new TextToolbar(this);
  126. borderToolbar = new BorderToolbar(this);
  127. layoutToolbar = new LayoutToolbar(this);
  128. styleToolbar = new StyleToolbar(this);
  129. polygonToolBar = new PolygonToolbar(this);
  130. // set toolbars position
  131. DotNetBarManager.ToolbarTopDockSite.Controls.Add(standardToolbar);
  132. textToolbar.DockLine = 1;
  133. DotNetBarManager.ToolbarTopDockSite.Controls.Add(textToolbar);
  134. borderToolbar.DockLine = 1;
  135. DotNetBarManager.ToolbarTopDockSite.Controls.Add(borderToolbar);
  136. layoutToolbar.DockLine = 0;
  137. layoutToolbar.Hide();
  138. DotNetBarManager.ToolbarTopDockSite.Controls.Add(layoutToolbar);
  139. styleToolbar.DockLine = 1;
  140. styleToolbar.Hide();
  141. DotNetBarManager.ToolbarTopDockSite.Controls.Add(styleToolbar);
  142. polygonToolBar.DockLine = 1;
  143. DotNetBarManager.ToolbarTopDockSite.Controls.Add(polygonToolBar);
  144. Plugins.AddRange(new IDesignerPlugin[] {
  145. mainMenu, statusBar, standardToolbar, textToolbar, borderToolbar,
  146. layoutToolbar, styleToolbar, polygonToolBar });
  147. CreateToolbarMenu();
  148. }
  149. #endregion
  150. #region Public Methods
  151. /// <inheritdoc/>
  152. public override void UpdateDpiDependencies(object sender)
  153. {
  154. if (DevComponents.DpiHelper.HighDpiEnabled)
  155. DevComponents.DpiHelper.ReInit(this.Dpi(), this);
  156. DotNetBarManager.SuspendLayout = true;
  157. base.UpdateDpiDependencies(sender);
  158. DotNetBarManager.SuspendLayout = false;
  159. }
  160. /// <inheritdoc/>
  161. public override void ShowStatus(string location, string size, string text, string distanceRight)
  162. {
  163. statusBar.UpdateLocationAndSize(location, size, distanceRight);
  164. statusBar.UpdateText(text);
  165. }
  166. #endregion
  167. /// <summary>
  168. /// Initializes a new instance of the <see cref="DesignerControl"/> class with default settings.
  169. /// </summary>
  170. public DesignerControl()
  171. {
  172. InitializeComponent();
  173. ShowMainMenu = true;
  174. ShowStatusBar = true;
  175. }
  176. }
  177. }