using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using bsmd.database; 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); } 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 vm = new ValueMapping(); _mappings.Add(vm); } 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 if(e.Column == columnKey) { TextBox t = e.EditingElement as TextBox; string editedCellValue = t.Text; ValueMapping editedMapping = e.Row.Item as ValueMapping; editedMapping.IsDirty = true; foreach(ValueMapping vm in _mappings) { if (vm.Key == editedCellValue) e.Cancel = true; // hopefully this avoids writing back to the model } } } 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) _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) { foreach(ValueMapping vm in _mappings) { if (vm.Key.IsNullOrEmpty()) continue; if (vm.IsNew || vm.IsDirty) await DBManagerAsync.SaveAsync(vm); } } } }