Skip to content

Commit

Permalink
Ability to Add and Remove WAD Entries
Browse files Browse the repository at this point in the history
  • Loading branch information
Crauzer committed Sep 25, 2017
1 parent 595e404 commit fd10387
Show file tree
Hide file tree
Showing 9 changed files with 212 additions and 11 deletions.
17 changes: 12 additions & 5 deletions Obsidian/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
Title="Obsidian" Height="685" Width="1150" Icon="icon.ico" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
<Window.Resources>
<valueConverters:SizeValueConverter x:Key="SizeValueConverter"/>
<valueConverters:HexStringValueConverter x:Key="HexStringValueConverter"/>
<valueConverters:WadNameConverter x:Key="WadNameConverter"/>
<Storyboard x:Key="shadowIn">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.BitmapEffect).(DropShadowBitmapEffect.ShadowDepth)" Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
Expand All @@ -34,9 +34,9 @@
<Grid>
<StackPanel Orientation="Vertical">
<Grid>
<DataGrid Height="500" x:Name="datagridWadEntries" Margin="10,10,10,0" AutoGenerateColumns="False" ItemsSource="{Binding Entries, NotifyOnSourceUpdated=True}" GridLinesVisibility="Vertical" VerticalGridLinesBrush="#7F000000" SelectedCellsChanged="datagridWadEntries_SelectedCellsChanged" BeginningEdit="datagridWadEntries_BeginningEdit">
<DataGrid Height="500" x:Name="datagridWadEntries" Margin="10,10,10,0" AutoGenerateColumns="False" GridLinesVisibility="Vertical" VerticalGridLinesBrush="#7F000000" SelectedCellsChanged="datagridWadEntries_SelectedCellsChanged" BeginningEdit="datagridWadEntries_BeginningEdit">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding XXHash, Converter={StaticResource HexStringValueConverter}}" IsReadOnly="True"/>
<DataGridTextColumn Header="Name" Binding="{Binding XXHash, Converter={StaticResource WadNameConverter}}" IsReadOnly="True"/>
<DataGridTextColumn Header="Type" Binding="{Binding Type}" IsReadOnly="True"/>
<DataGridTextColumn Header="Size" Binding="{Binding UncompressedSize, Converter={StaticResource SizeValueConverter}}" IsReadOnly="True"/>
<DataGridTextColumn Header="File Redirection" Binding="{Binding FileRedirection}"/>
Expand All @@ -63,12 +63,19 @@
<GroupBox Header="IO">
<StackPanel Orientation="Vertical" Margin="10">
<Button x:Name="buttonOpenWadFile" Content="Open WAD File" Click="buttonOpenWadFile_Click" Height="31" Width="134"/>
<Button x:Name="buttonSaveWadFile" Content="Save WAD File" Height="31" Width="134" Click="buttonSaveWadFile_Click" Margin="0,25,0,0"/>
<Button x:Name="buttonSaveWadFile" Content="Save WAD File" Height="31" Width="134" Click="buttonSaveWadFile_Click" Margin="0,25,0,0" IsEnabled="False"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Add/Remove" Margin="10,0,0,0">
<StackPanel Orientation="Vertical" Margin="10">
<Button x:Name="buttonAddFile" Content="Add File" Height="25" Width="134" Click="buttonAddFile_Click" IsEnabled="False"/>
<Button x:Name="butonAddFileRedirection" Content="Add File Redirection" Height="25" Width="134" Margin="0, 7" Click="butonAddFileRedirection_Click" IsEnabled="False"/>
<Button x:Name="buttonRemoveEntry" Content="Remove" Height="25" Width="134" Click="buttonRemoveEntry_Click" IsEnabled="False"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Modify" Margin="10,0,0,0 ">
<StackPanel Orientation="Vertical" Margin="10">
<Button x:Name="buttonModifyData" Content="Modfy Data" Height="31" Width="134" IsEnabled="False" Click="buttonModifyData_Click"/>
<Button x:Name="buttonModifyData" Content="Modify Data" Height="31" Width="134" IsEnabled="False" Click="buttonModifyData_Click"/>
</StackPanel>
</GroupBox>
<GroupBox Header="Extract" Margin="10,0,0,0">
Expand Down
36 changes: 34 additions & 2 deletions Obsidian/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
using Fantome.Libraries.League.Helpers.Utilities;
using Fantome.Libraries.League.IO.WAD;
using Microsoft.Win32;
using Obsidian.Windows;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
Expand All @@ -28,6 +30,7 @@ public partial class MainWindow : Window
public WADFile wad { get; set; }
public WADEntry currentlySelectedEntry { get; set; }


