DesignerControl.cs 6.7 KB

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