[GUI] Redesign and reorganize Statistics dialog.

This commit is contained in:
2025-10-27 17:21:21 +00:00
parent 9e8479b390
commit ad9fbdbe16

View File

@@ -36,6 +36,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:dialogs="clr-namespace:Aaru.Gui.ViewModels.Dialogs" xmlns:dialogs="clr-namespace:Aaru.Gui.ViewModels.Dialogs"
xmlns:controls="clr-namespace:Aaru.Gui.Controls"
xmlns:localization="clr-namespace:Aaru.Localization;assembly=Aaru.Localization" xmlns:localization="clr-namespace:Aaru.Localization;assembly=Aaru.Localization"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignWidth="800" d:DesignWidth="800"
@@ -49,185 +50,299 @@
<Design.DataContext> <Design.DataContext>
<dialogs:StatisticsViewModel /> <dialogs:StatisticsViewModel />
</Design.DataContext> </Design.DataContext>
<Border Padding="15"> <Grid Margin="12"
<Grid RowDefinitions="*,Auto"> RowSpacing="8"
<TabControl Grid.Row="0" RowDefinitions="*,Auto">
HorizontalAlignment="Stretch" <TabControl Grid.Row="0"
VerticalAlignment="Stretch"> HorizontalAlignment="Stretch"
<TabItem IsVisible="{Binding CommandsVisible}"> VerticalAlignment="Stretch">
<TabItem.Header> <TabItem IsVisible="{Binding CommandsVisible, Mode=OneWay}">
<TextBlock Text="{x:Static localization:UI.Title_Commands}" /> <TabItem.Header>
</TabItem.Header> <TextBlock Text="{x:Static localization:UI.Title_Commands}" />
<StackPanel VerticalAlignment="Top" </TabItem.Header>
HorizontalAlignment="Stretch"> <StackPanel VerticalAlignment="Top"
<TextBlock Text="{Binding FsInfoText}" HorizontalAlignment="Stretch">
IsVisible="{Binding FsInfoVisible}" /> <TextBlock Text="{Binding FsInfoText, Mode=OneWay}"
<TextBlock Text="{Binding ChecksumText}" IsVisible="{Binding FsInfoVisible, Mode=OneWay}" />
IsVisible="{Binding ChecksumVisible}" /> <TextBlock Text="{Binding ChecksumText, Mode=OneWay}"
<TextBlock Text="{Binding CompareText}" IsVisible="{Binding ChecksumVisible, Mode=OneWay}" />
IsVisible="{Binding CompareVisible}" /> <TextBlock Text="{Binding CompareText, Mode=OneWay}"
<TextBlock Text="{Binding ConvertImageText}" IsVisible="{Binding CompareVisible, Mode=OneWay}" />
IsVisible="{Binding ConvertImageVisible}" /> <TextBlock Text="{Binding ConvertImageText, Mode=OneWay}"
<TextBlock Text="{Binding CreateSidecarText}" IsVisible="{Binding ConvertImageVisible, Mode=OneWay}" />
IsVisible="{Binding CreateSidecarVisible}" /> <TextBlock Text="{Binding CreateSidecarText, Mode=OneWay}"
<TextBlock Text="{Binding DecodeText}" IsVisible="{Binding CreateSidecarVisible, Mode=OneWay}" />
IsVisible="{Binding DecodeVisible}" /> <TextBlock Text="{Binding DecodeText, Mode=OneWay}"
<TextBlock Text="{Binding DeviceInfoText}" IsVisible="{Binding DecodeVisible, Mode=OneWay}" />
IsVisible="{Binding DeviceInfoVisible}" /> <TextBlock Text="{Binding DeviceInfoText, Mode=OneWay}"
<TextBlock Text="{Binding DeviceReportText}" IsVisible="{Binding DeviceInfoVisible, Mode=OneWay}" />
IsVisible="{Binding DeviceReportVisible}" /> <TextBlock Text="{Binding DeviceReportText, Mode=OneWay}"
<TextBlock Text="{Binding DumpMediaText}" IsVisible="{Binding DeviceReportVisible, Mode=OneWay}" />
IsVisible="{Binding DumpMediaVisible}" /> <TextBlock Text="{Binding DumpMediaText, Mode=OneWay}"
<TextBlock Text="{Binding EntropyText}" IsVisible="{Binding DumpMediaVisible, Mode=OneWay}" />
IsVisible="{Binding EntropyVisible}" /> <TextBlock Text="{Binding EntropyText, Mode=OneWay}"
<TextBlock Text="{Binding FormatsCommandText}" IsVisible="{Binding EntropyVisible, Mode=OneWay}" />
IsVisible="{Binding FormatsCommandVisible}" /> <TextBlock Text="{Binding FormatsCommandText, Mode=OneWay}"
<TextBlock Text="{Binding ImageInfoText}" IsVisible="{Binding FormatsCommandVisible, Mode=OneWay}" />
IsVisible="{Binding ImageInfoVisible}" /> <TextBlock Text="{Binding ImageInfoText, Mode=OneWay}"
<TextBlock Text="{Binding MediaInfoText}" IsVisible="{Binding ImageInfoVisible, Mode=OneWay}" />
IsVisible="{Binding MediaInfoVisible}" /> <TextBlock Text="{Binding MediaInfoText, Mode=OneWay}"
<TextBlock Text="{Binding MediaScanText}" IsVisible="{Binding MediaInfoVisible, Mode=OneWay}" />
IsVisible="{Binding MediaScanVisible}" /> <TextBlock Text="{Binding MediaScanText, Mode=OneWay}"
<TextBlock Text="{Binding PrintHexText}" IsVisible="{Binding MediaScanVisible, Mode=OneWay}" />
IsVisible="{Binding PrintHexVisible}" /> <TextBlock Text="{Binding PrintHexText, Mode=OneWay}"
<TextBlock Text="{Binding VerifyText}" IsVisible="{Binding PrintHexVisible, Mode=OneWay}" />
IsVisible="{Binding VerifyVisible}" /> <TextBlock Text="{Binding VerifyText, Mode=OneWay}"
</StackPanel> IsVisible="{Binding VerifyVisible, Mode=OneWay}" />
</TabItem> </StackPanel>
<TabItem IsVisible="{Binding FiltersVisible}"> </TabItem>
<TabItem.Header> <TabItem IsVisible="{Binding FiltersVisible, Mode=OneWay}">
<TextBlock Text="{x:Static localization:UI.Title_Filters}" /> <TabItem.Header>
</TabItem.Header> <TextBlock Text="{x:Static localization:UI.Title_Filters}" />
<DataGrid ItemsSource="{Binding Filters}" </TabItem.Header>
HorizontalScrollBarVisibility="Visible"> <DataGrid ItemsSource="{Binding Filters, Mode=OneWay}"
<DataGrid.Columns> HorizontalScrollBarVisibility="Visible">
<!-- TODO: Bind header --> <DataGrid.Columns>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Filter}" <DataGridTemplateColumn Width="Auto">
Binding="{Binding Name}" <DataGridTemplateColumn.HeaderTemplate>
Width="Auto" <DataTemplate>
IsReadOnly="True" /> <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Filter}" />
<DataGridTextColumn Header="{x:Static localization:UI.Title_Times_used}" </DataTemplate>
Binding="{Binding Count}" </DataGridTemplateColumn.HeaderTemplate>
Width="Auto" <DataGridTemplateColumn.CellTemplate>
IsReadOnly="True" /> <DataTemplate>
</DataGrid.Columns> <TextBlock Text="{Binding Name, Mode=OneWay}" />
</DataGrid> </DataTemplate>
</TabItem> </DataGridTemplateColumn.CellTemplate>
<TabItem IsVisible="{Binding FormatsVisible}"> </DataGridTemplateColumn>
<TabItem.Header> <DataGridTemplateColumn Width="Auto">
<TextBlock Text="{x:Static localization:UI.Title_Formats}" /> <DataGridTemplateColumn.HeaderTemplate>
</TabItem.Header> <DataTemplate>
<DataGrid ItemsSource="{Binding Formats}" <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Times_used}" />
HorizontalScrollBarVisibility="Visible"> </DataTemplate>
<DataGrid.Columns> </DataGridTemplateColumn.HeaderTemplate>
<!-- TODO: Bind header --> <DataGridTemplateColumn.CellTemplate>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Format}" <DataTemplate>
Binding="{Binding Name}" <TextBlock Text="{Binding Count, Mode=OneWay}" />
Width="Auto" </DataTemplate>
IsReadOnly="True" /> </DataGridTemplateColumn.CellTemplate>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Times_used}" </DataGridTemplateColumn>
Binding="{Binding Count}" </DataGrid.Columns>
Width="Auto" </DataGrid>
IsReadOnly="True" /> </TabItem>
</DataGrid.Columns> <TabItem IsVisible="{Binding FormatsVisible, Mode=OneWay}">
</DataGrid> <TabItem.Header>
</TabItem> <TextBlock Text="{x:Static localization:UI.Title_Formats}" />
<TabItem IsVisible="{Binding PartitionsVisible}"> </TabItem.Header>
<TabItem.Header> <DataGrid ItemsSource="{Binding Formats, Mode=OneWay}"
<TextBlock Text="{x:Static localization:UI.Title_Partitions}" /> HorizontalScrollBarVisibility="Visible">
</TabItem.Header> <DataGrid.Columns>
<DataGrid ItemsSource="{Binding Partitions}" <DataGridTemplateColumn Width="Auto">
HorizontalScrollBarVisibility="Visible"> <DataGridTemplateColumn.HeaderTemplate>
<DataGrid.Columns> <DataTemplate>
<!-- TODO: Bind header --> <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Format}" />
<DataGridTextColumn Header="{x:Static localization:UI.Title_Partition}" </DataTemplate>
Binding="{Binding Name}" </DataGridTemplateColumn.HeaderTemplate>
Width="Auto" <DataGridTemplateColumn.CellTemplate>
IsReadOnly="True" /> <DataTemplate>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Times_used}" <TextBlock Text="{Binding Name, Mode=OneWay}" />
Binding="{Binding Count}" </DataTemplate>
Width="Auto" </DataGridTemplateColumn.CellTemplate>
IsReadOnly="True" /> </DataGridTemplateColumn>
</DataGrid.Columns> <DataGridTemplateColumn Width="Auto">
</DataGrid> <DataGridTemplateColumn.HeaderTemplate>
</TabItem> <DataTemplate>
<TabItem IsVisible="{Binding FilesystemsVisible}"> <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Times_used}" />
<TabItem.Header> </DataTemplate>
<TextBlock Text="{x:Static localization:UI.Title_Filesystems}" /> </DataGridTemplateColumn.HeaderTemplate>
</TabItem.Header> <DataGridTemplateColumn.CellTemplate>
<DataGrid ItemsSource="{Binding Filesystems}" <DataTemplate>
HorizontalScrollBarVisibility="Visible"> <TextBlock Text="{Binding Count, Mode=OneWay}" />
<DataGrid.Columns> </DataTemplate>
<!-- TODO: Bind header --> </DataGridTemplateColumn.CellTemplate>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Filesystem}" </DataGridTemplateColumn>
Binding="{Binding Name}" </DataGrid.Columns>
Width="Auto" </DataGrid>
IsReadOnly="True" /> </TabItem>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Times_used}" <TabItem IsVisible="{Binding PartitionsVisible, Mode=OneWay}">
Binding="{Binding Count}" <TabItem.Header>
Width="Auto" <TextBlock Text="{x:Static localization:UI.Title_Partitions}" />
IsReadOnly="True" /> </TabItem.Header>
</DataGrid.Columns> <DataGrid ItemsSource="{Binding Partitions, Mode=OneWay}"
</DataGrid> HorizontalScrollBarVisibility="Visible">
</TabItem> <DataGrid.Columns>
<TabItem IsVisible="{Binding DevicesVisible}"> <DataGridTemplateColumn Width="Auto">
<TabItem.Header> <DataGridTemplateColumn.HeaderTemplate>
<TextBlock Text="{x:Static localization:UI.Title_Devices}" /> <DataTemplate>
</TabItem.Header> <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Partition}" />
<DataGrid ItemsSource="{Binding Devices}" </DataTemplate>
HorizontalScrollBarVisibility="Visible"> </DataGridTemplateColumn.HeaderTemplate>
<DataGrid.Columns> <DataGridTemplateColumn.CellTemplate>
<!-- TODO: Bind header --> <DataTemplate>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Device}" <TextBlock Text="{Binding Name, Mode=OneWay}" />
Binding="{Binding Model}" </DataTemplate>
Width="Auto" </DataGridTemplateColumn.CellTemplate>
IsReadOnly="True" /> </DataGridTemplateColumn>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Manufacturer}" <DataGridTemplateColumn Width="Auto">
Binding="{Binding Manufacturer}" <DataGridTemplateColumn.HeaderTemplate>
Width="Auto" <DataTemplate>
IsReadOnly="True" /> <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Times_used}" />
<DataGridTextColumn Header="{x:Static localization:UI.Title_Revision}" </DataTemplate>
Binding="{Binding Revision}" </DataGridTemplateColumn.HeaderTemplate>
Width="Auto" <DataGridTemplateColumn.CellTemplate>
IsReadOnly="True" /> <DataTemplate>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Bus}" <TextBlock Text="{Binding Count, Mode=OneWay}" />
Binding="{Binding Bus}" </DataTemplate>
Width="Auto" </DataGridTemplateColumn.CellTemplate>
IsReadOnly="True" /> </DataGridTemplateColumn>
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</TabItem> </TabItem>
<TabItem IsVisible="{Binding MediasVisible}"> <TabItem IsVisible="{Binding FilesystemsVisible, Mode=OneWay}">
<TabItem.Header> <TabItem.Header>
<TextBlock Text="{x:Static localization:UI.Title_Medias}" /> <TextBlock Text="{x:Static localization:UI.Title_Filesystems}" />
</TabItem.Header> </TabItem.Header>
<DataGrid ItemsSource="{Binding Medias}" <DataGrid ItemsSource="{Binding Filesystems, Mode=OneWay}"
HorizontalScrollBarVisibility="Visible"> HorizontalScrollBarVisibility="Visible">
<DataGrid.Columns> <DataGrid.Columns>
<!-- TODO: Bind header --> <DataGridTemplateColumn Width="Auto">
<DataGridTextColumn Header="{x:Static localization:UI.Title_Media}" <DataGridTemplateColumn.HeaderTemplate>
Binding="{Binding Name}" <DataTemplate>
Width="Auto" <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Filesystem}" />
IsReadOnly="True" /> </DataTemplate>
<DataGridTextColumn Header="{x:Static localization:UI.Title_Times_used}" </DataGridTemplateColumn.HeaderTemplate>
Binding="{Binding Count}" <DataGridTemplateColumn.CellTemplate>
Width="Auto" <DataTemplate>
IsReadOnly="True" /> <TextBlock Text="{Binding Name, Mode=OneWay}" />
<DataGridTextColumn Header="{x:Static localization:Core.Title_Type_for_media}" </DataTemplate>
Binding="{Binding Type}" </DataGridTemplateColumn.CellTemplate>
Width="Auto" </DataGridTemplateColumn>
IsReadOnly="True" /> <DataGridTemplateColumn Width="Auto">
</DataGrid.Columns> <DataGridTemplateColumn.HeaderTemplate>
</DataGrid> <DataTemplate>
</TabItem> <controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Times_used}" />
</TabControl> </DataTemplate>
<Button Grid.Row="1" </DataGridTemplateColumn.HeaderTemplate>
HorizontalAlignment="Right" <DataGridTemplateColumn.CellTemplate>
VerticalAlignment="Center" <DataTemplate>
Command="{Binding CloseCommand}" <TextBlock Text="{Binding Count, Mode=OneWay}" />
Padding="10"> </DataTemplate>
<TextBlock Text="{x:Static localization:UI.ButtonLabel_Close}" /> </DataGridTemplateColumn.CellTemplate>
</Button> </DataGridTemplateColumn>
</Grid> </DataGrid.Columns>
</Border> </DataGrid>
</TabItem>
<TabItem IsVisible="{Binding DevicesVisible, Mode=OneWay}">
<TabItem.Header>
<TextBlock Text="{x:Static localization:UI.Title_Devices}" />
</TabItem.Header>
<DataGrid ItemsSource="{Binding Devices, Mode=OneWay}"
HorizontalScrollBarVisibility="Visible">
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Device}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Model, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Manufacturer}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Manufacturer, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Revision}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Revision, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Bus}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Bus, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem IsVisible="{Binding MediasVisible, Mode=OneWay}">
<TabItem.Header>
<TextBlock Text="{x:Static localization:UI.Title_Medias}" />
</TabItem.Header>
<DataGrid ItemsSource="{Binding Medias, Mode=OneWay}"
HorizontalScrollBarVisibility="Visible">
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Media}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Times_used}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Count, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<controls:SpectreTextBlock Text="{x:Static localization:Core.Title_Type_for_media}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Type, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
<Button Grid.Row="1"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Command="{Binding CloseCommand, Mode=OneWay}"
Padding="10">
<TextBlock Text="{x:Static localization:UI.ButtonLabel_Close}" />
</Button>
</Grid>
</Window> </Window>