//Copyright 2012-2019 Keysight Technologies // //Licensed under the Apache License, Version 2.0 (the "License"); //you may not use this file except in compliance with the License. //You may obtain a copy of the License at // //http://www.apache.org/licenses/LICENSE-2.0 // //Unless required by applicable law or agreed to in writing, software //distributed under the License is distributed on an "AS IS" BASIS, //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. using System; using System.Globalization; using System.Xml.Serialization; using OpenTap; namespace OpenTap.Plugins.PluginDevelopment { // This shows how to implement a custom collection of components, similar to Instruments or DUTs. // This will appear under Settings -> Bench. // See SettingsRetrieval.cs to see how to use these, and other settings, in a Test Step. // First a high level collection class must be created. // To do this define the Settings Group that will be used. // The high level "Instruments" group is an example of this collection. [SettingsGroupAttribute("Bench", Profile: true)] [Display("Example Component Settings", Description: "A collection of different instances of settings.")] [XmlInclude(typeof(CustomBenchSettings))] public class CustomBenchSettingsList : ComponentSettingsList { // No code necessary. } // Each implementation with inherit from Resource. // An abstract class is defined for the similar properties within each instance. // From the defined list above, these individual instances can be added. [Display("Custom Bench Settings", Description: "A collection of different instances of settings.")] // This will appear in the Settings menu in the GUI. public abstract class CustomBenchSettings : Resource { // Define custom properties. public string MyProperty { get; set; } public DateTime MyTime { get; set; } protected CustomBenchSettings() { MyProperty = "Key06131121"; MyTime = DateTime.Now; } public override string ToString() { return MyTime.ToString(CultureInfo.InvariantCulture); } } // An individual instance of the Custom Bench Setting. // These are added through the '+' in the Example Component Settings menu. [Display("Example Component A", Description: "An instance of Example Component Setting.")] public class ExampleComponentA : CustomBenchSettings { public ExampleComponentA() { // Define a Name to describe how the component will appear. Name = "CompA"; } public string SomeUniqueProperty { get; set; } } // Similar to Instruments and DUTs, custom components can extend each other. [Display("SimilarB", Description: "An instance of Example Component Setting. Extends SimilarA.")] public class SimilarSettingsB : ExampleComponentA { public SimilarSettingsB() { // Define a Name to describe how the component will appear. Name = "SmlrB"; } public string SomeOtherProperty { get; set; } } }