[TUI] Add status bar.

This commit is contained in:
2025-10-16 01:23:17 +01:00
parent 70bb2a8063
commit 1eedaf979a
2 changed files with 151 additions and 132 deletions

View File

@@ -29,7 +29,11 @@ public sealed partial class MainWindowViewModel : ViewModelBase
ObservableCollection<FileModel> _files = [];
[ObservableProperty]
string _informationalVersion;
[ObservableProperty]
bool _isStatusVisible;
FileModel? _selectedFile;
[ObservableProperty]
string _status;
public MainWindowViewModel()
{
@@ -43,6 +47,7 @@ public sealed partial class MainWindowViewModel : ViewModelBase
"?.?.?";
Copyright = Assembly.GetExecutingAssembly().GetCustomAttribute<AssemblyCopyrightAttribute>()?.Copyright ?? "";
Status = "Loading...";
}
public FileModel? SelectedFile
@@ -89,7 +94,9 @@ public sealed partial class MainWindowViewModel : ViewModelBase
public void LoadFiles()
{
CurrentPath = Directory.GetCurrentDirectory();
IsStatusVisible = true;
Status = "Loading...";
CurrentPath = Directory.GetCurrentDirectory();
Files.Clear();
var parentDirectory = new FileModel
@@ -141,6 +148,9 @@ public sealed partial class MainWindowViewModel : ViewModelBase
void Worker()
{
IsStatusVisible = true;
Status = "Loading file information...";
foreach(FileModel file in Files)
{
try
@@ -260,6 +270,9 @@ public sealed partial class MainWindowViewModel : ViewModelBase
SentrySdk.CaptureException(ex);
}
}
Status = "Done.";
IsStatusVisible = false;
}
void OpenSelectedFile()

View File

