private void ElementClicked(object sender, EventArgs args)
        {
            var button = sender as System.Windows.Controls.Button;
            if (button == null)
                return;

            var binding = button.Tag as KeyBindingControl;
            System.Windows.Controls.Border border;

            if (binding != null && Equals(binding, mCurrentBinding))
            {
                border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border;
                if(border != null)
                    border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0));
                mCurrentBinding = null;
                return;
            }

            if (binding == null)
                return;

            if (mCurrentBinding != null)
            {
                border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border;
                if (border != null)
                    border.BorderBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0));
            }

            border = binding.Label.Parent as System.Windows.Controls.Border;
            if (border != null)
                border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0));

            mCurrentBinding = binding;
            mCurrentKeys.Clear();
        }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            SensitivitySliderIndicator.Text = (SensitivitySlider.Value / 5.0f).ToString("F2");

            if (mInitialized)
            {
                return;
            }

            mInitialized = true;
            KeyDown     += OnKeyDown;
            KeyUp       += OnKeyUp;
            var baseType = typeof(KeyBindings);

            foreach (var category in baseType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                var catName  = category.Name;
                var instance = category.GetValue(KeyBindings.Instance);

                foreach (var binding in instance.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
                {
                    if (binding.FieldType.IsArray == false)
                    {
                        continue;
                    }

                    var arrType = binding.FieldType.GetElementType();
                    if (arrType != typeof(Keys))
                    {
                        continue;
                    }

                    var elemName = binding.Name;
                    var keys     = (Keys[])binding.GetValue(instance);
                    var control  = new KeyBindingControl
                    {
                        Tag    = new Tuple <FieldInfo, object>(binding, instance),
                        Button = { Content = string.Format("{0}.{1}", catName, elemName) },
                        Label  = { Text = string.Join(" + ", keys.Select(k => Converter.ConvertToString(k))) }
                    };

                    control.Button.Tag = control;

                    control.Button.Click += ElementClicked;
                    InputElementWrapper.Children.Add(control);
                }
            }
        }
Example #3
0
        private void ElementClicked(object sender, EventArgs args)
        {
            var button = sender as System.Windows.Controls.Button;

            if (button == null)
            {
                return;
            }

            var binding = button.Tag as KeyBindingControl;

            System.Windows.Controls.Border border;

            if (binding != null && Equals(binding, mCurrentBinding))
            {
                border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border;
                if (border != null)
                {
                    border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0));
                }
                mCurrentBinding = null;
                return;
            }

            if (binding == null)
            {
                return;
            }

            if (mCurrentBinding != null)
            {
                border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border;
                if (border != null)
                {
                    border.BorderBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0));
                }
            }

            border = binding.Label.Parent as System.Windows.Controls.Border;
            if (border != null)
            {
                border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0));
            }

            mCurrentBinding = binding;
            mCurrentKeys.Clear();
        }
        private void OnKeyUp(object sender, System.Windows.Input.KeyEventArgs args)
        {
            if (mCurrentBinding == null)
                return;

            mCurrentPressedKeys.Remove(args.Key);
            if (mCurrentPressedKeys.Count != 0)
                return;

            var border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border;
            if (border != null)
                border.BorderBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0));
            var bindField = mCurrentBinding.Tag as Tuple<FieldInfo, object>;
            if (bindField != null && mCurrentKeys.Count > 0)
            {
                bindField.Item1.SetValue(bindField.Item2, mCurrentKeys.Select(k => (Keys)KeyInterop.VirtualKeyFromKey(k)).ToArray());
                KeyBindings.Save();
            }

            mCurrentBinding = null;
        }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            SensitivitySliderIndicator.Text = (SensitivitySlider.Value / 5.0f).ToString("F2");

            if (mInitialized)
                return;

            mInitialized = true;
            KeyDown += OnKeyDown;
            KeyUp += OnKeyUp;
            var baseType = typeof(KeyBindings);
            foreach (var category in baseType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                var catName = category.Name;
                var instance = category.GetValue(KeyBindings.Instance);

                foreach (var binding in instance.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
                {
                    if (binding.FieldType.IsArray == false)
                        continue;

                    var arrType = binding.FieldType.GetElementType();
                    if (arrType != typeof(Keys))
                        continue;

                    var elemName = binding.Name;
                    var keys = (Keys[])binding.GetValue(instance);
                    var control = new KeyBindingControl
                    {
                        Tag = new Tuple<FieldInfo, object>(binding, instance),
                        Button = { Content = string.Format("{0}.{1}", catName, elemName) },
                        Label = { Text = string.Join(" + ", keys.Select(k => Converter.ConvertToString(k))) }
                    };

                    control.Button.Tag = control;

                    control.Button.Click += ElementClicked;
                    InputElementWrapper.Children.Add(control);
                }
            }
        }