// Copyright (c) 2017-today schick Informatik // Description: Select classes for import via Excel or for sending them once completed // Returns: Array of selected classes as property using bsmd.database; using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows; namespace ENI2.EditControls { /// /// Interaction logic for SelectImportClassesDialog.xaml /// public partial class SelectImportClassesDialog : ENI2.Controls.EditWindowBase { private readonly List _selectClasses = new List(); private readonly List _selectedClasses = new List(); private readonly List _preselectedClasses = new List(); public SelectImportClassesDialog() { InitializeComponent(); this.Loaded += SelectImportClassesDialog_Loaded; } /// /// List of all message classes that are available for selection /// public List SelectedClasses { get { return _selectedClasses; } } /// /// Classes that should be checked already when the dialog is opened (relevant for send mode) /// public List PreselectedClasses { get { return _preselectedClasses; } } /// /// These messages are needed to derive message classes from, already sorted in the right manner /// public List Messages { get; set; } /// /// Flag to reduce selection amount in case of transit /// public bool IsTransit { get; set; } /// /// Flag if dialog is used in import mode (default true). Set false for send all mode. /// public bool IsImportMode { get; set; } = true; private void SelectImportClassesDialog_Loaded(object sender, RoutedEventArgs e) { foreach (Message aMessage in this.Messages) { // these are of no interest if ((aMessage.MessageNotificationClass == Message.NotificationClass.VISIT) || (aMessage.MessageNotificationClass == Message.NotificationClass.TRANSIT) || (aMessage.MessageNotificationClass == Message.NotificationClass.STO)) continue; // these are neither imported nor sent by the Send all function if ((aMessage.MessageNotificationClass == Message.NotificationClass.ATA) || (aMessage.MessageNotificationClass == Message.NotificationClass.ATD)) continue; // filter out messages not relevant for transit if (IsTransit && ( (aMessage.MessageNotificationClass == Message.NotificationClass.ATA) || (aMessage.MessageNotificationClass == Message.NotificationClass.ATD) || (aMessage.MessageNotificationClass == Message.NotificationClass.BKRD) || (aMessage.MessageNotificationClass == Message.NotificationClass.HAZD) || (aMessage.MessageNotificationClass == Message.NotificationClass.INFO) || (aMessage.MessageNotificationClass == Message.NotificationClass.LADG) || (aMessage.MessageNotificationClass == Message.NotificationClass.NAME) || (aMessage.MessageNotificationClass == Message.NotificationClass.PRE72H) || (aMessage.MessageNotificationClass == Message.NotificationClass.SERV) || (aMessage.MessageNotificationClass == Message.NotificationClass.TIEFD) || (aMessage.MessageNotificationClass == Message.NotificationClass.TOWD) || (aMessage.MessageNotificationClass == Message.NotificationClass.WAS) || (aMessage.MessageNotificationClass == Message.NotificationClass.WAS_RCPT) )) continue; SelectClass sc = new SelectClass(); sc.Name = Enum.GetName(typeof(Message.NotificationClass), aMessage.MessageNotificationClass); sc.Class = aMessage.MessageNotificationClass; sc.IsSelected = this._preselectedClasses.Contains(sc.Class); _selectClasses.Add(sc); } this.checkListBoxClasses.ItemsSource = _selectClasses; this.OKClicked += SelectImportClassesDialog_OKClicked; } private void SelectImportClassesDialog_OKClicked() { foreach(SelectClass sc in _selectClasses) { if (sc.IsSelected) _selectedClasses.Add(sc.Class); } } class SelectClass : INotifyPropertyChanged { private bool _isSelected; public string Name { get; set; } public Message.NotificationClass Class { get; set; } public bool IsSelected { get { return _isSelected; } set { _isSelected = value; OnPropertyChanged("IsSelected"); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } private void buttonAll_Click(object sender, RoutedEventArgs e) { foreach (SelectClass sc in _selectClasses) sc.IsSelected = true; } private void buttonNone_Click(object sender, RoutedEventArgs e) { foreach (SelectClass sc in _selectClasses) sc.IsSelected = false; } } }