private EventHandler RemoveRuleToStyleEventHandlerCreator(PatternToStyle value)
 {
     return(new EventHandler((object sender, EventArgs e) =>
     {
         var rowIndex = PatternCustomizerPackage.currentState.OrderedPatternToStyleMapping.IndexOf(value) + 1;
         PatternCustomizerPackage.currentState.OrderedPatternToStyleMapping.Remove(value);
         RemoveArbitraryRow(tableLayoutPanel1, rowIndex);
     }));
 }
        private void AddTableEntryButton_Click(object sender, EventArgs e)
        {
            var currentState = PatternCustomizerPackage.currentState;

            if (currentState.Formats.Any() && currentState.Rules.Any())
            {
                var newEntry = new PatternToStyle(0, 0);
                currentState.OrderedPatternToStyleMapping.Add(newEntry);
                AddNewRow(newEntry);
            }
            else
            {
                // add some msgbox to the user to add pattern and style
                throw new Exception("Can not create a rule without patterns and styles");
            }
        }
        private void AddNewRow(PatternToStyle selectedValue)
        {
            //increase panel rows count by one
            tableLayoutPanel1.RowCount++;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));

            // TODO: Add reorder buttons

            //add rule select box
            var patternOptions = new ComboBox();

            patternOptions.DropDownStyle = ComboBoxStyle.DropDownList;
            patternOptions.Anchor        = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
            tableLayoutPanel1.Controls.Add(patternOptions, patternColumnIndex, tableLayoutPanel1.RowCount - 2);
            patternOptions.DataSource     = PatternCustomizerPackage.currentState.Rules;
            patternOptions.BindingContext = new BindingContext();
            patternOptions.CreateControl();
            patternOptions.DataBindings.Add(new Binding("SelectedIndex", selectedValue, "RuleIndex", true, DataSourceUpdateMode.OnPropertyChanged));
            patternOptions.SelectedIndex = selectedValue.RuleIndex;

            //add style select box
            var styleOptions = new ComboBox();

            styleOptions.DropDownStyle = ComboBoxStyle.DropDownList;
            styleOptions.Anchor        = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
            tableLayoutPanel1.Controls.Add(styleOptions, styleColumnIndex, tableLayoutPanel1.RowCount - 2);
            styleOptions.DataSource     = PatternCustomizerPackage.currentState.Formats;
            styleOptions.BindingContext = new BindingContext();
            styleOptions.CreateControl();
            styleOptions.DataBindings.Add(new Binding("SelectedIndex", selectedValue, "FormatIndex", true, DataSourceUpdateMode.OnPropertyChanged));
            styleOptions.SelectedIndex = selectedValue.FormatIndex;

            //add delete button
            var deleteRulesToPatternBtn = new Button();

            deleteRulesToPatternBtn.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
            deleteRulesToPatternBtn.Name   = selectedValue.ToString();
            deleteRulesToPatternBtn.Text   = "Remove";
            deleteRulesToPatternBtn.UseVisualStyleBackColor = true;
            deleteRulesToPatternBtn.Click += RemoveRuleToStyleEventHandlerCreator(selectedValue);
            tableLayoutPanel1.Controls.Add(deleteRulesToPatternBtn, RemoveRuleToPatternColumnIndex, tableLayoutPanel1.RowCount - 2);
        }