@@ -20,141 +20,147 @@
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<Grid ColumnDefinitions="*,*">
<ListBox Grid.Column="0"
ItemsSource="{Binding Files, Mode=OneWay}"
BorderThickness="1"
Background="Transparent"
SelectedItem="{Binding SelectedFile, Mode=TwoWay}"
KeyDown="ListBox_OnKeyDown">
<ListBox.ItemTemplate>
<DataTemplate DataType="models:FileModel">
<TextBox Text="{Binding Filename, Mode=OneWay}"
Foreground="{Binding ForegroundBrush, Mode=OneWay}"
Background="Transparent" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</ListBox.BorderBrush>
</ListBox>
<Border Grid.Column="1"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<Grid RowDefinitions="Auto,Auto,Auto,*"
VerticalAlignment="Top">
<Border Grid.Row="0"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<StackPanel VerticalAlignment="Top"
HorizontalAlignment="Center">
<TextBlock Text="Aaru Data Preservation Suite"
Foreground="Red"
FontWeight="Bold" />
<TextBlock Text="{Binding InformationalVersion, Mode=OneWay}"
Foreground="Green"
FontWeight="Bold" />
<TextBlock Text="{Binding Copyright, Mode=OneWay}"
Foreground="Blue"
FontWeight="Bold" />
</StackPanel>
</Border>
<Border Grid.Row="1"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<Grid ColumnDefinitions="Auto, *">
<TextBlock Grid.Column="0"
Text="Path: "
Foreground="SlateBlue" />
<TextBlock Grid.Column="1"
Text="{Binding CurrentPath, Mode=OneWay}"
Foreground="Green" />
</Grid>
</Border>
<Border Grid.Row="2"
BorderThickness="1"
IsVisible="{Binding IsFileInfoAvailable, Mode=OneWay}">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<Grid RowDefinitions="Auto, *, *, *, *, *">
<TextBlock Text="File information"
Grid.Row="0"
HorizontalAlignment="Center"
Foreground="SlateBlue" />
<Grid ColumnDefinitions="Auto, *"
Grid.Row="1"
IsVisible="{Binding SelectedFileIsNotDirectory, Mode=OneWay}">
<TextBlock Grid.Column="0"
Text="Length: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileLength, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="2">
<TextBlock Grid.Column="0"
Text="Creation time: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileCreationTime, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="3">
<TextBlock Grid.Column="0"
Text="Last write time: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileLastWriteTime, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="4">
<TextBlock Grid.Column="0"
Text="Attributes: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileAttributes, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="5">
<TextBlock Grid.Column="0"
Text="Mode: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileUnixMode, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
</Grid>
</Border>
<Border Grid.Row="3"
IsVisible="{Binding SelectedFileHasInformation, Mode=OneWay}"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<ScrollViewer>
<Grid RowDefinitions="*,Auto">
<Grid ColumnDefinitions="*,*"
Grid.Row="0">
<ListBox Grid.Column="0"
ItemsSource="{Binding Files, Mode=OneWay}"
BorderThickness="1"
Background="Transparent"
SelectedItem="{Binding SelectedFile, Mode=TwoWay}"
KeyDown="ListBox_OnKeyDown">
<ListBox.ItemTemplate>
<DataTemplate DataType="models:FileModel">
<TextBox Text="{Binding Filename, Mode=OneWay}"
Foreground="{Binding ForegroundBrush, Mode=OneWay}"
Background="Transparent" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</ListBox.BorderBrush>
</ListBox>
<Border Grid.Column="1"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<Grid RowDefinitions="Auto,Auto,Auto,*"
VerticalAlignment="Top">
<Border Grid.Row="0"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<StackPanel VerticalAlignment="Top"
HorizontalAlignment="Center">
<TextBlock Text="Image information"
Foreground="SlateBlue"
<TextBlock Text="Aaru Data Preservation Suite"
Foreground="Red"
FontWeight="Bold" />
<TextBlock Text="{Binding InformationalVersion, Mode=OneWay}"
Foreground="Green"
FontWeight="Bold" />
<TextBlock Text="{Binding Copyright, Mode=OneWay}"
Foreground="Blue"
FontWeight="Bold" />
<TextBlock Text="{Binding SelectedFileInformation, Mode=OneWay}" />
</StackPanel>
</ScrollViewer>
</Border>
</Grid>
</Border>
</Border>
<Border Grid.Row="1"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<Grid ColumnDefinitions="Auto, *">
<TextBlock Grid.Column="0"
Text="Path: "
Foreground="SlateBlue" />
<TextBlock Grid.Column="1"
Text="{Binding CurrentPath, Mode=OneWay}"
Foreground="Green" />
</Grid>
</Border>
<Border Grid.Row="2"
BorderThickness="1"
IsVisible="{Binding IsFileInfoAvailable, Mode=OneWay}">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<Grid RowDefinitions="Auto, *, *, *, *, *">
<TextBlock Text="File information"
Grid.Row="0"
HorizontalAlignment="Center"
Foreground="SlateBlue" />
<Grid ColumnDefinitions="Auto, *"
Grid.Row="1"
IsVisible="{Binding SelectedFileIsNotDirectory, Mode=OneWay}">
<TextBlock Grid.Column="0"
Text="Length: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileLength, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="2">
<TextBlock Grid.Column="0"
Text="Creation time: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileCreationTime, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="3">
<TextBlock Grid.Column="0"
Text="Last write time: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileLastWriteTime, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="4">
<TextBlock Grid.Column="0"
Text="Attributes: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileAttributes, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
<Grid ColumnDefinitions="Auto, *"
Grid.Row="5">
<TextBlock Grid.Column="0"
Text="Mode: " />
<TextBlock Grid.Column="1"
Text="{Binding SelectedFileUnixMode, Mode=OneWay}"
Foreground="Aqua" />
</Grid>
</Grid>
</Border>
<Border Grid.Row="3"
IsVisible="{Binding SelectedFileHasInformation, Mode=OneWay}"
BorderThickness="1">
<Border.BorderBrush>
<console:LineBrush LineStyle="DoubleLine"
Brush="Blue" />
</Border.BorderBrush>
<ScrollViewer>
<StackPanel VerticalAlignment="Top"
HorizontalAlignment="Center">
<TextBlock Text="Image information"
Foreground="SlateBlue"
FontWeight="Bold" />
<TextBlock Text="{Binding SelectedFileInformation, Mode=OneWay}" />
</StackPanel>
</ScrollViewer>
</Border>
</Grid>
</Border>
</Grid>
<TextBlock Grid.Row="1"
Text="{Binding Status, Mode=OneWay}"
IsVisible="{Binding IsStatusVisible, Mode=OneWay}" />
</Grid>
</Border>
</DockPanel>