diff --git a/src/DynamoCoreWpf/PublicAPI.Unshipped.txt b/src/DynamoCoreWpf/PublicAPI.Unshipped.txt
index 9b55e04bb31..6fd915b1aa7 100644
--- a/src/DynamoCoreWpf/PublicAPI.Unshipped.txt
+++ b/src/DynamoCoreWpf/PublicAPI.Unshipped.txt
@@ -874,6 +874,8 @@ Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.FilterName.get -
Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.FilterName.set -> void
Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.GroupName.get -> string
Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.GroupName.set -> void
+Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.IsEnabled.get -> bool
+Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.IsEnabled.set -> void
Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.OnChecked.get -> bool
Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.OnChecked.set -> void
Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.Tooltip.get -> string
diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs
index 9fad081fbd7..abbaa99e46f 100644
--- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs
+++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs
@@ -86,6 +86,22 @@ public class FilterEntry : NotificationObject
///
public string Tooltip { get; set; }
+ ///
+ /// Controls the IsEnabled status of the filter
+ ///
+ private bool isEnabled = true;
+
+ public bool IsEnabled
+ {
+ get { return isEnabled; }
+ set
+ {
+ isEnabled = value;
+ RaisePropertyChanged(nameof(IsEnabled));
+ }
+ }
+
+
///
/// Filter entry click command, notice this is a dynamic command
/// with command param set to FilterName so that the code is robust
@@ -410,6 +426,33 @@ public bool IsAnyFilterOn
private void SetFilterChange()
{
IsAnyFilterOn = HostFilter.Any(f => f.OnChecked) || NonHostFilter.Any(f => f.OnChecked) || CompatibilityFilter.Any(f => f.OnChecked);
+ ApplyFilterRules();
+ }
+
+ ///
+ /// Executes any additional logic on the filters
+ ///
+ internal void ApplyFilterRules()
+ {
+ // Enable/disable Compatibility filters if any HostFilter is on
+ if (CompatibilityFilter.Any(f => f.OnChecked))
+ {
+ HostFilter.ForEach(x => x.IsEnabled = false);
+ }
+ else
+ {
+ HostFilter.ForEach(x => x.IsEnabled = true);
+ }
+
+ // Enable/disable Host filters if any CompatibilityFilter is on
+ if (HostFilter.Any(f => f.OnChecked))
+ {
+ CompatibilityFilter.ForEach(x => x.IsEnabled = false);
+ }
+ else
+ {
+ CompatibilityFilter.ForEach(x => x.IsEnabled = true);
+ }
}
///
diff --git a/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml b/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml
index de24db4ee82..27fc671b8e6 100644
--- a/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml
+++ b/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml
@@ -262,6 +262,7 @@
+
diff --git a/src/DynamoUtilities/PublicAPI.Unshipped.txt b/src/DynamoUtilities/PublicAPI.Unshipped.txt
index 405d94fed95..f63b93a55d0 100644
--- a/src/DynamoUtilities/PublicAPI.Unshipped.txt
+++ b/src/DynamoUtilities/PublicAPI.Unshipped.txt
@@ -234,7 +234,6 @@ static DynamoUtilities.PathHelper.IsValidPath(string filePath) -> bool
static DynamoUtilities.PathHelper.isValidXML(string path, out System.Xml.XmlDocument xmlDoc, out System.Exception ex) -> bool
static DynamoUtilities.PathHelper.LoadEmbeddedResourceAsString(string resourcePath, System.Reflection.Assembly assembly) -> string
static DynamoUtilities.StringUtilities.CapitalizeFirstLetter(string word) -> string
-static DynamoUtilities.StringUtilities.SimplifyFileSizeUnit(string size) -> string
static DynamoUtilities.TypeSwitch.Case(System.Action action) -> DynamoUtilities.TypeSwitch.CaseInfo
static DynamoUtilities.TypeSwitch.Case(System.Action action) -> DynamoUtilities.TypeSwitch.CaseInfo
static DynamoUtilities.TypeSwitch.Default(System.Action action) -> DynamoUtilities.TypeSwitch.CaseInfo
diff --git a/src/DynamoUtilities/StringUtilities.cs b/src/DynamoUtilities/StringUtilities.cs
index 0fe079cee20..be74b03ee45 100644
--- a/src/DynamoUtilities/StringUtilities.cs
+++ b/src/DynamoUtilities/StringUtilities.cs
@@ -1,3 +1,9 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
namespace DynamoUtilities
{
///
@@ -17,20 +23,5 @@ public static string CapitalizeFirstLetter(string word)
return char.ToUpper(word[0]) + word.Substring(1);
}
-
- ///
- /// Replaces 'i' in a file size string
- ///
- /// The file size string
- ///
- public static string SimplifyFileSizeUnit(string size)
- {
- if (string.IsNullOrEmpty(size))
- {
- return size;
- }
-
- return size.Replace("i", "");
- }
}
}
diff --git a/src/PackageDetailsViewExtension/PackageDetailItem.cs b/src/PackageDetailsViewExtension/PackageDetailItem.cs
index c1173fcf2f0..b61984dab60 100644
--- a/src/PackageDetailsViewExtension/PackageDetailItem.cs
+++ b/src/PackageDetailsViewExtension/PackageDetailItem.cs
@@ -5,7 +5,6 @@
using Dynamo.Core;
using Dynamo.PackageManager;
using Dynamo.PythonServices;
-using DynamoUtilities;
using Greg.Responses;
namespace Dynamo.PackageDetails
@@ -284,7 +283,7 @@ public PackageDetailItem(string packageName, PackageVersion packageVersion, bool
this.CopyRightYear = PackageVersion.copyright_year;
this.CanInstall = canInstall;
this.IsEnabledForInstall = isEnabledForInstall && canInstall;
- this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : StringUtilities.SimplifyFileSizeUnit (PackageVersion.size);
+ this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : PackageVersion.size;
this.Created = GetFormattedDate(PackageVersion.created);
this.VersionInformation = GetFlattenedCompatibilityInformation(packageVersion.compatibility_matrix);
this.ReleaseNotes = PackageVersion.release_notes_url;
@@ -316,7 +315,7 @@ public PackageDetailItem(List versionDetails, string package
this.CopyRightYear = PackageVersion.copyright_year;
this.CanInstall = canInstall;
this.IsEnabledForInstall = isEnabledForInstall && canInstall;
- this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : StringUtilities.SimplifyFileSizeUnit (PackageVersion.size);
+ this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : PackageVersion.size;
this.Created = GetFormattedDate(PackageVersion.created);
this.VersionInformation = GetFlattenedCompatibilityInformation(packageVersion.compatibility_matrix);
this.IsCompatible = PackageManager.VersionInformation.GetVersionCompatibility(versionDetails, PackageVersionNumber);
diff --git a/src/PackageDetailsViewExtension/PackageDetailsView.xaml b/src/PackageDetailsViewExtension/PackageDetailsView.xaml
index 6deba4a0d0b..a1bd4e2f8ee 100644
--- a/src/PackageDetailsViewExtension/PackageDetailsView.xaml
+++ b/src/PackageDetailsViewExtension/PackageDetailsView.xaml
@@ -468,6 +468,16 @@
Margin="10,0"
VerticalAlignment="Center">
+
+
+
+
+
+
+
+
+
+
();
+
+ var clientMock = new Mock(mockGreg.Object, MockMaker.Empty(), string.Empty);
+ var pmCVM = new Mock(ViewModel, clientMock.Object) { CallBase = true };
+ var pmSVM = new PackageManagerSearchViewModel(pmCVM.Object);
+ pmSVM.RegisterTransientHandlers();
+
+ pmSVM.HostFilter = new List
+ {
+ new FilterEntry("host", "group", "tooltip", pmSVM) { OnChecked = false },
+ };
+
+ pmSVM.CompatibilityFilter = new List
+ {
+ new FilterEntry("compatibility", "group", "tooltip", pmSVM) { OnChecked = false },
+ };
+
+ pmSVM.HostFilter.ForEach(f => f.PropertyChanged += pmSVM.filter_PropertyChanged);
+ pmSVM.CompatibilityFilter.ForEach(f => f.PropertyChanged += pmSVM.filter_PropertyChanged);
+
+ Assert.IsTrue(pmSVM.HostFilter.All(x => x.IsEnabled), "Expect starting filter state to be enabled");
+ Assert.IsTrue(pmSVM.CompatibilityFilter.All(x => x.IsEnabled), "Expect starting filter state to be enabled");
+
+ // Act/Assert Host -> Compatibility
+ pmSVM.HostFilter.First().OnChecked = true;
+ pmSVM.ApplyFilterRules();
+
+ Assert.IsFalse(pmSVM.CompatibilityFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive");
+
+ pmSVM.HostFilter.First().OnChecked = false;
+ pmSVM.ApplyFilterRules();
+
+ Assert.IsTrue(pmSVM.CompatibilityFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive");
+
+ // Act/Assert Compatibility -> Host
+ pmSVM.CompatibilityFilter.First().OnChecked = true;
+ pmSVM.ApplyFilterRules();
+
+ Assert.IsFalse(pmSVM.HostFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive");
+
+ pmSVM.CompatibilityFilter.First().OnChecked = false;
+ pmSVM.ApplyFilterRules();
+
+ Assert.IsTrue(pmSVM.HostFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive");
+ }
+
+ #region Compatibility Tests
+
[Test]
public void TestReverseDynamoCompatibilityFromHost()
{
@@ -1329,5 +1380,7 @@ public void IsVersionCompatible_InValidMaxRange_ReturnsTrueForVersionInsideOfMaj
"Expected compatibility to be true when major version is greater than Max major version and there is an invalid max range.");
}
+ #endregion
+
}
}