using DTS.Common;
using DTS.Common.Converters;
using DTS.Common.Enums.Hardware;
using DTS.Common.Interface.Hardware.AddEditHardware;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
// ReSharper disable CheckNamespace
namespace AddEditHardware
{
///
///
/// Interaction logic for AddEditHardwareView.xaml
///
public partial class AddEditHardwareView : IAddEditHardwareView, INotifyPropertyChanged
{
#region IPropertyNotified
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty(ref T storage, T value, string propertyName = null)
{
if (Equals(storage, value)) return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion #PropertyNotified
///
/// whether the SLICE6TreeView should be shown or not
///
public bool AllowStandin
{
get
{
if (null == DataContext) { return true; }
if (!(DataContext is IAddEditHardwareViewModel vm)) { return true; }
return vm.AllowStandin;
}
}
private static List _allDASTypes = new List();
private static HardwareTypes[] AvailableDASType(int ConnectionDbVersion)
{
lock (_allDASTypes)
{
if (!_allDASTypes.Any())
{
PopulateDASTypes(ConnectionDbVersion);
}
}
return _allDASTypes.ToArray();
}
private static void PopulateDASTypes(int ConnectionDbVersion)
{
lock (_allDASTypes)
{
_allDASTypes.AddRange(new[]
{
HardwareTypes.TDAS_Pro_Rack,
HardwareTypes.TDAS_LabRack,
HardwareTypes.G5INDUMMY,
HardwareTypes.G5VDS,
HardwareTypes.SLICE_NANO_Base,
HardwareTypes.SLICE_Micro_Base,
HardwareTypes.SLICE_Distributor,
HardwareTypes.SLICE_EthernetController,
HardwareTypes.SLICE_Mini_Distributor,
HardwareTypes.SLICE_LabEthernet,
HardwareTypes.SLICE1_5_Nano_Base,
HardwareTypes.SLICE1_5_Micro_Base,
HardwareTypes.SLICE2_SIM,
HardwareTypes.SLICE2_DIM,
HardwareTypes.SLICE2_TOM,
HardwareTypes.SLICE2_SLS,
HardwareTypes.SLICE2_SLD,
HardwareTypes.SLICE2_SLT,
HardwareTypes.SLICE6DB,
HardwareTypes.SLICE6DB3,
HardwareTypes.SLICE_Pro_Distributor,
HardwareTypes.SLICE6DB_InDummy,
HardwareTypes.SLICE6_Base,
HardwareTypes.SLICE6_AIR,
HardwareTypes.PowerPro,
HardwareTypes.TSR_AIR_RevB,
HardwareTypes.SLICE1_G5Stack,
HardwareTypes.S6A_EthernetRecorder
});
if (ConnectionDbVersion >= Constants.SLICE6AIR_BR_DB_VERSION)
{
_allDASTypes.Add(HardwareTypes.SLICE6_AIR_BR);
}
if (ConnectionDbVersion >= Constants.SLICE_TC_DB_VERSION)
{
_allDASTypes.Add(HardwareTypes.SLICE6_AIR_TC);
}
_allDASTypes.Sort((a, b) =>
{
return EnumDescriptionTypeConverter.GetEnumDescription(a)
.CompareTo(EnumDescriptionTypeConverter.GetEnumDescription(b));
});
}
}
private static SLICEPROSIMConfigurations[] _availableSliceProSimConfigurations = new[]
{
SLICEPROSIMConfigurations.MEGA,
SLICEPROSIMConfigurations.EIGHT_HUNDRED,
SLICEPROSIMConfigurations.SEVEN_HUNDRED,
SLICEPROSIMConfigurations.SIX_HUNDRED
};
private static SLICETCConfigurations[] _availableSliceTCConfigurations = new[]
{
SLICETCConfigurations.EIGHT,
SLICETCConfigurations.SIXTEEN,
SLICETCConfigurations.TWENTYFOUR
};
private static RackSizes[] _availableRackSizes = new[]
{
RackSizes.FOUR,
RackSizes.EIGHT
};
public AddEditHardwareView()
{
InitializeComponent();
cbHardwareTypes.ItemsSource = AvailableDASType(ViewDbVersion);
cbSliceProSimConfigurations.ItemsSource = _availableSliceProSimConfigurations;
cbSliceTCConfigurations.ItemsSource = _availableSliceTCConfigurations;
cbRackSize.ItemsSource = _availableRackSizes;
}
private void btnRemoveModule_Click(object sender, RoutedEventArgs e)
{
if (!(sender is Control control))
{
return;
}
if (!(control.DataContext is IAddEditHardwareDASModule dasModule))
{
return;
}
dasModule.OwningHardware.RemoveModule(dasModule);
if (!(ctrlView.DataContext is AddEditHardwareViewModel vm)) { return; }
vm.NotifyModified();
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
if (!(sender is Control control))
{
return;
}
if (!(control.DataContext is IAddEditHardwareHardware hardware))
{
return;
}
hardware.AddModule();
if (!(ctrlView.DataContext is AddEditHardwareViewModel vm)) { return; }
vm.NotifyModified();
}
private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!(ctrlView.DataContext is AddEditHardwareViewModel vm)) { return; }
vm.NotifyModified();
}
private void cb_Checked(object sender, RoutedEventArgs e)
{
if (!(ctrlView.DataContext is AddEditHardwareViewModel vm)) { return; }
vm.NotifyModified();
}
private void cb_Unchecked(object sender, RoutedEventArgs e)
{
if (!(ctrlView.DataContext is AddEditHardwareViewModel vm)) { return; }
vm.NotifyModified();
}
private void tb_TextChanged(object sender, TextChangedEventArgs e)
{
if (!(ctrlView.DataContext is AddEditHardwareViewModel vm)) { return; }
vm.NotifyModified();
}
///
/// handle any initialization that should occur when view is activated
///
public void Activated()
{
OnPropertyChanged("AllowStandin");
if (!(DataContext is IAddEditHardwareViewModel vm)) { return; }
if (null != vm.SLICE6TreeView)
{
SLICE6TreeView.Content = vm.SLICE6TreeView;
}
}
private int _DbVersion = DTS.Common.Storage.DbOperations.MINIMUM_LTS_DB_VERSION;
public int ViewDbVersion
{
get => _DbVersion;
set
{
SetProperty(ref _DbVersion, value, "ViewDbVersion");
lock (_allDASTypes)
{
_allDASTypes.Clear();
}
cbHardwareTypes.ItemsSource = AvailableDASType(ViewDbVersion);
}
}
}
}