| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 | 
							- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Windows;
 
- using System.Windows.Controls;
 
- using System.Windows.Media;
 
- using InABox.Core;
 
- namespace InABox.DynamicGrid
 
- {
 
-     public class LookupEditorControl : DynamicEditorControl<object>, ILookupEditorControl
 
-     {
 
-         private ComboBox Editor;
 
-         private CoreTable LookupTable;
 
-         public LookupEditorControl()
 
-         {
 
-             OtherColumns = new Dictionary<string, string>();
 
-             Lookups = new Dictionary<object, string>();
 
-             Width = int.MaxValue;
 
-         }
 
-         public int Width { get; set; }
 
-         public Dictionary<object, string> Lookups { get; set; }
 
-         public Dictionary<string, string> OtherColumns { get; }
 
-         public override void Configure()
 
-         {
 
-             base.Configure();
 
-             Editor.HorizontalAlignment = Width.Equals(int.MaxValue) ? HorizontalAlignment.Stretch : HorizontalAlignment.Left;
 
-             if (!Width.Equals(int.MaxValue))
 
-                 Editor.Width = Width;
 
-             Editor.IsEnabled = false;
 
-             OnDefineLookups?.Invoke(this);
 
-         }
 
-         public void LoadLookups(CoreTable values)
 
-         {
 
-             var keycol = ColumnName.Split('.').Last();
 
-             var prefix = string.Join(".", ColumnName.Split('.').Reverse().Skip(1).Reverse());
 
-             foreach (var col in values.Columns)
 
-                 if (!string.Equals(col.ColumnName, keycol) && !string.Equals(col.ColumnName, "Display"))
 
-                     if (!OtherColumns.ContainsKey(col.ColumnName))
 
-                         OtherColumns[col.ColumnName] = string.IsNullOrWhiteSpace(prefix) ? col.ColumnName : string.Join(".", prefix, col.ColumnName);
 
-             var value = RetrieveValue();
 
-             //Lookups = lookups;
 
-             LookupTable = values;
 
-             Editor.Items.Clear();
 
-             Lookups.Clear();
 
-             if (!IsEnumEditor())
 
-                 Editor.Items.Add("");
 
-             foreach (var row in values.Rows)
 
-             {
 
-                 Editor.Items.Add(row["Display"]);
 
-                 Lookups[row[keycol]] = string.Format("{0}", row["Display"]);
 
-             }
 
-             var sel = values.Rows.FirstOrDefault(r => r[keycol].Equals(value));
 
-             if (IsEnumEditor())
 
-                 Editor.SelectedIndex = sel != null ? sel.Index : 0;
 
-             else
 
-                 Editor.SelectedIndex = sel != null ? sel.Index + 1 : 0;
 
-             //foreach (var key in lookups.Keys)
 
-             //    Editor.Items.Add(lookups[key]);
 
-             //if ((value != null) && Lookups.ContainsKey(value))
 
-             //    Editor.SelectedIndex = Lookups.Keys.ToList().IndexOf(value);
 
-             Editor.IsEnabled = EditorDefinition.Editable == Editable.Enabled;
 
-             OnLookupsDefined?.Invoke(this);
 
-         }
 
-         public event OnDefineLookup OnDefineLookups;
 
-         public event OnLookupsDefined OnLookupsDefined;
 
-         public override int DesiredHeight()
 
-         {
 
-             return 25;
 
-         }
 
-         public override void SetFocus()
 
-         {
 
-             Editor.Focus();
 
-         }
 
-         private bool IsEnumEditor()
 
-         {
 
-             return EditorDefinition is EnumLookupEditor;
 
-         }
 
-         public List<Button> Buttons { get; private set; }
 
-         protected override FrameworkElement CreateEditor()
 
-         {
 
-             var dock = new DockPanel();
 
-             Buttons = CreateButtons(out var DisableEditor);
 
-             foreach (var button in Buttons)
 
-             {
 
-                 button.SetValue(DockPanel.DockProperty, Dock.Right);
 
-                 dock.Children.Add(button);
 
-                 dock.Width += button.Width + 5;
 
-             }
 
-             Editor = new ComboBox
 
-             {
 
-                 VerticalAlignment = VerticalAlignment.Stretch,
 
-                 VerticalContentAlignment = VerticalAlignment.Center,
 
-                 HorizontalAlignment = Width.Equals(int.MaxValue) ? HorizontalAlignment.Stretch : HorizontalAlignment.Left
 
-             };
 
-             if (!Width.Equals(int.MaxValue))
 
-                 Width = Width;
 
-             Editor.SelectionChanged += Combobox_SelectionChanged;
 
-             Editor.IsEnabled = false;
 
-             if (DisableEditor)
 
-             {
 
-                 Editor.Background = new SolidColorBrush(Colors.Silver);
 
-                 Editor.IsEnabled = false;
 
-             }
 
-             dock.Children.Add(Editor);
 
-             return dock;
 
-         }
 
-         private void Combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
 
-         {
 
-             if (!Editor.IsEnabled)
 
-                 return;
 
-             if (LookupTable != null)
 
-             {
 
-                 var keycol = ColumnName.Split('.').Last();
 
-                 var row = LookupTable.Rows.FirstOrDefault(r => object.Equals(r[keycol], RetrieveValue()));
 
-                 foreach (var field in LookupTable.Columns.Where(x => OtherColumns.ContainsKey(x.ColumnName)))
 
-                 {
 
-                     var othervalue = row?[field.ColumnName];
 
-                     OtherValues[OtherColumns[field.ColumnName]] = othervalue;
 
-                 }
 
-             }
 
-             CheckChanged();
 
-         }
 
-         public event OnUpdateOtherEditorHandler OnUpdateOtherEditor;
 
-         public override int DesiredWidth()
 
-         {
 
-             return int.MaxValue;
 
-         }
 
-         protected override object RetrieveValue()
 
-         {
 
-             if (IsEnumEditor())
 
-             {
 
-                 if (Editor.SelectedIndex >= 0 && Editor.SelectedIndex < Lookups.Keys.Count)
 
-                     return Lookups.Keys.ElementAt(Editor.SelectedIndex);
 
-             }
 
-             else
 
-             {
 
-                 if (Editor.SelectedIndex > 0 && Editor.SelectedIndex <= Lookups.Keys.Count)
 
-                     return Lookups.Keys.ElementAt(Editor.SelectedIndex - 1);
 
-             }
 
-             return null;
 
-         }
 
-         protected override void UpdateValue(object value)
 
-         {
 
-             if (Editor == null)
 
-                 return;
 
-             if (value == null)
 
-             {
 
-                 Editor.SelectedItem = null;
 
-                 return;
 
-             }
 
-             if (!Loaded && !Editor.IsEnabled)
 
-             {
 
-                 Lookups.Clear();
 
-                 Lookups[value] = "Loading";
 
-                 Editor.Items.Clear();
 
-                 Editor.Items.Add("");
 
-                 Editor.Items.Add("Loading...");
 
-                 Editor.SelectedIndex = IsEnumEditor() ? 0 : 1;
 
-                 return;
 
-             }
 
-             if (Lookups.ContainsKey(value))
 
-             {
 
-                 if (IsEnumEditor())
 
-                     Editor.SelectedIndex = Lookups.Keys.ToList().IndexOf(value);
 
-                 else
 
-                     Editor.SelectedIndex = Lookups.Keys.ToList().IndexOf(value) + 1;
 
-             }
 
-             else
 
-             {
 
-                 Editor.SelectedIndex = 0;
 
-             }
 
-         }
 
-         public override void SetColor(Color color)
 
-         {
 
-             //Editor.Background = new SolidColorBrush(color);
 
-         }
 
-         public override void SetEnabled(bool enabled)
 
-         {
 
-             base.SetEnabled(enabled);
 
-             Editor.IsEnabled = enabled;
 
-         }
 
-     }
 
- }
 
 
  |