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="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="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>
</Menu>
<Border Margin="10,81,10,10">
<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=""/>
<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"/>
</ScrollViewer>
</Border>
</Grid>
<Grid HorizontalAlignment="Right" Width="629">
<Label Content="SARC Header" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="32" Width="609" FontSize="18" VerticalContentAlignment="Center"/>
<Grid HorizontalAlignment="Right" Width="294">
<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"/>
<TextBox x:Name="SARCMagic" Height="23" Margin="10,78,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/>
<Label Content="Header Length" Margin="317,47,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/>
<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"/>
<Label Content="Uses Big Endian" Margin="10,106,317,0" VerticalAlignment="Top"/>
<TextBox x:Name="SARCIsBigEndian" Height="23" Margin="10,137,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/>
<Label Content="File Size" Margin="317,106,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/>
<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"/>
<Label Content="Data Offset" Margin="10,165,317,0" VerticalAlignment="Top"/>
<TextBox x:Name="SARCDataOffset" Height="23" Margin="10,196,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/>
<Label Content="Version" Margin="317,165,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/>
<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"/>
<Label Content="Magic" Margin="0,47,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<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="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="135"/>
<Label Content="Uses Big Endian" Margin="0,106,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<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="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="135"/>
<Label Content="Data Offset" Margin="0,165,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<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="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="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"/>
<TextBox x:Name="SFATMagic" Height="23" Margin="10,292,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/>
<Label Content="Header Length" Margin="317,261,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/>
<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"/>
<Label Content="Node Count" Margin="10,320,317,0" VerticalAlignment="Top"/>
<TextBox x:Name="SFATNodeCount" Height="23" Margin="10,351,317,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center"/>
<Label Content="Hash Key" Margin="317,320,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/>
<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"/>
<Label Content="Magic" Margin="10,416,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="0,292,150,0" TextWrapping="Wrap" VerticalAlignment="Top" IsReadOnly="True" VerticalContentAlignment="Center" HorizontalAlignment="Right" Width="135"/>
<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="135"/>
<Label Content="Node Count" Margin="0,320,150,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="135"/>
<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="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="135"/>
<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"/>
<Label Content="Header Length" Margin="317,416,10,0" VerticalAlignment="Top" HorizontalContentAlignment="Right"/>
<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="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="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="135"/>
</Grid>
</Grid>
</Border>

View file

@ -1,6 +1,8 @@
using BOTWToolset.Debugging;
using BOTWToolset.IO.SARC;
using Microsoft.Win32;
using Microsoft.WindowsAPICodePack.Dialogs;
using System.IO;
using System.Windows;
using System.Windows.Controls;
@ -120,7 +122,7 @@ namespace BOTWToolset.Control
{
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
fileLocation = openFileDialog.FileName;
@ -134,6 +136,7 @@ namespace BOTWToolset.Control
MenuFileClose.IsEnabled = true;
MenuFileSave.IsEnabled = true;
MenuFileSaveAs.IsEnabled = true;
MenuFileExportFiles.IsEnabled = true;
}
}
@ -153,16 +156,54 @@ namespace BOTWToolset.Control
MenuFileClose.IsEnabled = false;
MenuFileSave.IsEnabled = false;
MenuFileSaveAs.IsEnabled = false;
MenuFileExportFiles.IsEnabled = false;
}
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)
{
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}.");
}
}
}
}