JsonEditorForm.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. using FastReport.Utils;
  2. using System;
  3. using System.Drawing;
  4. using System.IO;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. namespace FastReport.Forms
  8. {
  9. internal partial class JsonEditorForm : BaseDialogForm
  10. {
  11. #region Private Fields
  12. private bool textChanged;
  13. #endregion Private Fields
  14. #region Public Properties
  15. public string JsonText
  16. {
  17. get { return tbJson.Text; }
  18. set
  19. {
  20. tbJson.Text = value;
  21. textChanged = false;
  22. }
  23. }
  24. public void SetToReadOnly()
  25. {
  26. tbJson.ReadOnly = true;
  27. btnOpen.Enabled = false;
  28. btnFormat.Enabled = false;
  29. btnOk.Left = btnCancel.Left;
  30. btnOk.Top = btnCancel.Top;
  31. btnCancel.Visible = false;
  32. btnCancel.Enabled = false;
  33. MyRes res = new MyRes("Forms,JsonEditor");
  34. Text = res.Get("");
  35. if (tbJson.ReadOnly)
  36. {
  37. Text += " " + res.Get("Readonly");
  38. }
  39. }
  40. #endregion Public Properties
  41. #region Public Constructors
  42. public JsonEditorForm()
  43. {
  44. CanSaveRestoreState = true;
  45. InitializeComponent();
  46. Localize();
  47. UIUtils.CheckRTL(this);
  48. UpdateDpiDependencies();
  49. }
  50. #endregion Public Constructors
  51. #region Public Methods
  52. protected override void SaveState()
  53. {
  54. base.SaveState();
  55. Storage.SetBool("WordWrap", cbWordWrap.Checked);
  56. Storage.SetStr("Encoding", cbEnconding.SelectedItem is MyEncodingInfo info ? info.Name : Encoding.UTF8.WebName);
  57. }
  58. protected override void RestoreState()
  59. {
  60. base.RestoreState();
  61. cbWordWrap.Checked = Storage.GetBool("WordWrap");
  62. string encoding = Storage.GetStr("Encoding");
  63. int i = 0;
  64. foreach (object item in cbEnconding.Items)
  65. {
  66. if (item is MyEncodingInfo)
  67. if ((item as MyEncodingInfo).Name == encoding)
  68. {
  69. cbEnconding.SelectedIndex = i;
  70. break;
  71. }
  72. i++;
  73. }
  74. if (i >= cbEnconding.Items.Count)
  75. cbEnconding.SelectedIndex = 0;
  76. }
  77. public override void Localize()
  78. {
  79. base.Localize();
  80. MyRes res = new MyRes("Forms,TextEditor");
  81. cbWordWrap.Text = res.Get("WordWrap");
  82. res = new MyRes("Forms,JsonEditor");
  83. Text = res.Get("");
  84. if (tbJson.ReadOnly)
  85. {
  86. Text += " " + res.Get("Readonly");
  87. }
  88. btnOpen.Text = res.Get("Open");
  89. btnSave.Text = res.Get("Save");
  90. btnFormat.Text = res.Get("FormatJson");
  91. cbEnconding.Items.Clear();
  92. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF8));
  93. cbEnconding.SelectedIndex = 0;
  94. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.ASCII));
  95. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.Unicode));
  96. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.BigEndianUnicode));
  97. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF7));
  98. cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF32));
  99. cbEnconding.Items.Add("—————");
  100. foreach (MyEncodingInfo info in MyEncodingInfo.GetEncodings())
  101. {
  102. cbEnconding.Items.Add(info);
  103. }
  104. }
  105. public override void UpdateDpiDependencies()
  106. {
  107. base.UpdateDpiDependencies();
  108. btnOpen.Image = GetImage(1);
  109. btnSave.Image = GetImage(2);
  110. btnFormat.Image = GetImage(29);
  111. tbJson.Font = DrawUtils.FixedFont;
  112. MinimumSize = this.LogicalToDevice(new Size(320, 320));
  113. }
  114. #endregion Public Methods
  115. #region Private Methods
  116. private void BtnOpen_Click(object sender, EventArgs e)
  117. {
  118. OpenFileDialog ofd = new OpenFileDialog();
  119. ofd.Filter = Res.Get("Forms,JsonEditor,Filter");
  120. if (ofd.ShowDialog() == DialogResult.OK)
  121. {
  122. try
  123. {
  124. tbJson.Text = File.ReadAllText(ofd.FileName, Encoding.GetEncoding((cbEnconding.SelectedItem as MyEncodingInfo).Name));
  125. }
  126. catch (Exception ex)
  127. {
  128. ExceptionForm exceptionForm = new ExceptionForm(ex);
  129. exceptionForm.ShowDialog();
  130. }
  131. }
  132. }
  133. private void CbEnconding_SelectedIndexChanged(object sender, EventArgs e)
  134. {
  135. if (cbEnconding.SelectedIndex > 0 && !(cbEnconding.SelectedItem is MyEncodingInfo))
  136. {
  137. cbEnconding.SelectedIndex = 0;
  138. }
  139. }
  140. private void BtnSave_Click(object sender, EventArgs e)
  141. {
  142. SaveFileDialog sfd = new SaveFileDialog();
  143. sfd.Filter = Res.Get("Forms,JsonEditor,Filter");
  144. if (sfd.ShowDialog() == DialogResult.OK)
  145. {
  146. try
  147. {
  148. File.WriteAllText(sfd.FileName, tbJson.Text, Encoding.GetEncoding((cbEnconding.SelectedItem as MyEncodingInfo).Name));
  149. }
  150. catch (Exception ex)
  151. {
  152. ExceptionForm exceptionForm = new ExceptionForm(ex);
  153. exceptionForm.ShowDialog();
  154. }
  155. }
  156. }
  157. private void BtnFormat_Click(object sender, EventArgs e)
  158. {
  159. try
  160. {
  161. if (tbJson.Text.Trim().Length > 0)
  162. {
  163. JsonBase obj = JsonBase.FromString(tbJson.Text);
  164. StringBuilder sb = new StringBuilder();
  165. obj.WriteTo(sb, 2);
  166. tbJson.Text = sb.ToString();
  167. }
  168. }
  169. catch (Exception ex)
  170. {
  171. ExceptionForm exceptionForm = new ExceptionForm(ex);
  172. exceptionForm.ShowDialog();
  173. }
  174. }
  175. private void CbWordWrap_CheckedChanged(object sender, EventArgs e)
  176. {
  177. tbJson.WordWrap = cbWordWrap.Checked;
  178. }
  179. private void JsonEditorForm_FormClosing(object sender, FormClosingEventArgs e)
  180. {
  181. if (DialogResult != DialogResult.OK && DialogResult != DialogResult.Abort && textChanged)
  182. {
  183. string askText = Res.Get("Forms,TextEditor,ConfirmChanges");
  184. DialogResult askResult = FRMessageBox.Confirm(askText, MessageBoxButtons.YesNoCancel);
  185. switch (askResult)
  186. {
  187. case DialogResult.Yes:
  188. DialogResult = DialogResult.OK;
  189. break;
  190. case DialogResult.No:
  191. break;
  192. case DialogResult.Cancel:
  193. e.Cancel = true;
  194. break;
  195. }
  196. }
  197. }
  198. private void TbJson_TextChanged(object sender, EventArgs e)
  199. {
  200. textChanged = true;
  201. }
  202. private void JsonEditorForm_Shown(object sender, System.EventArgs e)
  203. {
  204. tbJson.Height = cbWordWrap.Top - tbJson.Top - 16;
  205. }
  206. #endregion Private Methods
  207. }
  208. }