Chronos Plugins  5.2.0
This documentation covers the plugin interfaces definitions and an example implementation.
Tasks/MockDynamicPropsDependingOnDevice.cs
Go to the documentation of this file.
1 using System;
2 using System.ComponentModel;
3 using System.Text;
5 
6 namespace MockPlugin.Tasks
7 {
14  public class MockDynamicPropsDependingOnDevice : CustomTypeDescriptor, ITaskForDevice, IWantEditorUpdates
15  {
16  private const string NoDevice = "No device";
17  private string mDevName;
18  private string mDynPropValue;
19  private IDevice mDevice;
20 
21  #region Not interesting for this example
22 
23  public void PreValidate()
24  {
25  }
26 
27  public void PostValidate()
28  {
29  }
30 
31  public void Execute()
32  {
33  }
34 
35  public string GetTaskAction() => "Do nothing";
36 
37  #endregion
38 
43  [DynamicPropertyMaster]
44  public void SetDevice(IDevice yourDevice)
45  {
46  if (mDevice != yourDevice)
47  {
48  mDevice = yourDevice;
49  // The PropertyEdited handler is called by Chronos for texts that can not be converted to a device instance.
50  // Otherwise, we get the device set here. If so, we must react in the same way.
51  PropertyEdited("Autosampler",mDevice);
52  }
53  }
54 
60  public void PropertyEdited(string propName, object propValue)
61  {
62  if (propName == "Autosampler")
63  {
64  var newDevName = ((propValue as IDevice)?.Name) ?? NoDevice;
65  if (mDevName != newDevName)
66  {
67  mDevName = newDevName;
68  TypeDescriptor.Refresh(this);
69  }
70  }
71  }
72 
73  public override PropertyDescriptorCollection GetProperties()
74  {
75  var dynProp = new MyPropertyDescriptor(this);
76  return new PropertyDescriptorCollection(new PropertyDescriptor[]{dynProp});
77  }
78 
79  public override object GetPropertyOwner(PropertyDescriptor pd)
80  {
81  return pd is MyPropertyDescriptor ? this : null;
82  }
83 
87  public class MyPropertyDescriptor : PropertyDescriptor
88  {
90 
92  {
93  mParent = parent;
94  }
95 
96  private static string BuildPropName(string parentDevName)
97  {
98  var sb = new StringBuilder("DynPropFor");
99  foreach (var someChar in parentDevName?? "NoDevice")
100  {
101  if (char.IsLetter(someChar))
102  {
103  sb.Append(someChar);
104  }
105  }
106  return sb.ToString();
107  }
108 
109  public override bool CanResetValue(object component) => false;
110 
111  public override object GetValue(object component) => mParent.mDynPropValue;
112 
113  public override void ResetValue(object component)
114  {
115  }
116 
117  public override void SetValue(object component, object value) => mParent.mDynPropValue = value?.ToString();
118 
119  public override bool ShouldSerializeValue(object component) => true;
120 
121  public override Type ComponentType => typeof(MockDynamicPropsDependingOnDevice);
122  public override bool IsReadOnly => false;
123  public override Type PropertyType => typeof(string);
124  }
125  }
126 }
Things provided by an AxelSemrau program or library. Do not put your own code into this namespace,...
Things provided by AxelSemrau Chronos ... or its alter egos, PAL Sample Control / PAL Sample Control ...
Classes and interfaces that are meant for plugins. The classes and interfaces below this namespace ar...
Example task implementations. Since there are lots of things that can be done from a task,...
To be implemented by the "device driver" part of a Chronos plugin.
To be implemented if the task needs to access a device ("Autosampler" property in Chronos)
Implement this interface in your task if you want the method editor to notify it of changed propertie...
This task demonstrates how to make the property list depend on the picked autosampler.
string GetTaskAction()
Description of the tasks's action (for hints/time table)
void PostValidate()
Called after the schedule construction is completed.
void SetDevice(IDevice yourDevice)
React to a picked device.
void Execute()
Do whatever you have to do with your parameters.
void PreValidate()
Called before the schedule construction is completed.
void PropertyEdited(string propName, object propValue)
This will be called as soon as a property was changed in the method editor.
Just a dynamic property named after the picked autosampler. The value is just redirected to the mDynP...
override void SetValue(object component, object value)