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 keyboard interface. /// </summary> /// <param name="window">Window to bind with.</param> /// <param name="keyboardName">The name of the keyboard to use.</param> /// <returns>A new keyboard interface.</returns> /// <remarks>Passing an empty string for <paramref name="keyboardName"/> will use the system keyboard (i.e. data from all keyboards will be tracked by the same interface). /// <para>Pass NULL to the <paramref name="window"/> parameter to use the <see cref="P:GorgonLibrary.Gorgon.ApplicationForm">Gorgon application form</see>.</para> /// </remarks> /// <exception cref="System.Collections.Generic.KeyNotFoundException">Thrown when a keyboard with the <paramref name="keyboardName"/> could not be found.</exception> public GorgonKeyboard CreateKeyboard(Control window, string keyboardName) { GorgonInputDeviceInfo deviceInfo = null; if ((!string.IsNullOrWhiteSpace(keyboardName)) && (!KeyboardDevices.TryGetValue(keyboardName, out deviceInfo))) { throw new ArgumentException(string.Format(Resources.GORINP_KEYBOARD_NOT_FOUND, keyboardName), "keyboardName"); } var keyboardDevice = GetInputDevice <GorgonKeyboard>(deviceInfo); if (keyboardDevice == null) { keyboardDevice = CreateKeyboardImpl(window, deviceInfo); keyboardDevice.DeviceType = InputDeviceType.Keyboard; keyboardDevice.UUID = GetDeviceUUID(deviceInfo, keyboardDevice.GetType()); Devices.Add(keyboardDevice.UUID, keyboardDevice); } keyboardDevice.GetDefaultKeyMapping(); keyboardDevice.KeyStateResetMode = KeyStateResetMode.ResetAll; keyboardDevice.KeyStates.Reset(); keyboardDevice.Bind(window); keyboardDevice.Enabled = true; keyboardDevice.Exclusive = (ExclusiveDevices & InputDeviceType.Keyboard) == InputDeviceType.Keyboard; return(keyboardDevice); }
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); } }