QueryDesigner.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using FastReport.Forms;
  2. using FastReport.Utils;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. namespace FastReport.FastQueryBuilder
  8. {
  9. internal partial class QueryDesigner : BaseForm, IQueryDesigner
  10. {
  11. private Workspace workspace;
  12. private FieldsView fieldsView;
  13. private DataBaseView dataBaseView;
  14. public QueryDesigner()
  15. {
  16. InitializeComponent();
  17. CanSaveRestoreState = true;
  18. #if AVALONIA
  19. toolStrip1.BorderThickness = toolStrip2.BorderThickness = new Padding(0);
  20. #endif
  21. workspace = new Workspace();
  22. workspace.Dock = DockStyle.Fill;
  23. workspace.Parent = splitContainer2.Panel1;
  24. fieldsView = new FieldsView();
  25. fieldsView.Dock = DockStyle.Fill;
  26. fieldsView.Parent = splitContainer2.Panel2;
  27. dataBaseView = new DataBaseView();
  28. dataBaseView.Dock = DockStyle.Fill;
  29. dataBaseView.Parent = splitContainer1.Panel2;
  30. dataBaseView.DoubleClick += dataBaseView_DoubleClick;
  31. UpdateButtonsState();
  32. Localize();
  33. UIUtils.CheckRTL(this);
  34. UpdateDpiDependencies();
  35. }
  36. public override void Localize()
  37. {
  38. base.Localize();
  39. MyRes res = new MyRes("Forms,QueryBuilder");
  40. Text = res.Get("");
  41. btnOk.ToolTipText = Res.Get("Buttons,OK");
  42. btnCancel.ToolTipText = Res.Get("Buttons,Cancel");
  43. btnDesign.Text = res.Get("Designer");
  44. btnResult.Text = res.Get("Result");
  45. btnRunSql.Text = res.Get("Run");
  46. }
  47. protected override void SaveState()
  48. {
  49. base.SaveState();
  50. Storage.SetDip("VerticalSplitter", splitContainer1.SplitterDistance);
  51. Storage.SetDip("HorizontalSplitter", splitContainer2.SplitterDistance);
  52. }
  53. protected override void RestoreState()
  54. {
  55. base.RestoreState();
  56. splitContainer1.SplitterDistance = Storage.GetDip("VerticalSplitter", 600, 100, splitContainer1.Width - 100);
  57. splitContainer2.SplitterDistance = Storage.GetDip("HorizontalSplitter", 350, 100, splitContainer2.Height - 70);
  58. }
  59. public override void UpdateDpiDependencies()
  60. {
  61. base.UpdateDpiDependencies();
  62. toolStrip1.Height = toolStrip2.Height = this.LogicalToDevice(28);
  63. toolStrip1.Renderer = toolStrip2.Renderer = Config.DesignerSettings.ToolStripRenderer;
  64. toolStrip1.Font = toolStrip2.Font = Font;
  65. btnDesign.Image = GetImage(68);
  66. btnResult.Image = GetImage(54);
  67. btnOk.Image = GetImage(210);
  68. btnCancel.Image = GetImage(212);
  69. btnRunSql.Image = GetImage(3);
  70. btnOk.Size = btnCancel.Size = this.LogicalToDevice(new Size(23, 23));
  71. workspace.UpdateDpiDependencies();
  72. dataBaseView.UpdateDpiDependencies();
  73. tbSql.Font = this.LogicalToDevice(Storage.GetFont("QueryWindow", DrawUtils.FixedFont), true);
  74. dgvResult.RowTemplate.Height = this.LogicalToDevice(19);
  75. }
  76. #region Public Members
  77. public void DesignQuery()
  78. {
  79. OnGetTableList?.Invoke(this, EventArgs.Empty);
  80. ShowDialog();
  81. }
  82. public void DoFillTableList(List<Table> tl) => dataBaseView.FillTableList(tl);
  83. public void Clear() => workspace.Clear();
  84. public ITableView DoAddTable(Table table, Point position) => workspace.DoAddTable(table, position);
  85. public List<Link> Links
  86. {
  87. get => workspace.Links;
  88. set => workspace.Links = value;
  89. }
  90. public List<Field> Fields
  91. {
  92. get => fieldsView.Fields;
  93. set => fieldsView.Fields = value;
  94. }
  95. public List<Field> Groups
  96. {
  97. get => fieldsView.Groups;
  98. set => fieldsView.Groups = value;
  99. }
  100. public string SQLText
  101. {
  102. get => tbSql.Text;
  103. set => tbSql.Text = value;
  104. }
  105. public object DataSource
  106. {
  107. get => dgvResult.DataSource;
  108. set => dgvResult.DataSource = value;
  109. }
  110. public event EventHandler OnOk;
  111. public event EventHandler OnCancel;
  112. public event EventHandler OnGetTableList;
  113. public event AddTableEventHandler OnAddTable
  114. {
  115. add => workspace.OnAddTable += value;
  116. remove => workspace.OnAddTable -= value;
  117. }
  118. public event EventHandler OnGenerateSQL;
  119. public event EventHandler OnRunSQL;
  120. #endregion
  121. private void dataBaseView_DoubleClick(object sender, EventArgs e)
  122. {
  123. workspace.AddTable(dataBaseView.SelectedTable);
  124. }
  125. private void btnOk_Click(object sender, EventArgs e)
  126. {
  127. OnOk?.Invoke(sender, e);
  128. }
  129. private void btnCancel_Click(object sender, EventArgs e)
  130. {
  131. OnCancel?.Invoke(sender, e);
  132. }
  133. private void btnDesign_Click(object sender, EventArgs e)
  134. {
  135. pageControl1.ActivePageIndex = 0;
  136. tbSql.Text = "";
  137. UpdateButtonsState();
  138. }
  139. private void btnResult_Click(object sender, EventArgs e)
  140. {
  141. pageControl1.ActivePageIndex = 1;
  142. UpdateButtonsState();
  143. // to finish editing in the fields grid
  144. tbSql.Focus();
  145. OnGenerateSQL?.Invoke(sender, e);
  146. }
  147. private void UpdateButtonsState()
  148. {
  149. btnDesign.Checked = pageControl1.ActivePageIndex == 0;
  150. btnResult.Checked = pageControl1.ActivePageIndex == 1;
  151. }
  152. private void btnRunSql_Click(object sender, EventArgs e)
  153. {
  154. try
  155. {
  156. OnRunSQL?.Invoke(sender, e);
  157. dgvResult.ColumnHeadersVisible = true;
  158. }
  159. catch (Exception exc)
  160. {
  161. FRMessageBox.Error(exc.Message);
  162. }
  163. }
  164. }
  165. }