using bsmd.database; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media.Imaging; namespace ENI2.Controls { /// /// Interaction logic for ValueMappingsControl.xaml /// public partial class ValueMappingsControl : UserControl { private readonly ObservableCollection _mappings = new ObservableCollection(); private DataGridCellInfo activeCellAtEdit; public ValueMappingsControl() { InitializeComponent(); } private void UserControl_Loaded(object sender, RoutedEventArgs e) { this.comboBoxType.ItemsSource = Enum.GetValues(typeof(ValueMapping.MappingType)).Cast(); this.dataGridValueMappings.ItemsSource = _mappings; this.dataGridValueMappings.ContextMenu = new ContextMenu(); MenuItem addItem = new MenuItem { Header = Properties.Resources.textAdd, Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/add.png")) } }; addItem.Click += AddItem_Click; this.dataGridValueMappings.ContextMenu.Items.Add(addItem); MenuItem delItem = new MenuItem { Header = Properties.Resources.textDelete, Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/delete.png")) } }; delItem.Click += DelItem_Click; this.dataGridValueMappings.ContextMenu.Items.Add(delItem); MenuItem invalidItem = new MenuItem { Header = "Set as invalid key", Icon = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/sign_warning_radiation.png")) } }; invalidItem.Click += InvalidItem_Click; this.dataGridValueMappings.ContextMenu.Items.Add(invalidItem); } #region context menu event handler private void InvalidItem_Click(object sender, RoutedEventArgs e) { if (this.dataGridValueMappings.SelectedItem is ValueMapping vm) { vm.Value = "*"; } } private async void DelItem_Click(object sender, RoutedEventArgs e) { if (this.dataGridValueMappings.SelectedItem is ValueMapping vm) { if (MessageBox.Show($"Are you sure to delete {vm.Key} -> {vm.Value}?", Properties.Resources.textConfirmation, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { int result = await DBManagerAsync.DeleteAsync(vm); if (result == 1) { _mappings.Remove(vm); } } } } private void AddItem_Click(object sender, RoutedEventArgs e) { ValueMapping.MappingType? mappingType = (ValueMapping.MappingType?) this.comboBoxType.SelectedItem; if (mappingType == null) return; ValueMapping vm = ValueMapping.Create(mappingType.Value); _mappings.Add(vm); } #endregion private void dataGridValueMappings_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { // we need to check that there are no keys entered twice or changed into something that is already here string newValue = ((TextBox)e.EditingElement).Text; if (newValue == null) return; if (e.Column == columnKey) { ValueMapping editedMapping = e.Row.Item as ValueMapping; foreach(ValueMapping vm in _mappings) { if (vm == editedMapping) continue; // dont compare with myself if (vm.Key == newValue) { ((TextBox)e.EditingElement).Text = editedMapping.Key; e.Cancel = true; // hopefully this avoids writing back to the model } } } if(e.Column == columnValue) { ValueMapping editedMapping = e.Row.Item as ValueMapping; ValueMapping.MappingType? mappingType = (ValueMapping.MappingType)this.comboBoxType.SelectedItem; if ((mappingType != null) && (newValue != null)) { switch (mappingType) { case ValueMapping.MappingType.GENDER: if (Util.GlobalStructures.GenderDict.ContainsKey(newValue)) editedMapping.ValueText = Util.GlobalStructures.GenderDict[newValue]; else editedMapping.ValueText = ""; break; case ValueMapping.MappingType.DOCUMENT_TYPE: if (Util.GlobalStructures.IDDocTypeDict.ContainsKey(newValue)) editedMapping.ValueText = Util.GlobalStructures.IDDocTypeDict[newValue]; else editedMapping.ValueText = ""; break; default: editedMapping.ValueText = newValue; break; } } } } private void dataGridValueMappings_MouseDoubleClick(object sender, MouseButtonEventArgs e) { } private void buttonImport_Click(object sender, RoutedEventArgs e) { } private void buttonExport_Click(object sender, RoutedEventArgs e) { } private async void comboBoxType_SelectionChanged(object sender, SelectionChangedEventArgs e) { this._mappings.Clear(); if(this.comboBoxType.SelectedItem != null) { ValueMapping.MappingType mappingType = (ValueMapping.MappingType)this.comboBoxType.SelectedItem; List mappings = await DBManagerAsync.LoadValuesForType(mappingType); foreach (ValueMapping vm in mappings) { // add "Klartext" switch(mappingType) { case ValueMapping.MappingType.GENDER: if (Util.GlobalStructures.GenderDict.ContainsKey(vm.Value)) vm.ValueText = Util.GlobalStructures.GenderDict[vm.Value]; break; case ValueMapping.MappingType.DOCUMENT_TYPE: if (Util.GlobalStructures.IDDocTypeDict.ContainsKey(vm.Value)) vm.ValueText = Util.GlobalStructures.IDDocTypeDict[vm.Value]; break; default: vm.ValueText = vm.Value; break; } _mappings.Add(vm); } } } private void dataGridValueMappings_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) { this.activeCellAtEdit = this.dataGridValueMappings.CurrentCell; } private async void buttonSave_Click(object sender, RoutedEventArgs e) { int totalSaves = 0; foreach(ValueMapping vm in _mappings) { if (vm.Key.IsNullOrEmpty()) continue; if (vm.IsNew || vm.IsDirty) { totalSaves += await DBManagerAsync.SaveAsync(vm); } } if(totalSaves > 0) { MessageBox.Show($"{totalSaves} value mappings saved", "Success", MessageBoxButton.OK, MessageBoxImage.Information); } } } }