TextToolbar.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. using FastReport.Utils;
  5. using FastReport.Controls;
  6. using FastReport.Design.PageDesigners.Page;
  7. #if !MONO
  8. using FastReport.DevComponents.DotNetBar;
  9. #endif
  10. namespace FastReport.Design.Toolbars
  11. {
  12. internal class TextToolbar : ToolbarBase
  13. {
  14. #region Fields
  15. #if !MONO
  16. public FontComboBoxItem cbxName;
  17. public FontSizeComboBoxItem cbxSize;
  18. public ButtonItem btnBold;
  19. public ButtonItem btnItalic;
  20. public ButtonItem btnUnderline;
  21. public ButtonItem btnLeft;
  22. public ButtonItem btnCenter;
  23. public ButtonItem btnRight;
  24. public ButtonItem btnJustify;
  25. public ButtonItem btnTop;
  26. public ButtonItem btnMiddle;
  27. public ButtonItem btnBottom;
  28. public ColorButtonItem btnColor;
  29. public ButtonItem btnHighlight;
  30. public ButtonItem btnAngle;
  31. #else
  32. public ToolStripFontComboBox cbxName;
  33. public ToolStripFontSizeComboBox cbxSize;
  34. public ToolStripButton btnBold;
  35. public ToolStripButton btnItalic;
  36. public ToolStripButton btnUnderline;
  37. public ToolStripButton btnLeft;
  38. public ToolStripButton btnCenter;
  39. public ToolStripButton btnRight;
  40. public ToolStripButton btnJustify;
  41. public ToolStripButton btnTop;
  42. public ToolStripButton btnMiddle;
  43. public ToolStripButton btnBottom;
  44. public ToolStripColorButton btnColor;
  45. public ToolStripButton btnHighlight;
  46. public ToolStripTextAngleButton btnAngle;
  47. #endif
  48. #endregion
  49. #region Private Methods
  50. private void UpdateControls()
  51. {
  52. bool enabled = Designer.SelectedTextObjects.Enabled;
  53. cbxName.Enabled = enabled;
  54. cbxSize.Enabled = enabled;
  55. btnBold.Enabled = enabled;
  56. btnItalic.Enabled = enabled;
  57. btnUnderline.Enabled = enabled;
  58. btnLeft.Enabled = enabled;
  59. btnCenter.Enabled = enabled;
  60. btnRight.Enabled = enabled;
  61. btnJustify.Enabled = enabled;
  62. btnTop.Enabled = enabled;
  63. btnMiddle.Enabled = enabled;
  64. btnBottom.Enabled = enabled;
  65. btnColor.Enabled = enabled;
  66. btnHighlight.Enabled = enabled;
  67. btnAngle.Enabled = enabled;
  68. if (enabled)
  69. {
  70. TextObject text = Designer.SelectedTextObjects.First;
  71. cbxName.FontName = text.Font.Name;
  72. cbxSize.FontSize = text.Font.Size;
  73. btnBold.Checked = text.Font.Bold;
  74. btnItalic.Checked = text.Font.Italic;
  75. btnUnderline.Checked = text.Font.Underline;
  76. btnLeft.Checked = text.HorzAlign == HorzAlign.Left;
  77. btnCenter.Checked = text.HorzAlign == HorzAlign.Center;
  78. btnRight.Checked = text.HorzAlign == HorzAlign.Right;
  79. btnJustify.Checked = text.HorzAlign == HorzAlign.Justify;
  80. btnTop.Checked = text.VertAlign == VertAlign.Top;
  81. btnMiddle.Checked = text.VertAlign == VertAlign.Center;
  82. btnBottom.Checked = text.VertAlign == VertAlign.Bottom;
  83. if (text.TextFill is SolidFill)
  84. btnColor.Color = (text.TextFill as SolidFill).Color;
  85. }
  86. else
  87. {
  88. #if MONO
  89. cbxName.Text = "";
  90. cbxSize.Text = "";
  91. #endif
  92. btnBold.Checked = false;
  93. btnItalic.Checked = false;
  94. btnUnderline.Checked = false;
  95. btnLeft.Checked = false;
  96. btnCenter.Checked = false;
  97. btnRight.Checked = false;
  98. btnJustify.Checked = false;
  99. btnTop.Checked = false;
  100. btnMiddle.Checked = false;
  101. btnBottom.Checked = false;
  102. }
  103. }
  104. private void cbxName_FontSelected(object sender, EventArgs e)
  105. {
  106. (Designer.ActiveReportTab.ActivePageDesigner as ReportPageDesigner).Workspace.Focus();
  107. Designer.SelectedTextObjects.SetFontName(cbxName.FontName);
  108. }
  109. private void cbxSize_SizeSelected(object sender, EventArgs e)
  110. {
  111. (Designer.ActiveReportTab.ActivePageDesigner as ReportPageDesigner).Workspace.Focus();
  112. Designer.SelectedTextObjects.SetFontSize(cbxSize.FontSize);
  113. }
  114. private void btnBold_Click(object sender, EventArgs e)
  115. {
  116. btnBold.Checked = !btnBold.Checked;
  117. Designer.SelectedTextObjects.ToggleFontStyle(FontStyle.Bold, btnBold.Checked);
  118. }
  119. private void btnItalic_Click(object sender, EventArgs e)
  120. {
  121. btnItalic.Checked = !btnItalic.Checked;
  122. Designer.SelectedTextObjects.ToggleFontStyle(FontStyle.Italic, btnItalic.Checked);
  123. }
  124. private void btnUnderline_Click(object sender, EventArgs e)
  125. {
  126. btnUnderline.Checked = !btnUnderline.Checked;
  127. Designer.SelectedTextObjects.ToggleFontStyle(FontStyle.Underline, btnUnderline.Checked);
  128. }
  129. private void btnLeft_Click(object sender, EventArgs e)
  130. {
  131. Designer.SelectedTextObjects.SetHAlign(HorzAlign.Left);
  132. }
  133. private void btnCenter_Click(object sender, EventArgs e)
  134. {
  135. Designer.SelectedTextObjects.SetHAlign(HorzAlign.Center);
  136. }
  137. private void btnRight_Click(object sender, EventArgs e)
  138. {
  139. Designer.SelectedTextObjects.SetHAlign(HorzAlign.Right);
  140. }
  141. private void btnJustify_Click(object sender, EventArgs e)
  142. {
  143. Designer.SelectedTextObjects.SetHAlign(HorzAlign.Justify);
  144. }
  145. private void btnTop_Click(object sender, EventArgs e)
  146. {
  147. Designer.SelectedTextObjects.SetVAlign(VertAlign.Top);
  148. }
  149. private void btnMiddle_Click(object sender, EventArgs e)
  150. {
  151. Designer.SelectedTextObjects.SetVAlign(VertAlign.Center);
  152. }
  153. private void btnBottom_Click(object sender, EventArgs e)
  154. {
  155. Designer.SelectedTextObjects.SetVAlign(VertAlign.Bottom);
  156. }
  157. private void btnColor_Click(object sender, EventArgs e)
  158. {
  159. Designer.SelectedTextObjects.SetTextColor(btnColor.DefaultColor);
  160. }
  161. private void btnHighlight_Click(object sender, EventArgs e)
  162. {
  163. Designer.SelectedTextObjects.InvokeHighlightEditor();
  164. }
  165. #if !MONO
  166. private void btnAngle_Click(object sender, EventArgs e)
  167. {
  168. AnglePopup popup = new AnglePopup(Designer.FindForm());
  169. popup.Angle = Designer.SelectedTextObjects.First.Angle;
  170. popup.AngleChanged += popup_AngleChanged;
  171. popup.Show(this, btnAngle.Bounds.Left, btnAngle.Bounds.Bottom);
  172. }
  173. private void popup_AngleChanged(object sender, EventArgs e)
  174. {
  175. Designer.SelectedTextObjects.SetAngle((sender as AnglePopup).Angle);
  176. }
  177. #else
  178. private void btnAngle_AngleChanged(object sender, EventArgs e)
  179. {
  180. Designer.SelectedTextObjects.SetAngle((sender as ToolStripTextAngleButton).Angle);
  181. }
  182. #endif
  183. #endregion
  184. #region Public Methods
  185. public override void SelectionChanged()
  186. {
  187. base.SelectionChanged();
  188. UpdateControls();
  189. }
  190. public override void UpdateContent()
  191. {
  192. base.UpdateContent();
  193. UpdateControls();
  194. }
  195. public override void SaveState()
  196. {
  197. XmlItem xi = Config.Root.FindItem("Designer").FindItem(Name);
  198. xi.SetProp("MruFonts", cbxName.MruFonts);
  199. }
  200. public override void RestoreState()
  201. {
  202. XmlItem xi = Config.Root.FindItem("Designer").FindItem(Name);
  203. cbxName.MruFonts = xi.GetProp("MruFonts");
  204. }
  205. public override void Localize()
  206. {
  207. base.Localize();
  208. MyRes res = new MyRes("Designer,Toolbar,Text");
  209. Text = res.Get("");
  210. SetItemText(cbxName, res.Get("Name"));
  211. SetItemText(cbxSize, res.Get("Size"));
  212. SetItemText(btnBold, res.Get("Bold"));
  213. SetItemText(btnItalic, res.Get("Italic"));
  214. SetItemText(btnUnderline, res.Get("Underline"));
  215. SetItemText(btnLeft, res.Get("Left"));
  216. SetItemText(btnCenter, res.Get("Center"));
  217. SetItemText(btnRight, res.Get("Right"));
  218. SetItemText(btnJustify, res.Get("Justify"));
  219. SetItemText(btnTop, res.Get("Top"));
  220. SetItemText(btnMiddle, res.Get("Middle"));
  221. SetItemText(btnBottom, res.Get("Bottom"));
  222. SetItemText(btnColor, res.Get("Color"));
  223. SetItemText(btnHighlight, res.Get("Highlight"));
  224. SetItemText(btnAngle, res.Get("Angle"));
  225. }
  226. public override void UpdateUIStyle()
  227. {
  228. base.UpdateUIStyle();
  229. btnColor.SetStyle(Designer.UIStyle);
  230. #if !MONO
  231. Color controlColor = UIStyleUtils.GetControlColor(Designer.UIStyle);
  232. cbxName.ComboBoxEx.DisabledBackColor = controlColor;
  233. cbxSize.ComboBoxEx.DisabledBackColor = controlColor;
  234. #endif
  235. }
  236. #endregion
  237. public override void UpdateDpiDependencies()
  238. {
  239. base.UpdateDpiDependencies();
  240. #if !MONO
  241. cbxName.Owner = Designer;
  242. cbxName.UpdateDpiDependencies();
  243. cbxSize.ComboWidth = Designer.LogicalToDevice(50);
  244. cbxSize.ItemHeight = Designer.LogicalToDevice(14);
  245. cbxSize.DropDownHeight = Designer.LogicalToDevice(300);
  246. #else
  247. cbxName.Width = 140;
  248. cbxName.UpdateDpiDependencies();
  249. cbxSize.Width = 45;
  250. cbxSize.DropDownHeight = 300;
  251. #endif
  252. }
  253. public TextToolbar(Designer designer)
  254. : base(designer)
  255. {
  256. Name = "TextToolbar";
  257. #if !MONO
  258. cbxName = new FontComboBoxItem();
  259. cbxName.Name = "cbxTextName";
  260. cbxName.FontSelected += cbxName_FontSelected;
  261. cbxSize = new FontSizeComboBoxItem();
  262. cbxSize.Name = "cbxTextSize";
  263. cbxSize.SizeSelected += cbxSize_SizeSelected;
  264. btnBold = CreateButton("btnTextBold", 20, btnBold_Click);
  265. btnItalic = CreateButton("btnTextItalic", 21, btnItalic_Click);
  266. btnUnderline = CreateButton("btnTextUnderline", 22, btnUnderline_Click);
  267. btnLeft = CreateButton("btnTextLeft", 25, btnLeft_Click);
  268. btnLeft.BeginGroup = true;
  269. btnCenter = CreateButton("btnTextCenter", 26, btnCenter_Click);
  270. btnRight = CreateButton("btnTextRight", 27, btnRight_Click);
  271. btnJustify = CreateButton("btnTextJustify", 28, btnJustify_Click);
  272. btnTop = CreateButton("btnTextTop", 29, btnTop_Click);
  273. btnTop.BeginGroup = true;
  274. btnMiddle = CreateButton("btnTextMiddle", 30, btnMiddle_Click);
  275. btnBottom = CreateButton("btnTextBottom", 31, btnBottom_Click);
  276. btnColor = new ColorButtonItem(23, Color.Black);
  277. btnColor.BeginGroup = true;
  278. btnColor.Name = "btnTextColor";
  279. btnColor.Click += btnColor_Click;
  280. btnHighlight = CreateButton("btnTextHighlight", 24, btnHighlight_Click);
  281. btnAngle = CreateButton("btnTextAngle", 64, btnAngle_Click);
  282. Items.AddRange(new BaseItem[] {
  283. cbxName, cbxSize, btnBold, btnItalic, btnUnderline,
  284. btnLeft, btnCenter, btnRight, btnJustify,
  285. btnTop, btnMiddle, btnBottom,
  286. btnColor, btnHighlight, btnAngle, CustomizeItem });
  287. #else
  288. cbxName = new ToolStripFontComboBox();
  289. cbxName.Owner = this;
  290. cbxName.Name = "cbxTextName";
  291. cbxName.AutoSize = false;
  292. cbxName.Width = 140;
  293. cbxName.FontSelected += cbxName_FontSelected;
  294. cbxSize = new ToolStripFontSizeComboBox();
  295. cbxSize.Name = "cbxTextSize";
  296. cbxSize.AutoSize = false;
  297. cbxSize.Width = 45;
  298. cbxSize.SizeSelected += cbxSize_SizeSelected;
  299. btnBold = CreateButton("btnTextBold", 20, btnBold_Click);
  300. btnItalic = CreateButton("btnTextItalic", 21, btnItalic_Click);
  301. btnUnderline = CreateButton("btnTextUnderline", 22, btnUnderline_Click);
  302. btnLeft = CreateButton("btnTextLeft", 25, btnLeft_Click);
  303. btnCenter = CreateButton("btnTextCenter", 26, btnCenter_Click);
  304. btnRight = CreateButton("btnTextRight", 27, btnRight_Click);
  305. btnJustify = CreateButton("btnTextJustify", 28, btnJustify_Click);
  306. btnTop = CreateButton("btnTextTop", 29, btnTop_Click);
  307. btnMiddle = CreateButton("btnTextMiddle", 30, btnMiddle_Click);
  308. btnBottom = CreateButton("btnTextBottom", 31, btnBottom_Click);
  309. btnColor = new ToolStripColorButton(23, Color.Black);
  310. btnColor.Name = "btnTextColor";
  311. btnColor.ButtonClick += btnColor_Click;
  312. btnHighlight = CreateButton("btnTextHighlight", 24, btnHighlight_Click);
  313. btnAngle = new ToolStripTextAngleButton();
  314. btnAngle.Name = "btnTextAngle";
  315. btnAngle.Image = this.GetImage(64);
  316. btnAngle.AngleChanged += btnAngle_AngleChanged;
  317. Items.AddRange(new ToolStripItem[] {
  318. cbxName, cbxSize, btnBold, btnItalic, btnUnderline, new ToolStripSeparator(),
  319. btnLeft, btnCenter, btnRight, btnJustify, new ToolStripSeparator(),
  320. btnTop, btnMiddle, btnBottom, new ToolStripSeparator(),
  321. btnColor, btnHighlight, btnAngle });
  322. #endif
  323. Localize();
  324. UpdateDpiDependencies();
  325. }
  326. }
  327. }