设备控制之矩阵状态显示
在做设备控制的时候,比较麻烦的是连接到矩阵输出端上的设备(比如:投影机,显示器)的信号显示问题,
下面说下我用的方法:
首先建个接口:
public interface IUseVideoMatrix {
bool UseVideoOutput(int output);
void BindVideoSignal(int input, int output);
}
UseVideoOutput用于判断设备是否连到矩阵的输出端output,如果返回true,则通过BindVideoSignal将矩阵对应的
输入端input绑定给此设备。
每个连到矩阵输出端的设备对应的UserControl继承此接口,比如Odin设备的每个输入端接在矩阵的输出端上,
下图为Odin的界面:
Odin设备对应的UserControl如下:
代码
public partial class OdinPanel : UserControl, IUseVideoMatrix {
public OdinPanel() {
InitializeComponent();
Register();
}
private void Register() {
VideoOutput2Label.Add(1, label1); //1表示矩阵的输出端1
VideoOutput2Label.Add(2, label2);
VideoOutput2Label.Add(3, label3);
VideoOutput2Label.Add(4, label4);
VideoOutput2Label.Add(5, label5);
VideoOutput2Label.Add(6, label6);
VideoOutput2Label.Add(7, label7);
VideoOutput2Label.Add(8, label8);
}
public bool UseVideoOutput(int output) {
return VideoOutput2Label.ContainsKey(output);
}
public void BindVideoSignal(int input, int output) {
if(input < 0 || input > Room.Instance.VideoMatrix.VideoInputNames.Count) { return; }
Label label = VideoOutput2Label[output];
label.Text = Room.Instance.VideoMatrix.GetInputNameByInput(input);
}
private Dictionary<int, Label> VideoOutput2Label = new Dictionary<int, Label>();
}
此UserControl继承并实现了IUseVideoMatrix。
在管理类里建个IUseVideoMatrix的列表,并将继承此接口的UserControl添加到列表中,如下:
代码
public void InstallUseMatrixPanel() {
UseVideoMatrixPanels.Add(odinPanel1);
UseVideoMatrixPanels.Add(recordPanel1);
UseVideoMatrixPanels.Add(voicePanel1);
UseVideoMatrixPanels.Add(multiplierPanel1);
}
private List<IUseVideoMatrix> UseVideoMatrixPanels = new List<IUseVideoMatrix>();
在收到矩阵切换的命令时,遍列此列表,如果UseVideoOutput返回true,则调用BindVideoSignal刷新设备对应的信号,
代码如下:
代码
private void VideoMatrixNotifyHandler(Notify notify) {
VideoMatrixNotify videoMatrixNotify = notify as VideoMatrixNotify;
int input = videoMatrixNotify.Input;
int output = videoMatrixNotify.Output;
foreach (var each in UseVideoMatrixPanels) {
if (each.UseVideoOutput(output)) {
each.BindVideoSignal(input, output);
}
}
}