/// <summary>Delete a collection of SiteCollection or Web Features forcefully in one site</summary>
 /// <param name="manager"></param>
 /// <param name="checkedListItems"></param>
 private int DeleteSelectedFeatures(FeatureManager manager, CheckedListBox.CheckedItemCollection checkedListItems)
 {
     int removedFeatures = 0;
     foreach (Feature checkedFeature in checkedListItems)
     {
         manager.ForceRemoveFeature(checkedFeature.Id);
         removedFeatures++;
     }
     return removedFeatures;
 }
 /// <summary>Uninstall a collection of Farm Feature Definitions forcefully</summary>
 /// <param name="manager"></param>
 /// <param name="checkedListItems"></param>
 private void UninstallSelectedFeatureDefinitions(FeatureManager manager, CheckedListBox.CheckedItemCollection checkedListItems)
 {
     foreach (Feature checkedFeature in checkedListItems)
     {
         manager.ForceUninstallFeatureDefinition(checkedFeature.Id, checkedFeature.CompatibilityLevel);
     }
 }
        /// <summary>Used to populate the list of Farm Feature Definitions</summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLoadFDefs_Click(object sender, EventArgs e)
        {
            using (WaitCursor wait = new WaitCursor())
            {
                this.clbFeatureDefinitions.Items.Clear();

                farmFeatureDefinitionsManager = new FeatureManager("Farm FeatureDefinitions");
                farmFeatureDefinitionsManager.AddFeatures(SPFarm.Local.FeatureDefinitions);
                farmFeatureDefinitionsManager.Features.Sort();

                // Display any errors enumerating exceptions
                foreach (Feature feature in farmFeatureDefinitionsManager.Features)
                {
                    if (!string.IsNullOrEmpty(feature.ExceptionMsg))
                    {
                        logDateMsg("Exception reading feature " + feature.Id + ": " + feature.ExceptionMsg);
                    }
                }

                //clbFeatureDefinitions.
                this.clbFeatureDefinitions.Items.AddRange(farmFeatureDefinitionsManager.Features.ToArray());
                string featlist = BuildFeatureLog(farmFeatureDefinitionsManager.Url, farmFeatureDefinitionsManager.Features);
                logTxt(featlist);

                logDateMsg("Feature Definition list updated.");
            }
            // tabControl1.Enabled = false;
            // tabControl1.Visible = false;
            // listFeatures.Items.Clear();
            // listDetails.Items.Clear();
        }
        /// <summary>gets all the features from the selected Web Site and Site Collection</summary>
        private void getFeatures()
        {
            using (WaitCursor wait = new WaitCursor())
            {
                ClearLog();
                clbSPSiteFeatures.Items.Clear();
                clbSPWebFeatures.Items.Clear();

                //using (SPSite site = new SPSite(txtUrl.Text))
                using (SPSite site = m_CurrentSite)
                {
                    siteFeatureManager = new FeatureManager(site.Url);
                    siteFeatureManager.AddFeatures(site.Features, SPFeatureScope.Site);

                    //using (SPWeb web = site.OpenWeb())
                    using (SPWeb web = m_CurrentWeb)
                    {
                        webFeatureManager = new FeatureManager(web.Url);
                        webFeatureManager.AddFeatures(web.Features, SPFeatureScope.Web);
                    }
                }

                // sort the features list
                siteFeatureManager.Features.Sort();
                clbSPSiteFeatures.Items.AddRange(siteFeatureManager.Features.ToArray());
                string featlist = BuildFeatureLog(siteFeatureManager.Url, siteFeatureManager.Features);
                logTxt(featlist);

                // sort the features list
                webFeatureManager.Features.Sort();
                clbSPWebFeatures.Items.AddRange(webFeatureManager.Features.ToArray());
                featlist = BuildFeatureLog(webFeatureManager.Url, webFeatureManager.Features);
                logTxt(featlist);

                // enables the removal buttons
                // removeBtnEnabled(true);
            }
            // commented out, was too annoying
            // MessageBox.Show("Done.");
            logDateMsg("Feature list updated.");
        }