context: using System.Collections;
  using System.ComponentModel;
  using System.ComponentModel.Design;
  using System.Drawing.Design;
  using System.Windows.Forms;
  
  namespace WizardBase
  {
      internal class WizardDesignerActionList : DesignerActionList
      {
          public WizardDesignerActionList(IComponent component) : base(component)
          {
          }
  
          protected internal virtual void AddFinishStep()
          {
              IDesignerHost service = (IDesignerHost)GetService(typeof(IDesignerHost));
              if (WizardControl == null || service == null)
              {
                  return;
              }
              FinishStep step = (FinishStep) service.CreateComponent(typeof (FinishStep));
              if (WizardControl.WizardSteps.Count != 0)
              {
                  WizardControl.WizardSteps.Insert(WizardControl.CurrentStepIndex, step);
                  RemoveWizardFromSelection();
                  SelectWizard();
                  return;
              }
              WizardControl.WizardSteps.Add(step);
              RemoveWizardFromSelection();
              SelectWizard();
          }
  
          protected internal virtual void AddCustomStep()
          {
              IDesignerHost service = (IDesignerHost)GetService(typeof(IDesignerHost));
              if (WizardControl == null || service == null)
              {
                  return;
              }
              IntermediateStep step = (IntermediateStep) service.CreateComponent(typeof (IntermediateStep));
              if (WizardControl.WizardSteps.Count != 0)
              {
                  WizardControl.WizardSteps.Insert(WizardControl.CurrentStepIndex, step);
                  RemoveWizardFromSelection();
                  SelectWizard();
              }
              else
              {
                  WizardControl.WizardSteps.Add(step);
                  RemoveWizardFromSelection();
                  SelectWizard();
              }
          }
  
          protected internal virtual void AddStartStep()
          {
              IDesignerHost service = (IDesignerHost)GetService(typeof(IDesignerHost));
              if (WizardControl == null || service == null)
              {
                  return;
              }
              StartStep step = (StartStep) service.CreateComponent(typeof (StartStep));
              if (WizardControl.WizardSteps.Count != 0)
              {
                  WizardControl.WizardSteps.Insert(WizardControl.CurrentStepIndex, step);
                  RemoveWizardFromSelection();
                  SelectWizard();
                  return;
              }
              else
              {
                  WizardControl.WizardSteps.Add(step);
                  RemoveWizardFromSelection();
                  SelectWizard();
                  return;
              }
          }
  
          public override DesignerActionItemCollection GetSortedActionItems()
          {
              if (WizardControl == null)
              {
                  return new DesignerActionItemCollection();
              }
              if (WizardControl.CurrentStepIndex != -1)
              {
                  DesignerActionItemCollection items = new DesignerActionItemCollection();
                  items.Add(new DesignerActionHeaderItem("Add Steps"));
                  items.Add(new DesignerActionPropertyItem("WizardSteps", "New Wizard Step", "Add Steps"));
                  items.Add(new DesignerActionMethodItem(this, "AddStartStep", "Add Start Step", "Add Steps", true));
                  items.Add(new DesignerActionMethodItem(this, "AddCustomStep", "Add Custom Step", "Add Steps", true));
                  items.Add(new DesignerActionMethodItem(this, "AddFinishStep", "Add Finish Step", "Add Steps", true));
                  if (WizardControl.CurrentStepIndex == -1)
                  {
                      return items;
                  }
                  items.Add(new DesignerActionHeaderItem("Remove Step"));
                  items.Add(new DesignerActionMethodItem(this, "RemoveStep", "Remove Step", "Remove Step", true));
                  items.Add(new DesignerActionMethodItem(this, "RemoveAllSteps", "Remove All Steps", "Remove Step", true));
                  if (WizardControl.WizardSteps.Count >= 1)
                  {
                      items.Add(new DesignerActionHeaderItem("Step navigation"));
                      if (WizardControl.CurrentStepIndex > 0)
                      {
                          items.Add(new DesignerActionMethodItem(this, "PreviousStep", "Previous Step", "Step navigation", true));
                      }
                      if (WizardControl.CurrentStepIndex != (WizardControl.WizardSteps.Count - 1))
                      {
                          items.Add(new DesignerActionMethodItem(this, "NextStep", "Next Step", "Step navigation", true));
                      }
                  }
                  items.Add(new DesignerActionHeaderItem("Layout"));
                  items.Add(new DesignerActionPropertyItem("DockStyle", "Dock editor", "Layout"));
                  return items;
              }
              return new DesignerActionItemCollection();
          }
  
          protected internal virtual void NextStep()
          {
              if (WizardControl == null)
              {
                  return;
              }
              WizardControl.CurrentStepIndex++;
              RemoveWizardFromSelection();
              SelectWizard();
          }
  
          protected internal virtual void PreviousStep()
          {
              WizardControl wizardControl = WizardControl;
              if (wizardControl == null)
              {
                  return;
              }
              wizardControl.CurrentStepIndex--;
              RemoveWizardFromSelection();
              SelectWizard();
          }
  
          protected internal virtual void RemoveAllSteps()
          {
              IDesignerHost service = (IDesignerHost)GetService(typeof(IDesignerHost));
              if (WizardControl == null || service == null)
              {
                  return;
              }
              if (MessageBox.Show(WizardControl.FindForm(), "Are you sure you want to remove all the steps?", "Remove Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
              {
                  return;
              }
              WizardStep[] array = new WizardStep[WizardControl.WizardSteps.Count];
              ((ICollection)WizardControl.WizardSteps).CopyTo(array, 0);
              WizardControl.WizardSteps.Clear();
              WizardStep[] stepArray2 = array;
              for (int index = 0; index < stepArray2.Length; index++)
              {
                  WizardStep component = stepArray2[index];
                  service.DestroyComponent(component);
                  index++;
              }
              SelectWizard();
          }
  
          protected internal virtual void RemoveStep()
          {
              IDesignerHost service = (IDesignerHost)GetService(typeof(IDesignerHost));
              if (WizardControl == null || service == null)
              {
                  return;
              }
              if (MessageBox.Show(WizardControl.FindForm(), "Are you sure you want to remove the step?", "Remove Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
              {
                  WizardStep step = WizardControl.WizardSteps[WizardControl.CurrentStepIndex];
                  WizardControl.WizardSteps.Remove(step);
                  service.DestroyComponent(step);
                  step.Dispose();
              }
              SelectWizard();
          }
  
          protected void RemoveWizardFromSelection()
          {
              ISelectionService service = (ISelectionService)GetService(typeof(ISelectionService));
              if (WizardControl == null || service == null)
              {
                  return;
              }
              object[] components = new object[] { WizardControl };
              service.SetSelectedComponents(components, SelectionTypes.Remove);
              return;
          }
  
          protected void SelectWizard()
          {
              ISelectionService service = (ISelectionService)GetService(typeof(ISelectionService));
              if (WizardControl == null || service == null)
              {
                  return;
              }
              object[] components = new object[] {WizardControl};
              service.SetSelectedComponents(components, SelectionTypes.Replace);
              return;
          }
  
          protected virtual WizardControl WizardControl
          {
              get { return (WizardControl) Component; }
          }
  
          [TypeConverter(typeof(GenericCollectionConverter<GenericCollection<WizardStep>>)), Editor(typeof(WizardStepCollectionEditor), typeof(UITypeEditor))]
          public GenericCollection<WizardStep> WizardSteps
          {
              get
              {
                  if (WizardControl == null)
                  {
                      return null;
                  }
                  return WizardControl.WizardSteps;
              }
          }
  
          public virtual DockStyle DockStyle
          {
              get { return WizardControl.Dock; }
              set
              {
  
gt:                 if (WizardControl.Dock != value)