diff --git a/MetaMorpheus/GuiFunctions/MetaDraw/DrawnSequence.cs b/MetaMorpheus/GuiFunctions/MetaDraw/DrawnSequence.cs index 1dfb9f5fa..11009fb7d 100644 --- a/MetaMorpheus/GuiFunctions/MetaDraw/DrawnSequence.cs +++ b/MetaMorpheus/GuiFunctions/MetaDraw/DrawnSequence.cs @@ -381,25 +381,26 @@ public static void ClearCanvas(Canvas cav) public static SolidColorBrush ParseColorBrushFromOxyColor(OxyColor color) { - var colorVal = color.ToByteString().Split(','); - return new SolidColorBrush(System.Windows.Media.Color.FromArgb(Byte.Parse(colorVal[0]), Byte.Parse(colorVal[1]), Byte.Parse(colorVal[2]), Byte.Parse(colorVal[3]))); + return new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B)); } public static SolidColorBrush ParseColorBrushFromName(string name) { - OxyColor color = MetaDrawSettings.PossibleColors.Keys.Where(p => p.GetColorName().Equals(name.Replace(" ", ""))).First(); - return ParseColorBrushFromOxyColor(color); + string cleanedName = name.Replace(" ", ""); + var foundColor = MetaDrawSettings.PossibleColors.FirstOrDefault(p => p.Value == cleanedName).Key; + return ParseColorBrushFromOxyColor(foundColor == default ? MetaDrawSettings.FallbackColor : foundColor); } public static OxyColor ParseOxyColorFromName(string name) { - return MetaDrawSettings.PossibleColors.Keys.Where(p => p.GetColorName().Equals(name.Replace(" ", ""))).First(); + string cleanedName = name.Replace(" ", ""); + var foundColor = MetaDrawSettings.PossibleColors.FirstOrDefault(p => p.Value == cleanedName).Key; + return foundColor == default ? MetaDrawSettings.FallbackColor : foundColor; } public static Color ParseColorFromOxyColor(OxyColor color) { - var colorVal = color.ToByteString().Split(','); - return System.Windows.Media.Color.FromArgb(Byte.Parse(colorVal[0]), Byte.Parse(colorVal[1]), Byte.Parse(colorVal[2]), Byte.Parse(colorVal[3])); + return Color.FromArgb(color.A, color.R, color.G, color.B); } /// diff --git a/MetaMorpheus/GuiFunctions/MetaDraw/MetaDrawSettings.cs b/MetaMorpheus/GuiFunctions/MetaDraw/MetaDrawSettings.cs index a38b939b7..e6607cd0f 100644 --- a/MetaMorpheus/GuiFunctions/MetaDraw/MetaDrawSettings.cs +++ b/MetaMorpheus/GuiFunctions/MetaDraw/MetaDrawSettings.cs @@ -37,6 +37,7 @@ public static class MetaDrawSettings public static bool AnnotationBold { get; set; } = false; public static bool DisplayInternalIons { get; set; } = true; public static bool DisplayInternalIonAnnotations { get; set; }= true; + public static OxyColor FallbackColor { get; } = OxyColors.Aqua; public static Dictionary PossibleColors { get; set; } public static Dictionary ProductTypeToColor { get; set; } public static Dictionary BetaProductTypeToColor { get; set; } diff --git a/MetaMorpheus/GuiFunctions/ViewModels/CoverageTypeForTreeViewModel.cs b/MetaMorpheus/GuiFunctions/ViewModels/CoverageTypeForTreeViewModel.cs index 72914c988..5ecee4abb 100644 --- a/MetaMorpheus/GuiFunctions/ViewModels/CoverageTypeForTreeViewModel.cs +++ b/MetaMorpheus/GuiFunctions/ViewModels/CoverageTypeForTreeViewModel.cs @@ -51,7 +51,7 @@ public CoverageTypeForTreeViewModel(string name) { Name = name; OxyColor color = MetaDrawSettings.CoverageTypeToColor[name]; - SelectedColor = AddSpaces(color.GetColorName()); + SelectedColor = AddSpaces(MetaDrawSettings.PossibleColors[color]); ColorBrush = DrawnSequence.ParseColorBrushFromOxyColor(color); } diff --git a/MetaMorpheus/GuiFunctions/ViewModels/IonForTreeViewModel.cs b/MetaMorpheus/GuiFunctions/ViewModels/IonForTreeViewModel.cs index cdc3cf98d..843c23a67 100644 --- a/MetaMorpheus/GuiFunctions/ViewModels/IonForTreeViewModel.cs +++ b/MetaMorpheus/GuiFunctions/ViewModels/IonForTreeViewModel.cs @@ -66,7 +66,7 @@ public IonForTreeViewModel(ProductType type, bool beta) color = MetaDrawSettings.BetaProductTypeToColor[IonType]; else color = MetaDrawSettings.ProductTypeToColor[IonType]; - SelectedColor = AddSpaces(color.GetColorName()); + SelectedColor = AddSpaces(MetaDrawSettings.PossibleColors[color]); ColorBrush = DrawnSequence.ParseColorBrushFromOxyColor(color); } diff --git a/MetaMorpheus/GuiFunctions/ViewModels/ModForTreeViewModel.cs b/MetaMorpheus/GuiFunctions/ViewModels/ModForTreeViewModel.cs index b1f4080e4..2ee06aa00 100644 --- a/MetaMorpheus/GuiFunctions/ViewModels/ModForTreeViewModel.cs +++ b/MetaMorpheus/GuiFunctions/ViewModels/ModForTreeViewModel.cs @@ -14,6 +14,7 @@ public class ModForTreeViewModel : BaseViewModel private bool _isChecked; private string _selectedColor; private SolidColorBrush _colorBrush; + private bool _colorDataLoaded; #endregion @@ -23,10 +24,7 @@ public class ModForTreeViewModel : BaseViewModel public bool Use { - get - { - return _isChecked; - } + get => _isChecked; set { _isChecked = value; @@ -40,17 +38,26 @@ public bool Use public Brush Background { get; } public string SelectedColor { - get { return _selectedColor; } + get + { + EnsureColorDataLoaded(); + return _selectedColor; + } set { _selectedColor = value; ColorBrush = DrawnSequence.ParseColorBrushFromName(_selectedColor); + _colorDataLoaded = true; OnPropertyChanged(nameof(SelectedColor)); } } public SolidColorBrush ColorBrush { - get { return _colorBrush; } + get + { + EnsureColorDataLoaded(); + return _colorBrush; + } set { _colorBrush = value; @@ -69,16 +76,6 @@ public ModForTreeViewModel(string toolTip, bool use, string modName, bool bad, M Use = use; ModName = modName; DisplayName = modName; - if (MetaDrawSettings.ModificationTypeToColor != null) - { - // This if statement prevents a crash from loading a search task modifications not found on launch - // This can occur due to new custom modifications or a mod in the xml database that was not in our initial list - if (!MetaDrawSettings.ModificationTypeToColor.TryGetValue(modName, out OxyColor color)) - color = OxyColors.Aqua; - SelectedColor = AddSpaces(color.GetColorName()); - ColorBrush = DrawnSequence.ParseColorBrushFromOxyColor(color); - } - if (toolTip.ToLower().Contains("terminal")) { @@ -104,6 +101,27 @@ public ModForTreeViewModel(string toolTip, bool use, string modName, bool bad, M #endregion + /// + /// Ensures the color data is loaded. This is necessary because the color data is not loaded until the first time it is accessed. + /// This enables the use of the same control in MetaDraw and Task Windows without loading the color data for task windows. + /// + private void EnsureColorDataLoaded() + { + if (!_colorDataLoaded) + { + if (MetaDrawSettings.ModificationTypeToColor != null) + { + // This if statement prevents a crash from loading a search task modifications not found on launch + // This can occur due to new custom modifications or a mod in the xml database that was not in our initial list + if (!MetaDrawSettings.ModificationTypeToColor.TryGetValue(ModName, out OxyColor color)) + color = MetaDrawSettings.FallbackColor; + _selectedColor = AddSpaces(MetaDrawSettings.PossibleColors[color]); + _colorBrush = DrawnSequence.ParseColorBrushFromOxyColor(color); + } + _colorDataLoaded = true; + } + } + public void SelectionChanged(string newColor) { SelectedColor = newColor; diff --git a/MetaMorpheus/Test/MetaDraw/MetaDrawSettingsAndViewsTest.cs b/MetaMorpheus/Test/MetaDraw/MetaDrawSettingsAndViewsTest.cs index 9e9bfbf6c..91d9ba161 100644 --- a/MetaMorpheus/Test/MetaDraw/MetaDrawSettingsAndViewsTest.cs +++ b/MetaMorpheus/Test/MetaDraw/MetaDrawSettingsAndViewsTest.cs @@ -595,9 +595,13 @@ public static void TestDrawnSequenceColorConversions() var colorBrushfromName = DrawnSequence.ParseColorBrushFromName(oxyBlue.GetColorName()); Assert.That(colorBrushfromName.Color == brushBlue.Color); + var colorBrushfromNameBad = DrawnSequence.ParseColorBrushFromName("humbug"); + Assert.That(colorBrushfromNameBad.Color == Colors.Aqua); var oxyFromName = DrawnSequence.ParseOxyColorFromName(oxyBlue.GetColorName()); Assert.That(oxyFromName == oxyBlue); + var oxyFromNameBad = DrawnSequence.ParseOxyColorFromName("gobbledygook"); + Assert.That(oxyFromNameBad == MetaDrawSettings.FallbackColor); var colorFromOxy = DrawnSequence.ParseColorFromOxyColor(oxyBlue); Assert.That(colorFromOxy == colorBlue);