213 lines
8.1 KiB
C#
213 lines
8.1 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for ValueMappingsControl.xaml
|
|
/// </summary>
|
|
public partial class ValueMappingsControl : UserControl
|
|
{
|
|
private readonly ObservableCollection<ValueMapping> _mappings = new ObservableCollection<ValueMapping>();
|
|
private DataGridCellInfo activeCellAtEdit;
|
|
|
|
public ValueMappingsControl()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
this.comboBoxType.ItemsSource = Enum.GetValues(typeof(ValueMapping.MappingType)).Cast<ValueMapping.MappingType>();
|
|
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<ValueMapping> 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);
|
|
}
|
|
}
|
|
}
|
|
}
|