using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using TeamAAS.Camera.Enums;
namespace TeamAAS.Camera.Models
{
///
/// 相机设备注册信息:仅承担设备发现(搜索列表)、UI 列表展示与配置持久化(Cameras.json)。
/// 相机的可编辑参数(曝光/增益/Gamma)不放在本类——属性编辑器直接绑定 ICamera 实例
/// (见 CameraBase),公共参数在接口/基类上,品牌特有参数在子类上自动带出;
/// 本类的 ExposureTime/Gain/Gamma 仅作为启动时下发的持久化快照(null = 使用相机默认值)。
///
public class CameraInfo : INotifyPropertyChanged
{
[Browsable(false)]
public Guid Id { get; set; }
[Category("基本"), DisplayName("编号")]
public int CameraNo { get; set; }
[Category("基本"), DisplayName("名称")]
public string CameraName { get; set; }
[Category("只读信息"), DisplayName("型号"), ReadOnly(true)]
public string Model { get; set; }
[Category("只读信息"), DisplayName("序列号"), ReadOnly(true)]
public string SerialNumber { get; set; }
[Category("只读信息"), DisplayName("厂商"), ReadOnly(true)]
public string ManufacturerName { get; set; }
[Browsable(false)]
public CameraType CameraType { get; set; }
[Category("只读信息"), DisplayName("品牌"), ReadOnly(true)]
public string CameraBrand { get; set; }
[Category("网络"), DisplayName("IP地址")]
public string CameraIp { get; set; }
[Category("网络"), DisplayName("通过IP查找")]
public bool IsFindByIp { get; set; }
[Browsable(false)]
public bool IsConnected { get; set; }
[Browsable(false)]
public bool IsGrabbing { get; set; }
// ===== 参数持久化快照(由 CameraManager 从 ICamera 实例回写;null 表示不改用默认值) =====
[Browsable(false)]
public float? ExposureTime { get; set; }
[Browsable(false)]
public float? Gain { get; set; }
[Browsable(false)]
public float? Gamma { get; set; }
public CameraInfo()
{
Id = Guid.NewGuid();
}
public CameraInfo(Guid id, string cameraName, CameraType cameraType, string cameraBrand, string cameraIp)
{
Id = id;
CameraName = cameraName;
CameraType = cameraType;
CameraBrand = cameraBrand;
CameraIp = cameraIp;
if (cameraType == CameraType.GIGE)
{
IsFindByIp = true;
}
}
[Browsable(false)]
public string CameraBrandDisplay => CameraManager.Instance.GetBrandDisplayName(CameraBrand);
public CameraInfo Copy()
{
return new CameraInfo
{
Id = this.Id,
CameraName = this.CameraName,
Model = this.Model,
SerialNumber = this.SerialNumber,
ManufacturerName = this.ManufacturerName,
CameraType = this.CameraType,
CameraBrand = this.CameraBrand,
CameraIp = this.CameraIp,
CameraNo = this.CameraNo,
IsFindByIp = this.IsFindByIp,
IsConnected = this.IsConnected,
IsGrabbing = this.IsGrabbing,
ExposureTime = this.ExposureTime,
Gain = this.Gain,
Gamma = this.Gamma
};
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}
#endregion
}
}