MatrixHeaderEditorForm.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. using System;
  2. using System.Windows.Forms;
  3. using FastReport.Forms;
  4. using FastReport.Utils;
  5. namespace FastReport.AdvMatrix
  6. {
  7. internal partial class MatrixHeaderEditorForm : BaseDialogForm
  8. {
  9. private HeaderDescriptor descr;
  10. private bool updating;
  11. private static int pageIndex = 0;
  12. private Report Report { get { return descr.Matrix.Report; } }
  13. private void Init()
  14. {
  15. updating = true;
  16. pcPages.ActivePageIndex = pageIndex;
  17. // General
  18. rbSimple.Checked = !descr.IsGroup;
  19. rbGroup.Checked = descr.IsGroup;
  20. rbGroup.Enabled = !descr.IsTopNItem;
  21. tbGroup.Text = descr.Expression;
  22. tbGroup.Report = Report;
  23. tbGroup.DataSource = descr.Matrix.DataSource;
  24. tbDisplayText.Text = descr.DisplayText;
  25. // Sort
  26. cbxSortOrder.SelectedIndex = (int)descr.Sort;
  27. rbSortByItemValue.Checked = String.IsNullOrEmpty(descr.SortByTotal);
  28. rbSortByTotal.Checked = !rbSortByItemValue.Checked;
  29. cbxSortByTotal.Items.AddRange(descr.GetAvailableTotals());
  30. cbxSortByTotal.SelectedIndex = cbxSortByTotal.FindStringExact(descr.SortByTotal);
  31. cbxInteractiveSort.Items.AddRange(descr.GetAvailableTotals());
  32. if (descr.InteractiveSort)
  33. cbxInteractiveSort.SelectedIndex = String.IsNullOrEmpty(descr.InteractiveSortBy) ? 1 : cbxInteractiveSort.FindStringExact(descr.InteractiveSortBy);
  34. else
  35. cbxInteractiveSort.SelectedIndex = 0; // NoSort
  36. cbxSortOrderToggledBy.Items.AddRange(descr.GetAvailableSortButtons());
  37. cbxSortOrderToggledBy.SelectedIndex = String.IsNullOrEmpty(descr.SortToggledBy) ? 0 : cbxSortOrderToggledBy.FindStringExact(descr.SortToggledBy);
  38. // Filter
  39. tbFilter.Text = descr.Filter;
  40. // TopN
  41. udTopN.Value = descr.TopN.Count;
  42. cbTopNTotal.Checked = descr.TopN.Total.Visible;
  43. tbTopNTotal.Text = descr.TopN.Total.Text;
  44. cbOthers.Checked = descr.TopN.Others.Visible;
  45. cbOthersTotal.Checked = descr.TopN.OthersTotal.Visible;
  46. tbOthersTotal.Text = descr.TopN.OthersTotal.Text;
  47. cbCreateItems.Checked = descr.TopNItemsPresent();
  48. // Visibility
  49. cbVisible.Checked = descr.Visible;
  50. cbVisible.Enabled = !descr.IsTopNItem;
  51. tbVisibleExpression.Text = descr.VisibleExpression;
  52. cbxVisibleToggledBy.Items.AddRange(descr.GetAvailableCollapseButtons());
  53. cbxVisibleToggledBy.SelectedIndex = cbxVisibleToggledBy.FindStringExact(descr.VisibleToggledBy);
  54. if (cbxVisibleToggledBy.SelectedIndex == -1)
  55. cbxVisibleToggledBy.SelectedIndex = 0;
  56. // Other
  57. cbStepped.Checked = descr.Stepped;
  58. cbMerge.Checked = descr.MergeSingleItem;
  59. cbPageBreak.Checked = descr.PageBreak;
  60. udColSpan.Value = descr.ColSpan;
  61. udRowSpan.Value = descr.RowSpan;
  62. updating = false;
  63. }
  64. private void Done()
  65. {
  66. pageIndex = pcPages.ActivePageIndex;
  67. if (DialogResult == DialogResult.OK)
  68. {
  69. // General
  70. descr.Expression = tbGroup.Text;
  71. descr.DisplayText = tbDisplayText.Text;
  72. // Sort and filter
  73. descr.Sort = (SortOrder)cbxSortOrder.SelectedIndex;
  74. descr.SortByTotal = rbSortByTotal.Checked && cbxSortByTotal.SelectedItem != null ? (string)cbxSortByTotal.SelectedItem : "";
  75. descr.InteractiveSort = cbxInteractiveSort.SelectedIndex != 0;
  76. descr.InteractiveSortBy = cbxInteractiveSort.SelectedIndex == 1 ? "" : (string)cbxInteractiveSort.SelectedItem;
  77. descr.SortToggledBy = cbxSortOrderToggledBy.SelectedIndex == 0 ? "" : (string)cbxSortOrderToggledBy.SelectedItem;
  78. // Filter
  79. descr.Filter = tbFilter.Text;
  80. // TopN
  81. if (!descr.IsTopNItem)
  82. {
  83. descr.TopN.Count = (int)udTopN.Value;
  84. descr.TopN.Total.Visible = cbTopNTotal.Checked;
  85. descr.TopN.Total.Text = tbTopNTotal.Text;
  86. descr.TopN.Others.Visible = cbOthers.Checked;
  87. descr.TopN.OthersTotal.Visible = cbOthersTotal.Checked;
  88. descr.TopN.OthersTotal.Text = tbOthersTotal.Text;
  89. if (cbCreateItems.Checked && !descr.TopNItemsPresent())
  90. descr.CreateTopNItems();
  91. if (!cbCreateItems.Checked && descr.TopNItemsPresent())
  92. descr.DeleteTopNItems();
  93. }
  94. // Visibility
  95. descr.Visible = cbVisible.Checked;
  96. descr.VisibleExpression = tbVisibleExpression.Text;
  97. descr.VisibleToggledBy = cbxVisibleToggledBy.SelectedIndex == 0 ? "" : (string)cbxVisibleToggledBy.SelectedItem;
  98. // Other
  99. bool steppedChanged = descr.Stepped != cbStepped.Checked;
  100. descr.Stepped = cbStepped.Checked;
  101. descr.MergeSingleItem = cbMerge.Checked;
  102. descr.PageBreak = cbPageBreak.Checked;
  103. descr.ColSpan = (int)udColSpan.Value;
  104. descr.RowSpan = (int)udRowSpan.Value;
  105. if (steppedChanged)
  106. {
  107. foreach (HeaderDescriptor child in descr.Items)
  108. {
  109. if (child.IsGroup)
  110. {
  111. Padding p = child.TemplateCell.Padding;
  112. if (descr.Stepped)
  113. p.Left = descr.TemplateCell.Padding.Left + 20;
  114. else
  115. p.Left = descr.TemplateCell.Padding.Left;
  116. child.TemplateCell.Padding = p;
  117. descr.TemplateCell.HorzAlign = HorzAlign.Left;
  118. child.TemplateCell.HorzAlign = HorzAlign.Left;
  119. break;
  120. }
  121. }
  122. }
  123. }
  124. }
  125. public override void Localize()
  126. {
  127. base.Localize();
  128. Text = Res.Get("Forms,AdvMatrixHeaderEditor");
  129. MyRes res = new MyRes("Forms,AdvMatrixHeaderEditor,General");
  130. pnGeneral.Text = res.Get("");
  131. lblItemType.Text = res.Get("ItemType");
  132. rbSimple.Text = res.Get("Simple");
  133. rbGroup.Text = res.Get("Group");
  134. lblDisplayText.Text = res.Get("DisplayText");
  135. res = new MyRes("Forms,AdvMatrixHeaderEditor,Sort");
  136. pnSort.Text = res.Get("");
  137. lblSortOrder.Text = res.Get("SortOrder");
  138. lblSortBy.Text = res.Get("SortBy");
  139. rbSortByItemValue.Text = res.Get("ItemValue");
  140. rbSortByTotal.Text = res.Get("TotalValue");
  141. lblInteractiveSort.Text = res.Get("InteractiveSortBy");
  142. cbxInteractiveSort.Items.Add(Res.Get("Misc,None"));
  143. cbxInteractiveSort.Items.Add(res.Get("Auto"));
  144. lblSortOrderToggledBy.Text = res.Get("SortOrderToggledBy");
  145. cbxSortOrderToggledBy.Items.Add(Res.Get("Misc,None"));
  146. res = new MyRes("Forms,GroupBandEditor");
  147. cbxSortOrder.Items.Add(res.Get("NoSort"));
  148. cbxSortOrder.Items.Add(res.Get("Ascending"));
  149. cbxSortOrder.Items.Add(res.Get("Descending"));
  150. res = new MyRes("Forms,AdvMatrixHeaderEditor,Filter");
  151. pnFilter.Text = res.Get("");
  152. lblFilter.Text = res.Get("Filter");
  153. res = new MyRes("Forms,AdvMatrixHeaderEditor,TopN");
  154. pnTopN.Text = res.Get("");
  155. lblTopNCount.Text = res.Get("Count");
  156. lblAdditionalItems.Text = res.Get("AdditionalItems");
  157. cbTopNTotal.Text = res.Get("TopNTotal");
  158. cbOthers.Text = res.Get("Others");
  159. cbOthersTotal.Text = res.Get("OthersTotal");
  160. cbCreateItems.Text = res.Get("Create");
  161. res = new MyRes("Forms,AdvMatrixHeaderEditor,Visibility");
  162. pnVisibility.Text = res.Get("");
  163. cbVisible.Text = res.Get("Visible");
  164. lblVisibleExpression.Text = res.Get("VisibleExpression");
  165. lblVisibleToggledBy.Text = res.Get("VisibleToggledBy");
  166. cbxVisibleToggledBy.Items.Add(Res.Get("Misc,None"));
  167. res = new MyRes("Forms,AdvMatrixHeaderEditor,Other");
  168. pnOther.Text = res.Get("");
  169. cbStepped.Text = res.Get("Stepped");
  170. cbMerge.Text = res.Get("Merge");
  171. cbPageBreak.Text = res.Get("PageBreak");
  172. lblColSpan.Text = res.Get("ColSpan");
  173. lblRowSpan.Text = res.Get("RowSpan");
  174. }
  175. public override void UpdateDpiDependencies()
  176. {
  177. base.UpdateDpiDependencies();
  178. tbDisplayText.Image = this.GetImage(68);
  179. tbFilter.Image = this.GetImage(52);
  180. tbVisibleExpression.Image = this.GetImage(52);
  181. }
  182. public MatrixHeaderEditorForm(HeaderDescriptor descr)
  183. {
  184. this.descr = descr;
  185. InitializeComponent();
  186. Localize();
  187. Init();
  188. UIUtils.CheckRTL(this);
  189. UpdateDpiDependencies();
  190. }
  191. private void MatrixHeaderEditorForm_Shown(object sender, EventArgs e)
  192. {
  193. updating = true;
  194. rbGroup_CheckedChanged(this, EventArgs.Empty);
  195. udTopN_ValueChanged(this, EventArgs.Empty);
  196. updating = false;
  197. }
  198. private void MatrixHeaderEditorForm_FormClosed(object sender, FormClosedEventArgs e)
  199. {
  200. Done();
  201. }
  202. private void rbGroup_CheckedChanged(object sender, EventArgs e)
  203. {
  204. bool isGroup = rbGroup.Checked;
  205. tbGroup.Enabled = isGroup;
  206. pnSort.Enabled = isGroup;
  207. pnTopN.Enabled = isGroup;
  208. cbxInteractiveSort.Enabled = isGroup;
  209. if (!updating)
  210. {
  211. tbDisplayText.Text = "";
  212. if (rbSimple.Checked)
  213. tbGroup.Text = "";
  214. }
  215. if (rbSimple.Checked)
  216. tbDisplayText.FocusTextBox();
  217. else
  218. tbGroup.Focus();
  219. }
  220. private void rbSortByTotal_CheckedChanged(object sender, EventArgs e)
  221. {
  222. cbxSortByTotal.Enabled = rbSortByTotal.Checked;
  223. if (!updating)
  224. {
  225. if (rbSortByTotal.Checked && cbxSortByTotal.Items.Count > 0)
  226. cbxSortByTotal.SelectedIndex = 0;
  227. else
  228. cbxSortByTotal.SelectedIndex = -1;
  229. }
  230. }
  231. private void tbDisplayText_ButtonClick(object sender, EventArgs e)
  232. {
  233. using (TextEditorForm form = new TextEditorForm(Report))
  234. {
  235. form.ExpressionText = tbDisplayText.Text;
  236. form.Brackets = descr.TemplateCell.Brackets;
  237. if (form.ShowDialog() == DialogResult.OK)
  238. {
  239. tbDisplayText.Text = form.ExpressionText;
  240. }
  241. }
  242. }
  243. private void tbFilter_ButtonClick(object sender, EventArgs e)
  244. {
  245. tbFilter.Text = Editors.EditExpression(Report, tbFilter.Text);
  246. }
  247. private void udTopN_ValueChanged(object sender, EventArgs e)
  248. {
  249. bool enabled = udTopN.Value > 0;
  250. pnTopNControls.Enabled = enabled;
  251. if (!enabled)
  252. cbCreateItems.Checked = false;
  253. }
  254. private void tbVisibleExpression_ButtonClick(object sender, EventArgs e)
  255. {
  256. tbVisibleExpression.Text = Editors.EditExpression(Report, tbVisibleExpression.Text);
  257. }
  258. }
  259. }