public AddNewAbilityChainForm(AbilityChain abilityChain)
        {
            InitializeComponent();

            HotKey = Keys.None;
            ChainedAbilities = new List<ChainedAbility>();
            modifierKeyComboBox.SelectedIndex = 0;

            if (abilityChain == null) return;
            abilityChainNameTextBox.Text = abilityChain.Name;

            HotKey = abilityChain.HotKey;
            hotKeyTriggerSetKeyButton.Text = HotKey.ToString();
            hotKeyTriggerSetKeyButton.ForeColor = Color.Green;

            ModifierKey = abilityChain.ModiferKey;

            modifierKeyComboBox.SelectedIndex = ConvertModifierKeyToComboBoxIndex(abilityChain.ModiferKey);

            foreach (var chainedAbility in abilityChain.ChainedAbilities)
            {
                var abilityItem = new ListViewItem(chainedAbility.ToString());
                abilityItem.SubItems.Add(chainedAbility.TargetType == TargetType.Me ? "Me" : "My Current Target");
                abilityItem.SubItems.Add(chainedAbility.MustBeReady ? "Yes" : "No");

                abilityItem.Tag = chainedAbility;

                abilitiesListView.Items.Add(abilityItem);
            }
        }
        private void AddAbilityChainToListView(AbilityChain abilityChain)
        {
            var abilitiesStr = abilityChain.ChainedAbilities.Aggregate(string.Empty,
                (current, ability) =>
                    current +
                    (abilityChain.ChainedAbilities.Last() == ability
                        ? ability.FriendlyName
                        : ability.FriendlyName + "; "));

            var lvItem = new ListViewItem(abilityChain.Name);
            lvItem.SubItems.Add(Properties.Resources.AbilityChainsControl_editItemToolStripMenuItem_Click_Feral);
            lvItem.SubItems.Add(string.Format("{0} + {1}", abilityChain.ModiferKey, abilityChain.HotKey));
            lvItem.SubItems.Add(abilitiesStr);
            lvItem.Tag = abilityChain;

            abilityChainsListView.Items.Add(lvItem);
        }
        private void abilityChainsAddNewAbilityChainButton_Click(object sender, EventArgs e)
        {
            var newForm = new AddNewAbilityChainForm(null);

            if (newForm.ShowDialog() != DialogResult.OK) return;
            var abilityChain = new AbilityChain
            {
                Name = newForm.abilityChainNameTextBox.Text,
                Specialization = WoWSpec.DruidFeral,
                HotKey = newForm.HotKey,
                ModiferKey = newForm.ModifierKey,
                ChainedAbilities = newForm.ChainedAbilities
            };


            AddAbilityChainToListView(abilityChain);
        }
        private void editItemToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (abilityChainsListView.SelectedItems.Count <= 0) return;
            var lvItem = abilityChainsListView.SelectedItems[0];

            var editForm = new AddNewAbilityChainForm(lvItem.Tag as AbilityChain);

            if (editForm.ShowDialog() != DialogResult.OK) return;
            var abilityChain = new AbilityChain
            {
                Name = editForm.abilityChainNameTextBox.Text,
                Specialization = WoWSpec.DruidFeral,
                HotKey = editForm.HotKey,
                ModiferKey = editForm.ModifierKey,
                ChainedAbilities = editForm.ChainedAbilities
            };


            var abilitiesStr = abilityChain.ChainedAbilities.Aggregate(string.Empty,
                (current, ability) =>
                    current +
                    (abilityChain.ChainedAbilities.Last() == ability
                        ? ability.FriendlyName
                        : ability.FriendlyName + "; "));

            lvItem.Text = editForm.abilityChainNameTextBox.Text;
            lvItem.SubItems[1].Text = Properties.Resources.AbilityChainsControl_editItemToolStripMenuItem_Click_Feral;
            lvItem.SubItems[2].Text = string.Format("{0} + {1}", abilityChain.ModiferKey, abilityChain.HotKey);
            lvItem.SubItems[3].Text = abilitiesStr;
            lvItem.Tag = abilityChain;
        }