using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Windows.Media;
using DTS.Common.Base;
using DTS.Common.Interface;
// ReSharper disable RedundantDefaultMemberInitializer
// ReSharper disable UnassignedGetOnlyAutoProperty
// ReSharper disable CheckNamespace
namespace DTS.Viewer.GraphList
{
///
/// Main class to bind to treeview
///
public class TreeViewChannels : IBaseModel
{
private string _name = string.Empty;
public string Name { get => _name; set { _name = value; OnPropertyChanged("Name"); } }
private ObservableCollection _groups = new ObservableCollection();
public ObservableCollection Groups { get => _groups; set { _groups = value; _groupsCount = _groups.Count; OnPropertyChanged("Groups"); } }
private int _groupsCount = 0;
public int GroupsCount { get => _groupsCount; set { _groupsCount = value; OnPropertyChanged("GroupsCount"); } }
private string _path = string.Empty;
public string Path { get => _path; set { _path = value; OnPropertyChanged("Path"); } }
public bool IsSaved { get; }
private bool _isExpanded = true;
public bool IsExpanded { get => _isExpanded; set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } }
private bool _isSelected = false;
public bool IsSelected { get => _isSelected; set { _isSelected = value; OnPropertyChanged("IsSelected"); } }
#region PropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion PropertyChanged
}
///
/// Child class for TreeViewChannels
///
public class TestGroup : INotifyPropertyChanged
{
private string _path = string.Empty;
public string Path { get => _path; set { _path = value; OnPropertyChanged("Path"); } }
private string _dtsFile = string.Empty;
public string DTSFile { get => _dtsFile; set { _dtsFile = value; OnPropertyChanged("DTSFile"); } }
private IBaseViewModel _parent;
///
/// Parent ViewModel
///
public IBaseViewModel Parent { get => _parent; set { _parent = value; OnPropertyChanged("Parent"); } }
private bool _isLocked = false;
///
/// Locked Graph - call parent function to lock graph's channels
///
public bool IsLocked
{
get => _isLocked;
set
{
_isLocked = value;
((IGraphMainViewModel)Parent).AddLockedGroupChannels(TestName, Name, Channels.ToList(), _isLocked);
OnPropertyChanged("IsLocked");
}
}
private bool _isGraph = false;
public bool IsGraph { get => _isGraph; set { _isGraph = value; OnPropertyChanged("IsGraph"); } }
private bool _isExpanded = true;
public bool IsExpanded { get => _isExpanded; set { _isExpanded = value; OnPropertyChanged("IsExpanded"); } }
private bool _canLock = true;
public bool CanLock
{
get => _canLock;
set
{
_canLock = value;
OnPropertyChanged("CanLock");
}
}
private bool _isSelected = false;
///
/// Selected Graph - call parent function to select graph's channels
///
public bool IsSelected
{
get => _isSelected;
set
{
if (!CanLock && value)
{
return; //ignore, don't select
}
if (Name.StartsWith("Test Channels") || Name.StartsWith("Calculated Channels")) return;
var prevValue = _isSelected;
_isSelected = value;
if (IsSelected && IsSelected != prevValue) ((IGraphMainViewModel)Parent).AddSelectedGroupChannels(Name, Channels.ToList());
OnPropertyChanged("IsSelected");
}
}
private string _testName = string.Empty;
public string TestName { get => _testName; set { _testName = value; OnPropertyChanged("TestName"); } }
private string _name = string.Empty;
public string Name { get => _name; set { _name = value; OnPropertyChanged("Name"); } }
private string _displayName = string.Empty;
public string DisplayName { get => _displayName; set { _displayName = value; OnPropertyChanged("DisplayName"); } }
private ObservableCollection _channels = new ObservableCollection();
public ObservableCollection Channels { get => _channels; set { _channels = value; _channelCount = _channels.Count; OnPropertyChanged("Channels"); } }
private int _channelCount = 0;
public int ChannelCount { get => _channelCount; set { _channelCount = value; OnPropertyChanged("ChannelCount"); } }
#region PropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
#endregion PropertyChanged
}
}