SARC tab - add save & save as functionality

This commit is contained in:
Chev 2021-01-16 22:40:05 -08:00
parent 1d8fdcbd1e
commit 6d6e9f4749
2 changed files with 73 additions and 31 deletions

View file

@ -14,52 +14,53 @@
<MenuItem x:Name="MenuFileOpen" Header="_Open" InputGestureText="Ctrl+O" Click="Menu_FileOpen"/> <MenuItem x:Name="MenuFileOpen" Header="_Open" InputGestureText="Ctrl+O" Click="Menu_FileOpen"/>
<MenuItem x:Name="MenuFileSave" Header="_Save" InputGestureText="Ctrl+S" Click="Menu_FileSave" IsEnabled="False"/> <MenuItem x:Name="MenuFileSave" Header="_Save" InputGestureText="Ctrl+S" Click="Menu_FileSave" IsEnabled="False"/>
<MenuItem x:Name="MenuFileSaveAs" Header="_Save As" InputGestureText="Ctrl+Shift+S" Click="Menu_FileSaveAs" IsEnabled="False"/> <MenuItem x:Name="MenuFileSaveAs" Header="_Save As" InputGestureText="Ctrl+Shift+S" Click="Menu_FileSaveAs" IsEnabled="False"/>
<MenuItem x:Name="MenuFileExportFiles" Header="_Export Files" InputGestureText="Ctrl+Shift+E" Click="Menu_FileExportFiles" IsEnabled="False"/>
<MenuItem x:Name="MenuFileClose" Header="_Close" Click="Menu_FileClose" IsEnabled="False"/> <MenuItem x:Name="MenuFileClose" Header="_Close" Click="Menu_FileClose" IsEnabled="False"/>
</MenuItem> </MenuItem>
</Menu> </Menu>
<Border Margin="10,81,10,10"> <Border Margin="10,81,10,10">
<Grid> <Grid>
<Grid Margin="0,0,628,0"> <Grid Margin="0,0,294,0">
<Label x:Name="FileCount" Margin="10,10,10,0" VerticalAlignment="Top" Height="48" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" FontSize="24" Content=""/> <Label x:Name="FileCount" Margin="10,10,10,0" VerticalAlignment="Top" Height="48" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" FontSize="24" Content=""/>
<Border Margin="10,63,10,10"> <Border Margin="10,63,10,10">
<ScrollViewer VerticalScrollBarVisibility="Auto"> <ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
<StackPanel x:Name="FileDisplay" HorizontalAlignment="Left" Margin="9,9,0,9" Width="556" CanVerticallyScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"/> <StackPanel x:Name="FileDisplay" HorizontalAlignment="Left" Margin="9,9,0,9" Width="556" CanVerticallyScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
</ScrollViewer> </ScrollViewer>
</Border> </Border>
</Grid> </Grid>
<Grid HorizontalAlignment="Right" Width="629"> <Grid HorizontalAlignment="Right" Width="294">
<Label Content="SARC Header" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="32" Width="609" FontSize="18" VerticalContentAlignment="Center"/> <Label Content="SARC Header" HorizontalAlignment="Right" Margin="0,10,10,0" VerticalAlignment="Top" Height="32" Width="275" FontSize="18" VerticalContentAlignment="Center"/>
<Label Content="Magic" Margin="10,47,317,0" VerticalAlignment="Top"/> <Label Content="Magic" Margin="0,47,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SARCMagic" Height="23" Margin="10,78,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/> <TextBox x:Name="SARCMagic" Height="23" Margin="0,78,150,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalAlignment="Right" Width="135"/>
<Label Content="Header Length" Margin="317,47,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/> <Label Content="Header Length" Margin="0,47,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SARCHeaderLength" Height="23" Margin="0,78,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="302"/> <TextBox x:Name="SARCHeaderLength" Height="23" Margin="0,78,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<Label Content="Uses Big Endian" Margin="10,106,317,0" VerticalAlignment="Top"/> <Label Content="Uses Big Endian" Margin="0,106,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SARCIsBigEndian" Height="23" Margin="10,137,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/> <TextBox x:Name="SARCIsBigEndian" Height="23" Margin="0,137,150,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" RenderTransformOrigin="0.709,0.304" HorizontalAlignment="Right" Width="135"/>
<Label Content="File Size" Margin="317,106,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/> <Label Content="File Size" Margin="0,106,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SARCFileSize" Height="23" Margin="0,137,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="302"/> <TextBox x:Name="SARCFileSize" Height="23" Margin="0,137,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<Label Content="Data Offset" Margin="10,165,317,0" VerticalAlignment="Top"/> <Label Content="Data Offset" Margin="0,165,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SARCDataOffset" Height="23" Margin="10,196,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/> <TextBox x:Name="SARCDataOffset" Height="23" Margin="0,196,150,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalAlignment="Right" Width="135"/>
<Label Content="Version" Margin="317,165,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/> <Label Content="Version" Margin="0,165,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SARCVersion" Height="23" Margin="0,196,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="302"/> <TextBox x:Name="SARCVersion" Height="23" Margin="0,196,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<Label Content="SFAT Header" HorizontalAlignment="Left" Margin="10,224,0,0" VerticalAlignment="Top" Height="32" Width="609" FontSize="18" VerticalContentAlignment="Center"/> <Label Content="SFAT Header" HorizontalAlignment="Right" Margin="0,224,10,0" VerticalAlignment="Top" Height="32" Width="275" FontSize="18" VerticalContentAlignment="Center"/>
<Label Content="Magic" Margin="10,261,317,0" VerticalAlignment="Top"/> <Label Content="Magic" Margin="0,261,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SFATMagic" Height="23" Margin="10,292,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/> <TextBox x:Name="SFATMagic" Height="23" Margin="0,292,150,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalAlignment="Right" Width="135"/>
<Label Content="Header Length" Margin="317,261,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/> <Label Content="Header Length" Margin="0,261,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SFATHeaderLength" Height="23" Margin="0,292,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="302"/> <TextBox x:Name="SFATHeaderLength" Height="23" Margin="0,292,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<Label Content="Node Count" Margin="10,320,317,0" VerticalAlignment="Top"/> <Label Content="Node Count" Margin="0,320,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SFATNodeCount" Height="23" Margin="10,351,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/> <TextBox x:Name="SFATNodeCount" Height="23" Margin="0,351,150,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalAlignment="Right" Width="135"/>
<Label Content="Hash Key" Margin="317,320,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/> <Label Content="Hash Key" Margin="0,320,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SFATHashKey" Height="23" Margin="0,351,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="302"/> <TextBox x:Name="SFATHashKey" Height="23" Margin="0,351,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<Label Content="Magic" Margin="10,416,317,0" VerticalAlignment="Top"/> <Label Content="Magic" Margin="0,416,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<Label Content="SFNT Header" HorizontalAlignment="Left" Margin="10,379,0,0" VerticalAlignment="Top" Height="32" Width="609" FontSize="18" VerticalContentAlignment="Center"/> <Label Content="SFNT Header" HorizontalAlignment="Right" Margin="0,379,10,0" VerticalAlignment="Top" Height="32" Width="275" FontSize="18" VerticalContentAlignment="Center"/>
<TextBox x:Name="SFNTMagic" Height="23" Margin="10,447,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/> <TextBox x:Name="SFNTMagic" Height="23" Margin="0,447,150,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalAlignment="Right" Width="135"/>
<Label Content="Header Length" Margin="317,416,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/> <Label Content="Header Length" Margin="0,416,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
<TextBox x:Name="SFNTHeaderLength" Height="23" Margin="0,447,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="302"/> <TextBox x:Name="SFNTHeaderLength" Height="23" Margin="0,447,10,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" HorizontalAlignment="Right" Width="135"/>
</Grid> </Grid>
</Grid> </Grid>
</Border> </Border>

