RulerPanel.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Drawing;
  4. using FastReport.Utils;
  5. #if !MONO
  6. using FastReport.DevComponents.DotNetBar;
  7. #endif
  8. namespace FastReport.Design.PageDesigners.Page
  9. {
  10. internal class RulerPanel : SplitContainer
  11. {
  12. #region Fields
  13. private HorzRuler horzRuler;
  14. private VertRuler vertRuler;
  15. private Button btnSwitchView;
  16. private BandStructure structure;
  17. private ReportPageDesigner pageDesigner;
  18. private ReportWorkspace workspace;
  19. #endregion
  20. #region Properties
  21. public HorzRuler HorzRuler
  22. {
  23. get { return horzRuler; }
  24. }
  25. public VertRuler VertRuler
  26. {
  27. get { return vertRuler; }
  28. }
  29. public BandStructure Structure
  30. {
  31. get { return structure; }
  32. }
  33. public ReportWorkspace Workspace
  34. {
  35. get { return workspace; }
  36. }
  37. private Designer Designer
  38. {
  39. get { return pageDesigner.Designer; }
  40. }
  41. #endregion
  42. #region Private Methods
  43. private void AdjustOffset()
  44. {
  45. if (Config.RightToLeft)
  46. {
  47. horzRuler.Offset = workspace.Offset.X;
  48. }
  49. else
  50. {
  51. horzRuler.Offset = workspace.Offset.X + this.LogicalToDevice(24);
  52. }
  53. horzRuler.Refresh();
  54. vertRuler.Offset = workspace.Offset.Y;
  55. vertRuler.Refresh();
  56. structure.Offset = workspace.Offset.Y;
  57. structure.Refresh();
  58. }
  59. private void Workspace_ScrollPositionChanged(object sender, EventArgs e)
  60. {
  61. AdjustOffset();
  62. }
  63. private void btnSwitchView_Click(object sender, EventArgs e)
  64. {
  65. ReportWorkspace.ClassicView = !ReportWorkspace.ClassicView;
  66. pageDesigner.UpdateContent();
  67. }
  68. private void RulerPanel_SplitterMoved(object sender, SplitterEventArgs e)
  69. {
  70. if (Config.RightToLeft)
  71. {
  72. if (workspace.Page != null)
  73. workspace.Refresh();
  74. }
  75. workspace.Focus();
  76. }
  77. #endregion
  78. public override void Refresh()
  79. {
  80. base.Refresh();
  81. workspace.Refresh();
  82. horzRuler.Refresh();
  83. vertRuler.Refresh();
  84. structure.Refresh();
  85. }
  86. public void SetStructureVisible(bool visible)
  87. {
  88. structure.Visible = visible;
  89. Panel1Collapsed = !visible;
  90. }
  91. public void UpdateUIStyle()
  92. {
  93. #if !MONO
  94. workspace.ColorSchemeStyle = UIStyleUtils.GetDotNetBarStyle(Designer.UIStyle);
  95. workspace.Office2007ColorTable = UIStyleUtils.GetOffice2007ColorScheme(Designer.UIStyle);
  96. Color color = UIStyleUtils.GetControlColor(Designer.UIStyle);
  97. structure.BackColor = color;
  98. horzRuler.BackColor = color;
  99. vertRuler.BackColor = color;
  100. workspace.BackColor = color;
  101. BackColor = color;
  102. #else
  103. Color color = UIStyleUtils.GetColorTable(Designer.UIStyle).Workspace.ControlBackColor;
  104. structure.BackColor = color;
  105. horzRuler.BackColor = color;
  106. vertRuler.BackColor = color;
  107. BackColor = color;
  108. color = UIStyleUtils.GetColorTable(Designer.UIStyle).Workspace.WorkspaceBackColor;
  109. workspace.BackColor = color;
  110. #endif
  111. }
  112. public void UpdateDpiDependencies()
  113. {
  114. horzRuler.Height = this.LogicalToDevice(24);
  115. vertRuler.Width = this.LogicalToDevice(24);
  116. btnSwitchView.Location = this.LogicalToDevice(new Point(4, 4));
  117. btnSwitchView.Size = this.LogicalToDevice(new Size(16, 16));
  118. btnSwitchView.Image = this.GetImage(81);
  119. structure.UpdateDpiDependencies();
  120. SplitterWidth = this.LogicalToDevice(3);
  121. workspace.Refresh();
  122. AdjustOffset();
  123. }
  124. #if (WPF || AVALONIA)
  125. protected override void ScaleCore(float dx, float dy)
  126. {
  127. // 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)
  128. SplitterDistance = (int)(SplitterDistance / dx);
  129. base.ScaleCore(dx, dy);
  130. }
  131. #endif
  132. public RulerPanel(ReportPageDesigner pd) : base()
  133. {
  134. pageDesigner = pd;
  135. workspace = new ReportWorkspace(pageDesigner);
  136. workspace.AutoScrollPositionChanged += Workspace_ScrollPositionChanged;
  137. workspace.Dock = DockStyle.Fill;
  138. horzRuler = new HorzRuler(pd);
  139. horzRuler.Dock = DockStyle.Top;
  140. vertRuler = new VertRuler(pd);
  141. btnSwitchView = new Button();
  142. // apply Right to Left layout if needed
  143. vertRuler.Dock = Config.RightToLeft ? DockStyle.Right : DockStyle.Left;
  144. if (Config.RightToLeft)
  145. {
  146. btnSwitchView.Dock = DockStyle.Right;
  147. horzRuler.Left -= btnSwitchView.Width;
  148. }
  149. btnSwitchView.FlatStyle = FlatStyle.Flat;
  150. btnSwitchView.FlatAppearance.BorderColor = SystemColors.ButtonFace;
  151. btnSwitchView.FlatAppearance.BorderSize = 0;
  152. btnSwitchView.Cursor = Cursors.Hand;
  153. btnSwitchView.Click += btnSwitchView_Click;
  154. horzRuler.Controls.Add(btnSwitchView);
  155. structure = new BandStructure(pageDesigner);
  156. structure.Dock = DockStyle.Fill;
  157. SplitterDistance = this.LogicalToDevice(166);
  158. Panel1.Controls.Add(structure);
  159. Panel2.Controls.AddRange(new Control[] { workspace, vertRuler, horzRuler });
  160. Panel1MinSize = 20;
  161. FixedPanel = FixedPanel.Panel1;
  162. SplitterMoved += RulerPanel_SplitterMoved;
  163. }
  164. }
  165. }