mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[TUI] Display partition information in image window
This commit is contained in:
@@ -8,6 +8,8 @@ using Avalonia.Controls;
|
|||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using Humanizer;
|
||||||
|
using Humanizer.Bytes;
|
||||||
|
|
||||||
namespace Aaru.Tui.ViewModels.Windows;
|
namespace Aaru.Tui.ViewModels.Windows;
|
||||||
|
|
||||||
@@ -19,10 +21,31 @@ public sealed partial class ImageWindowViewModel : ViewModelBase
|
|||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public string _filePath;
|
public string _filePath;
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
|
bool _isPartitionInformationVisible;
|
||||||
|
[ObservableProperty]
|
||||||
bool _isStatusVisible;
|
bool _isStatusVisible;
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
ObservableCollection<FileSystemModelNode> _nodes;
|
ObservableCollection<FileSystemModelNode> _nodes;
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
|
string _partitionDescription;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionLength;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionName;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionOffset;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionScheme;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionSequence;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionSize;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionStart;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _partitionType;
|
||||||
|
FileSystemModelNode? _selectedNode;
|
||||||
|
[ObservableProperty]
|
||||||
string? _status;
|
string? _status;
|
||||||
|
|
||||||
public ImageWindowViewModel(Window parent, Window view, IMediaImage imageFormat, string filePath)
|
public ImageWindowViewModel(Window parent, Window view, IMediaImage imageFormat, string filePath)
|
||||||
@@ -36,6 +59,46 @@ public sealed partial class ImageWindowViewModel : ViewModelBase
|
|||||||
BackCommand = new RelayCommand(Back);
|
BackCommand = new RelayCommand(Back);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FileSystemModelNode? SelectedNode
|
||||||
|
{
|
||||||
|
get => _selectedNode;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetProperty(ref _selectedNode, value);
|
||||||
|
|
||||||
|
if(_selectedNode is null) return;
|
||||||
|
|
||||||
|
if(_selectedNode.Partition is not null)
|
||||||
|
{
|
||||||
|
IsPartitionInformationVisible = true;
|
||||||
|
|
||||||
|
PartitionSequence = _selectedNode.Partition.Value.Sequence.ToString();
|
||||||
|
PartitionName = _selectedNode.Partition.Value.Name;
|
||||||
|
PartitionType = _selectedNode.Partition.Value.Type;
|
||||||
|
PartitionStart = _selectedNode.Partition.Value.Start.ToString();
|
||||||
|
PartitionOffset = ByteSize.FromBytes(_selectedNode.Partition.Value.Offset).Humanize();
|
||||||
|
PartitionLength = $"{_selectedNode.Partition.Value.Length} sectors";
|
||||||
|
PartitionSize = ByteSize.FromBytes(_selectedNode.Partition.Value.Size).Humanize();
|
||||||
|
PartitionScheme = _selectedNode.Partition.Value.Scheme;
|
||||||
|
PartitionDescription = _selectedNode.Partition.Value.Description;
|
||||||
|
|
||||||
|
OnPropertyChanged(nameof(PartitionSequence));
|
||||||
|
OnPropertyChanged(nameof(PartitionName));
|
||||||
|
OnPropertyChanged(nameof(PartitionType));
|
||||||
|
OnPropertyChanged(nameof(PartitionStart));
|
||||||
|
OnPropertyChanged(nameof(PartitionOffset));
|
||||||
|
OnPropertyChanged(nameof(PartitionLength));
|
||||||
|
OnPropertyChanged(nameof(PartitionSize));
|
||||||
|
OnPropertyChanged(nameof(PartitionScheme));
|
||||||
|
OnPropertyChanged(nameof(PartitionDescription));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
IsPartitionInformationVisible = false;
|
||||||
|
|
||||||
|
OnPropertyChanged(nameof(IsPartitionInformationVisible));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ICommand BackCommand { get; }
|
public ICommand BackCommand { get; }
|
||||||
public ICommand ExitCommand { get; }
|
public ICommand ExitCommand { get; }
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,8 @@
|
|||||||
Grid.Row="1">
|
Grid.Row="1">
|
||||||
<TreeView Grid.Column="0"
|
<TreeView Grid.Column="0"
|
||||||
ItemsSource="{Binding Nodes, Mode=OneWay}"
|
ItemsSource="{Binding Nodes, Mode=OneWay}"
|
||||||
BorderThickness="1">
|
BorderThickness="1"
|
||||||
|
SelectedItem="{Binding SelectedNode, Mode=TwoWay}">
|
||||||
<TreeView.BorderBrush>
|
<TreeView.BorderBrush>
|
||||||
<brushes:LineBrush LineStyle="DoubleLine"
|
<brushes:LineBrush LineStyle="DoubleLine"
|
||||||
Brush="Blue" />
|
Brush="Blue" />
|
||||||
@@ -47,6 +48,91 @@
|
|||||||
</TreeDataTemplate>
|
</TreeDataTemplate>
|
||||||
</TreeView.ItemTemplate>
|
</TreeView.ItemTemplate>
|
||||||
</TreeView>
|
</TreeView>
|
||||||
|
<Border BorderThickness="1"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsVisible="{Binding IsPartitionInformationVisible, Mode=OneWay}">
|
||||||
|
<Border.BorderBrush>
|
||||||
|
<brushes:LineBrush LineStyle="DoubleLine"
|
||||||
|
Brush="Blue" />
|
||||||
|
</Border.BorderBrush>
|
||||||
|
<StackPanel HorizontalAlignment="Stretch">
|
||||||
|
<TextBlock Text="Partition information"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
HorizontalAlignment="Center" />
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Sequence: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="LawnGreen"
|
||||||
|
Text="{Binding PartitionSequence, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Name: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="DarkGreen"
|
||||||
|
Text="{Binding PartitionName, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Type: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="Olive"
|
||||||
|
Text="{Binding PartitionType, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Starting sector: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="Violet"
|
||||||
|
Text="{Binding PartitionStart, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Offset: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="Lime"
|
||||||
|
Text="{Binding PartitionOffset, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Length: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="Violet"
|
||||||
|
Text="{Binding PartitionLength, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Size: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="Lime"
|
||||||
|
Text="{Binding PartitionSize, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Scheme: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="Purple"
|
||||||
|
Text="{Binding PartitionScheme, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto,*">
|
||||||
|
<TextBlock Grid.Column="0"
|
||||||
|
Foreground="SlateBlue"
|
||||||
|
Text="Description: " />
|
||||||
|
<TextBlock Grid.Column="1"
|
||||||
|
Foreground="Fuchsia"
|
||||||
|
Text="{Binding PartitionDescription, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
<TextBlock Grid.Row="2"
|
<TextBlock Grid.Row="2"
|
||||||
Text="{Binding Status, Mode=OneWay}"
|
Text="{Binding Status, Mode=OneWay}"
|
||||||
|
|||||||
Reference in New Issue
Block a user