MirMessageBox.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. using Client.MirGraphics;
  2. namespace Client.MirControls
  3. {
  4. public enum MirMessageBoxButtons { OK, OKCancel, YesNo, YesNoCancel, Cancel }
  5. public sealed class MirMessageBox : MirImageControl
  6. {
  7. public MirLabel Label;
  8. public MirButton OKButton, CancelButton, NoButton, YesButton;
  9. public MirMessageBoxButtons Buttons;
  10. public bool AllowKeyPress = true;
  11. public MirMessageBox(string message, MirMessageBoxButtons b = MirMessageBoxButtons.OK, bool allowKeys = true)
  12. {
  13. DrawImage = true;
  14. ForeColour = Color.White;
  15. Buttons = b;
  16. Modal = true;
  17. Movable = false;
  18. AllowKeyPress = allowKeys;
  19. Index = 360;
  20. Library = Libraries.Prguse;
  21. Location = new Point((Settings.ScreenWidth - Size.Width) / 2, (Settings.ScreenHeight - Size.Height) / 2);
  22. Label = new MirLabel
  23. {
  24. AutoSize = false,
  25. // DrawFormat = StringFormatFlags.FitBlackBox,
  26. Location = new Point(35, 35),
  27. Size = new Size(390, 110),
  28. Parent = this,
  29. Text = message
  30. };
  31. switch (Buttons)
  32. {
  33. case MirMessageBoxButtons.OK:
  34. OKButton = new MirButton
  35. {
  36. HoverIndex = 201,
  37. Index = 200,
  38. Library = Libraries.Title,
  39. Location = new Point(360, 157),
  40. Parent = this,
  41. PressedIndex = 202,
  42. };
  43. OKButton.Click += (o, e) => Dispose();
  44. break;
  45. case MirMessageBoxButtons.OKCancel:
  46. OKButton = new MirButton
  47. {
  48. HoverIndex = 201,
  49. Index = 200,
  50. Library = Libraries.Title,
  51. Location = new Point(260, 157),
  52. Parent = this,
  53. PressedIndex = 202,
  54. };
  55. OKButton.Click += (o, e) => Dispose();
  56. CancelButton = new MirButton
  57. {
  58. HoverIndex = 204,
  59. Index = 203,
  60. Library = Libraries.Title,
  61. Location = new Point(360, 157),
  62. Parent = this,
  63. PressedIndex = 205,
  64. };
  65. CancelButton.Click += (o, e) => Dispose();
  66. break;
  67. case MirMessageBoxButtons.YesNo:
  68. YesButton = new MirButton
  69. {
  70. HoverIndex = 207,
  71. Index = 206,
  72. Library = Libraries.Title,
  73. Location = new Point(260, 157),
  74. Parent = this,
  75. PressedIndex = 208,
  76. };
  77. YesButton.Click += (o, e) => Dispose();
  78. NoButton = new MirButton
  79. {
  80. HoverIndex = 211,
  81. Index = 210,
  82. Library = Libraries.Title,
  83. Location = new Point(360, 157),
  84. Parent = this,
  85. PressedIndex = 212,
  86. };
  87. NoButton.Click += (o, e) => Dispose();
  88. break;
  89. case MirMessageBoxButtons.YesNoCancel:
  90. YesButton = new MirButton
  91. {
  92. HoverIndex = 207,
  93. Index = 206,
  94. Library = Libraries.Title,
  95. Location = new Point(160, 157),
  96. Parent = this,
  97. PressedIndex = 208,
  98. };
  99. YesButton.Click += (o, e) => Dispose();
  100. NoButton = new MirButton
  101. {
  102. HoverIndex = 211,
  103. Index = 210,
  104. Library = Libraries.Title,
  105. Location = new Point(260, 157),
  106. Parent = this,
  107. PressedIndex = 212,
  108. };
  109. NoButton.Click += (o, e) => Dispose();
  110. CancelButton = new MirButton
  111. {
  112. HoverIndex = 204,
  113. Index = 203,
  114. Library = Libraries.Title,
  115. Location = new Point(360, 157),
  116. Parent = this,
  117. PressedIndex = 205,
  118. };
  119. CancelButton.Click += (o, e) => Dispose();
  120. break;
  121. case MirMessageBoxButtons.Cancel:
  122. CancelButton = new MirButton
  123. {
  124. HoverIndex = 204,
  125. Index = 203,
  126. Library = Libraries.Title,
  127. Location = new Point(360, 157),
  128. Parent = this,
  129. PressedIndex = 205,
  130. };
  131. CancelButton.Click += (o, e) => Dispose();
  132. break;
  133. }
  134. }
  135. public override void Show()
  136. {
  137. if (Parent != null) return;
  138. Parent = MirScene.ActiveScene;
  139. Highlight();
  140. for (int i = 0; i < Program.Form.Controls.Count; i++)
  141. {
  142. TextBox T = Program.Form.Controls[i] as TextBox;
  143. if (T != null && T.Tag != null && T.Tag != null)
  144. ((MirTextBox)T.Tag).DialogChanged();
  145. }
  146. }
  147. public override void OnKeyDown(KeyEventArgs e)
  148. {
  149. if (AllowKeyPress)
  150. {
  151. base.OnKeyDown(e);
  152. e.Handled = true;
  153. }
  154. }
  155. public override void OnKeyUp(KeyEventArgs e)
  156. {
  157. if (AllowKeyPress)
  158. {
  159. base.OnKeyUp(e);
  160. e.Handled = true;
  161. }
  162. }
  163. public override void OnKeyPress(KeyPressEventArgs e)
  164. {
  165. base.OnKeyPress(e);
  166. if (AllowKeyPress)
  167. {
  168. if (e.KeyChar == (char)Keys.Escape)
  169. {
  170. switch (Buttons)
  171. {
  172. case MirMessageBoxButtons.OK:
  173. if (OKButton != null && !OKButton.IsDisposed) OKButton.InvokeMouseClick(null);
  174. break;
  175. case MirMessageBoxButtons.OKCancel:
  176. case MirMessageBoxButtons.YesNoCancel:
  177. if (CancelButton != null && !CancelButton.IsDisposed) CancelButton.InvokeMouseClick(null);
  178. break;
  179. case MirMessageBoxButtons.YesNo:
  180. if (NoButton != null && !NoButton.IsDisposed) NoButton.InvokeMouseClick(null);
  181. break;
  182. }
  183. }
  184. else if (e.KeyChar == (char)Keys.Enter)
  185. {
  186. switch (Buttons)
  187. {
  188. case MirMessageBoxButtons.OK:
  189. case MirMessageBoxButtons.OKCancel:
  190. if (OKButton != null && !OKButton.IsDisposed) OKButton.InvokeMouseClick(null);
  191. break;
  192. case MirMessageBoxButtons.YesNoCancel:
  193. case MirMessageBoxButtons.YesNo:
  194. if (YesButton != null && !YesButton.IsDisposed) YesButton.InvokeMouseClick(null);
  195. break;
  196. }
  197. }
  198. e.Handled = true;
  199. }
  200. }
  201. public static void Show(string message, bool close = false)
  202. {
  203. MirMessageBox box = new MirMessageBox(message);
  204. if (close) box.OKButton.Click += (o, e) => Program.Form.Close();
  205. box.Show();
  206. }
  207. #region Disposable
  208. protected override void Dispose(bool disposing)
  209. {
  210. base.Dispose(disposing);
  211. if (!disposing) return;
  212. Label = null;
  213. OKButton = null;
  214. CancelButton = null;
  215. NoButton = null;
  216. YesButton = null;
  217. Buttons = 0;
  218. for (int i = 0; i < Program.Form.Controls.Count; i++)
  219. {
  220. TextBox T = (TextBox) Program.Form.Controls[i];
  221. if (T != null && T.Tag != null)
  222. ((MirTextBox) T.Tag).DialogChanged();
  223. }
  224. }
  225. #endregion
  226. }
  227. }