应用程序:PerformanceAdviserControl

Revit平台:所有

Revit版本:2012.0

首次发布于:2012.0

编程语言:C#

技能水平:初级

类别:元素

类型:ExternalCommandExternalApplication

主题:查看、选择和运行PerformanceAdviser规则。

概要:

该程序演示了如何使用PerformanceAdviser类和相关API

类:

Autodesk.Revit.DB.IPerformanceAdviserRule

Autodesk.Revit.DB.PerformanceAdviser

项目文件:

Application.cs //主要的IExternalApplication实现

UICommand.cs //主要的IExternalCommand实现

FlippedDoorCheck.cs //IPerformanceAdviserRule派生的示例实现

RuleInfo.cs //用于收集规则信息的辅助类

TestDisplayDialog.cs //用于与PerformanceAdviser一起工作的UI

描述:

该示例演示了如何使用PerformanceAdviser API,这是一个允许用户选择在活动文档的元素上运行某些性能和标准测试的类。它还演示了如何创建自定义API规则并将其注册到PerformanceAdviser中。

说明:

1. 打开附带的文档DoorsAndWalls.rvt

2. 运行外部命令Performance Adviser

3. 选择对话框中显示的Flipped Door Check测试。这是在FlippedDoorCheck.cs中实现的API定义测试。

4. 单击运行所选测试,并检查结果,特别注意在FlippedDoorCheck.cs中使用GetElementFilter()和ExecuteElementCheck()。

5. 再次运行外部命令Performance Adviser。这次,选中Overlapping walls测试。运行此测试,并注意模型中发现的两堵重叠的墙壁。

源代码

完整的源代码请加入QQ群649037449,在群文件中下载RevitSDK.exe,解压后在文件夹中搜索本文中应用程序名称即可获得完整源码

Application.cs

//
// (C) Copyright 2003-2019 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.UI;
using System.Windows.Media.Imaging;
using Autodesk.Revit.DB;


namespace Revit.SDK.Samples.PerformanceAdviserControl.CS
{
   /// <summary>
   /// Implements the Revit add-in interface IExternalApplication,
   /// </summary>
    public class Application : Autodesk.Revit.UI.IExternalApplication
    {
         #region Constructor
       /// <summary>
       /// Basic construction
       /// </summary>
        public Application()
        {

            
        }
#endregion

         #region IExternalApplication implementation
        /// <summary>
        /// Implement this method to implement the external application which should be called when 
        /// Revit starts before a file or default template is actually loaded.
        /// </summary>
        /// <param name="application">An object that is passed to the external application 
        /// which contains the controlled application.</param>
        /// <returns>Return the status of the external application. 
        /// A result of Succeeded means that the external application successfully started. 
        /// 
        /// Cancelled can be used to signify that the user cancelled the external operation at 
        /// some point.
        /// 
        /// If Failed is returned then Revit should inform the user that the external application 
        /// failed to load and the release the internal reference.
        /// 
        /// This method also adds a ribbon panel and button to launch an IExternalCommand
        /// defined in UICommand.cs.  It also registers a new IPerformanceAdviserRule-implementing class
        /// (m_FlippedDoorApiRule) with PerformanceAdviser.
        /// 
        /// </returns>
        public Autodesk.Revit.UI.Result OnStartup(Autodesk.Revit.UI.UIControlledApplication application)
        {
           #region Add command button
           RibbonPanel rp = application.CreateRibbonPanel("PerformanceAdviserControl");
           string currentAssembly = System.Reflection.Assembly.GetAssembly(this.GetType()).Location;
           PushButton pb = rp.AddItem(new PushButtonData("Performance Adviser", "Performance Adviser", currentAssembly, "Revit.SDK.Samples.PerformanceAdviserControl.CS.UICommand")) as PushButton;
           Uri uriImage = new Uri(System.IO.Path.GetDirectoryName(currentAssembly) + "\\Button32.png");
           BitmapImage largeImage = new BitmapImage(uriImage);
           pb.LargeImage = largeImage;
           #endregion

           #region Create and register new API rule (FlippedDoorCheck)
           m_FlippedDoorApiRule = new FlippedDoorCheck();
           Autodesk.Revit.DB.PerformanceAdviser.GetPerformanceAdviser().AddRule(m_FlippedDoorApiRule.getRuleId(), m_FlippedDoorApiRule);
           #endregion

           return Autodesk.Revit.UI.Result.Succeeded;

        }
        /// <summary>
        /// Implement this method to implement the external application which should be called when 
        /// Revit is about to exit, Any documents must have been closed before this method is called.
        /// </summary>
        /// <param name="application">An object that is passed to the external application 
        /// which contains the controlled application.</param>
        /// <returns>Return the status of the external application. 
        /// A result of Succeeded means that the external application successfully shutdown. 
        /// Cancelled can be used to signify that the user cancelled the external operation at 
        /// some point.
        /// If Failed is returned then the Revit user should be warned of the failure of the external 
        /// application to shut down correctly.
        /// 
        /// This method also unregisters a the IPerformanceAdviserRule-implementing class
        /// (m_FlippedDoorApiRule) with PerformanceAdviser.
        /// </returns>
        public Autodesk.Revit.UI.Result OnShutdown(Autodesk.Revit.UI.UIControlledApplication application)
        {
           #region Unregister API rule
           Autodesk.Revit.DB.PerformanceAdviser.GetPerformanceAdviser().DeleteRule(m_FlippedDoorApiRule.getRuleId());
           m_FlippedDoorApiRule = null;
           #endregion

           return Autodesk.Revit.UI.Result.Succeeded;
        }
#endregion

