using System; using System.Windows.Forms; using System.Drawing; using FastReport.Utils; #if !MONO using FastReport.DevComponents.DotNetBar; #endif namespace FastReport.Design.PageDesigners.Page { internal class RulerPanel : SplitContainer { #region Fields private HorzRuler horzRuler; private VertRuler vertRuler; private Button btnSwitchView; private BandStructure structure; private ReportPageDesigner pageDesigner; private ReportWorkspace workspace; #endregion #region Properties public HorzRuler HorzRuler { get { return horzRuler; } } public VertRuler VertRuler { get { return vertRuler; } } public BandStructure Structure { get { return structure; } } public ReportWorkspace Workspace { get { return workspace; } } private Designer Designer { get { return pageDesigner.Designer; } } #endregion #region Private Methods private void AdjustOffset() { if (Config.RightToLeft) { horzRuler.Offset = workspace.Offset.X; } else { horzRuler.Offset = workspace.Offset.X + this.LogicalToDevice(24); } horzRuler.Refresh(); vertRuler.Offset = workspace.Offset.Y; vertRuler.Refresh(); structure.Offset = workspace.Offset.Y; structure.Refresh(); } private void Workspace_ScrollPositionChanged(object sender, EventArgs e) { AdjustOffset(); } private void btnSwitchView_Click(object sender, EventArgs e) { ReportWorkspace.ClassicView = !ReportWorkspace.ClassicView; pageDesigner.UpdateContent(); } private void RulerPanel_SplitterMoved(object sender, SplitterEventArgs e) { if (Config.RightToLeft) { if (workspace.Page != null) workspace.Refresh(); } workspace.Focus(); } #endregion public override void Refresh() { base.Refresh(); workspace.Refresh(); horzRuler.Refresh(); vertRuler.Refresh(); structure.Refresh(); } public void SetStructureVisible(bool visible) { structure.Visible = visible; Panel1Collapsed = !visible; } public void UpdateUIStyle() { #if !MONO workspace.ColorSchemeStyle = UIStyleUtils.GetDotNetBarStyle(Designer.UIStyle); workspace.Office2007ColorTable = UIStyleUtils.GetOffice2007ColorScheme(Designer.UIStyle); Color color = UIStyleUtils.GetControlColor(Designer.UIStyle); structure.BackColor = color; horzRuler.BackColor = color; vertRuler.BackColor = color; workspace.BackColor = color; BackColor = color; #else Color color = UIStyleUtils.GetColorTable(Designer.UIStyle).Workspace.ControlBackColor; structure.BackColor = color; horzRuler.BackColor = color; vertRuler.BackColor = color; BackColor = color; color = UIStyleUtils.GetColorTable(Designer.UIStyle).Workspace.WorkspaceBackColor; workspace.BackColor = color; #endif } public void UpdateDpiDependencies() { horzRuler.Height = this.LogicalToDevice(24); vertRuler.Width = this.LogicalToDevice(24); btnSwitchView.Location = this.LogicalToDevice(new Point(4, 4)); btnSwitchView.Size = this.LogicalToDevice(new Size(16, 16)); btnSwitchView.Image = this.GetImage(81); structure.UpdateDpiDependencies(); SplitterWidth = this.LogicalToDevice(3); workspace.Refresh(); AdjustOffset(); } #if (WPF || AVALONIA) protected override void ScaleCore(float dx, float dy) { // do not scale this (case: mdi designer open on secondary monitor, new report tab added => splitter is rescaled after its position is restored from config) SplitterDistance = (int)(SplitterDistance / dx); base.ScaleCore(dx, dy); } #endif public RulerPanel(ReportPageDesigner pd) : base() { pageDesigner = pd; workspace = new ReportWorkspace(pageDesigner); workspace.AutoScrollPositionChanged += Workspace_ScrollPositionChanged; workspace.Dock = DockStyle.Fill; horzRuler = new HorzRuler(pd); horzRuler.Dock = DockStyle.Top; vertRuler = new VertRuler(pd); btnSwitchView = new Button(); // apply Right to Left layout if needed vertRuler.Dock = Config.RightToLeft ? DockStyle.Right : DockStyle.Left; if (Config.RightToLeft) { btnSwitchView.Dock = DockStyle.Right; horzRuler.Left -= btnSwitchView.Width; } btnSwitchView.FlatStyle = FlatStyle.Flat; btnSwitchView.FlatAppearance.BorderColor = SystemColors.ButtonFace; btnSwitchView.FlatAppearance.BorderSize = 0; btnSwitchView.Cursor = Cursors.Hand; btnSwitchView.Click += btnSwitchView_Click; horzRuler.Controls.Add(btnSwitchView); structure = new BandStructure(pageDesigner); structure.Dock = DockStyle.Fill; SplitterDistance = this.LogicalToDevice(166); Panel1.Controls.Add(structure); Panel2.Controls.AddRange(new Control[] { workspace, vertRuler, horzRuler }); Panel1MinSize = 20; FixedPanel = FixedPanel.Panel1; SplitterMoved += RulerPanel_SplitterMoved; } } }