public MainWindow()
{
InitializeComponent();
Expand All @@ -49,8 +52,11 @@ private void buttonOpenWadFile_Click(object sender, RoutedEventArgs e)
if (dialog.ShowDialog() == true)
{
this.wad = new WADFile(dialog.FileName);
this.buttonSaveWadFile.IsEnabled = true;
this.buttonAddFile.IsEnabled = true;
this.butonAddFileRedirection.IsEnabled = true;
this.currentlySelectedEntry = null;
this.datagridWadEntries.DataContext = wad;
this.datagridWadEntries.ItemsSource = this.wad.Entries;
}
}

Expand All @@ -73,6 +79,7 @@ private void datagridWadEntries_SelectedCellsChanged(object sender, SelectedCell
{
if (this.datagridWadEntries.SelectedItem != null && this.datagridWadEntries.SelectedItem is WADEntry)
{
this.buttonRemoveEntry.IsEnabled = true;
if ((this.datagridWadEntries.SelectedItem as WADEntry).Type != EntryType.FileRedirection)
{
this.currentlySelectedEntry = this.datagridWadEntries.SelectedItem as WADEntry;
Expand Down Expand Up @@ -103,6 +110,30 @@ private void datagridWadEntries_BeginningEdit(object sender, DataGridBeginningEd
}
}

private void buttonAddFile_Click(object sender, RoutedEventArgs e)
{
FileAddWindow fileAddWindow = new FileAddWindow(this);
fileAddWindow.Show();
this.IsEnabled = false;
}

private void butonAddFileRedirection_Click(object sender, RoutedEventArgs e)
{
FileRedirectionAddWindow fileRedirectionAddWindow = new FileRedirectionAddWindow(this);
fileRedirectionAddWindow.Show();
this.IsEnabled = false;
}

private void buttonRemoveEntry_Click(object sender, RoutedEventArgs e)
{
foreach (WADEntry entry in this.datagridWadEntries.SelectedItems.Cast<WADEntry>())
{
this.wad.RemoveEntry(entry.XXHash);
this.datagridWadEntries.ItemsSource.Cast<WADEntry>().ToList().Remove(entry);
}
CollectionViewSource.GetDefaultView(this.datagridWadEntries.ItemsSource).Refresh();
}

private void buttonModifyData_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
Expand All @@ -122,13 +153,14 @@ private void buttonExtract_Click(object sender, RoutedEventArgs e)

if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{

foreach (WADEntry entry in this.datagridWadEntries.SelectedItems.Cast<WADEntry>().Where(x => x.Type != EntryType.FileRedirection))
{
byte[] dataToWrite = entry.GetContent(true);

File.WriteAllBytes(string.Format("{0}//{1}.{2}",
dialog.SelectedPath,
Utilities.ByteArrayToHex(BitConverter.GetBytes(entry.XXHash)),
Utilities.ByteArrayToHex(BitConverter.GetBytes(entry.XXHash), true),
Utilities.GetEntryExtension(Utilities.GetLeagueFileExtensionType(dataToWrite))),
dataToWrite);
}
Expand Down
16 changes: 15 additions & 1 deletion Obsidian/Obsidian.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,17 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="ValueConverters\HexStringValueConverter.cs" />
<Compile Include="ValueConverters\WadNameConverter.cs" />
<Compile Include="ValueConverters\SizeValueConverter.cs" />
<Compile Include="Windows\AboutWindow.xaml.cs">
<DependentUpon>AboutWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Windows\FileAddWindow.xaml.cs">
<DependentUpon>FileAddWindow.xaml</DependentUpon>
</Compile>
<Compile Include="Windows\FileRedirectionAddWindow.xaml.cs">
<DependentUpon>FileRedirectionAddWindow.xaml</DependentUpon>
</Compile>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
Expand All @@ -76,6 +82,14 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Windows\FileAddWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Windows\FileRedirectionAddWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
Expand Down
2 changes: 1 addition & 1 deletion Obsidian/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.1.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

namespace Obsidian.ValueConverters
{
class HexStringValueConverter : IValueConverter
public class WadNameConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Utilities.ByteArrayToHex(BitConverter.GetBytes((UInt64)value));
return Utilities.ByteArrayToHex(BitConverter.GetBytes((ulong)value), true);
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
Expand Down
26 changes: 26 additions & 0 deletions Obsidian/Windows/FileAddWindow.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<Window x:Class="Obsidian.Windows.FileAddWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Obsidian.Windows"
mc:Ignorable="d"
Title="Add Entry" Height="150" Width="750" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
<Grid>
<StackPanel Orientation="Vertical" Margin="10">
<StackPanel Orientation="Horizontal">
<TextBlock Text="File: " TextAlignment="Center" Margin="0" FontSize="20"/>
<TextBox x:Name="textboxFile" Height="25" MinWidth="641" Margin="9,0,0,0" IsReadOnly="True"/>
<Button x:Name="buttonSelectFile" Margin="3,1,0,1" Width="29" Click="buttonSelectFile_Click"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Path: " TextAlignment="Center" Margin="0" FontSize="20"/>
<TextBox x:Name="textboxPath" Height="25" MinWidth="673"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Button x:Name="buttonAddEntry" Content="Add Entry" Margin="300,10,0,0" Height="28" Width="79" IsEnabled="False" Click="buttonAddEntry_Click"/>
<CheckBox x:Name="checkboxCompress" Content="Compress" FontSize="15" Margin="10,15,0,0" IsChecked="True"/>
</StackPanel>
</StackPanel>
</Grid>
</Window>
53 changes: 53 additions & 0 deletions Obsidian/Windows/FileAddWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using System;
using System.IO;
using System.Windows;
using System.Windows.Data;
using System.Windows.Forms;

namespace Obsidian.Windows
{
/// <summary>
/// Interaction logic for FileAddWindow.xaml
/// </summary>
public partial class FileAddWindow : Window
{
public MainWindow MainWindow { get; set; }
public FileAddWindow(MainWindow window)
{
this.MainWindow = window;
InitializeComponent();
this.Closed += FileAddWindow_Closed;
}

private void FileAddWindow_Closed(object sender, EventArgs e)
{
this.MainWindow.IsEnabled = true;
}

private void buttonSelectFile_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = false;

if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
this.textboxFile.Text = openFileDialog.FileName;
this.buttonAddEntry.IsEnabled = true;
}
}

private void buttonAddEntry_Click(object sender, RoutedEventArgs e)
{
try
{
this.MainWindow.wad.AddEntry(this.textboxPath.Text, File.ReadAllBytes(this.textboxFile.Text), this.checkboxCompress.IsChecked.Value);
CollectionViewSource.GetDefaultView(this.MainWindow.datagridWadEntries.ItemsSource).Refresh();
this.Close();
}
catch (Exception exception)
{
System.Windows.MessageBox.Show(exception.Message, "Please choose a different Path", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
}
}
24 changes: 24 additions & 0 deletions Obsidian/Windows/FileRedirectionAddWindow.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<Window x:Class="Obsidian.Windows.FileRedirectionAddWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Obsidian.Windows"
mc:Ignorable="d"
Title="Add File Redirection Entry" Height="150" Width="750" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
<Grid>
<StackPanel Orientation="Vertical" Margin="10">
<StackPanel Orientation="Horizontal">
<TextBlock Text="File: " TextAlignment="Center" Margin="0" FontSize="20"/>
<TextBox x:Name="textboxFile" Height="25" MinWidth="673" Margin="9,0,0,0" TextChanged="textboxFile_TextChanged"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Path: " TextAlignment="Center" Margin="0" FontSize="20"/>
<TextBox x:Name="textboxPath" Height="25" MinWidth="673"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Button x:Name="buttonAddFileRedirectionEntry" Content="Add File Redirection Entry" Margin="275,10,0,0" Height="28" Width="150" IsEnabled="False" Click="buttonAddFileRedirectionEntry_Click"/>
</StackPanel>
</StackPanel>
</Grid>
</Window>
45 changes: 45 additions & 0 deletions Obsidian/Windows/FileRedirectionAddWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace Obsidian.Windows
{
/// <summary>
/// Interaction logic for FileRedirectionAddWindow.xaml
/// </summary>
public partial class FileRedirectionAddWindow : Window
{
public MainWindow MainWindow { get; set; }
public FileRedirectionAddWindow(MainWindow window)
{
this.MainWindow = window;
InitializeComponent();
this.Closed += FileRedirectionAddWindow_Closed;
}

private void FileRedirectionAddWindow_Closed(object sender, EventArgs e)
{
this.MainWindow.IsEnabled = true;
}

private void textboxFile_TextChanged(object sender, TextChangedEventArgs e)
{
this.buttonAddFileRedirectionEntry.IsEnabled = this.textboxFile.Text.Length != 0;
}

private void buttonAddFileRedirectionEntry_Click(object sender, RoutedEventArgs e)
{
try
{
this.MainWindow.wad.AddEntry(this.textboxFile.Text, this.textboxPath.Text);
CollectionViewSource.GetDefaultView(this.MainWindow.datagridWadEntries.ItemsSource).Refresh();
this.Close();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "Please choose a different Path", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
}
}

0 comments on commit fd10387

Please sign in to comment.