using System.ComponentModel; using System.Linq; namespace RGB.NET.Core { public static partial class RGBSurface { #region Methods // ReSharper disable once UnusedMember.Global /// /// Loads all devices the given is able to provide. /// /// public static void LoadDevices(IRGBDeviceProvider deviceProvider) { if (_deviceProvider.Contains(deviceProvider) || _deviceProvider.Any(x => x.GetType() == deviceProvider.GetType())) return; IRGBDevice addedDevice = null; if (deviceProvider.IsInitialized || deviceProvider.Initialize()) { _deviceProvider.Add(deviceProvider); foreach (IRGBDevice device in deviceProvider.Devices) { if (_devices.Contains(device)) continue; addedDevice = device; device.PropertyChanged += DeviceOnPropertyChanged; device.Location.PropertyChanged += DeviceLocationOnPropertyChanged; _devices.Add(device); } } if (addedDevice != null) { UpdateSurfaceRectangle(); SurfaceLayoutChanged?.Invoke(new SurfaceLayoutChangedEventArgs(addedDevice, true, false)); } } private static void DeviceOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { if (string.Equals(propertyChangedEventArgs.PropertyName, nameof(IRGBDevice.Location))) { SurfaceLayoutChanged?.Invoke(new SurfaceLayoutChangedEventArgs(sender as IRGBDevice, false, true)); UpdateSurfaceRectangle(); ((IRGBDevice)sender).Location.PropertyChanged += DeviceLocationOnPropertyChanged; } } private static void DeviceLocationOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { SurfaceLayoutChanged?.Invoke(new SurfaceLayoutChangedEventArgs(sender as IRGBDevice, false, true)); UpdateSurfaceRectangle(); } #endregion } }