123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- 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;
- }
- }
- }
|