/// <summary> /// Loads all devices the given <see cref="IRGBDeviceProvider"/> is able to provide. /// </summary> /// <param name="deviceProvider">The <see cref="IRGBDeviceProvider"/> to load the devices from.</param> /// <param name="loadFilter">Specifies which types of devices to load.</param> /// <param name="exclusiveAccessIfPossible">Specifies whether the application should request exclusive access of possible or not.</param> /// <param name="throwExceptions">Specifies whether exception during the initialization sequence should be thrown or not.</param> public void LoadDevices(IRGBDeviceProvider deviceProvider, RGBDeviceType loadFilter = RGBDeviceType.All, bool exclusiveAccessIfPossible = false, bool throwExceptions = false) { if (_deviceProvider.Contains(deviceProvider) || _deviceProvider.Any(x => x.GetType() == deviceProvider.GetType())) { return; } List <IRGBDevice> addedDevices = new List <IRGBDevice>(); if (deviceProvider.IsInitialized || deviceProvider.Initialize(loadFilter, exclusiveAccessIfPossible, throwExceptions)) { _deviceProvider.Add(deviceProvider); foreach (IRGBDevice device in deviceProvider.Devices) { if (_devices.Contains(device)) { continue; } addedDevices.Add(device); device.PropertyChanged += DeviceOnPropertyChanged; _devices.Add(device); } } if (addedDevices.Any()) { UpdateSurfaceRectangle(); SurfaceLayoutChanged?.Invoke(new SurfaceLayoutChangedEventArgs(addedDevices, true, false)); } }
private void DeviceOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { if (string.Equals(propertyChangedEventArgs.PropertyName, nameof(IRGBDevice.Location))) { UpdateSurfaceRectangle(); SurfaceLayoutChanged?.Invoke(new SurfaceLayoutChangedEventArgs(new[] { sender as IRGBDevice }, false, true)); ((IRGBDevice)sender).Location.PropertyChanged += DeviceLocationOnPropertyChanged; } }
// ReSharper restore UnusedMember.Global private void DeviceOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { UpdateSurfaceRectangle(); SurfaceLayoutChanged?.Invoke(new SurfaceLayoutChangedEventArgs(new[] { sender as IRGBDevice }, false, true)); }