MirButton.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. using Client.MirSounds;
  2. namespace Client.MirControls
  3. {
  4. public class MirButton : MirImageControl
  5. {
  6. #region Font Colour
  7. public virtual Color FontColour
  8. {
  9. get
  10. {
  11. if (_label != null && !_label.IsDisposed)
  12. return _label.ForeColour;
  13. return Color.Empty;
  14. }
  15. set
  16. {
  17. if (_label != null && !_label.IsDisposed)
  18. _label.ForeColour = value;
  19. }
  20. }
  21. #endregion
  22. #region Hover Index
  23. private int _hoverIndex;
  24. public int HoverIndex
  25. {
  26. get { return _hoverIndex; }
  27. set
  28. {
  29. if (_hoverIndex == value)
  30. return;
  31. _hoverIndex = value;
  32. OnHoverIndexChanged();
  33. }
  34. }
  35. public event EventHandler HoverIndexChanged;
  36. private void OnHoverIndexChanged()
  37. {
  38. if (HoverIndexChanged != null)
  39. HoverIndexChanged.Invoke(this, EventArgs.Empty);
  40. }
  41. #endregion
  42. #region Index
  43. public override int Index
  44. {
  45. get
  46. {
  47. if (!Enabled)
  48. return _disabledIndex >= 0 ? _disabledIndex : base.Index;
  49. if (_pressedIndex >= 0 && ActiveControl == this && MouseControl == this)
  50. return _pressedIndex;
  51. if (_hoverIndex >= 0 && MouseControl == this)
  52. return _hoverIndex;
  53. return base.Index;
  54. }
  55. set { base.Index = value; }
  56. }
  57. #endregion
  58. #region Label
  59. protected MirLabel _label;
  60. #endregion
  61. #region CenterText
  62. protected bool _center;
  63. public virtual bool CenterText
  64. {
  65. get
  66. {
  67. return _center;
  68. }
  69. set
  70. {
  71. _center = value;
  72. if (_center)
  73. {
  74. _label.Size = Size;
  75. _label.DrawFormat = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
  76. }
  77. else
  78. _label.AutoSize = true;
  79. }
  80. }
  81. #endregion
  82. #region Pressed Index
  83. private int _pressedIndex;
  84. public int PressedIndex
  85. {
  86. set
  87. {
  88. if (_pressedIndex == value)
  89. return;
  90. _pressedIndex = value;
  91. OnPressedIndexChanged();
  92. }
  93. get { return _pressedIndex; }
  94. }
  95. public event EventHandler PressedIndexChanged;
  96. private void OnPressedIndexChanged()
  97. {
  98. if (PressedIndexChanged != null)
  99. PressedIndexChanged.Invoke(this, EventArgs.Empty);
  100. }
  101. #endregion
  102. #region Disabled Index
  103. private int _disabledIndex;
  104. public int DisabledIndex
  105. {
  106. set
  107. {
  108. if (_disabledIndex == value)
  109. return;
  110. _disabledIndex = value;
  111. OnDisabledIndexChanged();
  112. }
  113. get { return _disabledIndex; }
  114. }
  115. public event EventHandler DisabledIndexChanged;
  116. private void OnDisabledIndexChanged()
  117. {
  118. if (DisabledIndexChanged != null)
  119. DisabledIndexChanged.Invoke(this, EventArgs.Empty);
  120. }
  121. #endregion
  122. #region Size
  123. protected override void OnSizeChanged()
  124. {
  125. base.OnSizeChanged();
  126. if (_label != null && !_label.IsDisposed)
  127. _label.Size = Size;
  128. }
  129. #endregion
  130. #region Text
  131. public virtual string Text
  132. {
  133. set
  134. {
  135. if (_label == null || _label.IsDisposed)
  136. return;
  137. _label.Text = value;
  138. _label.Visible = !string.IsNullOrEmpty(value);
  139. }
  140. }
  141. #endregion
  142. public bool OnlyDrawWhenActive;
  143. public MirButton()
  144. {
  145. HoverIndex = -1;
  146. PressedIndex = -1;
  147. DisabledIndex = -1;
  148. Sound = SoundList.ButtonB;
  149. _label = new MirLabel
  150. {
  151. NotControl = true,
  152. Parent = this,
  153. //Font = new Font("Constantia", 8, FontStyle.Italic),
  154. //OutLine = true,
  155. //OutLineColour = Color.FromArgb(255, 70, 50, 30),
  156. };
  157. }
  158. protected internal override void DrawControl()
  159. {
  160. if (OnlyDrawWhenActive && ActiveControl != this && MouseControl != this)
  161. return;
  162. base.DrawControl();
  163. }
  164. protected override void Highlight()
  165. {
  166. Redraw();
  167. base.Highlight();
  168. }
  169. protected override void Activate()
  170. {
  171. Redraw();
  172. base.Activate();
  173. }
  174. protected override void Dehighlight()
  175. {
  176. Redraw();
  177. base.Dehighlight();
  178. }
  179. protected override void Deactivate()
  180. {
  181. Redraw();
  182. base.Deactivate();
  183. }
  184. #region Disposable
  185. protected override void Dispose(bool disposing)
  186. {
  187. base.Dispose(disposing);
  188. if (!disposing) return;
  189. HoverIndexChanged = null;
  190. _hoverIndex = 0;
  191. if (_label != null && !_label.IsDisposed)
  192. _label.Dispose();
  193. _label = null;
  194. PressedIndexChanged = null;
  195. _pressedIndex = 0;
  196. DisabledIndexChanged = null;
  197. _disabledIndex = 0;
  198. }
  199. #endregion
  200. }
  201. }