SHARE
TWEET

Untitled

a guest Oct 24th, 2017 135 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Top