         #region Data
       /// <summary>
       /// The custom API rule we are registering with PerformanceAdviser
       /// </summary>
         private FlippedDoorCheck m_FlippedDoorApiRule;
        #endregion
    }
}

UICommand.cs

//
// (C) Copyright 2003-2019 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.UI;
using Autodesk.Revit;
using Autodesk.Revit.DB;

namespace Revit.SDK.Samples.PerformanceAdviserControl.CS
{
   [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
   [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
   [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
   class UICommand : Autodesk.Revit.UI.IExternalCommand
   {
      #region IExternalCommand implementation


    /// <summary>
    /// Implement this method as an external command for Revit.
    /// </summary>
    /// <param name="commandData">An object that is passed to the external application 
    /// which contains data related to the command, 
    /// such as the application object and active view.</param>
    /// <param name="message">A message that can be set by the external application 
    /// which will be displayed if a failure or cancellation is returned by 
    /// the external command.</param>
    /// <param name="elements">A set of elements to which the external application 
    /// can add elements that are to be highlighted in case of failure or cancellation.</param>
    /// <returns>Return the status of the external command. 
    /// A result of Succeeded means that the API external method functioned as expected. 
    /// Cancelled can be used to signify that the user cancelled the external operation 
    /// at some point. Failure should be returned if the application is unable to proceed with 
    /// the operation.
    /// </returns>
      public Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
      {

         //A list of rule information to be used below
         List<RuleInfo> ruleInfoList = new List<RuleInfo>();

         #region Get Rule info through iteration from PerformanceAdviser

            ///Here, we query the information about rules registered in PerformanceAdviser so that
            ///we can later decide in a dialog which rules we want to run.

        PerformanceAdviser performanceAdviser = PerformanceAdviser.GetPerformanceAdviser();


            ICollection<PerformanceAdviserRuleId> allIds = performanceAdviser.GetAllRuleIds();
            foreach (PerformanceAdviserRuleId ruleID in allIds)
            {
               string ruleName = performanceAdviser.GetRuleName(ruleID);
               string ruleDescription = performanceAdviser.GetRuleDescription(ruleID);
               bool isEnabled = performanceAdviser.IsRuleEnabled(ruleID);
               
               //We want to mark user-defined (API) rules, so we check to see if the current rule ID is
               //equal to the rule ID we created.
               bool isOurRule = (ruleID == FlippedDoorCheck.Id);

               RuleInfo oneRule = new RuleInfo(ruleID, isOurRule, ruleName, ruleDescription, isEnabled);
               ruleInfoList.Add(oneRule);
            }

         #endregion

         #region Prepare and show UI
         
           //This dialog box will allow the user to select and run performance rules, so it needs
           //the PerformanceAdviser and active document passed to it.
           TestDisplayDialog tdd = new TestDisplayDialog(PerformanceAdviser.GetPerformanceAdviser(), commandData.Application.ActiveUIDocument.Document);

           foreach (RuleInfo r in ruleInfoList)
               {
                  /// Add the rule data we just collected in the previous loop the the dialog box
                  /// we are about to show.
                  tdd.AddData(r.RuleName, r.IsOurRule, r.IsEnabled);
               }

          tdd.ShowDialog();
            #endregion

          return Autodesk.Revit.UI.Result.Succeeded;
      }
      #endregion
   }
}



FlippedDoorCheck.cs

//
// (C) Copyright 2003-2019 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.UI;


namespace Revit.SDK.Samples.PerformanceAdviserControl.CS
{
   /// <summary>
   /// A class that implements IPerformanceAdviserRule.  This class implements several methods that will be
   /// run automatically when PerformanceAdviser::ExecuteRules or ExecuteAllRules is called.
   /// </summary>
    public class FlippedDoorCheck : Autodesk.Revit.DB.IPerformanceAdviserRule
    {
       #region Constructor
       /// <summary>
       /// Set up rule name, description, and error handling
       /// </summary>
        public FlippedDoorCheck()
        {
            m_name = "Flipped Door Check";
            m_description = "An API-based rule to search for and return any doors that are face-flipped";
            m_doorWarningId = new Autodesk.Revit.DB.FailureDefinitionId(new Guid("25570B8FD4AD42baBD78469ED60FB9A3"));
            m_doorWarning = Autodesk.Revit.DB.FailureDefinition.CreateFailureDefinition(m_doorWarningId, Autodesk.Revit.DB.FailureSeverity.Warning, "Some doors in this project are face-flipped.");
        }
       #endregion




       #region IPerformanceAdviserRule implementation
        /// <summary>
        /// Does some preliminary work before executing tests on elements.  In this case,
        /// we instantiate a list of FamilyInstances representing all doors that are flipped.
        /// </summary>
        /// <param name="document">The document being checked</param>
        public void InitCheck(Autodesk.Revit.DB.Document document)
        {
           if (m_FlippedDoors == null)
              m_FlippedDoors = new List<Autodesk.Revit.DB.ElementId>();
           else
              m_FlippedDoors.Clear();
           return;
        }
       
       /// <summary>
        /// This method does most of the work of the IPerformanceAdviserRule implementation.
        /// It is called by PerformanceAdviser.
        /// It examines the element passed to it (which was previously filtered by the filter
        /// returned by GetElementFilter() (see below)).  After checking to make sure that the
        /// element is an instance, it checks the FacingFlipped property of the element.
        /// 
        /// If it is flipped, it adds the instance to a list to be used later.
        /// </summary>
        /// <param name="document">The active document</param>
        /// <param name="element">The current element being checked</param>
        public void ExecuteElementCheck(Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.Element element)
        {
            if ((element is Autodesk.Revit.DB.FamilyInstance))
            {
               Autodesk.Revit.DB.FamilyInstance doorCurrent = element as Autodesk.Revit.DB.FamilyInstance;
                if (doorCurrent.FacingFlipped)
                    m_FlippedDoors.Add(doorCurrent.Id);
            }
         
        }

       /// <summary>
       /// This method is called by PerformanceAdviser after all elements in document
       /// matching the ElementFilter from GetElementFilter() are checked by ExecuteElementCheck().
       /// 
       /// This method checks to see if there are any elements (door instances, in this case) in the
       /// m_FlippedDoor instance member.  If there are, it iterates through that list and displays
       /// the instance name and door tag of each item.
       /// </summary>
       /// <param name="document">The active document</param>
        public void FinalizeCheck(Autodesk.Revit.DB.Document document)
        {
           if (m_FlippedDoors.Count == 0)
              System.Diagnostics.Debug.WriteLine("No doors were flipped.  Test passed.");

           else
           {
              //Pass the element IDs of the flipped doors to the revit failure reporting APIs.
              Autodesk.Revit.DB.FailureMessage fm = new Autodesk.Revit.DB.FailureMessage(m_doorWarningId);
              fm.SetFailingElements(m_FlippedDoors);
              Autodesk.Revit.DB.Transaction failureReportingTransaction = new Autodesk.Revit.DB.Transaction(document, "Failure reporting transaction");
              failureReportingTransaction.Start();
              Autodesk.Revit.DB.PerformanceAdviser.GetPerformanceAdviser().PostWarning(fm);
              failureReportingTransaction.Commit();
              m_FlippedDoors.Clear();
           }
      
        }

       /// <summary>
       /// Gets the description of the rule
       /// </summary>
       /// <returns>The rule description</returns>
        public string GetDescription()
        {
            return m_description;
        }

        /// <summary>
        /// This method supplies an element filter to reduce the number of elements that PerformanceAdviser
        /// will pass to GetElementCheck().  In this case, we are filtering for door elements.
        /// </summary>
        /// <param name="document">The document being checked</param>
        /// <returns>A door element filter</returns>
        public Autodesk.Revit.DB.ElementFilter GetElementFilter(Autodesk.Revit.DB.Document document)
        {
            return new Autodesk.Revit.DB.ElementCategoryFilter(Autodesk.Revit.DB.BuiltInCategory.OST_Doors);
        }

       /// <summary>
       /// Gets the name of the rule
       /// </summary>
       /// <returns>The rule name</returns>
        public string GetName()
        {
            return m_name;
        }



        /// <summary>
        /// Returns true if this rule will iterate through elements and check them, false otherwise
        /// </summary>
        /// <returns>True</returns>
        public bool WillCheckElements()
        {
            return true;
        }

        #endregion

       #region Other instance methods
        /// <summary>
        /// This method is used by PerformanceAdviser to get the
        ///  ID of the rule. It returns a global static field to make sharing the ID in different places
        ///  in the application easier.
        /// </summary>
        /// <returns>The Rule ID of this rule</returns>
        public Autodesk.Revit.DB.PerformanceAdviserRuleId getRuleId()
        {
           return FlippedDoorCheck.Id;
        }
        #endregion

        /// <summary>
        /// The rule ID for this rule;
        /// </summary>
        public static Autodesk.Revit.DB.PerformanceAdviserRuleId Id
        {
           get
           {
              return m_Id;
           }
        }

       #region Data
        /// <summary>
       /// A list of all family instances in the document that have the FaceFlipped property set to true;
       /// </summary>
        private List<Autodesk.Revit.DB.ElementId> m_FlippedDoors;

       /// <summary>
       /// A short name for the rule
       /// </summary>
        private string m_name;

       /// <summary>
       /// A short description of the rule
       /// </summary>
        private string m_description;

       /// <summary>
       /// The rule ID for this rule;
       /// </summary>
       private static Autodesk.Revit.DB.PerformanceAdviserRuleId m_Id = new Autodesk.Revit.DB.PerformanceAdviserRuleId((new Guid("BC38854474284491BD03795675AC7386")));

       /// <summary>
       ///  The ID of the failure definition for our API-based door flip check rule
       /// </summary>
       private Autodesk.Revit.DB.FailureDefinitionId m_doorWarningId;
       
       /// <summary>
       /// The failure definition for our API-based door flip check rule
       /// </summary>
       private Autodesk.Revit.DB.FailureDefinition m_doorWarning;
       
       #endregion

    }



 
}

RuleInfo.cs

//
// (C) Copyright 2003-2019 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;

namespace Revit.SDK.Samples.PerformanceAdviserControl.CS
{
   /// <summary>
   /// A simple data class that holds Performance Adviser rule information for use with
   /// TestDisplayDialog
   /// </summary>
   public class RuleInfo
   {
      public RuleInfo(PerformanceAdviserRuleId id, bool isOurRule, string name, string description, bool isEnabled)
      {
         ID = id;
         IsOurRule = isOurRule;
         RuleName = name;
         RuleDescription = description;
         IsEnabled = isEnabled;
      }

      public readonly PerformanceAdviserRuleId ID;
      public readonly bool IsOurRule;
      public readonly string RuleName;
      public readonly string RuleDescription;
      public readonly bool IsEnabled;
   }
}

TestDisplayDialog.cs

//
// (C) Copyright 2003-2019 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
namespace Revit.SDK.Samples.PerformanceAdviserControl.CS
{
   partial class TestDisplayDialog
   {
      /// <summary>
      /// Required designer variable.
      /// </summary>
      private System.ComponentModel.IContainer components = null;

      /// <summary>
      /// Clean up any resources being used.
      /// </summary>
      /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
      protected override void Dispose(bool disposing)
      {
         if (disposing && (components != null))
         {
            components.Dispose();
         }
         base.Dispose(disposing);
      }

      #region Windows Form Designer generated code

      /// <summary>
      /// Required method for Designer support - do not modify
      /// the contents of this method with the code editor.
      /// </summary>
      private void InitializeComponent()
      {
         this.testData = new System.Windows.Forms.DataGridView();
         this.runTest = new System.Windows.Forms.DataGridViewCheckBoxColumn();
         this.testName = new System.Windows.Forms.DataGridViewTextBoxColumn();
         this.IsOurRule = new System.Windows.Forms.DataGridViewTextBoxColumn();
         this.btn_RunTests = new System.Windows.Forms.Button();
         this.btn_SelectAll = new System.Windows.Forms.Button();
         this.btn_DeselectAll = new System.Windows.Forms.Button();
         this.btn_Cancel = new System.Windows.Forms.Button();
         ((System.ComponentModel.ISupportInitialize)(this.testData)).BeginInit();
         this.SuspendLayout();
         // 
         // testData
         // 
         this.testData.AllowUserToAddRows = false;
         this.testData.AllowUserToDeleteRows = false;
         this.testData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
         this.testData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.runTest,
            this.testName,
            this.IsOurRule});
         this.testData.Dock = System.Windows.Forms.DockStyle.Top;
         this.testData.Location = new System.Drawing.Point(0, 0);
         this.testData.MultiSelect = false;
         this.testData.Name = "testData";
         this.testData.RowHeadersWidth = 30;
         this.testData.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
         this.testData.Size = new System.Drawing.Size(469, 418);
         this.testData.TabIndex = 2;
         // 
         // runTest
         // 
         this.runTest.HeaderText = " ";
         this.runTest.MinimumWidth = 50;
         this.runTest.Name = "runTest";
         this.runTest.Width = 50;
         // 
         // testName
         // 
         this.testName.FillWeight = 300F;
         this.testName.HeaderText = "Test Name";
         this.testName.MinimumWidth = 300;
         this.testName.Name = "testName";
         this.testName.ReadOnly = true;
         this.testName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
         this.testName.Width = 300;
         // 
         // IsOurRule
         // 
         this.IsOurRule.HeaderText = "Our Rule";
         this.IsOurRule.MinimumWidth = 90;
         this.IsOurRule.Name = "IsOurRule";
         this.IsOurRule.ReadOnly = true;
         this.IsOurRule.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
         this.IsOurRule.Width = 90;
         // 
         // btn_RunTests
         // 
         this.btn_RunTests.Location = new System.Drawing.Point(237, 424);
         this.btn_RunTests.Name = "btn_RunTests";
         this.btn_RunTests.Size = new System.Drawing.Size(147, 23);
         this.btn_RunTests.TabIndex = 3;
         this.btn_RunTests.Text = "Run Selected Tests";
         this.btn_RunTests.UseVisualStyleBackColor = true;
         this.btn_RunTests.Click += new System.EventHandler(this.btn_RunTests_Click);
         // 
         // btn_SelectAll
         // 
         this.btn_SelectAll.Location = new System.Drawing.Point(59, 424);
         this.btn_SelectAll.Name = "btn_SelectAll";
         this.btn_SelectAll.Size = new System.Drawing.Size(147, 23);
         this.btn_SelectAll.TabIndex = 4;
         this.btn_SelectAll.Text = "Select All";
         this.btn_SelectAll.UseVisualStyleBackColor = true;
         this.btn_SelectAll.Click += new System.EventHandler(this.btn_SelectAll_Click);
         // 
         // btn_DeselectAll
         // 
         this.btn_DeselectAll.Location = new System.Drawing.Point(59, 453);
         this.btn_DeselectAll.Name = "btn_DeselectAll";
         this.btn_DeselectAll.Size = new System.Drawing.Size(147, 23);
         this.btn_DeselectAll.TabIndex = 5;
         this.btn_DeselectAll.Text = "Deselect all";
         this.btn_DeselectAll.UseVisualStyleBackColor = true;
         this.btn_DeselectAll.Click += new System.EventHandler(this.btn_DeselectAll_Click);
         // 
         // btn_Cancel
         // 
         this.btn_Cancel.Location = new System.Drawing.Point(237, 453);
         this.btn_Cancel.Name = "btn_Cancel";
         this.btn_Cancel.Size = new System.Drawing.Size(147, 23);
         this.btn_Cancel.TabIndex = 6;
         this.btn_Cancel.Text = "Cancel";
         this.btn_Cancel.UseVisualStyleBackColor = true;
         this.btn_Cancel.Click += new System.EventHandler(this.btn_Cancel_Click);
         // 
         // TestDisplayDialog
         // 
         this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
         this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
         this.ClientSize = new System.Drawing.Size(469, 483);
         this.Controls.Add(this.btn_Cancel);
         this.Controls.Add(this.btn_DeselectAll);
         this.Controls.Add(this.btn_SelectAll);
         this.Controls.Add(this.btn_RunTests);
         this.Controls.Add(this.testData);
         this.MaximizeBox = false;
         this.Name = "TestDisplayDialog";
         this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
         this.Text = "PerformanceAdviser Control";
         ((System.ComponentModel.ISupportInitialize)(this.testData)).EndInit();
         this.ResumeLayout(false);

      }

      #endregion

      private System.Windows.Forms.DataGridView testData;
      private System.Windows.Forms.Button btn_RunTests;
      private System.Windows.Forms.Button btn_SelectAll;
      private System.Windows.Forms.Button btn_DeselectAll;
      private System.Windows.Forms.Button btn_Cancel;
      private System.Windows.Forms.DataGridViewCheckBoxColumn runTest;
      private System.Windows.Forms.DataGridViewTextBoxColumn testName;
      private System.Windows.Forms.DataGridViewTextBoxColumn IsOurRule;
   }
}