Browse Source

Add info about how many styles are active and allow for showing inactive styles.

Dariusz Komosinski 4 years ago
parent
commit
38ebab0916

+ 6 - 0
src/Avalonia.Base/Data/Converters/BoolConverters.cs

@@ -12,5 +12,11 @@ namespace Avalonia.Data.Converters
         /// </summary>
         public static readonly IMultiValueConverter And =
             new FuncMultiValueConverter<bool, bool>(x => x.All(y => y));
+
+        /// <summary>
+        /// A multi-value converter that returns true if any of the inputs is true.
+        /// </summary>
+        public static readonly IMultiValueConverter Or =
+            new FuncMultiValueConverter<bool, bool>(x => x.Any(y => y));
     }
 }

+ 23 - 0
src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs

@@ -21,6 +21,8 @@ namespace Avalonia.Diagnostics.ViewModels
         private AvaloniaPropertyViewModel _selectedProperty;
         private string _styleFilter;
         private bool _snapshotStyles;
+        private bool _showInactiveStyles;
+        private string _styleStatus;
 
         public ControlDetailsViewModel(TreePageViewModel treePage, IVisual control)
         {
@@ -154,6 +156,18 @@ namespace Avalonia.Diagnostics.ViewModels
             set => RaiseAndSetIfChanged(ref _snapshotStyles, value);
         }
 
+        public bool ShowInactiveStyles
+        {
+            get => _showInactiveStyles;
+            set => RaiseAndSetIfChanged(ref _showInactiveStyles, value);
+        }
+
+        public string StyleStatus
+        {
+            get => _styleStatus;
+            set => RaiseAndSetIfChanged(ref _styleStatus, value);
+        }
+
         public ControlLayoutViewModel Layout { get; }
 
         protected override void OnPropertyChanged(PropertyChangedEventArgs e)
@@ -288,9 +302,16 @@ namespace Avalonia.Diagnostics.ViewModels
 
         private void UpdateStyles()
         {
+            int activeCount = 0;
+
             foreach (var style in AppliedStyles)
             {
                 style.Update();
+
+                if (style.IsActive)
+                {
+                    activeCount++;
+                }
             }
 
             var propertyBuckets = new Dictionary<AvaloniaProperty, List<SetterViewModel>>();
@@ -330,6 +351,8 @@ namespace Avalonia.Diagnostics.ViewModels
             {
                 pseudoClass.Update();
             }
+
+            StyleStatus = $"Styles ({activeCount}/{AppliedStyles.Count} active)";
         }
 
         private bool FilterProperty(object arg)

+ 11 - 6
src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml

@@ -3,7 +3,8 @@
              xmlns:conv="clr-namespace:Avalonia.Diagnostics.Converters"
              xmlns:local="clr-namespace:Avalonia.Diagnostics.Views"
              xmlns:vm="clr-namespace:Avalonia.Diagnostics.ViewModels"
-             x:Class="Avalonia.Diagnostics.Views.ControlDetailsView">
+             x:Class="Avalonia.Diagnostics.Views.ControlDetailsView"
+             x:Name="Main">
 
   <UserControl.Resources>
     <SolidColorBrush x:Key="ThicknessBorderBrush" Color="#666666" />
@@ -153,9 +154,10 @@
 
       <Grid Grid.Row="2" Margin="4" RowDefinitions="Auto,Auto">
 
-        <Grid Grid.Row="0" Margin="2" ColumnDefinitions="Auto,*,Auto">
-          <TextBlock Grid.Column="0" Text="Styles"  />
-          <ToggleButton Margin="2,0,0,0" Grid.Column="2" ToolTip.Tip="Snapshot current styles (Alt+S/Alt+D to enable/disable within debugged window)" Content="Snapshot" IsChecked="{Binding SnapshotStyles}" />
+        <Grid Grid.Row="0" Margin="2" ColumnDefinitions="Auto,*,Auto,Auto">
+          <TextBlock FontWeight="Bold" Grid.Column="0" Text="{Binding StyleStatus}" VerticalAlignment="Center" />
+          <CheckBox Margin="2,0,0,0" Grid.Column="2" Content="Show inactive" IsChecked="{Binding ShowInactiveStyles}" ToolTip.Tip="Show styles that are currently inactive" />
+          <ToggleButton Margin="2,0,0,0" Grid.Column="3" ToolTip.Tip="Snapshot current styles (Alt+S/Alt+D to enable/disable within debugged window)" Content="Snapshot" IsChecked="{Binding SnapshotStyles}" />
         </Grid>
 
         <TextBox Grid.Row="1" Margin="2" Grid.Column="0" Watermark="Filter" Text="{Binding StyleFilter}" />
@@ -165,10 +167,13 @@
         <ItemsControl Items="{Binding AppliedStyles}" >
           <ItemsControl.ItemTemplate>
             <DataTemplate>
-              <Border BorderThickness="0,0,0,1" BorderBrush="#6C6C6C">
+              <Border BorderThickness="0,0,0,1" BorderBrush="#6C6C6C" Opacity="{Binding IsActive, Converter={StaticResource BoolToOpacity}}">
                 <Border.IsVisible>
                   <MultiBinding Converter="{x:Static BoolConverters.And}">
-                    <Binding Path="IsActive" />
+                    <MultiBinding Converter="{x:Static BoolConverters.Or}" >
+                      <Binding Path="IsActive" />
+                      <Binding Path="#Main.DataContext.ShowInactiveStyles" />
+                    </MultiBinding>
                     <Binding Path="IsVisible" />
                   </MultiBinding>
                 </Border.IsVisible>