using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using FastReport.Design;
using FastReport.Utils;
using System.IO;
using FastReport.Forms;
using FastReport.Design.Toolbars;
using FastReport.DevComponents.DotNetBar;
namespace FastReport.Design.StandardDesigner
{
///
/// Represents the standard report designer.
///
///
/// This control extends the control with
/// standard menu, status bar, and toolbars.
/// To choose toolbars and tool windows in design-time, click the "View" menu
/// in this control and select what you want to see. Toolbars can be reordered using the mouse.
/// To restore the designer layout at runtime, you need to call the
/// RefreshLayout method in your
/// form's Load event handler.
///
[ToolboxItem(true), ToolboxBitmap(typeof(Report), "Resources.DesignerControl.bmp")]
public partial class DesignerControl : Designer
{
#region Fields
private DesignerMenu mainMenu;
private DesignerStatusBar statusBar;
private StandardToolbar standardToolbar;
private TextToolbar textToolbar;
private BorderToolbar borderToolbar;
private LayoutToolbar layoutToolbar;
private StyleToolbar styleToolbar;
private ContextMenuBar mnuContext;
private ButtonItem mnuContextRoot;
private PolygonToolbar polygonToolBar;
private bool showMainMenu;
private bool showStatusBar;
#endregion
#region Properties
///
/// Gets the main menu.
///
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public DesignerMenu MainMenu
{
get { return mainMenu; }
}
///
/// Gets or sets a value indicating whether the main menu should be displayed or not.
///
[SRCategory("Toolbars")]
[DefaultValue(true)]
public bool ShowMainMenu
{
get { return showMainMenu; }
set
{
showMainMenu = value;
mainMenu.Visible = value;
}
}
///
/// Gets or sets a value indicating whether the status bar should be displayed or not.
///
[SRCategory("Toolbars")]
[DefaultValue(true)]
public bool ShowStatusBar
{
get { return showStatusBar; }
set
{
showStatusBar = value;
statusBar.Visible = value;
}
}
#endregion
#region Private Methods
private void CreateToolbarMenu()
{
mnuContext = new ContextMenuBar();
mnuContextRoot = new ButtonItem();
mnuContext.Items.Add(mnuContextRoot);
foreach (IDesignerPlugin plugin in Plugins)
{
if (plugin is ToolbarBase)
{
ButtonItem menuItem = new ButtonItem();
menuItem.Text = (plugin as ToolbarBase).Text;
menuItem.Tag = plugin;
menuItem.Click += new EventHandler(toolbar_Click);
mnuContextRoot.SubItems.Add(menuItem);
}
}
mnuContextRoot.PopupOpen += new DotNetBarManager.PopupOpenEventHandler(mnuContextRoot_PopupOpen);
mnuContext.SetContextMenuEx(DotNetBarManager.ToolbarTopDockSite, mnuContextRoot);
}
private void mnuContextRoot_PopupOpen(object sender, PopupOpenEventArgs e)
{
mnuContext.Style = DotNetBarManager.Style;
foreach (BaseItem item in mnuContextRoot.SubItems)
{
(item as ButtonItem).Checked = (item.Tag as ToolbarBase).Visible;
}
}
private void toolbar_Click(object sender, EventArgs e)
{
ToolbarBase toolbar = (sender as ButtonItem).Tag as ToolbarBase;
toolbar.Visible = !toolbar.Visible;
}
#endregion
#region Protected Methods
///
protected override void InitPlugins()
{
base.InitPlugins();
mainMenu = new DesignerMenu(this);
statusBar = new DesignerStatusBar(this);
standardToolbar = new StandardToolbar(this);
textToolbar = new TextToolbar(this);
borderToolbar = new BorderToolbar(this);
layoutToolbar = new LayoutToolbar(this);
styleToolbar = new StyleToolbar(this);
polygonToolBar = new PolygonToolbar(this);
// set toolbars position
DotNetBarManager.ToolbarTopDockSite.Controls.Add(standardToolbar);
textToolbar.DockLine = 1;
DotNetBarManager.ToolbarTopDockSite.Controls.Add(textToolbar);
borderToolbar.DockLine = 1;
DotNetBarManager.ToolbarTopDockSite.Controls.Add(borderToolbar);
layoutToolbar.DockLine = 0;
layoutToolbar.Hide();
DotNetBarManager.ToolbarTopDockSite.Controls.Add(layoutToolbar);
styleToolbar.DockLine = 1;
styleToolbar.Hide();
DotNetBarManager.ToolbarTopDockSite.Controls.Add(styleToolbar);
polygonToolBar.DockLine = 1;
DotNetBarManager.ToolbarTopDockSite.Controls.Add(polygonToolBar);
Plugins.AddRange(new IDesignerPlugin[] {
mainMenu, statusBar, standardToolbar, textToolbar, borderToolbar,
layoutToolbar, styleToolbar, polygonToolBar });
CreateToolbarMenu();
}
#endregion
#region Public Methods
///
public override void UpdateDpiDependencies(object sender)
{
if (DevComponents.DpiHelper.HighDpiEnabled)
DevComponents.DpiHelper.ReInit(this.Dpi(), this);
DotNetBarManager.SuspendLayout = true;
base.UpdateDpiDependencies(sender);
DotNetBarManager.SuspendLayout = false;
}
///
public override void ShowStatus(string location, string size, string text, string distanceRight)
{
statusBar.UpdateLocationAndSize(location, size, distanceRight);
statusBar.UpdateText(text);
}
#endregion
///
/// Initializes a new instance of the class with default settings.
///
public DesignerControl()
{
InitializeComponent();
ShowMainMenu = true;
ShowStatusBar = true;
}
}
}