ExpressionEditorControl.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. using System.Threading.Tasks;
  5. using System.Windows.Controls;
  6. using System.Windows.Media;
  7. using System.Windows;
  8. using InABox.Core;
  9. namespace InABox.DynamicGrid
  10. {
  11. public class ExpressionEditorControl : DynamicEditorControl<string, ExpressionEditor>
  12. {
  13. static ExpressionEditorControl()
  14. {
  15. //DynamicEditorControlFactory.Register<ExpressionEditorControl, ExpressionEditor>();
  16. }
  17. private TextBox TextBox = null!;
  18. private Button Edit = null!;
  19. public ExpressionEditorControl() { }
  20. public override int DesiredHeight()
  21. {
  22. return 25;
  23. }
  24. public override int DesiredWidth()
  25. {
  26. return int.MaxValue;
  27. }
  28. public override void SetColor(Color color)
  29. {
  30. TextBox.Background = new SolidColorBrush(color);
  31. }
  32. public override void SetFocus()
  33. {
  34. TextBox.Focus();
  35. }
  36. public override void Configure()
  37. {
  38. }
  39. protected override FrameworkElement CreateEditor()
  40. {
  41. var grid = new Grid
  42. {
  43. VerticalAlignment = VerticalAlignment.Stretch,
  44. HorizontalAlignment = HorizontalAlignment.Stretch
  45. };
  46. grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
  47. grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
  48. TextBox = new TextBox
  49. {
  50. VerticalAlignment = VerticalAlignment.Stretch,
  51. VerticalContentAlignment = VerticalAlignment.Center,
  52. HorizontalAlignment = HorizontalAlignment.Stretch,
  53. Margin = new Thickness(0, 0, 0, 0),
  54. IsEnabled = false
  55. };
  56. TextBox.SetValue(Grid.ColumnProperty, 0);
  57. TextBox.SetValue(Grid.RowProperty, 0);
  58. Edit = new Button
  59. {
  60. VerticalAlignment = VerticalAlignment.Stretch,
  61. VerticalContentAlignment = VerticalAlignment.Center,
  62. HorizontalAlignment = HorizontalAlignment.Stretch,
  63. Margin = new Thickness(5, 1, 0, 1),
  64. Width = 45,
  65. Content = "Edit",
  66. Focusable = false
  67. };
  68. Edit.SetValue(Grid.ColumnProperty, 1);
  69. Edit.SetValue(Grid.RowProperty, 0);
  70. Edit.Click += EditButton_Click;
  71. grid.Children.Add(TextBox);
  72. grid.Children.Add(Edit);
  73. return grid;
  74. }
  75. private void EditButton_Click(object sender, RoutedEventArgs e)
  76. {
  77. var variables = EditorDefinition.GetVariables(Host.GetItems());
  78. var window = new ExpressionEditorWindow(variables)
  79. {
  80. Expression = TextBox.Text
  81. };
  82. if (window.ShowDialog() == true)
  83. {
  84. TextBox.Text = window.Expression;
  85. CheckChanged();
  86. }
  87. }
  88. protected override string RetrieveValue()
  89. {
  90. return TextBox.Text;
  91. }
  92. protected override void UpdateValue(string value)
  93. {
  94. TextBox.Text = value;
  95. }
  96. }
  97. }