FormatEditorForm.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows.Forms;
  4. using FastReport.Utils;
  5. using System.Globalization;
  6. using FastReport.Format;
  7. namespace FastReport.Forms
  8. {
  9. internal partial class FormatEditorForm : BaseDialogForm
  10. {
  11. private TextObjectBase textObject;
  12. private int formatIndex;
  13. private List<FormatBase[]> formats;
  14. private List<int> selectedFormatIndices;
  15. public TextObjectBase TextObject
  16. {
  17. get { return textObject; }
  18. set
  19. {
  20. textObject = value;
  21. // get expressions
  22. string[] expressions = textObject.GetExpressions();
  23. if (expressions == null || expressions.Length == 0)
  24. expressions = new string[] { "" };
  25. cbxExpression.Items.AddRange(expressions);
  26. // disable controls if there is only one expression
  27. if (expressions.Length < 2)
  28. {
  29. lblExpression.Visible = false;
  30. cbxExpression.Visible = false;
  31. int _32 = this.LogicalToDevice(32);
  32. pc1.Top -= _32;
  33. btnOk.Top -= _32;
  34. btnCancel.Top -= _32;
  35. gbSample.Top -= _32;
  36. Height -= _32;
  37. }
  38. formats = new List<FormatBase[]>();
  39. selectedFormatIndices = new List<int>();
  40. for (int i = 0; i < expressions.Length; i++)
  41. {
  42. FormatBase format = null;
  43. if (i < textObject.Formats.Count)
  44. format = textObject.Formats[i];
  45. else
  46. format = new GeneralFormat();
  47. FormatBase[] formatsArr = new FormatBase[] {
  48. new GeneralFormat(),
  49. new NumberFormat(),
  50. new CurrencyFormat(),
  51. new DateFormat(),
  52. new TimeFormat(),
  53. new PercentFormat(),
  54. new BooleanFormat(),
  55. new CustomFormat() };
  56. this.formats.Add(formatsArr);
  57. int formatIndex = 0;
  58. for (int j = 0; j < formatsArr.Length; j++)
  59. {
  60. if (formatsArr[j].GetType() == format.GetType())
  61. {
  62. formatsArr[j] = format.Clone();
  63. formatIndex = j;
  64. break;
  65. }
  66. }
  67. selectedFormatIndices.Add(formatIndex);
  68. }
  69. cbxExpression.SelectedIndex = 0;
  70. }
  71. }
  72. public FormatCollection Formats
  73. {
  74. get
  75. {
  76. FormatCollection collection = new FormatCollection();
  77. for (int i = 0; i < formats.Count; i++)
  78. {
  79. FormatBase format = formats[i][selectedFormatIndices[i]];
  80. collection.Add(format);
  81. }
  82. return collection;
  83. }
  84. }
  85. private int FormatIndex
  86. {
  87. get { return formatIndex; }
  88. set
  89. {
  90. formatIndex = value;
  91. pc1.ActivePageIndex = selectedFormatIndices[formatIndex];
  92. UpdateControls();
  93. }
  94. }
  95. private FormatBase Format
  96. {
  97. get
  98. {
  99. int index = selectedFormatIndices[formatIndex];
  100. return formats[formatIndex][index];
  101. }
  102. }
  103. private NumberFormat NumberFormat
  104. {
  105. get { return formats[formatIndex][1] as NumberFormat; }
  106. }
  107. private CurrencyFormat CurrencyFormat
  108. {
  109. get { return formats[formatIndex][2] as CurrencyFormat; }
  110. }
  111. private DateFormat DateFormat
  112. {
  113. get { return formats[formatIndex][3] as DateFormat; }
  114. }
  115. private TimeFormat TimeFormat
  116. {
  117. get { return formats[formatIndex][4] as TimeFormat; }
  118. }
  119. private PercentFormat PercentFormat
  120. {
  121. get { return formats[formatIndex][5] as PercentFormat; }
  122. }
  123. private BooleanFormat BooleanFormat
  124. {
  125. get { return formats[formatIndex][6] as BooleanFormat; }
  126. }
  127. private CustomFormat CustomFormat
  128. {
  129. get { return formats[formatIndex][7] as CustomFormat; }
  130. }
  131. private void Change()
  132. {
  133. lblSample.Text = Format.GetSampleValue();
  134. }
  135. private void UpdateControls()
  136. {
  137. // number
  138. cbNumberUseLocale.Checked = NumberFormat.UseLocale;
  139. udNumberDecimalDigits.Value = NumberFormat.DecimalDigits;
  140. if (!NumberFormat.UseLocale)
  141. {
  142. cbxNumberDecimalSeparator.Text = NumberFormat.DecimalSeparator;
  143. cbxNumberGroupSeparator.Text = NumberFormat.GroupSeparator;
  144. cbxNumberNegativePattern.SelectedIndex = NumberFormat.NegativePattern;
  145. }
  146. // currency
  147. cbCurrencyUseLocale.Checked = CurrencyFormat.UseLocale;
  148. udCurrencyDecimalDigits.Value = CurrencyFormat.DecimalDigits;
  149. if (!CurrencyFormat.UseLocale)
  150. {
  151. cbxCurrencyDecimalSeparator.Text = CurrencyFormat.DecimalSeparator;
  152. cbxCurrencyGroupSeparator.Text = CurrencyFormat.GroupSeparator;
  153. cbxCurrencyPositivePattern.SelectedIndex = CurrencyFormat.PositivePattern;
  154. cbxCurrencyNegativePattern.SelectedIndex = CurrencyFormat.NegativePattern;
  155. cbxCurrencySymbol.Text = CurrencyFormat.CurrencySymbol;
  156. }
  157. // date
  158. lbxDates.SelectedItem = DateFormat.Format;
  159. // time
  160. lbxTimes.SelectedItem = TimeFormat.Format;
  161. // percent
  162. cbPercentUseLocale.Checked = PercentFormat.UseLocale;
  163. udPercentDecimalDigits.Value = PercentFormat.DecimalDigits;
  164. if (!PercentFormat.UseLocale)
  165. {
  166. cbxPercentDecimalSeparator.Text = PercentFormat.DecimalSeparator;
  167. cbxPercentGroupSeparator.Text = PercentFormat.GroupSeparator;
  168. cbxPercentPositivePattern.SelectedIndex = PercentFormat.PositivePattern;
  169. cbxPercentNegativePattern.SelectedIndex = PercentFormat.NegativePattern;
  170. cbxPercentSymbol.Text = PercentFormat.PercentSymbol;
  171. }
  172. // boolean
  173. cbxBooleanFalse.Text = BooleanFormat.FalseText;
  174. cbxBooleanTrue.Text = BooleanFormat.TrueText;
  175. // custom
  176. tbCustom.Text = CustomFormat.Format;
  177. }
  178. private void cbNumberUseLocale_CheckedChanged(object sender, EventArgs e)
  179. {
  180. bool previousUseLocale = NumberFormat.UseLocale;
  181. NumberFormat.UseLocale = cbNumberUseLocale.Checked;
  182. if (cbNumberUseLocale.Checked)
  183. {
  184. NumberFormatInfo info = CultureInfo.CurrentCulture.NumberFormat;
  185. if (!previousUseLocale)
  186. {
  187. udNumberDecimalDigits.Value = info.NumberDecimalDigits;
  188. }
  189. cbxNumberDecimalSeparator.Text = info.NumberDecimalSeparator;
  190. cbxNumberGroupSeparator.Text = info.NumberGroupSeparator;
  191. cbxNumberNegativePattern.SelectedIndex = info.NumberNegativePattern;
  192. }
  193. Control[] controls = new Control[] { lblNumberDecimalDigits, udNumberDecimalDigits,
  194. lblNumberDecimalSeparator, cbxNumberDecimalSeparator,
  195. lblNumberGroupSeparator, cbxNumberGroupSeparator,
  196. lblNumberNegativePattern, cbxNumberNegativePattern };
  197. cbxNumberDecimalSeparator.Enabled = !cbNumberUseLocale.Checked;
  198. cbxNumberGroupSeparator.Enabled = !cbNumberUseLocale.Checked;
  199. cbxNumberNegativePattern.Enabled = !cbNumberUseLocale.Checked;
  200. Change();
  201. }
  202. private void udNumberDecimalDigits_ValueChanged(object sender, EventArgs e)
  203. {
  204. NumberFormat.DecimalDigits = (int)udNumberDecimalDigits.Value;
  205. Change();
  206. }
  207. private void cbxNumberDecimalSeparator_TextChanged(object sender, EventArgs e)
  208. {
  209. NumberFormat.DecimalSeparator = cbxNumberDecimalSeparator.Text;
  210. Change();
  211. }
  212. private void cbxNumberGroupSeparator_TextChanged(object sender, EventArgs e)
  213. {
  214. if (cbxNumberGroupSeparator.Text == Res.Get("Misc,None"))
  215. NumberFormat.GroupSeparator = "";
  216. else
  217. NumberFormat.GroupSeparator = cbxNumberGroupSeparator.Text;
  218. Change();
  219. }
  220. private void cbxNumberNegativePattern_SelectedValueChanged(object sender, EventArgs e)
  221. {
  222. NumberFormat.NegativePattern = cbxNumberNegativePattern.SelectedIndex;
  223. Change();
  224. }
  225. private void cbxCurrencyUseLocale_CheckedChanged(object sender, EventArgs e)
  226. {
  227. bool previousUseLocale = CurrencyFormat.UseLocale;
  228. CurrencyFormat.UseLocale = cbCurrencyUseLocale.Checked;
  229. if (cbCurrencyUseLocale.Checked)
  230. {
  231. NumberFormatInfo info = CultureInfo.CurrentCulture.NumberFormat;
  232. if (!previousUseLocale)
  233. {
  234. udCurrencyDecimalDigits.Value = info.CurrencyDecimalDigits;
  235. }
  236. cbxCurrencyDecimalSeparator.Text = info.CurrencyDecimalSeparator;
  237. cbxCurrencyGroupSeparator.Text = info.CurrencyGroupSeparator;
  238. cbxCurrencyPositivePattern.SelectedIndex = info.CurrencyPositivePattern;
  239. cbxCurrencyNegativePattern.SelectedIndex = info.CurrencyNegativePattern;
  240. cbxCurrencySymbol.Text = info.CurrencySymbol;
  241. }
  242. Control[] controls = new Control[] { lblCurrencyDecimalDigits, udCurrencyDecimalDigits,
  243. lblCurrencyDecimalSeparator, cbxCurrencyDecimalSeparator,
  244. lblCurrencyGroupSeparator, cbxCurrencyGroupSeparator,
  245. lblCurrencyPositivePattern, cbxCurrencyPositivePattern,
  246. lblCurrencyNegativePattern, cbxCurrencyNegativePattern,
  247. lblCurrencySymbol, cbxCurrencySymbol };
  248. cbxCurrencyDecimalSeparator.Enabled = !cbCurrencyUseLocale.Checked;
  249. cbxCurrencyGroupSeparator.Enabled = !cbCurrencyUseLocale.Checked;
  250. cbxCurrencyPositivePattern.Enabled = !cbCurrencyUseLocale.Checked;
  251. cbxCurrencyNegativePattern.Enabled = !cbCurrencyUseLocale.Checked;
  252. cbxCurrencySymbol.Enabled = !cbCurrencyUseLocale.Checked;
  253. Change();
  254. }
  255. private void udCurrencyDecimalDigits_ValueChanged(object sender, EventArgs e)
  256. {
  257. CurrencyFormat.DecimalDigits = (int)udCurrencyDecimalDigits.Value;
  258. Change();
  259. }
  260. private void cbxCurrencyDecimalSeparator_TextChanged(object sender, EventArgs e)
  261. {
  262. CurrencyFormat.DecimalSeparator = cbxCurrencyDecimalSeparator.Text;
  263. Change();
  264. }
  265. private void cbxCurrencyGroupSeparator_TextChanged(object sender, EventArgs e)
  266. {
  267. if (cbxCurrencyGroupSeparator.Text == Res.Get("Misc,None"))
  268. CurrencyFormat.GroupSeparator = "";
  269. else
  270. CurrencyFormat.GroupSeparator = cbxCurrencyGroupSeparator.Text;
  271. Change();
  272. }
  273. private void cbxCurrencyPositivePattern_SelectedValueChanged(object sender, EventArgs e)
  274. {
  275. CurrencyFormat.PositivePattern = cbxCurrencyPositivePattern.SelectedIndex;
  276. Change();
  277. }
  278. private void cbxCurrencyNegativePattern_SelectedValueChanged(object sender, EventArgs e)
  279. {
  280. CurrencyFormat.NegativePattern = cbxCurrencyNegativePattern.SelectedIndex;
  281. Change();
  282. }
  283. private void cbxCurrencySymbol_TextChanged(object sender, EventArgs e)
  284. {
  285. CurrencyFormat.CurrencySymbol = cbxCurrencySymbol.Text;
  286. Change();
  287. }
  288. private void lbxDates_SelectedIndexChanged(object sender, EventArgs e)
  289. {
  290. DateFormat.Format = (string)lbxDates.SelectedItem;
  291. Change();
  292. }
  293. private void lbxTimes_SelectedIndexChanged(object sender, EventArgs e)
  294. {
  295. TimeFormat.Format = (string)lbxTimes.SelectedItem;
  296. Change();
  297. }
  298. private void cbPercentUseLocale_CheckedChanged(object sender, EventArgs e)
  299. {
  300. bool previousUseLocale = PercentFormat.UseLocale;
  301. PercentFormat.UseLocale = cbPercentUseLocale.Checked;
  302. if (cbPercentUseLocale.Checked)
  303. {
  304. NumberFormatInfo info = CultureInfo.CurrentCulture.NumberFormat;
  305. if (!previousUseLocale)
  306. {
  307. udPercentDecimalDigits.Value = info.PercentDecimalDigits;
  308. }
  309. cbxPercentDecimalSeparator.Text = info.PercentDecimalSeparator;
  310. cbxPercentGroupSeparator.Text = info.PercentGroupSeparator;
  311. cbxPercentPositivePattern.SelectedIndex = info.PercentPositivePattern;
  312. cbxPercentNegativePattern.SelectedIndex = info.PercentNegativePattern;
  313. cbxPercentSymbol.Text = info.PercentSymbol;
  314. }
  315. Control[] controls = new Control[] { lblPercentDecimalDigits, udPercentDecimalDigits,
  316. lblPercentDecimalSeparator, cbxPercentDecimalSeparator,
  317. lblPercentGroupSeparator, cbxPercentGroupSeparator,
  318. lblPercentPositivePattern, cbxPercentPositivePattern,
  319. lblPercentNegativePattern, cbxPercentNegativePattern,
  320. lblPercentSymbol, cbxPercentSymbol };
  321. cbxPercentDecimalSeparator.Enabled = !cbPercentUseLocale.Checked;
  322. cbxPercentGroupSeparator.Enabled = !cbPercentUseLocale.Checked;
  323. cbxPercentPositivePattern.Enabled = !cbPercentUseLocale.Checked;
  324. cbxPercentNegativePattern.Enabled = !cbPercentUseLocale.Checked;
  325. cbxPercentSymbol.Enabled = !cbPercentUseLocale.Checked;
  326. Change();
  327. }
  328. private void udPercentDecimalDigits_ValueChanged(object sender, EventArgs e)
  329. {
  330. PercentFormat.DecimalDigits = (int)udPercentDecimalDigits.Value;
  331. Change();
  332. }
  333. private void cbxPercentDecimalSeparator_TextChanged(object sender, EventArgs e)
  334. {
  335. PercentFormat.DecimalSeparator = cbxPercentDecimalSeparator.Text;
  336. Change();
  337. }
  338. private void cbxPercentGroupSeparator_TextChanged(object sender, EventArgs e)
  339. {
  340. if (cbxPercentGroupSeparator.Text == Res.Get("Misc,None"))
  341. PercentFormat.GroupSeparator = "";
  342. else
  343. PercentFormat.GroupSeparator = cbxPercentGroupSeparator.Text;
  344. Change();
  345. }
  346. private void cbxPercentPositivePattern_SelectedValueChanged(object sender, EventArgs e)
  347. {
  348. PercentFormat.PositivePattern = cbxPercentPositivePattern.SelectedIndex;
  349. Change();
  350. }
  351. private void cbxPercentNegativePattern_SelectedValueChanged(object sender, EventArgs e)
  352. {
  353. PercentFormat.NegativePattern = cbxPercentNegativePattern.SelectedIndex;
  354. Change();
  355. }
  356. private void cbxPercentSymbol_TextChanged(object sender, EventArgs e)
  357. {
  358. PercentFormat.PercentSymbol = cbxPercentSymbol.Text;
  359. Change();
  360. }
  361. private void cbxBooleanFalse_TextChanged(object sender, EventArgs e)
  362. {
  363. BooleanFormat.FalseText = cbxBooleanFalse.Text;
  364. Change();
  365. }
  366. private void cbxBooleanTrue_TextChanged(object sender, EventArgs e)
  367. {
  368. BooleanFormat.TrueText = cbxBooleanTrue.Text;
  369. Change();
  370. }
  371. private void lbxCustom_SelectedIndexChanged(object sender, EventArgs e)
  372. {
  373. if (lbxCustom.SelectedIndex == -1)
  374. return;
  375. string format = (string)lbxCustom.SelectedItem;
  376. tbCustom.Text = format.Substring(format.IndexOf(';') + 1);
  377. }
  378. private void tbCustom_TextChanged(object sender, EventArgs e)
  379. {
  380. CustomFormat.Format = tbCustom.Text;
  381. Change();
  382. }
  383. private void cbxExpression_SelectedIndexChanged(object sender, EventArgs e)
  384. {
  385. FormatIndex = cbxExpression.SelectedIndex;
  386. pc1.Focus();
  387. }
  388. private void pc1_PageSelected(object sender, EventArgs e)
  389. {
  390. selectedFormatIndices[formatIndex] = pc1.ActivePageIndex;
  391. Change();
  392. }
  393. private void lbxDates_DrawItem(object sender, DrawItemEventArgs e)
  394. {
  395. e.DrawBackground();
  396. if (e.Index >= 0)
  397. {
  398. string format = (string)(sender as ListBox).Items[e.Index];
  399. string text = String.Format("{0:" + format + "}", new DateTime(2007, 11, 30, 13, 30, 0));
  400. TextRenderer.DrawText(e.Graphics, text, e.Font, e.Bounds.Location, e.ForeColor);
  401. TextRenderer.DrawText(e.Graphics, format, e.Font, e.Bounds, e.ForeColor, TextFormatFlags.Right);
  402. }
  403. }
  404. private void lbxCustom_DrawItem(object sender, DrawItemEventArgs e)
  405. {
  406. e.DrawBackground();
  407. if (e.Index >= 0)
  408. {
  409. string format = (string)lbxCustom.Items[e.Index];
  410. string text = format.Split(';')[0];
  411. TextRenderer.DrawText(e.Graphics, text, e.Font, e.Bounds.Location, e.ForeColor);
  412. }
  413. }
  414. public override void UpdateDpiDependencies()
  415. {
  416. base.UpdateDpiDependencies();
  417. //int gap = this.LogicalToDevice(32);
  418. //lbxDates.Height = pnDate.Height - gbSample.Height - gap - lbxDates.Top;
  419. //lbxTimes.Height = pnDate.Height - gbSample.Height - gap - lbxTimes.Top;
  420. //lbxCustom.Height = pnDate.Height - gbSample.Height - gap - lbxCustom.Top;
  421. lbxDates.ItemHeight = this.LogicalToDevice(15);
  422. lbxTimes.ItemHeight = lbxDates.ItemHeight;
  423. lbxCustom.ItemHeight = lbxDates.ItemHeight;
  424. }
  425. private void FormatEditorForm_Shown(object sender, EventArgs e)
  426. {
  427. }
  428. public override void Localize()
  429. {
  430. base.Localize();
  431. MyRes res = new MyRes("Forms,FormatEditor");
  432. Text = res.Get("");
  433. gbSample.Text = Res.Get("Misc,Sample");
  434. lblExpression.Text = res.Get("Expression");
  435. pnGeneral.Text = res.Get("General");
  436. pnNumber.Text = res.Get("Number");
  437. pnCurrency.Text = res.Get("Currency");
  438. pnDate.Text = res.Get("Date");
  439. pnTime.Text = res.Get("Time");
  440. pnPercent.Text = res.Get("Percent");
  441. pnBoolean.Text = res.Get("Boolean");
  442. pnCustom.Text = res.Get("Custom");
  443. cbNumberUseLocale.Text = res.Get("UseLocale");
  444. cbCurrencyUseLocale.Text = res.Get("UseLocale");
  445. cbPercentUseLocale.Text = res.Get("UseLocale");
  446. lblNumberDecimalDigits.Text = res.Get("DecimalDigits");
  447. lblNumberDecimalSeparator.Text = res.Get("DecimalSeparator");
  448. lblNumberGroupSeparator.Text = res.Get("GroupSeparator");
  449. lblNumberNegativePattern.Text = res.Get("NegativePattern");
  450. lblCurrencyDecimalDigits.Text = res.Get("DecimalDigits");
  451. lblCurrencyDecimalSeparator.Text = res.Get("DecimalSeparator");
  452. lblCurrencyGroupSeparator.Text = res.Get("GroupSeparator");
  453. lblCurrencyPositivePattern.Text = res.Get("PositivePattern");
  454. lblCurrencyNegativePattern.Text = res.Get("NegativePattern");
  455. lblCurrencySymbol.Text = res.Get("CurrencySymbol");
  456. lblPercentDecimalDigits.Text = res.Get("DecimalDigits");
  457. lblPercentDecimalSeparator.Text = res.Get("DecimalSeparator");
  458. lblPercentGroupSeparator.Text = res.Get("GroupSeparator");
  459. lblPercentPositivePattern.Text = res.Get("PositivePattern");
  460. lblPercentNegativePattern.Text = res.Get("NegativePattern");
  461. lblPercentSymbol.Text = res.Get("PercentSymbol");
  462. lblBooleanFalse.Text = res.Get("FalseText");
  463. lblBooleanTrue.Text = res.Get("TrueText");
  464. for (int i = 1; i < 20; i++)
  465. {
  466. if (!Res.StringExists("Formats,Date" + i.ToString()))
  467. break;
  468. lbxDates.Items.Add(Res.Get("Formats,Date" + i.ToString()));
  469. }
  470. for (int i = 1; i < 20; i++)
  471. {
  472. if (!Res.StringExists("Formats,Time" + i.ToString()))
  473. break;
  474. lbxTimes.Items.Add(Res.Get("Formats,Time" + i.ToString()));
  475. }
  476. for (int i = 1; i < 20; i++)
  477. {
  478. if (!Res.StringExists("Formats,BooleanF" + i.ToString()))
  479. break;
  480. cbxBooleanFalse.Items.Add(Res.Get("Formats,BooleanF" + i.ToString()));
  481. cbxBooleanTrue.Items.Add(Res.Get("Formats,BooleanT" + i.ToString()));
  482. }
  483. for (int i = 1; i < 20; i++)
  484. {
  485. if (!Res.StringExists("Formats,Custom" + i.ToString()))
  486. break;
  487. lbxCustom.Items.Add(Res.Get("Formats,Custom" + i.ToString()));
  488. }
  489. string[] decimalSeparators = new string[] { ".", ",", "-" };
  490. cbxCurrencyDecimalSeparator.Items.AddRange(decimalSeparators);
  491. cbxNumberDecimalSeparator.Items.AddRange(decimalSeparators);
  492. cbxPercentDecimalSeparator.Items.AddRange(decimalSeparators);
  493. string[] groupSeparators = new string[] { ",", " ", Res.Get("Misc,None") };
  494. cbxCurrencyGroupSeparator.Items.AddRange(groupSeparators);
  495. cbxNumberGroupSeparator.Items.AddRange(groupSeparators);
  496. cbxPercentGroupSeparator.Items.AddRange(groupSeparators);
  497. cbxCurrencyPositivePattern.Items.AddRange(new string[] { "$n", "n$", "$ n", "n $" });
  498. cbxCurrencyNegativePattern.Items.AddRange(new string[] { "($n)", "-$n", "$-n", "$n-", "(n$)",
  499. "-n$", "n-$", "n$-", "-n $", "-$ n", "n $-", "$ n-", "$ -n", "n- $", "($ n)", "(n $)" });
  500. cbxNumberNegativePattern.Items.AddRange(new string[] { "(n)", "-n", "- n", "n-", "n -" });
  501. cbxPercentPositivePattern.Items.AddRange(new string[] { "n %", "n%", "%n", "% n" });
  502. cbxPercentNegativePattern.Items.AddRange(new string[] { "-n %", "-n%", "-%n", "%-n", "%n-",
  503. "n-%", "n%-", "-%n", "n %-", "% n-", "% -n", "n- %" });
  504. cbxCurrencySymbol.Items.Add(CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol);
  505. cbxCurrencySymbol.Items.Add("$");
  506. cbxCurrencySymbol.Items.Add("\u20AC");
  507. cbxCurrencySymbol.Items.Add("\u00A3");
  508. cbxCurrencySymbol.Items.Add("\u20B9");
  509. cbxPercentSymbol.Items.AddRange(new string[] { "%", "" });
  510. }
  511. public FormatEditorForm()
  512. {
  513. InitializeComponent();
  514. Localize();
  515. UIUtils.CheckRTL(this);
  516. UpdateDpiDependencies();
  517. }
  518. }
  519. }