/// <summary> /// Creates an <see cref="ICameraPlugin"/> for the specified camera. /// </summary> /// <param name="camera">The camera</param> /// <returns>The ICameraPlugin</returns> /// <exception cref="ArgumentNullException"><paramref name="camera"/> is null.</exception> /// <exception cref="InvalidPluginException">The camera does not have a plugin assigned.</exception> /// <exception cref="InvalidPluginException">The plugin cannot be found.</exception> public static ICameraPlugin Create(CameraRow camera) { if (camera == null) { throw new ArgumentNullException(nameof(camera)); } if (camera.PluginId == PluginTable.Defs.Values.NullPluginId) { throw new InvalidPluginException($"[{camera.Name}] does not have an associated plugin"); } ICameraPluginCreator creator = CompositionManager.Instance.GetCameraPluginCreator(camera.PluginGuid); if (creator == null) { throw new InvalidPluginException($"The plugin configured for [{camera.Name}] [{camera.PluginName}, Id: {camera.PluginGuid}] cannot be found"); } ICameraPlugin plugin = creator.Create(new ConnectionParameters(camera.IpAddress, camera.Port, camera.UserId, camera.Password)); if (plugin is ICameraMotion motion) { motion.SetMotionSpeedAsync((int)camera.MotionSpeed); } return(plugin); }
/// <summary> /// Creates an instance of CameraManageWindow and its corresponding view model. /// </summary> /// <param name="camera">The camera to manage.</param> /// <returns>The window.</returns> public static CameraManageWindow Create(CameraRow camera) { var window = new CameraManageWindow() { DataContext = new CameraManageViewModel(camera), }; Config.Instance.RestoreWindow(Config.WindowKey.CameraManage, window); (window.DataContext as WindowViewModel)?.SetWindowOwner(window); TextOptions.SetTextFormattingMode(window); return(window); }