using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data; using Tango.Core.Commands; using Tango.Core.DI; using Tango.FSE.Common; using Tango.FSE.Common.Storage; using Tango.FSE.Insights.SciChart; using Tango.SharedUI.Components; namespace Tango.FSE.Insights.Dialogs { public class ExportToCsvDialogViewVM : FSEDialogViewVM { private ICollectionView _view; private bool _preventSelectAllChange; [TangoInject] private IStorageProvider StorageProvider { get; set; } public SelectedObjectCollection SelectedCharts { get; set; } private String _filter; public String Filter { get { return _filter; } set { _filter = value; RaisePropertyChangedAuto(); OnFilterChanged(); } } private bool? _selectAll; public bool? SelectAll { get { return _selectAll; } set { if (_selectAll != value) { _selectAll = value; RaisePropertyChangedAuto(); OnSelectAllChanged(); } } } private String _selectedFile; public String SelectedFile { get { return _selectedFile; } set { _selectedFile = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } public RelayCommand SelectFileCommand { get; set; } public ExportToCsvDialogViewVM(List availableCharts, List visibleCharts) { TangoIOC.Default.Inject(this); OKText = "EXPORT"; SelectedCharts = new SelectedObjectCollection(availableCharts.OrderByDescending(x => visibleCharts.Contains(x)).ToObservableCollection(), visibleCharts.ToObservableCollection()); SelectedCharts.SelectionChanged += SelectedCharts_SelectionChanged; _view = CollectionViewSource.GetDefaultView(SelectedCharts); _view.Filter = FilterCharts; SelectFileCommand = new RelayCommand(SelectFile); } private async void SelectFile() { var result = await StorageProvider.SaveFile("Export Monitors CSV", "CSV Files|*.csv", null, ".csv"); if (result.Confirmed) { SelectedFile = result.SelectedItem; } } private bool FilterCharts(object obj) { if (String.IsNullOrWhiteSpace(Filter)) return true; return (obj as SelectedObject).Data.Description.ToLower().Contains(Filter.ToLower()); } private void SelectedCharts_SelectionChanged(object sender, EventArgs e) { if (!_preventSelectAllChange) { if (SelectedCharts.All(x => x.IsSelected)) { _selectAll = true; } else if (SelectedCharts.Any(x => x.IsSelected)) { _selectAll = null; } else { _selectAll = false; } } RaisePropertyChanged(nameof(SelectAll)); InvalidateRelayCommands(); } protected override bool CanOK() { return base.CanOK() && SelectedCharts.SynchedSource.Count > 0 && SelectedFile != null; } private void OnFilterChanged() { _view?.Refresh(); } private void OnSelectAllChanged() { if (SelectAll != null) { _preventSelectAllChange = true; SelectedCharts.ToList().ForEach(x => x.IsSelected = SelectAll.Value); _preventSelectAllChange = false; } } } }