Guest User

Untitled

a guest
Oct 24th, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.17 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Specialized;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Drawing;
  7. using Ultima;
  8. using Expand;
  9. using System.Windows.Forms;
  10. using System.ComponentModel;
  11. using System.Reflection;
  12. using SpellCaster3.Core;
  13.  
  14. namespace SpellCaster3.Forms.Controls
  15. {
  16. [DefaultBindingProperty("Value")]
  17. public partial class HotkeyControl : UserControl, IInputOutput
  18. {
  19. private static StringCollection CustomAllowedKeys = new StringCollection();
  20.  
  21. private bool _Resetting;
  22.  
  23. static HotkeyControl()
  24. {
  25. CustomAllowedKeys.Add("Nessuna");
  26. foreach (Keys key in ButtonMacro.AllowedKeys.Keys)
  27. switch (key)
  28. {
  29. case Keys.Shift:
  30. case Keys.Control:
  31. case Keys.Alt:
  32. break;
  33. default:
  34. CustomAllowedKeys.Add(Enum.GetName(key.GetType(), key));
  35. break;
  36. }
  37. }
  38.  
  39. public HotkeyControl()
  40. {
  41. ValueChanged += new EventHandler(HotkeyControl_ValueChanged);
  42. _Resetting = true;
  43. InitializeComponent();
  44. keyComboBox.DataSource = CustomAllowedKeys;
  45. _Resetting = false;
  46. }
  47.  
  48. void HotkeyControl_ValueChanged(object sender, EventArgs e)
  49. {
  50. //MessageBox.Show("value");
  51. }
  52.  
  53. public bool Shift
  54. {
  55. get { return shiftCheckBox.Checked; }
  56. set
  57. {
  58. if (value != Shift)
  59. shiftCheckBox.Checked = value;
  60. }
  61. }
  62.  
  63. public bool Control
  64. {
  65. get { return controlCheckBox.Checked; }
  66. set
  67. {
  68. if (value != Control)
  69. controlCheckBox.Checked = value;
  70. }
  71. }
  72.  
  73. public bool Alt
  74. {
  75. get { return altCheckBox.Checked; }
  76. set
  77. {
  78. if (value != Alt)
  79. altCheckBox.Checked = value;
  80. }
  81. }
  82.  
  83. public Keys Key
  84. {
  85. get { return GetKeyFromComboBox(); }
  86. set
  87. {
  88. if (value != Key)
  89. SelectKeyComboBoxIndex(value);
  90. }
  91. }
  92.  
  93. private void SelectKeyComboBoxIndex(Keys key)
  94. {
  95. if (key == Keys.None)
  96. keyComboBox.SelectedIndex = 0;
  97. else
  98. {
  99. int res = keyComboBox.Items.IndexOf(Enum.GetName(key.GetType(), key));
  100. if (res > 0)
  101. keyComboBox.SelectedIndex = res;
  102. }
  103. }
  104.  
  105. private Keys GetKeyFromComboBox()
  106. {
  107. return keyComboBox.SelectedIndex == 0 ? Keys.None : (Keys)Enum.Parse(typeof(Keys), CustomAllowedKeys[keyComboBox.SelectedIndex]);
  108. }
  109.  
  110. public virtual void Reset()
  111. {
  112. _Resetting = true;
  113. shiftCheckBox.Checked = false;
  114. controlCheckBox.Checked = false;
  115. altCheckBox.Checked = false;
  116. SelectKeyComboBoxIndex(Keys.None);
  117. _Resetting = false;
  118. FireValueChanged();
  119. }
  120.  
  121. private void FireValueChanged()
  122. {
  123. if (_Resetting) return;
  124. OnValueChanged(this, EventArgs.Empty);
  125. OnIOValueChanged(this, new LastValueEventArgs<object>(_LastValue));
  126. }
  127.  
  128. private Keys _LastValue;
  129.  
  130. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  131. [Browsable(false)]
  132. [Bindable(true)]
  133. public Keys Value
  134. {
  135. get
  136. {
  137. Keys tmp = Keys.None;
  138. if (Shift)
  139. tmp |= Keys.Shift;
  140. if (Control)
  141. tmp |= Keys.Control;
  142. if (Alt)
  143. tmp |= Keys.Alt;
  144. tmp |= Key;
  145. return tmp;
  146. }
  147.  
  148. set
  149. {
  150. if (!ButtonMacro.ValidKeysCombo(value))
  151. throw new ArgumentException("value doesn't contain valid keys");
  152. _LastValue = Value;
  153.  
  154. bool res1, res2, res3;
  155. Keys key = value & ~(Keys.Shift | Keys.Control | Keys.Alt);
  156. res1 = value.HasFlag(Keys.Shift);
  157. res2 = value.HasFlag(Keys.Control);
  158. res3 = value.HasFlag(Keys.Alt);
  159.  
  160. _Resetting = true;
  161. shiftCheckBox.Checked = res1;
  162. controlCheckBox.Checked = res2;
  163. altCheckBox.Checked = res3;
  164. SelectKeyComboBoxIndex(key);
  165. _Resetting = false;
  166. FireValueChanged();
  167. }
  168. }
  169.  
  170. protected void OnValueChanged(object sender, EventArgs e)
  171. {
  172. if (ValueChanged != null) ValueChanged(sender, e);
  173. }
  174.  
  175. public event EventHandler ValueChanged;
  176.  
  177. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  178. [Browsable(false)]
  179. public object IOValue
  180. {
  181. get { return (object)Value; }
  182. set
  183. {
  184. Value = (Keys)value;
  185. }
  186. }
  187.  
  188. private void OnIOValueChanged(object sender, LastValueEventArgs<object> e)
  189. {
  190. if (IOValueChanged != null) IOValueChanged(this, e);
  191. }
  192.  
  193. public event EventHandler<LastValueEventArgs<object>> IOValueChanged;
  194.  
  195. private void shiftCheckBox_CheckedChanged(object sender, EventArgs e)
  196. {
  197. FireValueChanged();
  198. }
  199.  
  200. private void controlCheckBox_CheckedChanged(object sender, EventArgs e)
  201. {
  202. FireValueChanged();
  203. }
  204.  
  205. private void altCheckBox_CheckedChanged(object sender, EventArgs e)
  206. {
  207. FireValueChanged();
  208. }
  209.  
  210. private void keyComboBox_SelectedIndexChanged(object sender, EventArgs e)
  211. {
  212. FireValueChanged();
  213. }
  214. }
  215. }
Add Comment
Please, Sign In to add comment