Add Compound File Binary (CFB) archive support

Introduces CompoundInfoPanel for viewing Compound File Binary archives (.cfb, .eif) in the ArchiveViewer plugin. Updates Plugin.cs to detect and use the new panel for these file types, enabling preview and information display for CFB-based archives.
This commit is contained in:
ema
2025-12-26 01:05:52 +08:00
parent 19805f06c5
commit 36d2d44200
3 changed files with 242 additions and 3 deletions

View File

@@ -0,0 +1,73 @@
<UserControl x:Class="QuickLook.Plugin.ArchiveViewer.CompoundFileBinary.CompoundInfoPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:archive="clr-namespace:QuickLook.Plugin.ArchiveViewer.ArchiveFile"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:QuickLook.Plugin.ArchiveViewer.CompoundFileBinary"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Name="infoPanel"
d:DesignHeight="600"
d:DesignWidth="800"
mc:Ignorable="d">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- only for design -->
<ResourceDictionary Source="/QuickLook.Common;component/Styles/MainWindowStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
<archive:Percent100ToVisibilityVisibleConverter x:Key="Percent100ToVisibilityVisibleConverter" />
<archive:Percent100ToVisibilityCollapsedConverter x:Key="Percent100ToVisibilityCollapsedConverter" />
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid Visibility="{Binding ElementName=infoPanel, Path=LoadPercent, Mode=OneWay, Converter={StaticResource Percent100ToVisibilityCollapsedConverter}}" ZIndex="9999">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Label x:Name="lblLoading"
HorizontalAlignment="Center"
FontSize="14"
Foreground="{DynamicResource WindowTextForeground}">
Loading archive ...
</Label>
<ProgressBar Width="150"
Height="13"
Value="{Binding ElementName=infoPanel, Path=LoadPercent, Mode=OneWay}" />
</StackPanel>
</Grid>
<Grid Visibility="{Binding ElementName=infoPanel, Path=LoadPercent, Mode=OneWay, Converter={StaticResource Percent100ToVisibilityVisibleConverter}}">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<archive:ArchiveFileListView x:Name="fileListView"
Grid.Row="0"
Focusable="False"
Foreground="{DynamicResource WindowTextForeground}" />
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40*" />
<ColumnDefinition Width="30*" />
<ColumnDefinition Width="30*" />
</Grid.ColumnDefinitions>
<Label x:Name="archiveCount"
Grid.Column="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource WindowTextForegroundAlternative}">
0 folders and 0 files
</Label>
<Label x:Name="archiveSizeC"
Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource WindowTextForegroundAlternative}" />
<Label x:Name="archiveSizeU"
Grid.Column="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="{DynamicResource WindowTextForegroundAlternative}">
Uncompressed size 0 bytes
</Label>
</Grid>
</Grid>
</Grid>
</UserControl>