FontsOptionsForm.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using FastReport.Utils;
  6. namespace FastReport.Forms
  7. {
  8. internal partial class FormsFonts : BaseDialogForm
  9. {
  10. List<FormsSet> forms = new List<FormsSet>();
  11. FormsSet formsSet;
  12. FormElement formElement;
  13. public override void Localize()
  14. {
  15. base.Localize();
  16. MyRes res = new MyRes("Forms,FontsPageOptions");
  17. Text = res.Get("FormName");
  18. labelSettingsFor.Text = res.Get("SettingsFor");
  19. fontLabel.Text = res.Get("Font");
  20. formElementLabel.Text = res.Get("FormElement");
  21. defaultsButton.Text = res.Get("DefaultButton");
  22. sizeLabel.Text = res.Get("Size");
  23. italicCheckBox.Text = res.Get("Italic");
  24. boldCheckBox.Text = res.Get("Bold");
  25. sampleLabel.Text = res.Get("Sample");
  26. }
  27. private void InitFontsName()
  28. {
  29. foreach (FontFamily font in System.Drawing.FontFamily.Families)
  30. {
  31. fontComboBox.Items.Add(font.Name);
  32. }
  33. }
  34. private void InitFontSizes()
  35. {
  36. for (int i = 6; i < 21; i++)
  37. {
  38. sizeComboBox.Items.Add(i);
  39. }
  40. }
  41. private void InitList()
  42. {
  43. XmlItem xi = Config.Root.FindItem("Designer").FindItem("Fonts");
  44. if (xi.Count != 4)
  45. {
  46. xi.Clear();
  47. initDefaultFontsOptions();
  48. }
  49. foreach (XmlItem item in xi.Items)
  50. {
  51. formsSet = new FormsSet(); // formset = Set the form as default
  52. formsSet.xmlProperty = item.Name;
  53. formsSet.FormName = item.GetProp("name");
  54. AddFormToList(formsSet);
  55. foreach (XmlItem element in item.Items)
  56. {
  57. FormElement fe = new FormElement();
  58. fe.xmlProperty = element.Name;
  59. fe.ElementName = element.GetProp("element-name");
  60. fe.FontName = element.GetProp("font-name");
  61. fe.FontSize = int.Parse(element.GetProp("font-size"));
  62. fe.Bold = element.GetProp("font-bold") == "1";
  63. fe.Italic = element.GetProp("font-italic") == "1";
  64. formsSet.formElements.Add(fe);
  65. }
  66. }
  67. formsSetComboBox.SelectedIndex = 0;
  68. }
  69. private void GetFormsSet(int FormSetID)
  70. {
  71. formsSet = forms[FormSetID];
  72. elementsListBox.Items.Clear();
  73. foreach (FormElement formElement in formsSet.formElements)
  74. {
  75. elementsListBox.Items.Add(formElement.ElementName);
  76. }
  77. getFormElement(0);
  78. elementsListBox.SelectedIndex = 0;
  79. }
  80. private void getFormElement(int ElementID)
  81. {
  82. formElement = formsSet.formElements[ElementID];
  83. formsSetComboBox.Text = formsSet.FormName;
  84. fontComboBox.Text = formElement.FontName;
  85. sizeComboBox.Text = formElement.FontSize.ToString();
  86. italicCheckBox.Checked = formElement.Italic;
  87. boldCheckBox.Checked = formElement.Bold;
  88. updateExample();
  89. }
  90. private void updateExample()
  91. {
  92. ExampleBox.Font = this.LogicalToDevice(new Font(fontComboBox.Text, sizeComboBox.Text != "" ? int.Parse(sizeComboBox.Text) : 8,
  93. (italicCheckBox.Checked ? FontStyle.Italic : 0) | (boldCheckBox.Checked ? FontStyle.Bold : 0)), true);
  94. }
  95. private void AddFormToList(FormsSet item)
  96. {
  97. forms.Add(item);
  98. formsSetComboBox.Items.Add(item.FormName);
  99. }
  100. private void FormSetComboBox_SelectedIndexChanged(object sender, EventArgs e)
  101. {
  102. SaveOption();
  103. GetFormsSet(formsSetComboBox.SelectedIndex);
  104. }
  105. private void DefaultsButton_Click(object sender, EventArgs e)
  106. {
  107. formElement.setDefault();
  108. GetFormsSet(formsSetComboBox.SelectedIndex);
  109. updateExample();
  110. }
  111. private void ElementsListBox_SelectedIndexChanged(object sender, EventArgs e)
  112. {
  113. SaveOption();
  114. getFormElement(elementsListBox.SelectedIndex);
  115. }
  116. private void SaveOption()
  117. {
  118. if (formElement != null)
  119. {
  120. formElement.Italic = italicCheckBox.Checked;
  121. formElement.Bold = boldCheckBox.Checked;
  122. formElement.FontName = fontComboBox.Text;
  123. formElement.FontSize = sizeComboBox.Text != "" ? int.Parse(sizeComboBox.Text) : 8;
  124. }
  125. }
  126. private void FormsFonts_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
  127. {
  128. if (DialogResult == DialogResult.OK)
  129. {
  130. SaveOption();
  131. SaveFontsChanges();
  132. }
  133. }
  134. private void SaveFontsChanges()
  135. {
  136. XmlItem xi = Config.Root.FindItem("Designer").FindItem("Fonts");
  137. foreach (FormsSet form in forms)
  138. {
  139. XmlItem f = xi.FindItem(form.xmlProperty);
  140. List<XmlProperty> n = new List<XmlProperty>();
  141. n.Add(XmlProperty.Create("name", form.FormName));
  142. f.Properties = n.ToArray();
  143. foreach (FormElement element in form.formElements)
  144. {
  145. XmlItem el = f.FindItem(element.xmlProperty);
  146. List<XmlProperty> p = new List<XmlProperty>();
  147. p.Add(XmlProperty.Create("element-name", element.ElementName));
  148. p.Add(XmlProperty.Create("font-size", element.FontSize.ToString()));
  149. p.Add(XmlProperty.Create("font-name", element.FontName));
  150. p.Add(XmlProperty.Create("font-italic", element.Italic ? "1" : "0"));
  151. p.Add(XmlProperty.Create("font-bold", element.Bold ? "1" : "0"));
  152. el.Properties = p.ToArray();
  153. }
  154. }
  155. }
  156. private void initDefaultFontsOptions()
  157. {
  158. XmlItem fontsConfig = Config.Root.FindItem("Designer").FindItem("Fonts");
  159. //Code page init
  160. XmlItem codePageDesigner = new XmlItem();
  161. codePageDesigner.Name = "CodePageDesigner";
  162. List<XmlProperty> cpdProp = new List<XmlProperty>();
  163. cpdProp.Add(XmlProperty.Create("name", "Code Page Designer"));
  164. codePageDesigner.Properties = cpdProp.ToArray();
  165. XmlItem codePage = new XmlItem();
  166. codePage.Name = "CodePage";
  167. List<XmlProperty> codePageProp = new List<XmlProperty>();
  168. codePageProp.Add(XmlProperty.Create("element-name", "Code page"));
  169. codePageProp.Add(XmlProperty.Create("font-size", "10"));
  170. codePageProp.Add(XmlProperty.Create("font-name", FontFamily.GenericMonospace.Name));
  171. codePageProp.Add(XmlProperty.Create("font-italic", "0"));
  172. codePageProp.Add(XmlProperty.Create("font-bold", "0"));
  173. codePage.Properties = codePageProp.ToArray();
  174. codePageDesigner.AddItem(codePage);
  175. fontsConfig.AddItem(codePageDesigner);
  176. //Query wizard form init
  177. XmlItem QueryWizardForm = new XmlItem();
  178. QueryWizardForm.Name = "QueryWizardForm";
  179. List<XmlProperty> qwfProp = new List<XmlProperty>();
  180. qwfProp.Add(XmlProperty.Create("name", "Query wizard form"));
  181. QueryWizardForm.Properties = qwfProp.ToArray();
  182. XmlItem queryWindow = new XmlItem();
  183. queryWindow.Name = "QueryWindow";
  184. List<XmlProperty> qwProp = new List<XmlProperty>();
  185. qwProp.Add(XmlProperty.Create("element-name", "Query window"));
  186. qwProp.Add(XmlProperty.Create("font-size", "8"));
  187. qwProp.Add(XmlProperty.Create("font-name", "Tahoma"));
  188. qwProp.Add(XmlProperty.Create("font-italic", "0"));
  189. qwProp.Add(XmlProperty.Create("font-bold", "0"));
  190. queryWindow.Properties = qwProp.ToArray();
  191. QueryWizardForm.AddItem(queryWindow);
  192. fontsConfig.AddItem(QueryWizardForm);
  193. //Text editor form init
  194. XmlItem TextEditorForm = new XmlItem();
  195. TextEditorForm.Name = "TextEditorForm";
  196. List<XmlProperty> tefProp = new List<XmlProperty>();
  197. tefProp.Add(XmlProperty.Create("name", "Text Editor Form"));
  198. TextEditorForm.Properties = tefProp.ToArray();
  199. XmlItem TextFieldEditor = new XmlItem();
  200. TextFieldEditor.Name = "TextFieldEditor";
  201. List<XmlProperty> tfeProp = new List<XmlProperty>();
  202. tfeProp.Add(XmlProperty.Create("element-name", "Text Field Editor"));
  203. tfeProp.Add(XmlProperty.Create("font-size", DrawUtils.DefaultReportFont.Size.ToString()));
  204. tfeProp.Add(XmlProperty.Create("font-name", DrawUtils.DefaultReportFont.Name));
  205. tfeProp.Add(XmlProperty.Create("font-italic", "0"));
  206. tfeProp.Add(XmlProperty.Create("font-bold", "0"));
  207. TextFieldEditor.Properties = tfeProp.ToArray();
  208. TextEditorForm.AddItem(TextFieldEditor);
  209. fontsConfig.AddItem(TextEditorForm);
  210. //Expression editor
  211. XmlItem ExpressionEditorForm = new XmlItem();
  212. ExpressionEditorForm.Name = "ExpressionEditorForm";
  213. List<XmlProperty> eef = new List<XmlProperty>();
  214. eef.Add(XmlProperty.Create("name", "Expression Editor Form"));
  215. ExpressionEditorForm.Properties = eef.ToArray();
  216. XmlItem FormulaEditor = new XmlItem();
  217. FormulaEditor.Name = "FormulaEditor";
  218. List<XmlProperty> feProp = new List<XmlProperty>();
  219. feProp.Add(XmlProperty.Create("element-name", "Formula Editor"));
  220. feProp.Add(XmlProperty.Create("font-size", DrawUtils.FixedFont.Size.ToString()));
  221. feProp.Add(XmlProperty.Create("font-name", DrawUtils.FixedFont.Name));
  222. feProp.Add(XmlProperty.Create("font-italic", "0"));
  223. feProp.Add(XmlProperty.Create("font-bold", "0"));
  224. FormulaEditor.Properties = feProp.ToArray();
  225. ExpressionEditorForm.AddItem(FormulaEditor);
  226. fontsConfig.AddItem(ExpressionEditorForm);
  227. }
  228. private void OptionChanged(object sender, EventArgs e)
  229. {
  230. updateExample();
  231. }
  232. public override void UpdateDpiDependencies()
  233. {
  234. base.UpdateDpiDependencies();
  235. updateExample();
  236. }
  237. public FormsFonts()
  238. {
  239. InitializeComponent();
  240. InitFontsName();
  241. InitFontSizes();
  242. InitList();
  243. Localize();
  244. UIUtils.CheckRTL(this);
  245. UpdateDpiDependencies();
  246. }
  247. }
  248. internal class FormsSet : List<FormElement>
  249. {
  250. public String xmlProperty;
  251. public String FormName;
  252. public List<FormElement> formElements = new List<FormElement>();
  253. }
  254. internal class FormElement
  255. {
  256. public String xmlProperty;
  257. public String ElementName;
  258. public String FontName;
  259. public int FontSize;
  260. public Boolean Italic;
  261. public Boolean Bold;
  262. public void setDefault()
  263. {
  264. switch (xmlProperty)
  265. {
  266. case "QueryWindow":
  267. FontName = "Tahoma";
  268. FontSize = 8;
  269. Italic = false;
  270. Bold = false;
  271. break;
  272. case "CodePage":
  273. FontName = FontFamily.GenericMonospace.Name;
  274. FontSize = 10;
  275. Italic = false;
  276. Bold = false;
  277. break;
  278. case "TextFieldEditor":
  279. FontName = DrawUtils.DefaultReportFont.Name;
  280. FontSize = (int)DrawUtils.DefaultReportFont.Size;
  281. Italic = false;
  282. Bold = false;
  283. break;
  284. case "FormulaEditor":
  285. FontName = DrawUtils.FixedFont.Name;
  286. FontSize = (int)DrawUtils.FixedFont.Size;
  287. Italic = false;
  288. Bold = false;
  289. break;
  290. default:
  291. FontName = "Tahoma";
  292. FontSize = 8;
  293. Italic = false;
  294. Bold = false;
  295. break;
  296. }
  297. }
  298. public FormElement()
  299. {
  300. setDefault();
  301. }
  302. }
  303. }