View file

@ -1,6 +1,8 @@
using BOTWToolset.Debugging; using BOTWToolset.Debugging;
using BOTWToolset.IO.SARC; using BOTWToolset.IO.SARC;
using Microsoft.Win32; using Microsoft.Win32;
using Microsoft.WindowsAPICodePack.Dialogs;
using System.IO;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
@ -120,7 +122,7 @@ namespace BOTWToolset.Control
{ {
BOTWConsole.Log("Opening file"); BOTWConsole.Log("Opening file");
SARC s = SARC.ReadFile(openFileDialog.FileName); SARC s = SARC.FromBytes(File.ReadAllBytes(openFileDialog.FileName));
// Set the current file location to the chosen file's location // Set the current file location to the chosen file's location
fileLocation = openFileDialog.FileName; fileLocation = openFileDialog.FileName;
@ -134,6 +136,7 @@ namespace BOTWToolset.Control
MenuFileClose.IsEnabled = true; MenuFileClose.IsEnabled = true;
MenuFileSave.IsEnabled = true; MenuFileSave.IsEnabled = true;
MenuFileSaveAs.IsEnabled = true; MenuFileSaveAs.IsEnabled = true;
MenuFileExportFiles.IsEnabled = true;
} }
} }
@ -153,16 +156,54 @@ namespace BOTWToolset.Control
MenuFileClose.IsEnabled = false; MenuFileClose.IsEnabled = false;
MenuFileSave.IsEnabled = false; MenuFileSave.IsEnabled = false;
MenuFileSaveAs.IsEnabled = false; MenuFileSaveAs.IsEnabled = false;
MenuFileExportFiles.IsEnabled = false;
} }
private void Menu_FileSave(object sender, RoutedEventArgs e) private void Menu_FileSave(object sender, RoutedEventArgs e)
{ {
BOTWConsole.LogStatus($"Saved SARC to {fileLocation}.");
File.WriteAllBytes(fileLocation, SARC.ToBytes(currentSARC));
} }
private void Menu_FileSaveAs(object sender, RoutedEventArgs e) private void Menu_FileSaveAs(object sender, RoutedEventArgs e)
{ {
BOTWConsole.LogStatus($"Saving SARC as...");
SaveFileDialog saveFileDialog = new SaveFileDialog
{
InitialDirectory = @"C:\",
RestoreDirectory = true,
Title = "Save SARC file",
Filter = "All files (*.*)|*.*"
};
if ((bool)saveFileDialog.ShowDialog())
{
File.WriteAllBytes(saveFileDialog.FileName, SARC.ToBytes(currentSARC));
BOTWConsole.LogStatus($"Saved SARC to {saveFileDialog.FileName}.");
}
}
private void Menu_FileExportFiles(object sender, RoutedEventArgs e)
{
BOTWConsole.LogStatus($"Exporting files to folder...");
CommonOpenFileDialog openFolderDialog = new CommonOpenFileDialog
{
InitialDirectory = @"C:\",
RestoreDirectory = true,
Title = "Export files to folder",
IsFolderPicker = true
};
if (openFolderDialog.ShowDialog() == CommonFileDialogResult.Ok)
{
SARC.WriteFiles(currentSARC, openFolderDialog.FileName);
BOTWConsole.LogStatus($"Exported SARC files to {openFolderDialog.FileName}.");
}
} }
} }
} }