/// <summary> /// Determines whether the given set of values defines a valid range or not. /// A valid range adheres to this constrain: MinValue <= Value <= MaxValue. /// </summary> /// <param name="range"></param> /// <returns></returns> bool IsValidRange(LongUpDown range) { if (range.MinValue <= range.Value && range.Value <= range.MaxValue) { return(true); } return(false); }
private FrameworkElement GenerateLongUpDown(PropertyInfo property, Binding binding) { #if !SILVERLIGHT LongUpDown integerUpDown = new LongUpDown() { Margin = new Thickness(0, 3, 18, 3) }; integerUpDown.IsReadOnly = !(bindables[property.Name].Direction == BindingDirection.TwoWay); if (property.PropertyType == typeof(Int64) || property.PropertyType == typeof(Int64?)) { integerUpDown.Maximum = Int64.MaxValue; integerUpDown.Minimum = Int64.MinValue; } else if (property.PropertyType == typeof(UInt64) || property.PropertyType == typeof(UInt64?)) { integerUpDown.Maximum = Int64.MaxValue; integerUpDown.Minimum = 0; } // Binding this.bindings.Add(property.Name, integerUpDown.SetBinding(IntegerUpDown.ValueProperty, binding)); #else Border integerUpDown = new Border() { Opacity = 1.0, Background = new SolidColorBrush(Colors.White), Margin = new Thickness(0, 3, 18, 3) }; NumericUpDown n = new NumericUpDown() { }; integerUpDown.Child = n; n.IsEnabled = (bindables[property.Name].Direction == BindingDirection.TwoWay); if (property.PropertyType == typeof(Int64) || property.PropertyType == typeof(Int64?)) { n.Maximum = Int64.MaxValue; n.Minimum = Int64.MinValue; } else if (property.PropertyType == typeof(UInt64) || property.PropertyType == typeof(UInt64?)) { n.Maximum = UInt64.MaxValue; n.Minimum = UInt64.MinValue; } // Binding this.bindings.Add(property.Name, n.SetBinding(NumericUpDown.ValueProperty, binding)); #endif return(integerUpDown); }
// TODO: Infer Null value type to handle public static FrameworkElement GetBsonValueEditor( OpenEditorMode openMode, string bindingPath, BsonValue bindingValue, object bindingSource, bool readOnly, string keyName) { var binding = new Binding { Path = new PropertyPath(bindingPath), Source = bindingSource, Mode = BindingMode.TwoWay, Converter = new BsonValueToNetValueConverter(), UpdateSourceTrigger = UpdateSourceTrigger.Explicit }; if (bindingValue.IsArray) { var arrayValue = bindingValue as BsonArray; if (openMode == OpenEditorMode.Window) { var button = new Button { Content = $"[Array] {arrayValue?.Count} {keyName}", Style = StyleKit.MaterialDesignEntryButtonStyle }; button.Click += (s, a) => { arrayValue = bindingValue as BsonArray; var windowController = new WindowController { Title = "Array Editor" }; var control = new ArrayEntryControl(arrayValue, readOnly, windowController); var window = new DialogWindow(control, windowController) { Owner = Application.Current.MainWindow, Height = 600 }; if (window.ShowDialog() == true) { arrayValue?.Clear(); arrayValue?.AddRange(control.EditedItems); button.Content = $"[Array] {arrayValue?.Count} {keyName}"; } }; return(button); } var contentView = new ContentExpander { LoadButton = { Content = $"[Array] {arrayValue?.Count} {keyName}" } }; contentView.LoadButton.Click += (s, a) => { if (contentView.ContentLoaded) { return; } arrayValue = bindingValue as BsonArray; var control = new ArrayEntryControl(arrayValue, readOnly); control.CloseRequested += (sender, args) => { contentView.Content = null; }; contentView.Content = control; }; return(contentView); } if (bindingValue.IsDocument) { var expandLabel = "[Document]"; if (openMode == OpenEditorMode.Window) { var button = new Button { Content = expandLabel, Style = StyleKit.MaterialDesignEntryButtonStyle }; button.Click += (s, a) => { var windowController = new WindowController { Title = "Document Editor" }; var bsonDocument = bindingValue as BsonDocument; var control = new DocumentEntryControl(bsonDocument, readOnly, windowController); var window = new DialogWindow(control, windowController) { Owner = Application.Current.MainWindow, Height = 600 }; window.ShowDialog(); }; return(button); } var contentView = new ContentExpander { LoadButton = { Content = expandLabel } }; contentView.LoadButton.Click += (s, a) => { if (contentView.ContentLoaded) { return; } var bsonDocument = bindingValue as BsonDocument; var control = new DocumentEntryControl(bsonDocument, readOnly); control.CloseRequested += (sender, args) => { contentView.Content = null; }; contentView.Content = control; }; return(contentView); } if (bindingValue.IsBoolean) { var check = new CheckBox { IsEnabled = !readOnly, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0) }; check.SetBinding(ToggleButton.IsCheckedProperty, binding); return(check); } if (bindingValue.IsDateTime) { var datePicker = new DateTimePicker { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0) }; datePicker.SetBinding(DateTimePicker.ValueProperty, binding); return(datePicker); } if (bindingValue.IsDouble) { var numberEditor = new DoubleUpDown { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0) }; numberEditor.SetBinding(DoubleUpDown.ValueProperty, binding); return(numberEditor); } if (bindingValue.IsDecimal) { var numberEditor = new DecimalUpDown { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0) }; numberEditor.SetBinding(DecimalUpDown.ValueProperty, binding); return(numberEditor); } if (bindingValue.IsInt32) { var numberEditor = new IntegerUpDown { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0) }; numberEditor.SetBinding(IntegerUpDown.ValueProperty, binding); return(numberEditor); } if (bindingValue.IsInt64) { var numberEditor = new LongUpDown { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 0, 0) }; numberEditor.SetBinding(LongUpDown.ValueProperty, binding); return(numberEditor); } if (bindingValue.IsString) { var stringEditor = new TextBox { IsReadOnly = readOnly, AcceptsReturn = true, VerticalAlignment = VerticalAlignment.Center, MaxHeight = 200, MaxLength = 1024, VerticalScrollBarVisibility = ScrollBarVisibility.Auto, }; stringEditor.SetBinding(TextBox.TextProperty, binding); return(stringEditor); } if (bindingValue.IsBinary) { var text = new TextBlock { Text = "[Binary Data]", VerticalAlignment = VerticalAlignment.Center, }; return(text); } if (bindingValue.IsObjectId) { var text = new TextBox { Text = bindingValue.AsString, IsReadOnly = true, VerticalAlignment = VerticalAlignment.Center, }; return(text); } var defaultEditor = new TextBox { VerticalAlignment = VerticalAlignment.Center, MaxHeight = 200, MaxLength = 1024, VerticalScrollBarVisibility = ScrollBarVisibility.Auto, }; defaultEditor.SetBinding(TextBox.TextProperty, binding); return(defaultEditor); }
private void UpdateControls() { if (String.IsNullOrWhiteSpace(VariableTitle)) { this.txtBlk_name.Visibility = Visibility.Collapsed; } else { this.txtBlk_name.Visibility = Visibility.Visible; this.txtBlk_name.Text = VariableTitle; } if (String.IsNullOrWhiteSpace(VariableRemark)) { this.txtBlk_remark.Visibility = Visibility.Collapsed; } else { this.txtBlk_remark.Visibility = Visibility.Visible; this.txtBlk_remark.Text = VariableRemark; } if (VariableDefaultObject == null) { this.btn_reset.Visibility = Visibility.Collapsed; } else { this.btn_reset.Visibility = Visibility.Visible; } //Create a control here... grd_control.Children.Clear(); if (VariableObject != null) { Type var_type = VariableObject.GetType(); if (var_type == typeof(bool)) { CheckBox chkbx_control = new CheckBox(); chkbx_control.Content = ""; chkbx_control.IsChecked = (bool)VariableObject; chkbx_control.Checked += Chkbx_control_VarChanged; chkbx_control.Unchecked += Chkbx_control_VarChanged; grd_control.Children.Add(chkbx_control); } else if (var_type == typeof(string)) { TextBox txtbx_control = new TextBox(); txtbx_control.Text = (string)VariableObject; txtbx_control.TextChanged += Txtbx_control_TextChanged; grd_control.Children.Add(txtbx_control); } else if (var_type == typeof(int)) { IntegerUpDown intUpDown_control = new IntegerUpDown(); intUpDown_control.Value = (int)VariableObject; intUpDown_control.ValueChanged += IntUpDown_control_ValueChanged; grd_control.Children.Add(intUpDown_control); } else if (var_type == typeof(long)) { LongUpDown longUpDown_control = new LongUpDown(); longUpDown_control.Value = (long)VariableObject; longUpDown_control.ValueChanged += LongUpDown_control_ValueChanged; grd_control.Children.Add(longUpDown_control); } else if (var_type == typeof(float)) { DoubleUpDown floatUpDown_control = new DoubleUpDown(); floatUpDown_control.Value = (float)VariableObject; floatUpDown_control.ValueChanged += FloatUpDown_control_ValueChanged; grd_control.Children.Add(floatUpDown_control); } else if (var_type == typeof(double)) { DoubleUpDown doubleUpDown_control = new DoubleUpDown(); doubleUpDown_control.Value = (double)VariableObject; doubleUpDown_control.ValueChanged += DoubleUpDown_control_ValueChanged; grd_control.Children.Add(doubleUpDown_control); } else if (var_type == typeof(System.Drawing.Color)) { ColorPicker colorPickerDrawing_control = new ColorPicker(); colorPickerDrawing_control.SelectedColor = Utils.ColorUtils.DrawingColorToMediaColor((System.Drawing.Color)VariableObject); colorPickerDrawing_control.ColorMode = ColorMode.ColorCanvas; colorPickerDrawing_control.SelectedColorChanged += ColorPickerDrawing_control_SelectedColorChanged; grd_control.Children.Add(colorPickerDrawing_control); } else if (var_type == typeof(System.Windows.Media.Color)) { ColorPicker colorPickerMedia_control = new ColorPicker(); colorPickerMedia_control.SelectedColor = (System.Windows.Media.Color)VariableObject; colorPickerMedia_control.ColorMode = ColorMode.ColorCanvas; colorPickerMedia_control.SelectedColorChanged += ColorPickerMedia_control_SelectedColorChanged; grd_control.Children.Add(colorPickerMedia_control); } else if (var_type == typeof(Aurora.Settings.KeySequence)) { Aurora.Controls.KeySequence ctrl = new Aurora.Controls.KeySequence(); ctrl.Sequence = (Aurora.Settings.KeySequence)VariableObject; ctrl.SequenceUpdated += keySequenceControlValueChanged; ctrl.RecordingTag = VariableTitle; grd_control.Children.Add(ctrl); } else if (var_type == typeof(Aurora.Utils.RealColor)) { ColorPicker ctrl = new ColorPicker(); ctrl.ColorMode = ColorMode.ColorCanvas; Aurora.Utils.RealColor clr = (Aurora.Utils.RealColor)VariableObject; ctrl.SelectedColor = clr.GetMediaColor(); ctrl.SelectedColorChanged += colorPickerControlValueChanged; grd_control.Children.Add(ctrl); } else if (var_type.IsEnum) { ComboBox cmbbxEnum_control = new ComboBox(); cmbbxEnum_control.ItemsSource = Enum.GetValues(var_type); cmbbxEnum_control.SelectedValue = (Enum)VariableObject; cmbbxEnum_control.SelectionChanged += CmbbxEnum_control_SelectionChanged; grd_control.Children.Add(cmbbxEnum_control); } } grd_control.UpdateLayout(); }
private void UpdateControls() { string var_title = VarRegistry.GetTitle(VariableName); if (String.IsNullOrWhiteSpace(var_title)) { this.txtBlk_name.Text = VariableName; } else { this.txtBlk_name.Text = var_title; } string var_remark = VarRegistry.GetRemark(VariableName); if (String.IsNullOrWhiteSpace(var_remark)) { this.txtBlk_remark.Visibility = Visibility.Collapsed; } else { this.txtBlk_remark.Text = var_remark; } //Create a control here... Type var_type = VarRegistry.GetVariableType(VariableName); grd_control.Children.Clear(); if (var_type == typeof(bool)) { CheckBox chkbx_control = new CheckBox(); chkbx_control.Content = ""; chkbx_control.IsChecked = VarRegistry.GetVariable <bool>(VariableName); chkbx_control.Checked += Chkbx_control_VarChanged; chkbx_control.Unchecked += Chkbx_control_VarChanged; grd_control.Children.Add(chkbx_control); } else if (var_type == typeof(string)) { TextBox txtbx_control = new TextBox(); txtbx_control.Text = VarRegistry.GetVariable <string>(VariableName); txtbx_control.TextChanged += Txtbx_control_TextChanged; grd_control.Children.Add(txtbx_control); } else if (var_type == typeof(int)) { if (VarRegistry.GetFlags(VariableName).HasFlag(VariableFlags.UseHEX)) { TextBox hexBox = new TextBox(); hexBox.PreviewTextInput += HexBoxOnPreviewTextInput; hexBox.Text = string.Format("{0:X}", VarRegistry.GetVariable <int>(VariableName)); hexBox.TextChanged += HexBox_TextChanged; grd_control.Children.Add(hexBox); } else { IntegerUpDown intUpDown_control = new IntegerUpDown(); intUpDown_control.Value = VarRegistry.GetVariable <int>(VariableName); int max_val, min_val = 0; if (VarRegistry.GetVariableMax <int>(VariableName, out max_val)) { intUpDown_control.Maximum = max_val; } if (VarRegistry.GetVariableMin <int>(VariableName, out min_val)) { intUpDown_control.Minimum = min_val; } intUpDown_control.ValueChanged += IntUpDown_control_ValueChanged; grd_control.Children.Add(intUpDown_control); } } else if (var_type == typeof(long)) { LongUpDown longUpDown_control = new LongUpDown(); longUpDown_control.Value = VarRegistry.GetVariable <long>(VariableName); long max_val, min_val = 0; if (VarRegistry.GetVariableMax <long>(VariableName, out max_val)) { longUpDown_control.Maximum = max_val; } if (VarRegistry.GetVariableMin <long>(VariableName, out min_val)) { longUpDown_control.Minimum = min_val; } longUpDown_control.ValueChanged += LongUpDown_control_ValueChanged; grd_control.Children.Add(longUpDown_control); } else if (var_type == typeof(Aurora.Settings.KeySequence)) { Aurora.Controls.KeySequence ctrl = new Aurora.Controls.KeySequence(); ctrl.RecordingTag = var_title; ctrl.Sequence = VarRegistry.GetVariable <Aurora.Settings.KeySequence>(VariableName); ctrl.SequenceUpdated += keySequenceControlValueChanged; grd_control.Children.Add(ctrl); } else if (var_type == typeof(Aurora.Utils.RealColor)) { ColorPicker ctrl = new ColorPicker(); ctrl.ColorMode = ColorMode.ColorCanvas; Aurora.Utils.RealColor clr = VarRegistry.GetVariable <Aurora.Utils.RealColor>(VariableName); ctrl.SelectedColor = clr.GetMediaColor(); ctrl.SelectedColorChanged += colorPickerControlValueChanged; grd_control.Children.Add(ctrl); } //else //throw new Exception($"Type {var_type} is not supported!"); grd_control.UpdateLayout(); }
/// <summary> /// Tests all permutions for all sequences of three elements. /// </summary> /// <param name="min"></param> /// <param name="val"></param> /// <param name="max"></param> public void TestAllPermutations(long min, long val, long max) { string[,] ctrl = new string[6, 3] { { "min", "val", "max" }, { "val", "min", "max" }, { "val", "max", "min" }, { "val", "min", "max" }, { "min", "max", "val" }, { "max", "min", "val" }, }; for (int i = 0; i < 6; i++) { var range = new LongUpDown(); string testPermutation = ""; for (int j = 0; j < 3; j++) { var itemToSet = ctrl[i, j]; if (string.IsNullOrEmpty(testPermutation)) { testPermutation = itemToSet; } else { testPermutation += ", " + itemToSet; } switch (itemToSet) { case "min": range.MinValue = min; Assert.IsTrue(IsValidRange(range)); break; case "val": range.Value = val; Assert.IsTrue(IsValidRange(range)); break; case "max": range.MaxValue = max; Assert.IsTrue(IsValidRange(range)); break; default: break; } } Console.WriteLine("Testing Permutation {0}: {1} - min={2}, val={3}, max={4}", i, testPermutation, min, val, max); Assert.IsTrue(IsValidRange(range)); Assert.IsTrue(range.MinValue == min); Assert.IsTrue(range.Value == val); Assert.IsTrue(range.MaxValue == max); // Test if increment command works as expected while (range.MaxValue > range.Value) { Assert.IsTrue(InputBaseUpDown.IncreaseCommand.CanExecute(null, range)); InputBaseUpDown.IncreaseCommand.Execute(null, range); } Assert.IsTrue(range.MaxValue == range.Value); // Test if decrement command works as expected while (range.MinValue < range.Value) { Assert.IsTrue(InputBaseUpDown.DecreaseCommand.CanExecute(null, range)); InputBaseUpDown.DecreaseCommand.Execute(null, range); } Assert.IsTrue(range.MinValue == range.Value); } }
public static FrameworkElement GetBsonValueEditor(string bindingPath, BsonValue bindingValue, object bindingSource, bool readOnly) { var binding = new Binding() { Path = new PropertyPath(bindingPath), Source = bindingSource, Mode = BindingMode.TwoWay, Converter = new BsonValueToNetValueConverter(), UpdateSourceTrigger = UpdateSourceTrigger.Explicit }; if (bindingValue.IsArray) { var button = new Button() { Content = "Array" }; button.Click += (s, a) => { var arrayValue = bindingValue as BsonArray; var window = new Windows.ArrayViewer(arrayValue, readOnly) { Owner = Application.Current.MainWindow }; if (window.ShowDialog() == true) { arrayValue.Clear(); arrayValue.AddRange(window.EditedItems); } }; return(button); } else if (bindingValue.IsBoolean) { var check = new CheckBox() { IsEnabled = !readOnly }; check.SetBinding(ToggleButton.IsCheckedProperty, binding); return(check); } else if (bindingValue.IsDateTime) { var datePicker = new DateTimePicker() { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly }; datePicker.SetBinding(DateTimePicker.ValueProperty, binding); return(datePicker); } else if (bindingValue.IsDocument) { var button = new Button() { Content = "Document" }; button.Click += (s, a) => { var window = new Windows.DocumentViewer(bindingValue as BsonDocument, readOnly) { Owner = Application.Current.MainWindow }; window.ShowDialog(); }; return(button); } else if (bindingValue.IsDouble) { var numberEditor = new DoubleUpDown() { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly }; numberEditor.SetBinding(DoubleUpDown.ValueProperty, binding); return(numberEditor); } else if (bindingValue.IsInt32) { var numberEditor = new IntegerUpDown() { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly }; numberEditor.SetBinding(IntegerUpDown.ValueProperty, binding); return(numberEditor); } else if (bindingValue.IsInt64) { var numberEditor = new LongUpDown() { TextAlignment = TextAlignment.Left, IsReadOnly = readOnly }; numberEditor.SetBinding(LongUpDown.ValueProperty, binding); return(numberEditor); } else if (bindingValue.IsString) { var stringEditor = new TextBox() { IsReadOnly = readOnly, AcceptsReturn = true }; stringEditor.SetBinding(TextBox.TextProperty, binding); return(stringEditor); } else if (bindingValue.IsBinary) { var text = new TextBlock() { Text = "[Binary Data]" }; return(text); } else if (bindingValue.IsObjectId) { var text = new TextBlock() { Text = bindingValue.AsString, IsEnabled = false }; return(text); } else { var stringEditor = new TextBox(); stringEditor.SetBinding(TextBox.TextProperty, binding); return(stringEditor); } }