private DeviceMonitor AddOrGetDevice(string deviceName, DeviceType deviceType, Guid deviceGuid) { DeviceMonitor deviceMonitor = null; if (!_nameToDeviceMonitor.TryGetValue(deviceName, out deviceMonitor)) { deviceMonitor = new DeviceMonitor(deviceName, deviceType, deviceGuid, _mapper); _nameToDeviceMonitor.Add(deviceName, deviceMonitor); Devices.Add(deviceMonitor); switch (deviceType) { case DeviceType.Unknown: UnknownDevices.Add(deviceMonitor); break; case DeviceType.Keyboard: KeyboardDevices.Add(deviceMonitor); break; case DeviceType.Mouse: MouseDevices.Add(deviceMonitor); break; case DeviceType.Joystick: JoystickDevices.Add(deviceMonitor); break; } } return(deviceMonitor); }
/// <summary> /// Function to create a joystick interface. /// </summary> /// <param name="window">Window to bind with.</param> /// <param name="joystickName">Name of the joystick to use.</param> /// <returns>A new joystick interface.</returns> /// <remarks>Pass NULL to the <paramref name="window"/> parameter to use the <see cref="P:GorgonLibrary.Gorgon.ApplicationForm">Gorgon application form</see>.</remarks> /// <exception cref="System.ArgumentException">Thrown when the <paramref name="joystickName"/> is empty.</exception> /// <exception cref="System.ArgumentNullException">Thrown when the <paramref name="joystickName"/> is NULL (Nothing in VB.Net).</exception> /// <exception cref="System.Collections.Generic.KeyNotFoundException">Thrown when a joystick with the <paramref name="joystickName"/> could not be found.</exception> public GorgonJoystick CreateJoystick(Control window, string joystickName) { if (joystickName == null) { throw new ArgumentNullException("joystickName"); } if (string.IsNullOrWhiteSpace(joystickName)) { throw new ArgumentException(Resources.GORINP_PARAMETER_EMPTY, "joystickName"); } GorgonInputDeviceInfo deviceInfo; if (!JoystickDevices.TryGetValue(joystickName, out deviceInfo)) { throw new ArgumentException(string.Format(Resources.GORINP_JOYSTICK_NOT_FOUND, joystickName), "joystickName"); } var joystickDevice = GetInputDevice <GorgonJoystick>(deviceInfo); if (joystickDevice == null) { joystickDevice = CreateJoystickImpl(window, deviceInfo); joystickDevice.UUID = GetDeviceUUID(deviceInfo, joystickDevice.GetType()); joystickDevice.DeviceType = InputDeviceType.Joystick; Devices.Add(joystickDevice.UUID, joystickDevice); } joystickDevice.Initialize(); joystickDevice.Bind(window); joystickDevice.Enabled = true; joystickDevice.Exclusive = (ExclusiveDevices & InputDeviceType.Joystick) == InputDeviceType.Joystick; return(joystickDevice); }
void Mapper_DeviceChanged(object sender, DeviceInfo e) { Action action = null; switch (e.InfoAction) { case DeviceInfo.InfoType.Added: action = () => { AddMessage(new StatusMessage(e.Device, "Added")); AddOrGetDevice(e.Device, e.DeviceType, e.DeviceGuid); }; break; case DeviceInfo.InfoType.Checked: action = () => { AddMessage(new StatusMessage(e.Device, "Checked")); AddOrGetDevice(e.Device, e.DeviceType, e.DeviceGuid); }; break; case DeviceInfo.InfoType.Error: action = () => { AddMessage(new StatusMessage(e.Device, "Error")); if (e is DeviceInfoError) { AddMessage(new StatusMessage(e.Device, ((DeviceInfoError)e).ErrorMessage)); } }; break; case DeviceInfo.InfoType.Removed: action = () => { AddMessage(new StatusMessage(e.Device, "Removed")); DeviceMonitor deviceMonitor = null; if (_nameToDeviceMonitor.TryGetValue(e.Device, out deviceMonitor)) { _nameToDeviceMonitor.Remove(e.Device); Devices.Remove(deviceMonitor); switch (e.DeviceType) { case DeviceType.Unknown: UnknownDevices.Remove(deviceMonitor); break; case DeviceType.Keyboard: KeyboardDevices.Remove(deviceMonitor); break; case DeviceType.Mouse: MouseDevices.Remove(deviceMonitor); break; case DeviceType.Joystick: JoystickDevices.Remove(deviceMonitor); break; } } }; break; case DeviceInfo.InfoType.Updated: action = () => AddMessage(new StatusMessage(e.Device, "Updated")); break; } if (action != null) { _actionQueue.Add(action); } }