示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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);
            }
        }