设备控制之矩阵状态显示

在做设备控制的时候,比较麻烦的是连接到矩阵输出端上的设备(比如:投影机,显示器)的信号显示问题,

下面说下我用的方法:

首先建个接口:

  
    
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);
}
}
}

你可能感兴趣的:(矩阵)