moved GUI project to a subdirectory.

This commit is contained in:
morkt 2016-01-07 19:06:08 +04:00
parent f85cf12fcd
commit 01153ad1a8
60 changed files with 7334 additions and 7340 deletions

View File

@ -16,7 +16,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcFormats", "ArcFormats\Ar
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameRes", "GameRes\GameRes.csproj", "{453C087F-E416-4AE9-8C03-D8760DA0574B}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameRes", "GameRes\GameRes.csproj", "{453C087F-E416-4AE9-8C03-D8760DA0574B}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GARbro.GUI", "GARbro.GUI.csproj", "{2935BE57-C4E0-43E7-86DE-C1848C820B19}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GARbro.GUI", "GUI\GARbro.GUI.csproj", "{2935BE57-C4E0-43E7-86DE-C1848C820B19}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Image.Convert", "Image.Convert\Image.Convert.csproj", "{757EB8B1-F62C-4690-AC3D-DAE4A5576B3E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Image.Convert", "Image.Convert\Image.Convert.csproj", "{757EB8B1-F62C-4690-AC3D-DAE4A5576B3E}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject

View File

@ -1,144 +1,144 @@
<!-- Game Resource browser <!-- Game Resource browser
Copyright (C) 2014-2015 by morkt Copyright (C) 2014-2015 by morkt
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions: furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software. all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE. IN THE SOFTWARE.
--> -->
<w:ModalWindow x:Class="GARbro.GUI.AboutBox" <w:ModalWindow x:Class="GARbro.GUI.AboutBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:GARbro.GUI" xmlns:local="clr-namespace:GARbro.GUI"
xmlns:w="clr-namespace:Rnd.Windows" xmlns:w="clr-namespace:Rnd.Windows"
xmlns:s="clr-namespace:GARbro.GUI.Strings" xmlns:s="clr-namespace:GARbro.GUI.Strings"
xmlns:gr="clr-namespace:GameRes;assembly=GameRes" xmlns:gr="clr-namespace:GameRes;assembly=GameRes"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
Title="{x:Static s:guiStrings.TextAboutTitle}" Height="306" Width="550" ResizeMode="NoResize" Title="{x:Static s:guiStrings.TextAboutTitle}" Height="306" Width="550" ResizeMode="NoResize"
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
ShowInTaskbar="False" WindowStartupLocation="CenterOwner"> ShowInTaskbar="False" WindowStartupLocation="CenterOwner">
<Window.Resources> <Window.Resources>
<local:BooleanToVisibiltyConverter x:Key="guiBoolToVisibilityConverter" /> <local:BooleanToVisibiltyConverter x:Key="guiBoolToVisibilityConverter" />
<local:CanCreateConverter x:Key="guiCanCreateConverter"/> <local:CanCreateConverter x:Key="guiCanCreateConverter"/>
<CollectionViewSource x:Key="ArcFormatsSource" Source="{Binding Source={x:Static gr:FormatCatalog.Instance}, Path=ArcFormats, Mode=OneWay}"> <CollectionViewSource x:Key="ArcFormatsSource" Source="{Binding Source={x:Static gr:FormatCatalog.Instance}, Path=ArcFormats, Mode=OneWay}">
<CollectionViewSource.SortDescriptions> <CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Tag" Direction="Ascending"/> <scm:SortDescription PropertyName="Tag" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions> </CollectionViewSource.SortDescriptions>
</CollectionViewSource> </CollectionViewSource>
<CollectionViewSource x:Key="ImageFormatsSource" Source="{Binding Source={x:Static gr:FormatCatalog.Instance}, Path=ImageFormats, Mode=OneWay}"> <CollectionViewSource x:Key="ImageFormatsSource" Source="{Binding Source={x:Static gr:FormatCatalog.Instance}, Path=ImageFormats, Mode=OneWay}">
<CollectionViewSource.SortDescriptions> <CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="IsBuiltin" Direction="Descending"/> <scm:SortDescription PropertyName="IsBuiltin" Direction="Descending"/>
<scm:SortDescription PropertyName="Tag" Direction="Ascending"/> <scm:SortDescription PropertyName="Tag" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions> </CollectionViewSource.SortDescriptions>
</CollectionViewSource> </CollectionViewSource>
<Style x:Key="HiddenHeaderStyle" TargetType="{x:Type GridViewColumnHeader}"> <Style x:Key="HiddenHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed" /> <Setter Property="Visibility" Value="Collapsed" />
</Style> </Style>
<Style x:Key="DisableSelectionStyle" TargetType="{x:Type ListViewItem}"> <Style x:Key="DisableSelectionStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Focusable" Value="false"/> <Setter Property="Focusable" Value="false"/>
<Setter Property="Margin" Value="-5,-1,-5,-1"/> <Setter Property="Margin" Value="-5,-1,-5,-1"/>
<Setter Property="Padding" Value="0"/> <Setter Property="Padding" Value="0"/>
</Style> </Style>
</Window.Resources> </Window.Resources>
<Grid DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:AboutBox}}}"> <Grid DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:AboutBox}}}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/> <ColumnDefinition Width="180"/>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Margin="10"> <StackPanel Grid.Column="0" Margin="10">
<TextBox Text="{Binding Path=AssemblyTitle, Mode=OneWay}" IsReadOnly="True" Background="Transparent" BorderThickness="0" Margin="0,0,0,10" /> <TextBox Text="{Binding Path=AssemblyTitle, Mode=OneWay}" IsReadOnly="True" Background="Transparent" BorderThickness="0" Margin="0,0,0,10" />
<TextBox Text="{Binding Path=VersionString, Mode=OneWay}" IsReadOnly="True" Background="Transparent" BorderThickness="0" Margin="0,0,0,10" /> <TextBox Text="{Binding Path=VersionString, Mode=OneWay}" IsReadOnly="True" Background="Transparent" BorderThickness="0" Margin="0,0,0,10" />
<TextBox Text="{Binding Path=AssemblyCopyright, Mode=OneWay}" IsReadOnly="True" Background="Transparent" BorderThickness="0" /> <TextBox Text="{Binding Path=AssemblyCopyright, Mode=OneWay}" IsReadOnly="True" Background="Transparent" BorderThickness="0" />
</StackPanel> </StackPanel>
<Button Grid.Column="0" VerticalAlignment="Bottom" HorizontalAlignment="Left" VerticalContentAlignment="Center" IsDefault="true" <Button Grid.Column="0" VerticalAlignment="Bottom" HorizontalAlignment="Left" VerticalContentAlignment="Center" IsDefault="true"
Content="{x:Static s:guiStrings.ButtonOK}" Margin="10,0,0,10" Width="70" Height="25" Click="Button_Click" IsCancel="True"/> Content="{x:Static s:guiStrings.ButtonOK}" Margin="10,0,0,10" Width="70" Height="25" Click="Button_Click" IsCancel="True"/>
<Grid Grid.Column="1" Margin="10"> <Grid Grid.Column="1" Margin="10">
<TabControl> <TabControl>
<TabItem Header="{x:Static s:guiStrings.TextAboutArchives}"> <TabItem Header="{x:Static s:guiStrings.TextAboutArchives}">
<Border BorderThickness="1" BorderBrush="Black" VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True"> <Border BorderThickness="1" BorderBrush="Black" VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True">
<ListView Name="ArchiveFormats" ItemsSource="{Binding Source={StaticResource ArcFormatsSource}}" <ListView Name="ArchiveFormats" ItemsSource="{Binding Source={StaticResource ArcFormatsSource}}"
ItemContainerStyle="{StaticResource DisableSelectionStyle}" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.CanContentScroll="False"> ItemContainerStyle="{StaticResource DisableSelectionStyle}" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.CanContentScroll="False">
<ListView.View> <ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource HiddenHeaderStyle}"> <GridView ColumnHeaderContainerStyle="{StaticResource HiddenHeaderStyle}">
<GridViewColumn> <GridViewColumn>
<GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Tag}" Margin="0"/> <TextBlock Text="{Binding Tag}" Margin="0"/>
</DataTemplate> </DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>
<GridViewColumn> <GridViewColumn>
<GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Path=CanCreate, Converter={StaticResource guiCanCreateConverter}}" Margin="-6,0,-6,0"/> <TextBlock Text="{Binding Path=CanCreate, Converter={StaticResource guiCanCreateConverter}}" Margin="-6,0,-6,0"/>
</DataTemplate> </DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>
<GridViewColumn> <GridViewColumn>
<GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Description}" Margin="0"/> <TextBlock Text="{Binding Description}" Margin="0"/>
</DataTemplate> </DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>
</GridView> </GridView>
</ListView.View> </ListView.View>
</ListView> </ListView>
</Border> </Border>
</TabItem> </TabItem>
<TabItem Header="{x:Static s:guiStrings.TextAboutImages}"> <TabItem Header="{x:Static s:guiStrings.TextAboutImages}">
<Border BorderThickness="1" BorderBrush="Black" VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True"> <Border BorderThickness="1" BorderBrush="Black" VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True">
<ScrollViewer VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="0" Background="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}"> <ScrollViewer VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="0" Background="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}">
<ItemsControl Name="ImageFormats" ItemsSource="{Binding Source={StaticResource ImageFormatsSource}}"> <ItemsControl Name="ImageFormats" ItemsSource="{Binding Source={StaticResource ImageFormatsSource}}">
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Tag}" Margin="3,0,5,0" /> <TextBlock Text="{Binding Tag}" Margin="3,0,5,0" />
<TextBlock Text="{x:Static s:guiStrings.TextAboutBuiltin}" Margin="0,0,5,0" Visibility="{Binding IsBuiltin, Converter={StaticResource guiBoolToVisibilityConverter}}"/> <TextBlock Text="{x:Static s:guiStrings.TextAboutBuiltin}" Margin="0,0,5,0" Visibility="{Binding IsBuiltin, Converter={StaticResource guiBoolToVisibilityConverter}}"/>
<TextBlock Text="{Binding Description}" /> <TextBlock Text="{Binding Description}" />
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ItemsControl> </ItemsControl>
</ScrollViewer> </ScrollViewer>
</Border> </Border>
</TabItem> </TabItem>
<TabItem Header="{x:Static s:guiStrings.TextAboutAudio}"> <TabItem Header="{x:Static s:guiStrings.TextAboutAudio}">
<Border BorderThickness="1" BorderBrush="Black" VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True"> <Border BorderThickness="1" BorderBrush="Black" VerticalAlignment="Stretch" Margin="0" SnapsToDevicePixels="True">
<ScrollViewer VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="0" Background="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}"> <ScrollViewer VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="0" Background="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}">
<ItemsControl Name="AudioFormats" ItemsSource="{Binding Source={x:Static gr:FormatCatalog.Instance}, Path=AudioFormats, Mode=OneWay}"> <ItemsControl Name="AudioFormats" ItemsSource="{Binding Source={x:Static gr:FormatCatalog.Instance}, Path=AudioFormats, Mode=OneWay}">
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Tag}" Margin="3,0,7,0" /> <TextBlock Text="{Binding Tag}" Margin="3,0,7,0" />
<TextBlock Text="{Binding Description}" /> <TextBlock Text="{Binding Description}" />
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>
</ItemsControl> </ItemsControl>
</ScrollViewer> </ScrollViewer>
</Border> </Border>
</TabItem> </TabItem>
<TabItem Header="{x:Static s:guiStrings.TextAboutLicense}"> <TabItem Header="{x:Static s:guiStrings.TextAboutLicense}">
<ScrollViewer> <ScrollViewer>
<RichTextBox Name="LicenseTabText" IsReadOnly="True"/> <RichTextBox Name="LicenseTabText" IsReadOnly="True"/>
</ScrollViewer> </ScrollViewer>
</TabItem> </TabItem>
</TabControl> </TabControl>
</Grid> </Grid>
</Grid> </Grid>
</w:ModalWindow> </w:ModalWindow>

View File

@ -1,277 +1,277 @@
/// Game Resource browser /// Game Resource browser
// //
// Copyright (C) 2014-2015 by morkt // Copyright (C) 2014-2015 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Windows; using System.Windows;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Documents; using System.Windows.Documents;
using GARbro.GUI.Properties; using GARbro.GUI.Properties;
using GARbro.GUI.Strings; using GARbro.GUI.Strings;
namespace GARbro.GUI namespace GARbro.GUI
{ {
/// <summary> /// <summary>
/// Interaction logic for AboutBox.xaml /// Interaction logic for AboutBox.xaml
/// </summary> /// </summary>
public partial class AboutBox : Rnd.Windows.ModalWindow public partial class AboutBox : Rnd.Windows.ModalWindow
{ {
public AboutBox() public AboutBox()
{ {
InitializeComponent(); InitializeComponent();
LicenseTabText.Document = GetResourceDoc ("GARbro.GUI.LICENSE"); LicenseTabText.Document = GetResourceDoc ("GARbro.GUI.LICENSE");
} }
private void Button_Click(object sender, RoutedEventArgs e) private void Button_Click(object sender, RoutedEventArgs e)
{ {
this.Close(); this.Close();
} }
#region License text backend #region License text backend
static FlowDocument GetResourceDoc (string resource) static FlowDocument GetResourceDoc (string resource)
{ {
var assembly = Assembly.GetExecutingAssembly(); var assembly = Assembly.GetExecutingAssembly();
using (var stream = assembly.GetManifestResourceStream (resource)) using (var stream = assembly.GetManifestResourceStream (resource))
{ {
if (null == stream) if (null == stream)
return new FlowDocument(); return new FlowDocument();
return ReadPlainText (stream); return ReadPlainText (stream);
} }
} }
/// <summary> /// <summary>
/// Read plain text from stream and return it as FlowDocument. /// Read plain text from stream and return it as FlowDocument.
/// </summary> /// </summary>
static FlowDocument ReadPlainText (Stream stream) static FlowDocument ReadPlainText (Stream stream)
{ {
using (var reader = new StreamReader (stream)) using (var reader = new StreamReader (stream))
{ {
var doc = new FlowDocument(); var doc = new FlowDocument();
var para = new Paragraph(); var para = new Paragraph();
for (;;) for (;;)
{ {
var line = reader.ReadLine(); var line = reader.ReadLine();
if (null == line) if (null == line)
break; break;
if (line.Length > 0) if (line.Length > 0)
{ {
if (para.Inlines.Count > 0) if (para.Inlines.Count > 0)
para.Inlines.Add (" "); para.Inlines.Add (" ");
para.Inlines.Add (line); para.Inlines.Add (line);
} }
else else
{ {
if (0 == para.Inlines.Count) if (0 == para.Inlines.Count)
para.Inlines.Add (new LineBreak()); para.Inlines.Add (new LineBreak());
doc.Blocks.Add (para); doc.Blocks.Add (para);
para = new Paragraph(); para = new Paragraph();
} }
} }
if (para.Inlines.Count > 0) if (para.Inlines.Count > 0)
doc.Blocks.Add (para); doc.Blocks.Add (para);
return doc; return doc;
} }
} }
#endregion #endregion
#region Assembly Attribute Accessors #region Assembly Attribute Accessors
public string AssemblyTitle public string AssemblyTitle
{ {
get get
{ {
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
if (attributes.Length > 0) if (attributes.Length > 0)
{ {
AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
if (titleAttribute.Title != "") if (titleAttribute.Title != "")
{ {
return titleAttribute.Title; return titleAttribute.Title;
} }
} }
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
} }
} }
public string VersionString public string VersionString
{ {
get get
{ {
return string.Format (guiStrings.MsgVersion, AssemblyVersion); return string.Format (guiStrings.MsgVersion, AssemblyVersion);
} }
} }
public string AssemblyVersion public string AssemblyVersion
{ {
get get
{ {
return Assembly.GetExecutingAssembly().GetName().Version.ToString(); return Assembly.GetExecutingAssembly().GetName().Version.ToString();
} }
} }
public string AssemblyDescription public string AssemblyDescription
{ {
get get
{ {
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
if (attributes.Length == 0) if (attributes.Length == 0)
{ {
return ""; return "";
} }
return ((AssemblyDescriptionAttribute)attributes[0]).Description; return ((AssemblyDescriptionAttribute)attributes[0]).Description;
} }
} }
public string AssemblyProduct public string AssemblyProduct
{ {
get get
{ {
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
if (attributes.Length == 0) if (attributes.Length == 0)
{ {
return ""; return "";
} }
return ((AssemblyProductAttribute)attributes[0]).Product; return ((AssemblyProductAttribute)attributes[0]).Product;
} }
} }
public string AssemblyCopyright public string AssemblyCopyright
{ {
get get
{ {
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
if (attributes.Length == 0) if (attributes.Length == 0)
{ {
return ""; return "";
} }
return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
} }
} }
public string AssemblyCompany public string AssemblyCompany
{ {
get get
{ {
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
if (attributes.Length == 0) if (attributes.Length == 0)
{ {
return ""; return "";
} }
return ((AssemblyCompanyAttribute)attributes[0]).Company; return ((AssemblyCompanyAttribute)attributes[0]).Company;
} }
} }
#endregion #endregion
} }
public class BooleanToVisibiltyConverter : IValueConverter public class BooleanToVisibiltyConverter : IValueConverter
{ {
/// <summary>Convert a boolean value to a Visibility value</summary> /// <summary>Convert a boolean value to a Visibility value</summary>
public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ {
bool isVisible = (bool)value; bool isVisible = (bool)value;
// If visibility is inverted by the converter parameter, then invert our value // If visibility is inverted by the converter parameter, then invert our value
if (IsVisibilityInverted (parameter)) if (IsVisibilityInverted (parameter))
isVisible = !isVisible; isVisible = !isVisible;
return (isVisible ? Visibility.Visible : Visibility.Collapsed); return (isVisible ? Visibility.Visible : Visibility.Collapsed);
} }
/// <summary> /// <summary>
/// Determine the visibility mode based on a converter parameter. This parameter is /// Determine the visibility mode based on a converter parameter. This parameter is
/// of type Visibility, and specifies what visibility value to return when the boolean /// of type Visibility, and specifies what visibility value to return when the boolean
/// value is true. /// value is true.
/// </summary> /// </summary>
private static Visibility GetVisibilityMode(object parameter) private static Visibility GetVisibilityMode(object parameter)
{ {
// Default to Visible // Default to Visible
Visibility mode = Visibility.Visible; Visibility mode = Visibility.Visible;
// If a parameter is specified, then we'll try to understand it as a Visibility value // If a parameter is specified, then we'll try to understand it as a Visibility value
if (parameter != null) if (parameter != null)
{ {
// If it's already a Visibility value, then just use it // If it's already a Visibility value, then just use it
if (parameter is Visibility) if (parameter is Visibility)
{ {
mode = (Visibility)parameter; mode = (Visibility)parameter;
} }
else else
{ {
// Let's try to parse the parameter as a Visibility value, throwing an exception when the parsing fails // Let's try to parse the parameter as a Visibility value, throwing an exception when the parsing fails
try try
{ {
mode = (Visibility)Enum.Parse(typeof(Visibility), parameter.ToString(), true); mode = (Visibility)Enum.Parse(typeof(Visibility), parameter.ToString(), true);
} }
catch (FormatException e) catch (FormatException e)
{ {
throw new FormatException("Invalid Visibility specified as the ConverterParameter. Use Visible or Collapsed.", e); throw new FormatException("Invalid Visibility specified as the ConverterParameter. Use Visible or Collapsed.", e);
} }
} }
} }
// Return the detected mode // Return the detected mode
return mode; return mode;
} }
/// <summary> /// <summary>
/// Determine whether or not visibility is inverted based on a converter parameter. /// Determine whether or not visibility is inverted based on a converter parameter.
/// When the parameter is specified as Collapsed, that means that when the boolean value /// When the parameter is specified as Collapsed, that means that when the boolean value
/// is true, we should return Collapsed, which is inverted. /// is true, we should return Collapsed, which is inverted.
/// </summary> /// </summary>
private static bool IsVisibilityInverted(object parameter) private static bool IsVisibilityInverted(object parameter)
{ {
return (GetVisibilityMode(parameter) == Visibility.Collapsed); return (GetVisibilityMode(parameter) == Visibility.Collapsed);
} }
/// <summary> /// <summary>
/// Support 2-way databinding of the VisibilityConverter, converting Visibility to a boolean /// Support 2-way databinding of the VisibilityConverter, converting Visibility to a boolean
/// </summary> /// </summary>
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ {
bool isVisible = ((Visibility)value == Visibility.Visible); bool isVisible = ((Visibility)value == Visibility.Visible);
// If visibility is inverted by the converter parameter, then invert our value // If visibility is inverted by the converter parameter, then invert our value
if (IsVisibilityInverted(parameter)) if (IsVisibilityInverted(parameter))
isVisible = !isVisible; isVisible = !isVisible;
return isVisible; return isVisible;
} }
} }
[ValueConversion(typeof(bool), typeof(string))] [ValueConversion(typeof(bool), typeof(string))]
class CanCreateConverter : IValueConverter class CanCreateConverter : IValueConverter
{ {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ {
return (bool)value ? "[r/w]" : "[r]"; return (bool)value ? "[r/w]" : "[r]";
} }
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ {
return false; return false;
} }
} }
} }

View File

@ -1,96 +1,96 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<configSections> <configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="GARbro.GUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/> <section name="GARbro.GUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup> </sectionGroup>
</configSections> </configSections>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup> </startup>
<userSettings> <userSettings>
<GARbro.GUI.Properties.Settings> <GARbro.GUI.Properties.Settings>
<setting name="UpgradeRequired" serializeAs="String"> <setting name="UpgradeRequired" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="winTop" serializeAs="String"> <setting name="winTop" serializeAs="String">
<value>NaN</value> <value>NaN</value>
</setting> </setting>
<setting name="winLeft" serializeAs="String"> <setting name="winLeft" serializeAs="String">
<value>NaN</value> <value>NaN</value>
</setting> </setting>
<setting name="winWidth" serializeAs="String"> <setting name="winWidth" serializeAs="String">
<value>1024</value> <value>1024</value>
</setting> </setting>
<setting name="winHeight" serializeAs="String"> <setting name="winHeight" serializeAs="String">
<value>600</value> <value>600</value>
</setting> </setting>
<setting name="winState" serializeAs="String"> <setting name="winState" serializeAs="String">
<value>Normal</value> <value>Normal</value>
</setting> </setting>
<setting name="lvNameColumnWidth" serializeAs="String"> <setting name="lvNameColumnWidth" serializeAs="String">
<value>265</value> <value>265</value>
</setting> </setting>
<setting name="lvTypeColumnWidth" serializeAs="String"> <setting name="lvTypeColumnWidth" serializeAs="String">
<value>75</value> <value>75</value>
</setting> </setting>
<setting name="lvSizeColumnWidth" serializeAs="String"> <setting name="lvSizeColumnWidth" serializeAs="String">
<value>75</value> <value>75</value>
</setting> </setting>
<setting name="lvSortColumn" serializeAs="String"> <setting name="lvSortColumn" serializeAs="String">
<value>Name</value> <value>Name</value>
</setting> </setting>
<setting name="lvSortDirection" serializeAs="String"> <setting name="lvSortDirection" serializeAs="String">
<value>Ascending</value> <value>Ascending</value>
</setting> </setting>
<setting name="lvPanelWidth" serializeAs="String"> <setting name="lvPanelWidth" serializeAs="String">
<value>448</value> <value>448</value>
</setting> </setting>
<setting name="appExtractImages" serializeAs="String"> <setting name="appExtractImages" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="appExtractText" serializeAs="String"> <setting name="appExtractText" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="appImageFormat" serializeAs="String"> <setting name="appImageFormat" serializeAs="String">
<value /> <value />
</setting> </setting>
<setting name="appTextEncoding" serializeAs="String"> <setting name="appTextEncoding" serializeAs="String">
<value>65001</value> <value>65001</value>
</setting> </setting>
<setting name="appLastDirectory" serializeAs="String"> <setting name="appLastDirectory" serializeAs="String">
<value /> <value />
</setting> </setting>
<setting name="appArchiveFormat" serializeAs="String"> <setting name="appArchiveFormat" serializeAs="String">
<value /> <value />
</setting> </setting>
<setting name="appLastCreatedArchive" serializeAs="String"> <setting name="appLastCreatedArchive" serializeAs="String">
<value /> <value />
</setting> </setting>
<setting name="winMenuBarVisibility" serializeAs="String"> <setting name="winMenuBarVisibility" serializeAs="String">
<value>Visible</value> <value>Visible</value>
</setting> </setting>
<setting name="winToolBarVisibility" serializeAs="String"> <setting name="winToolBarVisibility" serializeAs="String">
<value>Visible</value> <value>Visible</value>
</setting> </setting>
<setting name="winStatusBarVisibility" serializeAs="String"> <setting name="winStatusBarVisibility" serializeAs="String">
<value>Visible</value> <value>Visible</value>
</setting> </setting>
<setting name="appLastImageFormat" serializeAs="String"> <setting name="appLastImageFormat" serializeAs="String">
<value>PNG</value> <value>PNG</value>
</setting> </setting>
<setting name="appConvertAudio" serializeAs="String"> <setting name="appConvertAudio" serializeAs="String">
<value>False</value> <value>False</value>
</setting> </setting>
<setting name="appExtractAudio" serializeAs="String"> <setting name="appExtractAudio" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="appIgnoreConversionErrors" serializeAs="String"> <setting name="appIgnoreConversionErrors" serializeAs="String">
<value>False</value> <value>False</value>
</setting> </setting>
<setting name="appLastDestination" serializeAs="String"> <setting name="appLastDestination" serializeAs="String">
<value /> <value />
</setting> </setting>
</GARbro.GUI.Properties.Settings> </GARbro.GUI.Properties.Settings>
</userSettings> </userSettings>
</configuration> </configuration>

View File

@ -1,9 +1,9 @@
<Application x:Class="GARbro.GUI.App" <Application x:Class="GARbro.GUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml" Startup="ApplicationStartup" StartupUri="MainWindow.xaml" Startup="ApplicationStartup"
ShutdownMode="OnMainWindowClose" Exit="ApplicationExit"> ShutdownMode="OnMainWindowClose" Exit="ApplicationExit">
<Application.Resources> <Application.Resources>
<BitmapImage x:Key="IconSearch" UriSource="pack://application:,,,/Images/search4files.ico" /> <BitmapImage x:Key="IconSearch" UriSource="pack://application:,,,/Images/search4files.ico" />
</Application.Resources> </Application.Resources>
</Application> </Application>

View File

@ -1,112 +1,112 @@
// Game Resource Browser // Game Resource Browser
// //
// Copyright (C) 2014-2015 by morkt // Copyright (C) 2014-2015 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using System.Diagnostics; using System.Diagnostics;
using GARbro.GUI.Properties; using GARbro.GUI.Properties;
using GameRes; using GameRes;
using GameRes.Compression; using GameRes.Compression;
namespace GARbro.GUI namespace GARbro.GUI
{ {
/// <summary> /// <summary>
/// Interaction logic for App.xaml /// Interaction logic for App.xaml
/// </summary> /// </summary>
public partial class App : Application public partial class App : Application
{ {
const StringComparison StringIgnoreCase = StringComparison.OrdinalIgnoreCase; const StringComparison StringIgnoreCase = StringComparison.OrdinalIgnoreCase;
public static string Name { get { return "GARbro"; } } public static string Name { get { return "GARbro"; } }
/// <summary> /// <summary>
/// Initial browsing directory. /// Initial browsing directory.
/// </summary> /// </summary>
public string InitPath { get; private set; } public string InitPath { get; private set; }
void ApplicationStartup (object sender, StartupEventArgs e) void ApplicationStartup (object sender, StartupEventArgs e)
{ {
string exe_dir = Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly().Location); string exe_dir = Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly().Location);
#if DEBUG #if DEBUG
Trace.Listeners.Add (new TextWriterTraceListener (Path.Combine (exe_dir, "trace.log"))); Trace.Listeners.Add (new TextWriterTraceListener (Path.Combine (exe_dir, "trace.log")));
Trace.AutoFlush = true; Trace.AutoFlush = true;
#endif #endif
Trace.WriteLine ("ApplicationStartup --------------------------------", "GARbro.GUI.App"); Trace.WriteLine ("ApplicationStartup --------------------------------", "GARbro.GUI.App");
this.DispatcherUnhandledException += (s, args) => this.DispatcherUnhandledException += (s, args) =>
{ {
Trace.WriteLine (string.Format ("Unhandled exception caught: {0}", args.Exception.Message), Trace.WriteLine (string.Format ("Unhandled exception caught: {0}", args.Exception.Message),
"GARbro.GUI.App"); "GARbro.GUI.App");
Trace.WriteLine (args.Exception.StackTrace, "Stack trace"); Trace.WriteLine (args.Exception.StackTrace, "Stack trace");
}; };
try try
{ {
if (0 != e.Args.Length) if (0 != e.Args.Length)
{ {
InitPath = Path.GetFullPath (e.Args[0]); InitPath = Path.GetFullPath (e.Args[0]);
} }
else if (!string.IsNullOrEmpty (Settings.Default.appLastDirectory)) else if (!string.IsNullOrEmpty (Settings.Default.appLastDirectory))
{ {
string last_dir = Settings.Default.appLastDirectory; string last_dir = Settings.Default.appLastDirectory;
Directory.SetCurrentDirectory (last_dir); Directory.SetCurrentDirectory (last_dir);
InitPath = last_dir; InitPath = last_dir;
} }
} }
catch { } catch { }
if (string.IsNullOrEmpty (InitPath)) if (string.IsNullOrEmpty (InitPath))
InitPath = Directory.GetCurrentDirectory(); InitPath = Directory.GetCurrentDirectory();
string scheme_file = Path.Combine (exe_dir, "Formats.dat"); string scheme_file = Path.Combine (exe_dir, "Formats.dat");
try try
{ {
using (var file = File.OpenRead (scheme_file)) using (var file = File.OpenRead (scheme_file))
DeserializeScheme (file); DeserializeScheme (file);
} }
catch (Exception X) catch (Exception X)
{ {
Trace.WriteLine (X.Message, "scheme deserialization failed"); Trace.WriteLine (X.Message, "scheme deserialization failed");
} }
} }
void ApplicationExit (object sender, ExitEventArgs e) void ApplicationExit (object sender, ExitEventArgs e)
{ {
Settings.Default.Save(); Settings.Default.Save();
} }
void DeserializeScheme (Stream file) void DeserializeScheme (Stream file)
{ {
using (var reader = new BinaryReader (file)) using (var reader = new BinaryReader (file))
{ {
var scheme_id = FormatCatalog.Instance.SchemeID; var scheme_id = FormatCatalog.Instance.SchemeID;
var header = reader.ReadChars (scheme_id.Length); var header = reader.ReadChars (scheme_id.Length);
if (!header.SequenceEqual (scheme_id)) if (!header.SequenceEqual (scheme_id))
throw new FormatException ("Invalid serialization file"); throw new FormatException ("Invalid serialization file");
int version = reader.ReadInt32(); int version = reader.ReadInt32();
using (var zs = new ZLibStream (file, CompressionMode.Decompress)) using (var zs = new ZLibStream (file, CompressionMode.Decompress))
FormatCatalog.Instance.DeserializeScheme (zs); FormatCatalog.Instance.DeserializeScheme (zs);
} }
} }
} }
} }

View File

@ -1,24 +1,24 @@
<Window x:Class="GARbro.GUI.ArcParametersDialog" <Window x:Class="GARbro.GUI.ArcParametersDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:GARbro.GUI.Strings" xmlns:s="clr-namespace:GARbro.GUI.Strings"
xmlns:local="clr-namespace:GARbro.GUI" xmlns:local="clr-namespace:GARbro.GUI"
Title="{x:Static s:guiStrings.TextParametersTitle}" SizeToContent="WidthAndHeight" Title="{x:Static s:guiStrings.TextParametersTitle}" SizeToContent="WidthAndHeight"
UseLayoutRounding="True" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" UseLayoutRounding="True" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
ShowInTaskbar="False" WindowStartupLocation="CenterOwner" ResizeMode="NoResize"> ShowInTaskbar="False" WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
<Window.Resources> <Window.Resources>
<BitmapImage x:Key="Icon64x64Info" UriSource="Images/64x64/info.png"/> <BitmapImage x:Key="Icon64x64Info" UriSource="Images/64x64/info.png"/>
</Window.Resources> </Window.Resources>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<Image Width="64" Height="64" Source="Images/64x64/info.png" <Image Width="64" Height="64" Source="Images/64x64/info.png"
SnapsToDevicePixels="True" VerticalAlignment="Top" SnapsToDevicePixels="True" VerticalAlignment="Top"
RenderOptions.BitmapScalingMode="HighQuality" Margin="10,10,0,0"/> RenderOptions.BitmapScalingMode="HighQuality" Margin="10,10,0,0"/>
<DockPanel Name="WidgetPane" VerticalAlignment="Top" Margin="10"> <DockPanel Name="WidgetPane" VerticalAlignment="Top" Margin="10">
<TextBlock Name="Notice" DockPanel.Dock="Top" TextWrapping="WrapWithOverflow" Margin="0,0,0,10"/> <TextBlock Name="Notice" DockPanel.Dock="Top" TextWrapping="WrapWithOverflow" Margin="0,0,0,10"/>
<StackPanel DockPanel.Dock="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" Margin="20,20,0,0"> <StackPanel DockPanel.Dock="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" Margin="20,20,0,0">
<Button Content="{x:Static s:guiStrings.ButtonOK}" Click="Button_Click" IsDefault="True" Width="70" Height="25" Margin="0,0,10,0"/> <Button Content="{x:Static s:guiStrings.ButtonOK}" Click="Button_Click" IsDefault="True" Width="70" Height="25" Margin="0,0,10,0"/>
<Button Content="{x:Static s:guiStrings.ButtonCancel}" IsCancel="True" Width="70" Height="25" Margin="10,0,0,0"/> <Button Content="{x:Static s:guiStrings.ButtonCancel}" IsCancel="True" Width="70" Height="25" Margin="10,0,0,0"/>
</StackPanel> </StackPanel>
</DockPanel> </DockPanel>
</StackPanel> </StackPanel>
</Window> </Window>

View File

@ -1,22 +1,22 @@
using System.Windows; using System.Windows;
namespace GARbro.GUI namespace GARbro.GUI
{ {
/// <summary> /// <summary>
/// Interaction logic for ArcParameters.xaml /// Interaction logic for ArcParameters.xaml
/// </summary> /// </summary>
public partial class ArcParametersDialog : Window public partial class ArcParametersDialog : Window
{ {
public ArcParametersDialog (UIElement widget, string notice) public ArcParametersDialog (UIElement widget, string notice)
{ {
InitializeComponent(); InitializeComponent();
this.WidgetPane.Children.Add (widget); this.WidgetPane.Children.Add (widget);
this.Notice.Text = notice; this.Notice.Text = notice;
} }
private void Button_Click (object sender, RoutedEventArgs e) private void Button_Click (object sender, RoutedEventArgs e)
{ {
DialogResult = true; DialogResult = true;
} }
} }
} }

View File

@ -1,166 +1,166 @@
//! \file DragScroll.cs //! \file DragScroll.cs
//! \date Sun Jul 06 10:47:20 2014 //! \date Sun Jul 06 10:47:20 2014
//! \brief Scroll control contents by dragging. //! \brief Scroll control contents by dragging.
// //
// http://matthamilton.net/touchscrolling-for-scrollviewer // http://matthamilton.net/touchscrolling-for-scrollviewer
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows; using System.Windows;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media; using System.Windows.Media;
using System.Diagnostics; using System.Diagnostics;
namespace GARbro.GUI namespace GARbro.GUI
{ {
public class TouchScrolling : DependencyObject public class TouchScrolling : DependencyObject
{ {
public static bool GetIsEnabled(DependencyObject obj) public static bool GetIsEnabled(DependencyObject obj)
{ {
return (bool)obj.GetValue(IsEnabledProperty); return (bool)obj.GetValue(IsEnabledProperty);
} }
public static void SetIsEnabled(DependencyObject obj, bool value) public static void SetIsEnabled(DependencyObject obj, bool value)
{ {
obj.SetValue(IsEnabledProperty, value); obj.SetValue(IsEnabledProperty, value);
} }
public bool IsEnabled public bool IsEnabled
{ {
get { return (bool)GetValue(IsEnabledProperty); } get { return (bool)GetValue(IsEnabledProperty); }
set { SetValue(IsEnabledProperty, value); } set { SetValue(IsEnabledProperty, value); }
} }
public static readonly DependencyProperty IsEnabledProperty = public static readonly DependencyProperty IsEnabledProperty =
DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(TouchScrolling), new UIPropertyMetadata(false, IsEnabledChanged)); DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(TouchScrolling), new UIPropertyMetadata(false, IsEnabledChanged));
static Dictionary<object, MouseCapture> _captures = new Dictionary<object, MouseCapture>(); static Dictionary<object, MouseCapture> _captures = new Dictionary<object, MouseCapture>();
static void IsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) static void IsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{ {
var target = d as FrameworkElement; var target = d as FrameworkElement;
if (target == null) return; if (target == null) return;
if ((bool)e.NewValue) if ((bool)e.NewValue)
{ {
target.Loaded += target_Loaded; target.Loaded += target_Loaded;
} }
else else
{ {
target_Unloaded(target, new RoutedEventArgs()); target_Unloaded(target, new RoutedEventArgs());
} }
} }
static void target_Unloaded(object sender, RoutedEventArgs e) static void target_Unloaded(object sender, RoutedEventArgs e)
{ {
System.Diagnostics.Debug.WriteLine("Target Unloaded"); System.Diagnostics.Debug.WriteLine("Target Unloaded");
var target = sender as FrameworkElement; var target = sender as FrameworkElement;
if (null == target) if (null == target)
return; return;
_captures.Remove(sender); _captures.Remove(sender);
target.Loaded -= target_Loaded; target.Loaded -= target_Loaded;
target.Unloaded -= target_Unloaded; target.Unloaded -= target_Unloaded;
target.PreviewMouseLeftButtonDown -= target_PreviewMouseLeftButtonDown; target.PreviewMouseLeftButtonDown -= target_PreviewMouseLeftButtonDown;
target.PreviewMouseMove -= target_PreviewMouseMove; target.PreviewMouseMove -= target_PreviewMouseMove;
target.PreviewMouseLeftButtonUp -= target_PreviewMouseLeftButtonUp; target.PreviewMouseLeftButtonUp -= target_PreviewMouseLeftButtonUp;
} }
static void target_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) static void target_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{ {
var target = sender as FrameworkElement; var target = sender as FrameworkElement;
if (null == target) if (null == target)
return; return;
var scroller = FindVisualParent<ScrollViewer> (target); var scroller = FindVisualParent<ScrollViewer> (target);
if (null == scroller) if (null == scroller)
{ {
Trace.WriteLine ("Control should be placed inside ScrollViewer for drag scrolling to work"); Trace.WriteLine ("Control should be placed inside ScrollViewer for drag scrolling to work");
return; return;
} }
_captures[sender] = new MouseCapture _captures[sender] = new MouseCapture
{ {
HorizontalOffset = scroller.HorizontalOffset, HorizontalOffset = scroller.HorizontalOffset,
VerticalOffset = scroller.VerticalOffset, VerticalOffset = scroller.VerticalOffset,
Point = e.GetPosition(scroller), Point = e.GetPosition(scroller),
}; };
} }
static void target_Loaded(object sender, RoutedEventArgs e) static void target_Loaded(object sender, RoutedEventArgs e)
{ {
var target = sender as FrameworkElement; var target = sender as FrameworkElement;
if (target == null) return; if (target == null) return;
// Debug.WriteLine("DragScroll target Loaded", sender); // Debug.WriteLine("DragScroll target Loaded", sender);
target.Unloaded += target_Unloaded; target.Unloaded += target_Unloaded;
target.PreviewMouseLeftButtonDown += target_PreviewMouseLeftButtonDown; target.PreviewMouseLeftButtonDown += target_PreviewMouseLeftButtonDown;
target.PreviewMouseMove += target_PreviewMouseMove; target.PreviewMouseMove += target_PreviewMouseMove;
target.PreviewMouseLeftButtonUp += target_PreviewMouseLeftButtonUp; target.PreviewMouseLeftButtonUp += target_PreviewMouseLeftButtonUp;
} }
static void target_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) static void target_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{ {
var target = sender as FrameworkElement; var target = sender as FrameworkElement;
if (target == null) return; if (target == null) return;
target.ReleaseMouseCapture(); target.ReleaseMouseCapture();
target.Cursor = Cursors.Arrow; target.Cursor = Cursors.Arrow;
} }
static void target_PreviewMouseMove(object sender, MouseEventArgs e) static void target_PreviewMouseMove(object sender, MouseEventArgs e)
{ {
if (!_captures.ContainsKey(sender)) return; if (!_captures.ContainsKey(sender)) return;
if (e.LeftButton != MouseButtonState.Pressed) if (e.LeftButton != MouseButtonState.Pressed)
{ {
_captures.Remove(sender); _captures.Remove(sender);
return; return;
} }
var target = sender as FrameworkElement; var target = sender as FrameworkElement;
if (null == target) if (null == target)
return; return;
var scroller = FindVisualParent<ScrollViewer> (target); var scroller = FindVisualParent<ScrollViewer> (target);
if (null == scroller) if (null == scroller)
return; return;
var capture = _captures[sender]; var capture = _captures[sender];
var point = e.GetPosition (scroller); var point = e.GetPosition (scroller);
var dx = point.X - capture.Point.X; var dx = point.X - capture.Point.X;
var dy = point.Y - capture.Point.Y; var dy = point.Y - capture.Point.Y;
if (System.Math.Abs(dy) > 5 || System.Math.Abs(dx) > 5) if (System.Math.Abs(dy) > 5 || System.Math.Abs(dx) > 5)
{ {
target.CaptureMouse(); target.CaptureMouse();
target.Cursor = Cursors.SizeAll; target.Cursor = Cursors.SizeAll;
} }
scroller.ScrollToHorizontalOffset(capture.HorizontalOffset - dx); scroller.ScrollToHorizontalOffset(capture.HorizontalOffset - dx);
scroller.ScrollToVerticalOffset(capture.VerticalOffset - dy); scroller.ScrollToVerticalOffset(capture.VerticalOffset - dy);
} }
static parentItem FindVisualParent<parentItem> (DependencyObject obj) where parentItem : DependencyObject static parentItem FindVisualParent<parentItem> (DependencyObject obj) where parentItem : DependencyObject
{ {
if (null == obj) if (null == obj)
return null; return null;
DependencyObject parent = VisualTreeHelper.GetParent (obj); DependencyObject parent = VisualTreeHelper.GetParent (obj);
while (parent != null && !(parent is parentItem)) while (parent != null && !(parent is parentItem))
{ {
parent = VisualTreeHelper.GetParent (parent); parent = VisualTreeHelper.GetParent (parent);
} }
return parent as parentItem; return parent as parentItem;
} }
internal class MouseCapture internal class MouseCapture
{ {
public double HorizontalOffset { get; set; } public double HorizontalOffset { get; set; }
public double VerticalOffset { get; set; } public double VerticalOffset { get; set; }
public Point Point { get; set; } public Point Point { get; set; }
} }
} }
} }

View File

@ -1,72 +1,72 @@
<local:ExtractDialog x:Class="GARbro.GUI.ExtractArchiveDialog" <local:ExtractDialog x:Class="GARbro.GUI.ExtractArchiveDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:GARbro.GUI.Strings" xmlns:s="clr-namespace:GARbro.GUI.Strings"
xmlns:p="clr-namespace:GARbro.GUI.Properties" xmlns:p="clr-namespace:GARbro.GUI.Properties"
xmlns:local="clr-namespace:GARbro.GUI" xmlns:local="clr-namespace:GARbro.GUI"
Title="{x:Static s:guiStrings.TextExtractTitle}" SizeToContent="WidthAndHeight" Title="{x:Static s:guiStrings.TextExtractTitle}" SizeToContent="WidthAndHeight"
ShowInTaskbar="False" WindowStartupLocation="CenterOwner" ResizeMode="NoResize" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"> ShowInTaskbar="False" WindowStartupLocation="CenterOwner" ResizeMode="NoResize" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
<!-- Binding to application settings causes Visual Studio designer to crash. <!-- Binding to application settings causes Visual Studio designer to crash.
Replace {Settings} bindings with "True" for designer to work. Replace {Settings} bindings with "True" for designer to work.
WPF is awesome. --> WPF is awesome. -->
<StackPanel Orientation="Vertical"> <StackPanel Orientation="Vertical">
<TextBlock x:Name="ExtractLabel" Text="{x:Static s:guiStrings.LabelExtractAllTo}" Margin="10,10,10,0" VerticalAlignment="Top" Height="15"/> <TextBlock x:Name="ExtractLabel" Text="{x:Static s:guiStrings.LabelExtractAllTo}" Margin="10,10,10,0" VerticalAlignment="Top" Height="15"/>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition/> <ColumnDefinition/>
<ColumnDefinition/> <ColumnDefinition/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<local:ExtAutoCompleteBox x:Name="DestinationDir" Margin="10,0,10,10" VerticalAlignment="Bottom" Width="370" Grid.Row="0" Grid.Column="0" <local:ExtAutoCompleteBox x:Name="DestinationDir" Margin="10,0,10,10" VerticalAlignment="Bottom" Width="370" Grid.Row="0" Grid.Column="0"
Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ExtractDialog}}, Path=Destination, Mode=TwoWay}" Height="23"/> Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ExtractDialog}}, Path=Destination, Mode=TwoWay}" Height="23"/>
<Button Margin="0,0,10,10" VerticalAlignment="Bottom" HorizontalAlignment="Right" Grid.Row="0" Grid.Column="1" <Button Margin="0,0,10,10" VerticalAlignment="Bottom" HorizontalAlignment="Right" Grid.Row="0" Grid.Column="1"
Command="{x:Static local:Commands.Browse}" Height="22" Width="22"> Command="{x:Static local:Commands.Browse}" Height="22" Width="22">
<Image Source="{StaticResource IconSearch}" Stretch="Uniform" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="16" Height="16" HorizontalAlignment="Center" VerticalAlignment="Center"/> <Image Source="{StaticResource IconSearch}" Stretch="Uniform" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="16" Height="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Button> </Button>
</Grid> </Grid>
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition/> <RowDefinition/>
<RowDefinition/> <RowDefinition/>
<RowDefinition/> <RowDefinition/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition/> <ColumnDefinition/>
<ColumnDefinition/> <ColumnDefinition/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<CheckBox Name="ExtractImages" Content="{x:Static s:guiStrings.TextExtractImages}" HorizontalAlignment="Left" Margin="10,6,0,7.383" Grid.Row="0" Grid.Column="0" <CheckBox Name="ExtractImages" Content="{x:Static s:guiStrings.TextExtractImages}" HorizontalAlignment="Left" Margin="10,6,0,7.383" Grid.Row="0" Grid.Column="0"
IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appExtractImages, Mode=TwoWay}"/> IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appExtractImages, Mode=TwoWay}"/>
<!-- IsChecked="True"/>--> <!-- IsChecked="True"/>-->
<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1" Margin="0,0,10,0" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1" Margin="0,0,10,0" HorizontalAlignment="Right">
<Border BorderBrush="{x:Null}" Height="28" Width="115" Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Right" > <Border BorderBrush="{x:Null}" Height="28" Width="115" Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Right" >
<TextBlock Text="{x:Static s:guiStrings.TextSaveImagesAs}" TextWrapping="Wrap" TextAlignment="Right" VerticalAlignment="Center" HorizontalAlignment="Right"/> <TextBlock Text="{x:Static s:guiStrings.TextSaveImagesAs}" TextWrapping="Wrap" TextAlignment="Right" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border> </Border>
<ComboBox Name="ImageConversionFormat" DisplayMemberPath="Tag" Margin="10,3,0,0" VerticalAlignment="Top" Height="21" HorizontalAlignment="Right" Width="75"/> <ComboBox Name="ImageConversionFormat" DisplayMemberPath="Tag" Margin="10,3,0,0" VerticalAlignment="Top" Height="21" HorizontalAlignment="Right" Width="75"/>
</StackPanel> </StackPanel>
<CheckBox Grid.Row="2" Grid.Column="0" x:Name="ExtractText" Content="{x:Static s:guiStrings.TextExtractText}" HorizontalAlignment="Left" VerticalAlignment="Top" <CheckBox Grid.Row="2" Grid.Column="0" x:Name="ExtractText" Content="{x:Static s:guiStrings.TextExtractText}" HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="10,6,0,0" Visibility="Collapsed" Margin="10,6,0,0" Visibility="Collapsed"
IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appExtractText, Mode=TwoWay}"/> IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appExtractText, Mode=TwoWay}"/>
<!-- IsChecked="True"/>--> <!-- IsChecked="True"/>-->
<StackPanel Grid.Row="2" Grid.Column="1" Visibility="Collapsed" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,10,0"> <StackPanel Grid.Row="2" Grid.Column="1" Visibility="Collapsed" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,0,10,0">
<TextBlock Text="{x:Static s:guiStrings.TextEncoding}" TextAlignment="Right" VerticalAlignment="Top" Height="15" HorizontalAlignment="Right"/> <TextBlock Text="{x:Static s:guiStrings.TextEncoding}" TextAlignment="Right" VerticalAlignment="Top" Height="15" HorizontalAlignment="Right"/>
<ComboBox x:Name="TextEncoding" VerticalAlignment="Top" Margin="10,3,0,0" Height="21" HorizontalAlignment="Right" Width="76"/> <ComboBox x:Name="TextEncoding" VerticalAlignment="Top" Margin="10,3,0,0" Height="21" HorizontalAlignment="Right" Width="76"/>
</StackPanel> </StackPanel>
<CheckBox x:Name="ExtractAudio" Content="{x:Static s:guiStrings.TextExtractAudio}" HorizontalAlignment="Left" VerticalAlignment="Top" <CheckBox x:Name="ExtractAudio" Content="{x:Static s:guiStrings.TextExtractAudio}" HorizontalAlignment="Left" VerticalAlignment="Top"
Grid.Row="1" Grid.Column="0" Margin="10,6,10,0" Grid.Row="1" Grid.Column="0" Margin="10,6,10,0"
IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appExtractAudio, Mode=TwoWay}"/> IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appExtractAudio, Mode=TwoWay}"/>
<!-- IsChecked="True"/>--> <!-- IsChecked="True"/>-->
<CheckBox Grid.Row="1" Grid.Column="1" x:Name="AudioConversion" Content="{x:Static s:guiStrings.TextConvertAudio}" <CheckBox Grid.Row="1" Grid.Column="1" x:Name="AudioConversion" Content="{x:Static s:guiStrings.TextConvertAudio}"
Margin="0,6,10,0" HorizontalAlignment="Right" ToolTip="{x:Static s:guiStrings.TooltipAudioFormats}" VerticalAlignment="Top" Margin="0,6,10,0" HorizontalAlignment="Right" ToolTip="{x:Static s:guiStrings.TooltipAudioFormats}" VerticalAlignment="Top"
IsEnabled="{Binding ElementName=ExtractAudio, Path=IsChecked}" IsEnabled="{Binding ElementName=ExtractAudio, Path=IsChecked}"
IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appConvertAudio, Mode=TwoWay}"/> IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appConvertAudio, Mode=TwoWay}"/>
<!-- IsChecked="True"/>--> <!-- IsChecked="True"/>-->
</Grid> </Grid>
<Separator Height="1" Margin="0,10,0,0"/> <Separator Height="1" Margin="0,10,0,0"/>
<StackPanel Orientation="Horizontal" Margin="0,10,10,10" HorizontalAlignment="Right" VerticalAlignment="Bottom"> <StackPanel Orientation="Horizontal" Margin="0,10,10,10" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<Button Content="{x:Static s:guiStrings.ButtonExtract}" Margin="0" Click="ExtractButton_Click" Grid.Row="2" Width="75" Height="25" VerticalAlignment="Bottom" IsDefault="True"/> <Button Content="{x:Static s:guiStrings.ButtonExtract}" Margin="0" Click="ExtractButton_Click" Grid.Row="2" Width="75" Height="25" VerticalAlignment="Bottom" IsDefault="True"/>
<Button Content="{x:Static s:guiStrings.ButtonCancel}" Margin="20,0,0,0" Height="25" VerticalAlignment="Bottom" IsCancel="True" Width="75"/> <Button Content="{x:Static s:guiStrings.ButtonCancel}" Margin="20,0,0,0" Height="25" VerticalAlignment="Bottom" IsCancel="True" Width="75"/>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<Window.CommandBindings> <Window.CommandBindings>
<CommandBinding Command="{x:Static local:Commands.Browse}" Executed="BrowseExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.Browse}" Executed="BrowseExec" CanExecute="CanExecuteAlways"/>
</Window.CommandBindings> </Window.CommandBindings>
</local:ExtractDialog> </local:ExtractDialog>

View File

@ -1,71 +1,71 @@
// Game Resource Browser // Game Resource Browser
// //
// Copyright (C) 2014-2015 by morkt // Copyright (C) 2014-2015 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.IO; using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using System.Diagnostics; using System.Diagnostics;
using Microsoft.WindowsAPICodePack.Dialogs; using Microsoft.WindowsAPICodePack.Dialogs;
using GARbro.GUI.Properties; using GARbro.GUI.Properties;
using GARbro.GUI.Strings; using GARbro.GUI.Strings;
using GameRes; using GameRes;
namespace GARbro.GUI namespace GARbro.GUI
{ {
/// <summary> /// <summary>
/// Interaction logic for ExtractArchive.xaml /// Interaction logic for ExtractArchive.xaml
/// </summary> /// </summary>
public partial class ExtractArchiveDialog : ExtractDialog public partial class ExtractArchiveDialog : ExtractDialog
{ {
public ExtractArchiveDialog (string filename, string destination) public ExtractArchiveDialog (string filename, string destination)
{ {
InitializeComponent(); InitializeComponent();
ExtractLabel.Text = string.Format (guiStrings.LabelExtractAllTo, filename); ExtractLabel.Text = string.Format (guiStrings.LabelExtractAllTo, filename);
Destination = destination; Destination = destination;
DestinationDir.EnterKeyDown += acb_OnEnterKeyDown; DestinationDir.EnterKeyDown += acb_OnEnterKeyDown;
ExtractText.IsEnabled = false; ExtractText.IsEnabled = false;
TextEncoding.IsEnabled = false; TextEncoding.IsEnabled = false;
InitImageFormats (ImageConversionFormat); InitImageFormats (ImageConversionFormat);
} }
private void BrowseExec (object sender, ExecutedRoutedEventArgs e) private void BrowseExec (object sender, ExecutedRoutedEventArgs e)
{ {
string folder = ChooseFolder (guiStrings.TextChooseDestDir, DestinationDir.Text); string folder = ChooseFolder (guiStrings.TextChooseDestDir, DestinationDir.Text);
if (null != folder) if (null != folder)
DestinationDir.Text = folder; DestinationDir.Text = folder;
} }
void ExtractButton_Click (object sender, RoutedEventArgs e) void ExtractButton_Click (object sender, RoutedEventArgs e)
{ {
this.DialogResult = true; this.DialogResult = true;
ExportImageFormat (ImageConversionFormat); ExportImageFormat (ImageConversionFormat);
} }
} }
} }

View File

@ -1,111 +1,111 @@
//! \file ExtractDialog.cs //! \file ExtractDialog.cs
//! \date Wed Jul 09 11:26:08 2014 //! \date Wed Jul 09 11:26:08 2014
//! \brief Extract dialog window. //! \brief Extract dialog window.
// //
// Copyright (C) 2014 by morkt // Copyright (C) 2014 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using Microsoft.WindowsAPICodePack.Dialogs; using Microsoft.WindowsAPICodePack.Dialogs;
using GARbro.GUI.Properties; using GARbro.GUI.Properties;
using GARbro.GUI.Strings; using GARbro.GUI.Strings;
using GameRes; using GameRes;
using System.Windows.Input; using System.Windows.Input;
using System.IO; using System.IO;
using System.Diagnostics; using System.Diagnostics;
using System.Collections.Generic; using System.Collections.Generic;
namespace GARbro.GUI namespace GARbro.GUI
{ {
public partial class ExtractDialog : Window public partial class ExtractDialog : Window
{ {
public string Destination { get; set; } public string Destination { get; set; }
public void InitImageFormats (ComboBox image_format) public void InitImageFormats (ComboBox image_format)
{ {
var default_format = Settings.Default.appImageFormat; var default_format = Settings.Default.appImageFormat;
var formats = FormatCatalog.Instance.ImageFormats.Where (f => f.IsBuiltin); var formats = FormatCatalog.Instance.ImageFormats.Where (f => f.IsBuiltin);
ImageFormatModel[] default_model = { new ImageFormatModel() }; ImageFormatModel[] default_model = { new ImageFormatModel() };
var models = default_model.Concat (formats.Select (f => new ImageFormatModel (f))).ToList(); var models = default_model.Concat (formats.Select (f => new ImageFormatModel (f))).ToList();
var selected = models.FirstOrDefault (f => f.Tag.Equals (default_format)); var selected = models.FirstOrDefault (f => f.Tag.Equals (default_format));
image_format.ItemsSource = models; image_format.ItemsSource = models;
if (null != selected) if (null != selected)
image_format.SelectedItem = selected; image_format.SelectedItem = selected;
else if (models.Any()) else if (models.Any())
image_format.SelectedIndex = 0; image_format.SelectedIndex = 0;
} }
public ImageFormat GetImageFormat (ComboBox image_format) public ImageFormat GetImageFormat (ComboBox image_format)
{ {
var selected = image_format.SelectedItem as ImageFormatModel; var selected = image_format.SelectedItem as ImageFormatModel;
if (null != selected) if (null != selected)
return selected.Source; return selected.Source;
else else
return null; return null;
} }
public void ExportImageFormat (ComboBox image_format) public void ExportImageFormat (ComboBox image_format)
{ {
var format = GetImageFormat (image_format); var format = GetImageFormat (image_format);
if (null != format) if (null != format)
Settings.Default.appImageFormat = format.Tag; Settings.Default.appImageFormat = format.Tag;
else else
Settings.Default.appImageFormat = ""; Settings.Default.appImageFormat = "";
} }
public string ChooseFolder (string title, string initial) public string ChooseFolder (string title, string initial)
{ {
var dlg = new CommonOpenFileDialog(); var dlg = new CommonOpenFileDialog();
dlg.Title = title; dlg.Title = title;
dlg.IsFolderPicker = true; dlg.IsFolderPicker = true;
dlg.InitialDirectory = initial; dlg.InitialDirectory = initial;
dlg.AddToMostRecentlyUsedList = false; dlg.AddToMostRecentlyUsedList = false;
dlg.AllowNonFileSystemItems = false; dlg.AllowNonFileSystemItems = false;
dlg.EnsureFileExists = true; dlg.EnsureFileExists = true;
dlg.EnsurePathExists = true; dlg.EnsurePathExists = true;
dlg.EnsureReadOnly = false; dlg.EnsureReadOnly = false;
dlg.EnsureValidNames = true; dlg.EnsureValidNames = true;
dlg.Multiselect = false; dlg.Multiselect = false;
dlg.ShowPlacesList = true; dlg.ShowPlacesList = true;
if (dlg.ShowDialog (this) == CommonFileDialogResult.Ok) if (dlg.ShowDialog (this) == CommonFileDialogResult.Ok)
return dlg.FileName; return dlg.FileName;
else else
return null; return null;
} }
protected void acb_OnEnterKeyDown (object sender, KeyEventArgs e) protected void acb_OnEnterKeyDown (object sender, KeyEventArgs e)
{ {
string path = (sender as AutoCompleteBox).Text; string path = (sender as AutoCompleteBox).Text;
if (!string.IsNullOrEmpty (path)) if (!string.IsNullOrEmpty (path))
this.DialogResult = true; this.DialogResult = true;
} }
public void CanExecuteAlways (object sender, CanExecuteRoutedEventArgs e) public void CanExecuteAlways (object sender, CanExecuteRoutedEventArgs e)
{ {
e.CanExecute = true; e.CanExecute = true;
} }
} }
} }

View File

@ -1,40 +1,40 @@
<local:ExtractDialog x:Class="GARbro.GUI.ExtractFile" <local:ExtractDialog x:Class="GARbro.GUI.ExtractFile"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:GARbro.GUI.Strings" xmlns:s="clr-namespace:GARbro.GUI.Strings"
xmlns:p="clr-namespace:GARbro.GUI.Properties" xmlns:p="clr-namespace:GARbro.GUI.Properties"
xmlns:local="clr-namespace:GARbro.GUI" xmlns:local="clr-namespace:GARbro.GUI"
Title="{x:Static s:guiStrings.TextExtractTitle}" Height="165.774" Width="400.861" Title="{x:Static s:guiStrings.TextExtractTitle}" Height="165.774" Width="400.861"
ShowInTaskbar="False" WindowStartupLocation="CenterOwner" ResizeMode="NoResize" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"> ShowInTaskbar="False" WindowStartupLocation="CenterOwner" ResizeMode="NoResize" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition/> <RowDefinition/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock x:Name="ExtractLabel" Text="{x:Static s:guiStrings.LabelExtractFileTo}" Margin="10,10,9.157,0" VerticalAlignment="Top" Height="15"/> <TextBlock x:Name="ExtractLabel" Text="{x:Static s:guiStrings.LabelExtractFileTo}" Margin="10,10,9.157,0" VerticalAlignment="Top" Height="15"/>
<local:ExtAutoCompleteBox x:Name="DestinationDir" Margin="10,28,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="337" <local:ExtAutoCompleteBox x:Name="DestinationDir" Margin="10,28,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="337"
Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ExtractDialog}}, Path=Destination, Mode=TwoWay}"/> Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ExtractDialog}}, Path=Destination, Mode=TwoWay}"/>
<Button Margin="0,28,10,0" VerticalAlignment="Top" HorizontalAlignment="Right" <Button Margin="0,28,10,0" VerticalAlignment="Top" HorizontalAlignment="Right"
Command="{x:Static local:Commands.Browse}"> Command="{x:Static local:Commands.Browse}">
<Image Source="{StaticResource IconSearch}" Stretch="Uniform" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="16" Height="16" HorizontalAlignment="Center" VerticalAlignment="Center"/> <Image Source="{StaticResource IconSearch}" Stretch="Uniform" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="16" Height="16" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Button> </Button>
<Grid Name="ConversionTypePanel" Margin="10,60,0,0" Height="25" Width="300" VerticalAlignment="Top" HorizontalAlignment="Left"> <Grid Name="ConversionTypePanel" Margin="10,60,0,0" Height="25" Width="300" VerticalAlignment="Top" HorizontalAlignment="Left">
<StackPanel x:Name="ImageConversionOptions" Visibility="Visible" Orientation="Horizontal"> <StackPanel x:Name="ImageConversionOptions" Visibility="Visible" Orientation="Horizontal">
<TextBlock Text="{x:Static s:guiStrings.TextSaveAs}" Margin="0,0,7,0" TextWrapping="Wrap" TextAlignment="Right" VerticalAlignment="Center" HorizontalAlignment="Left"/> <TextBlock Text="{x:Static s:guiStrings.TextSaveAs}" Margin="0,0,7,0" TextWrapping="Wrap" TextAlignment="Right" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<ComboBox x:Name="ImageConversionFormat" DisplayMemberPath="Tag" Margin="0" VerticalAlignment="Center" Height="21" Width="76"/> <ComboBox x:Name="ImageConversionFormat" DisplayMemberPath="Tag" Margin="0" VerticalAlignment="Center" Height="21" Width="76"/>
</StackPanel> </StackPanel>
<StackPanel x:Name="AudioConversionOptions" Visibility="Collapsed" Orientation="Horizontal"> <StackPanel x:Name="AudioConversionOptions" Visibility="Collapsed" Orientation="Horizontal">
<CheckBox x:Name="AudioConversion" Content="{x:Static s:guiStrings.TextConvertAudio}" ToolTip="{x:Static s:guiStrings.TooltipAudioFormats}" Margin="0,0,7,0" VerticalAlignment="Center" Height="21" HorizontalAlignment="Left" <CheckBox x:Name="AudioConversion" Content="{x:Static s:guiStrings.TextConvertAudio}" ToolTip="{x:Static s:guiStrings.TooltipAudioFormats}" Margin="0,0,7,0" VerticalAlignment="Center" Height="21" HorizontalAlignment="Left"
IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appConvertAudio, Mode=TwoWay}"/> IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appConvertAudio, Mode=TwoWay}"/>
</StackPanel> </StackPanel>
<StackPanel x:Name="TextConversionOptions" Visibility="Collapsed" Orientation="Horizontal"> <StackPanel x:Name="TextConversionOptions" Visibility="Collapsed" Orientation="Horizontal">
<TextBlock Text="{x:Static s:guiStrings.TextEncoding}" Margin="0,0,7,0" TextAlignment="Right" VerticalAlignment="Center" HorizontalAlignment="Right"/> <TextBlock Text="{x:Static s:guiStrings.TextEncoding}" Margin="0,0,7,0" TextAlignment="Right" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<ComboBox x:Name="TextEncoding" Margin="0" VerticalAlignment="Center" Height="21" HorizontalAlignment="Right" Width="76"/> <ComboBox x:Name="TextEncoding" Margin="0" VerticalAlignment="Center" Height="21" HorizontalAlignment="Right" Width="76"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
<Button Content="{x:Static s:guiStrings.ButtonExtract}" Click="ExtractButton_Click" HorizontalAlignment="Right" Margin="0,0,102.157,10" Width="75" IsDefault="True" Height="25" VerticalAlignment="Bottom" VerticalContentAlignment="Center"/> <Button Content="{x:Static s:guiStrings.ButtonExtract}" Click="ExtractButton_Click" HorizontalAlignment="Right" Margin="0,0,102.157,10" Width="75" IsDefault="True" Height="25" VerticalAlignment="Bottom" VerticalContentAlignment="Center"/>
<Button Content="{x:Static s:guiStrings.ButtonCancel}" Margin="0,0,10.157,10" IsCancel="True" HorizontalAlignment="Right" Width="75" Height="25" VerticalAlignment="Bottom" VerticalContentAlignment="Center"/> <Button Content="{x:Static s:guiStrings.ButtonCancel}" Margin="0,0,10.157,10" IsCancel="True" HorizontalAlignment="Right" Width="75" Height="25" VerticalAlignment="Bottom" VerticalContentAlignment="Center"/>
</Grid> </Grid>
<Window.CommandBindings> <Window.CommandBindings>
<CommandBinding Command="{x:Static local:Commands.Browse}" Executed="BrowseExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.Browse}" Executed="BrowseExec" CanExecute="CanExecuteAlways"/>
</Window.CommandBindings> </Window.CommandBindings>
</local:ExtractDialog> </local:ExtractDialog>

View File

@ -1,102 +1,102 @@
// Game Resource Browser // Game Resource Browser
// //
// Copyright (C) 2014-2015 by morkt // Copyright (C) 2014-2015 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using Microsoft.WindowsAPICodePack.Dialogs; using Microsoft.WindowsAPICodePack.Dialogs;
using GARbro.GUI.Properties; using GARbro.GUI.Properties;
using GARbro.GUI.Strings; using GARbro.GUI.Strings;
namespace GARbro.GUI namespace GARbro.GUI
{ {
/// <summary> /// <summary>
/// Interaction logic for ExtractFile.xaml /// Interaction logic for ExtractFile.xaml
/// </summary> /// </summary>
public partial class ExtractFile : ExtractDialog public partial class ExtractFile : ExtractDialog
{ {
public ExtractFile (EntryViewModel entry, string destination) public ExtractFile (EntryViewModel entry, string destination)
{ {
InitializeComponent(); InitializeComponent();
ExtractLabel.Text = string.Format (guiStrings.LabelExtractFileTo, entry.Name); ExtractLabel.Text = string.Format (guiStrings.LabelExtractFileTo, entry.Name);
Destination = destination; Destination = destination;
DestinationDir.EnterKeyDown += acb_OnEnterKeyDown; DestinationDir.EnterKeyDown += acb_OnEnterKeyDown;
if ("image" == entry.Type) if ("image" == entry.Type)
{ {
ActiveOption = ImageConversionOptions; ActiveOption = ImageConversionOptions;
InitImageFormats (ImageConversionFormat); InitImageFormats (ImageConversionFormat);
} }
else if ("script" == entry.Type) else if ("script" == entry.Type)
{ {
ActiveOption = TextConversionOptions; ActiveOption = TextConversionOptions;
TextEncoding.IsEnabled = false; TextEncoding.IsEnabled = false;
} }
else if ("audio" == entry.Type) else if ("audio" == entry.Type)
{ {
ActiveOption = AudioConversionOptions; ActiveOption = AudioConversionOptions;
} }
else else
{ {
ActiveOption = null; ActiveOption = null;
} }
} }
private UIElement m_active_option; private UIElement m_active_option;
public UIElement ActiveOption public UIElement ActiveOption
{ {
get { return m_active_option; } get { return m_active_option; }
set set
{ {
m_active_option = value; m_active_option = value;
if (null != m_active_option) if (null != m_active_option)
m_active_option.Visibility = Visibility.Visible; m_active_option.Visibility = Visibility.Visible;
foreach (var c in ConversionTypePanel.Children.Cast<UIElement>()) foreach (var c in ConversionTypePanel.Children.Cast<UIElement>())
{ {
if (c != m_active_option) if (c != m_active_option)
c.Visibility = Visibility.Collapsed; c.Visibility = Visibility.Collapsed;
} }
} }
} }
private void BrowseExec (object sender, ExecutedRoutedEventArgs e) private void BrowseExec (object sender, ExecutedRoutedEventArgs e)
{ {
string folder = ChooseFolder (guiStrings.TextChooseDestDir, DestinationDir.Text); string folder = ChooseFolder (guiStrings.TextChooseDestDir, DestinationDir.Text);
if (null != folder) if (null != folder)
DestinationDir.Text = folder; DestinationDir.Text = folder;
} }
void ExtractButton_Click (object sender, RoutedEventArgs e) void ExtractButton_Click (object sender, RoutedEventArgs e)
{ {
this.DialogResult = true; this.DialogResult = true;
if (ImageConversionOptions == ActiveOption) if (ImageConversionOptions == ActiveOption)
{ {
ExportImageFormat (ImageConversionFormat); ExportImageFormat (ImageConversionFormat);
} }
} }
} }
} }

View File

@ -1,306 +1,306 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2935BE57-C4E0-43E7-86DE-C1848C820B19}</ProjectGuid> <ProjectGuid>{2935BE57-C4E0-43E7-86DE-C1848C820B19}</ProjectGuid>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>GARbro.GUI</RootNamespace> <RootNamespace>GARbro.GUI</RootNamespace>
<AssemblyName>GARbro.GUI</AssemblyName> <AssemblyName>GARbro.GUI</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<IsWebBootstrapper>false</IsWebBootstrapper> <IsWebBootstrapper>false</IsWebBootstrapper>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl> <PublishUrl>publish\</PublishUrl>
<Install>true</Install> <Install>true</Install>
<InstallFrom>Disk</InstallFrom> <InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled> <UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode> <UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval> <UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits> <UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically> <UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired> <UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions> <MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision> <ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.1.%2a</ApplicationVersion> <ApplicationVersion>1.0.1.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted> <PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType> <DebugType>full</DebugType>
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath> <OutputPath>..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>none</DebugType> <DebugType>none</DebugType>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath> <OutputPath>..\bin\Release\</OutputPath>
<DefineConstants> <DefineConstants>
</DefineConstants> </DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<ApplicationIcon>Images\sample.ico</ApplicationIcon> <ApplicationIcon>Images\sample.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<ManifestCertificateThumbprint>751F4A9FD4F4CC3D99D70509FF1F9D9CC9E49516</ManifestCertificateThumbprint> <ManifestCertificateThumbprint>751F4A9FD4F4CC3D99D70509FF1F9D9CC9E49516</ManifestCertificateThumbprint>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<ManifestKeyFile>GARbro.GUI_TemporaryKey.pfx</ManifestKeyFile> <ManifestKeyFile>GARbro.GUI_TemporaryKey.pfx</ManifestKeyFile>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<GenerateManifests>false</GenerateManifests> <GenerateManifests>false</GenerateManifests>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<TargetZone>LocalIntranet</TargetZone> <TargetZone>LocalIntranet</TargetZone>
</PropertyGroup> </PropertyGroup>
<PropertyGroup /> <PropertyGroup />
<PropertyGroup> <PropertyGroup>
<SignManifests>true</SignManifests> <SignManifests>true</SignManifests>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<ApplicationManifest>Properties\app.manifest</ApplicationManifest> <ApplicationManifest>Properties\app.manifest</ApplicationManifest>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.VisualBasic" /> <Reference Include="Microsoft.VisualBasic" />
<Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>packages\WindowsAPICodePack-Core.1.1.1\lib\Microsoft.WindowsAPICodePack.dll</HintPath> <HintPath>packages\WindowsAPICodePack-Core.1.1.1\lib\Microsoft.WindowsAPICodePack.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll</HintPath> <HintPath>packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
</Reference> </Reference>
<Reference Include="NAudio, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="NAudio, Version=1.7.3.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>packages\NAudio.1.7.3\lib\net35\NAudio.dll</HintPath> <HintPath>packages\NAudio.1.7.3\lib\net35\NAudio.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Ookii.Dialogs.Wpf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0c15020868fd6249, processorArchitecture=MSIL"> <Reference Include="Ookii.Dialogs.Wpf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0c15020868fd6249, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>packages\Ookii.Dialogs.1.0\lib\net35\Ookii.Dialogs.Wpf.dll</HintPath> <HintPath>packages\Ookii.Dialogs.1.0\lib\net35\Ookii.Dialogs.Wpf.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Windows.Controls.Input.Toolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Windows.Controls.Input.Toolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>packages\WPFToolkit.3.5.50211.1\lib\System.Windows.Controls.Input.Toolkit.dll</HintPath> <HintPath>packages\WPFToolkit.3.5.50211.1\lib\System.Windows.Controls.Input.Toolkit.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Xaml"> <Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework> <RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="WindowsBase" /> <Reference Include="WindowsBase" />
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" /> <Reference Include="PresentationFramework" />
<Reference Include="WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>packages\WPFToolkit.3.5.50211.1\lib\WPFToolkit.dll</HintPath> <HintPath>packages\WPFToolkit.3.5.50211.1\lib\WPFToolkit.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ApplicationDefinition Include="App.xaml"> <ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</ApplicationDefinition> </ApplicationDefinition>
<Compile Include="AboutBox.xaml.cs"> <Compile Include="AboutBox.xaml.cs">
<DependentUpon>AboutBox.xaml</DependentUpon> <DependentUpon>AboutBox.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="ArcParameters.xaml.cs"> <Compile Include="ArcParameters.xaml.cs">
<DependentUpon>ArcParameters.xaml</DependentUpon> <DependentUpon>ArcParameters.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="AutoComplete.cs" /> <Compile Include="AutoComplete.cs" />
<Compile Include="ConvertMedia.xaml.cs"> <Compile Include="ConvertMedia.xaml.cs">
<DependentUpon>ConvertMedia.xaml</DependentUpon> <DependentUpon>ConvertMedia.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="CreateArchive.xaml.cs"> <Compile Include="CreateArchive.xaml.cs">
<DependentUpon>CreateArchive.xaml</DependentUpon> <DependentUpon>CreateArchive.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="DragScroll.cs" /> <Compile Include="DragScroll.cs" />
<Compile Include="EnterMaskDialog.xaml.cs"> <Compile Include="EnterMaskDialog.xaml.cs">
<DependentUpon>EnterMaskDialog.xaml</DependentUpon> <DependentUpon>EnterMaskDialog.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="ExtractArchive.xaml.cs"> <Compile Include="ExtractArchive.xaml.cs">
<DependentUpon>ExtractArchive.xaml</DependentUpon> <DependentUpon>ExtractArchive.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="ExtractDialog.cs" /> <Compile Include="ExtractDialog.cs" />
<Compile Include="ExtractFile.xaml.cs"> <Compile Include="ExtractFile.xaml.cs">
<DependentUpon>ExtractFile.xaml</DependentUpon> <DependentUpon>ExtractFile.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="GarConvert.cs" /> <Compile Include="GarConvert.cs" />
<Compile Include="GarCreate.cs" /> <Compile Include="GarCreate.cs" />
<Compile Include="GarExtract.cs" /> <Compile Include="GarExtract.cs" />
<Compile Include="HistoryStack.cs" /> <Compile Include="HistoryStack.cs" />
<Compile Include="ImagePreview.cs" /> <Compile Include="ImagePreview.cs" />
<Compile Include="ListViewEx.cs" /> <Compile Include="ListViewEx.cs" />
<Compile Include="ModalWindow.cs" /> <Compile Include="ModalWindow.cs" />
<Compile Include="NAudio.cs" /> <Compile Include="NAudio.cs" />
<Compile Include="Settings.cs" /> <Compile Include="Settings.cs" />
<Compile Include="Shell.cs" /> <Compile Include="Shell.cs" />
<Compile Include="Strings\guiStrings.Designer.cs"> <Compile Include="Strings\guiStrings.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>guiStrings.resx</DependentUpon> <DependentUpon>guiStrings.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="TextViewer.xaml.cs"> <Compile Include="TextViewer.xaml.cs">
<DependentUpon>TextViewer.xaml</DependentUpon> <DependentUpon>TextViewer.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Utility.cs" /> <Compile Include="Utility.cs" />
<Compile Include="ViewModel.cs" /> <Compile Include="ViewModel.cs" />
<Page Include="AboutBox.xaml"> <Page Include="AboutBox.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="ArcParameters.xaml"> <Page Include="ArcParameters.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="ConvertMedia.xaml"> <Page Include="ConvertMedia.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="CreateArchive.xaml"> <Page Include="CreateArchive.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="EnterMaskDialog.xaml"> <Page Include="EnterMaskDialog.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="ExtractArchive.xaml"> <Page Include="ExtractArchive.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="ExtractFile.xaml"> <Page Include="ExtractFile.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="MainWindow.xaml"> <Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Compile Include="App.xaml.cs"> <Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon> <DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="MainWindow.xaml.cs"> <Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon> <DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Page Include="TextViewer.xaml"> <Page Include="TextViewer.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Properties\Resources.Designer.cs"> <Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
</Compile> </Compile>
<Compile Include="Properties\Settings.Designer.cs"> <Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Strings\guiStrings.ko-KR.resx" /> <EmbeddedResource Include="Strings\guiStrings.ko-KR.resx" />
<EmbeddedResource Include="Strings\guiStrings.resx"> <EmbeddedResource Include="Strings\guiStrings.resx">
<Generator>PublicResXFileCodeGenerator</Generator> <Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>guiStrings.Designer.cs</LastGenOutput> <LastGenOutput>guiStrings.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Strings\guiStrings.ru-RU.resx" /> <EmbeddedResource Include="Strings\guiStrings.ru-RU.resx" />
<EmbeddedResource Include="LICENSE" /> <EmbeddedResource Include="..\LICENSE" />
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="Properties\app.manifest" /> <None Include="Properties\app.manifest" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None> </None>
<AppDesigner Include="Properties\" /> <AppDesigner Include="Properties\" />
<None Include="Resources\Formats.dat" /> <None Include="Resources\Formats.dat" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config"> <None Include="App.config">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="Images\32x32\back button.png" /> <Resource Include="Images\32x32\back button.png" />
<Resource Include="Images\32x32\forward button.png" /> <Resource Include="Images\32x32\forward button.png" />
<Resource Include="Images\32x32\help.png" /> <Resource Include="Images\32x32\help.png" />
<Resource Include="Images\64x64\info.png" /> <Resource Include="Images\64x64\info.png" />
<Resource Include="Images\sample.ico" /> <Resource Include="Images\sample.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="Images\48x48\refresh.png" /> <Resource Include="Images\48x48\refresh.png" />
<SplashScreen Include="Images\splashscreen.png" /> <SplashScreen Include="Images\splashscreen.png" />
<Resource Include="Images\search4files.ico" /> <Resource Include="Images\search4files.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="ArcFormats\ArcFormats.csproj"> <ProjectReference Include="..\ArcFormats\ArcFormats.csproj">
<Project>{a8865685-27cc-427b-ac38-e48d2ad05df4}</Project> <Project>{a8865685-27cc-427b-ac38-e48d2ad05df4}</Project>
<Name>ArcFormats</Name> <Name>ArcFormats</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="GameRes\GameRes.csproj"> <ProjectReference Include="..\GameRes\GameRes.csproj">
<Project>{453c087f-e416-4ae9-8c03-d8760da0574b}</Project> <Project>{453c087f-e416-4ae9-8c03-d8760da0574b}</Project>
<Name>GameRes</Name> <Name>GameRes</Name>
<EmbedInteropTypes>False</EmbedInteropTypes> <EmbedInteropTypes>False</EmbedInteropTypes>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5"> <BootstrapperPackage Include=".NETFramework,Version=v4.5">
<Visible>False</Visible> <Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName> <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>
<Install>true</Install> <Install>true</Install>
</BootstrapperPackage> </BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5"> <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible> <Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install> <Install>false</Install>
</BootstrapperPackage> </BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible> <Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName> <ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install> <Install>false</Install>
</BootstrapperPackage> </BootstrapperPackage>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>
<PreBuildEvent>perl "$(SolutionDir)inc-revision.pl" "$(ProjectPath)" $(ConfigurationName) <PreBuildEvent>perl "$(SolutionDir)inc-revision.pl" "$(ProjectPath)" $(ConfigurationName)
exit 0</PreBuildEvent> exit 0</PreBuildEvent>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<PostBuildEvent>xcopy "$(ProjectDir)\Resources\Formats.dat" "$(TargetDir)" /D /Y &gt;NUL</PostBuildEvent> <PostBuildEvent>xcopy "$(ProjectDir)\Resources\Formats.dat" "$(TargetDir)" /D /Y &gt;NUL</PostBuildEvent>
</PropertyGroup> </PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">
</Target> </Target>
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory> <PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory /> <InstallUrlHistory />
<SupportUrlHistory /> <SupportUrlHistory />
<UpdateUrlHistory /> <UpdateUrlHistory />
<BootstrapperUrlHistory /> <BootstrapperUrlHistory />
<ErrorReportUrlHistory /> <ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture> <FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles> <VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<StartArguments> <StartArguments>
</StartArguments> </StartArguments>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -1,109 +1,109 @@
//! \file HistoryStack.cs //! \file HistoryStack.cs
//! \date Sun Aug 21 01:06:53 2011 //! \date Sun Aug 21 01:06:53 2011
//! \brief action history stack interface (undo/redo). //! \brief action history stack interface (undo/redo).
// //
// Copyright (C) 2011 by poddav // Copyright (C) 2011 by poddav
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace Rnd.Windows namespace Rnd.Windows
{ {
public class HistoryStack<State> public class HistoryStack<State>
{ {
private List<State> m_back = new List<State>(); private List<State> m_back = new List<State>();
private Stack<State> m_forward = new Stack<State>(); private Stack<State> m_forward = new Stack<State>();
public int Limit { get; set; } public int Limit { get; set; }
public IEnumerable<State> UndoStack { get { return m_back; } } public IEnumerable<State> UndoStack { get { return m_back; } }
public IEnumerable<State> RedoStack { get { return m_forward; } } public IEnumerable<State> RedoStack { get { return m_forward; } }
public HistoryStack (int limit = 50) public HistoryStack (int limit = 50)
{ {
Limit = limit; Limit = limit;
} }
public State Undo (State current) public State Undo (State current)
{ {
if (!CanUndo()) if (!CanUndo())
return default(State); return default(State);
m_forward.Push (current); m_forward.Push (current);
current = m_back.Last(); current = m_back.Last();
m_back.RemoveAt (m_back.Count - 1); m_back.RemoveAt (m_back.Count - 1);
OnStateChanged(); OnStateChanged();
return current; return current;
} }
public State Redo (State current) public State Redo (State current)
{ {
if (!CanRedo()) if (!CanRedo())
return default(State); return default(State);
m_back.Add (current); m_back.Add (current);
current = m_forward.Pop(); current = m_forward.Pop();
OnStateChanged(); OnStateChanged();
return current; return current;
} }
public bool CanUndo () public bool CanUndo ()
{ {
return m_back.Any(); return m_back.Any();
} }
public bool CanRedo () public bool CanRedo ()
{ {
return m_forward.Any(); return m_forward.Any();
} }
public void Push (State current) public void Push (State current)
{ {
m_back.Add (current); m_back.Add (current);
if (m_back.Count > Limit) if (m_back.Count > Limit)
m_back.RemoveRange (0, m_back.Count - Limit); m_back.RemoveRange (0, m_back.Count - Limit);
m_forward.Clear(); m_forward.Clear();
OnStateChanged(); OnStateChanged();
} }
public void Clear () public void Clear ()
{ {
if (m_back.Any() || m_forward.Any()) if (m_back.Any() || m_forward.Any())
{ {
m_back.Clear(); m_back.Clear();
m_forward.Clear(); m_forward.Clear();
OnStateChanged(); OnStateChanged();
} }
} }
public event EventHandler StateChanged; public event EventHandler StateChanged;
private void OnStateChanged () private void OnStateChanged ()
{ {
if (StateChanged != null) if (StateChanged != null)
StateChanged (this, EventArgs.Empty); StateChanged (this, EventArgs.Empty);
} }
} }
} }

View File

@ -1,298 +1,298 @@
//! \file ImagePreview.cs //! \file ImagePreview.cs
//! \date Sun Jul 06 06:34:56 2014 //! \date Sun Jul 06 06:34:56 2014
//! \brief preview images. //! \brief preview images.
// //
// Copyright (C) 2014-2015 by morkt // Copyright (C) 2014-2015 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.ComponentModel; using System.ComponentModel;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Threading; using System.Windows.Threading;
using GARbro.GUI.Strings; using GARbro.GUI.Strings;
using GARbro.GUI.Properties; using GARbro.GUI.Properties;
using GameRes; using GameRes;
using System.Text; using System.Text;
using System.Windows.Documents; using System.Windows.Documents;
using System.Windows.Media; using System.Windows.Media;
using System.Globalization; using System.Globalization;
namespace GARbro.GUI namespace GARbro.GUI
{ {
public partial class MainWindow : Window public partial class MainWindow : Window
{ {
private readonly BackgroundWorker m_preview_worker = new BackgroundWorker(); private readonly BackgroundWorker m_preview_worker = new BackgroundWorker();
private PreviewFile m_current_preview = new PreviewFile(); private PreviewFile m_current_preview = new PreviewFile();
private bool m_preview_pending = false; private bool m_preview_pending = false;
private UIElement m_active_viewer; private UIElement m_active_viewer;
public UIElement ActiveViewer public UIElement ActiveViewer
{ {
get { return m_active_viewer; } get { return m_active_viewer; }
set set
{ {
if (value == m_active_viewer) if (value == m_active_viewer)
return; return;
m_active_viewer = value; m_active_viewer = value;
m_active_viewer.Visibility = Visibility.Visible; m_active_viewer.Visibility = Visibility.Visible;
bool exists = false; bool exists = false;
foreach (var c in PreviewPane.Children.Cast<UIElement>()) foreach (var c in PreviewPane.Children.Cast<UIElement>())
{ {
if (c != m_active_viewer) if (c != m_active_viewer)
c.Visibility = Visibility.Collapsed; c.Visibility = Visibility.Collapsed;
else else
exists = true; exists = true;
} }
if (!exists) if (!exists)
PreviewPane.Children.Add (m_active_viewer); PreviewPane.Children.Add (m_active_viewer);
} }
} }
class PreviewFile class PreviewFile
{ {
public IEnumerable<string> Path { get; set; } public IEnumerable<string> Path { get; set; }
public string Name { get; set; } public string Name { get; set; }
public Entry Entry { get; set; } public Entry Entry { get; set; }
public bool IsEqual (IEnumerable<string> path, string name) public bool IsEqual (IEnumerable<string> path, string name)
{ {
return Path != null && path.SequenceEqual (Path) && name.Equals (Name); return Path != null && path.SequenceEqual (Path) && name.Equals (Name);
} }
} }
private void InitPreviewPane () private void InitPreviewPane ()
{ {
m_preview_worker.DoWork += (s, e) => LoadPreviewImage (e.Argument as PreviewFile); m_preview_worker.DoWork += (s, e) => LoadPreviewImage (e.Argument as PreviewFile);
m_preview_worker.RunWorkerCompleted += (s, e) => { m_preview_worker.RunWorkerCompleted += (s, e) => {
if (m_preview_pending) if (m_preview_pending)
RefreshPreviewPane(); RefreshPreviewPane();
}; };
ActiveViewer = ImageView; ActiveViewer = ImageView;
TextView.IsWordWrapEnabled = true; TextView.IsWordWrapEnabled = true;
} }
private IEnumerable<Encoding> m_encoding_list = GetEncodingList(); private IEnumerable<Encoding> m_encoding_list = GetEncodingList();
public IEnumerable<Encoding> TextEncodings { get { return m_encoding_list; } } public IEnumerable<Encoding> TextEncodings { get { return m_encoding_list; } }
private static IEnumerable<Encoding> GetEncodingList () private static IEnumerable<Encoding> GetEncodingList ()
{ {
var list = new HashSet<Encoding>(); var list = new HashSet<Encoding>();
list.Add (Encoding.Default); list.Add (Encoding.Default);
var oem = CultureInfo.CurrentCulture.TextInfo.OEMCodePage; var oem = CultureInfo.CurrentCulture.TextInfo.OEMCodePage;
list.Add (Encoding.GetEncoding (oem)); list.Add (Encoding.GetEncoding (oem));
list.Add (Encoding.GetEncoding (932)); list.Add (Encoding.GetEncoding (932));
list.Add (Encoding.UTF8); list.Add (Encoding.UTF8);
list.Add (Encoding.Unicode); list.Add (Encoding.Unicode);
list.Add (Encoding.BigEndianUnicode); list.Add (Encoding.BigEndianUnicode);
return list; return list;
} }
private void OnEncodingSelect (object sender, SelectionChangedEventArgs e) private void OnEncodingSelect (object sender, SelectionChangedEventArgs e)
{ {
var enc = this.EncodingChoice.SelectedItem as Encoding; var enc = this.EncodingChoice.SelectedItem as Encoding;
if (null == enc || null == CurrentTextInput) if (null == enc || null == CurrentTextInput)
return; return;
TextView.CurrentEncoding = enc; TextView.CurrentEncoding = enc;
} }
/// <summary> /// <summary>
/// Display entry in preview panel /// Display entry in preview panel
/// </summary> /// </summary>
private void PreviewEntry (Entry entry) private void PreviewEntry (Entry entry)
{ {
if (m_current_preview.IsEqual (ViewModel.Path, entry.Name)) if (m_current_preview.IsEqual (ViewModel.Path, entry.Name))
return; return;
UpdatePreviewPane (entry); UpdatePreviewPane (entry);
} }
void RefreshPreviewPane () void RefreshPreviewPane ()
{ {
m_preview_pending = false; m_preview_pending = false;
var current = CurrentDirectory.SelectedItem as EntryViewModel; var current = CurrentDirectory.SelectedItem as EntryViewModel;
if (null != current) if (null != current)
UpdatePreviewPane (current.Source); UpdatePreviewPane (current.Source);
else else
ResetPreviewPane(); ResetPreviewPane();
} }
void ResetPreviewPane () void ResetPreviewPane ()
{ {
ActiveViewer = ImageView; ActiveViewer = ImageView;
ImageCanvas.Source = null; ImageCanvas.Source = null;
TextView.Clear(); TextView.Clear();
CurrentTextInput = null; CurrentTextInput = null;
} }
bool IsPreviewPossible (Entry entry) bool IsPreviewPossible (Entry entry)
{ {
return "image" == entry.Type || "script" == entry.Type return "image" == entry.Type || "script" == entry.Type
|| (string.IsNullOrEmpty (entry.Type) && entry.Size < 0x100000); || (string.IsNullOrEmpty (entry.Type) && entry.Size < 0x100000);
} }
void UpdatePreviewPane (Entry entry) void UpdatePreviewPane (Entry entry)
{ {
SetStatusText (""); SetStatusText ("");
var vm = ViewModel; var vm = ViewModel;
m_current_preview = new PreviewFile { Path = vm.Path, Name = entry.Name, Entry = entry }; m_current_preview = new PreviewFile { Path = vm.Path, Name = entry.Name, Entry = entry };
ImageCanvas.Source = null; ImageCanvas.Source = null;
TextView.Clear(); TextView.Clear();
if (!IsPreviewPossible (entry)) if (!IsPreviewPossible (entry))
{ {
ActiveViewer = ImageView; ActiveViewer = ImageView;
return; return;
} }
if ("image" != entry.Type) if ("image" != entry.Type)
LoadPreviewText (m_current_preview); LoadPreviewText (m_current_preview);
else if (!m_preview_worker.IsBusy) else if (!m_preview_worker.IsBusy)
m_preview_worker.RunWorkerAsync (m_current_preview); m_preview_worker.RunWorkerAsync (m_current_preview);
else else
m_preview_pending = true; m_preview_pending = true;
} }
private Stream m_current_text; private Stream m_current_text;
private Stream CurrentTextInput private Stream CurrentTextInput
{ {
get { return m_current_text; } get { return m_current_text; }
set set
{ {
if (value == m_current_text) if (value == m_current_text)
return; return;
if (null != m_current_text) if (null != m_current_text)
m_current_text.Dispose(); m_current_text.Dispose();
m_current_text = value; m_current_text = value;
} }
} }
Stream OpenPreviewStream (PreviewFile preview) Stream OpenPreviewStream (PreviewFile preview)
{ {
return VFS.OpenSeekableStream (preview.Entry); return VFS.OpenSeekableStream (preview.Entry);
} }
void LoadPreviewText (PreviewFile preview) void LoadPreviewText (PreviewFile preview)
{ {
Stream file = null; Stream file = null;
try try
{ {
file = OpenPreviewStream (preview); file = OpenPreviewStream (preview);
if (!TextView.IsTextFile (file)) if (!TextView.IsTextFile (file))
{ {
ResetPreviewPane(); ResetPreviewPane();
return; return;
} }
var enc = EncodingChoice.SelectedItem as Encoding; var enc = EncodingChoice.SelectedItem as Encoding;
if (null == enc) if (null == enc)
{ {
enc = TextView.GuessEncoding (file); enc = TextView.GuessEncoding (file);
EncodingChoice.SelectedItem = enc; EncodingChoice.SelectedItem = enc;
} }
TextView.DisplayStream (file, enc); TextView.DisplayStream (file, enc);
ActiveViewer = TextView; ActiveViewer = TextView;
CurrentTextInput = file; CurrentTextInput = file;
file = null; file = null;
} }
catch (Exception X) catch (Exception X)
{ {
SetStatusText (X.Message); SetStatusText (X.Message);
} }
finally finally
{ {
if (file != null) if (file != null)
file.Dispose(); file.Dispose();
} }
} }
void LoadPreviewImage (PreviewFile preview) void LoadPreviewImage (PreviewFile preview)
{ {
try try
{ {
using (var file = OpenPreviewStream (preview)) using (var file = OpenPreviewStream (preview))
{ {
var data = ImageFormat.Read (preview.Name, file); var data = ImageFormat.Read (preview.Name, file);
if (null != data) if (null != data)
SetPreviewImage (preview, data.Bitmap); SetPreviewImage (preview, data.Bitmap);
else else
Trace.WriteLine ("Cannot parse image format", preview.Name); Trace.WriteLine ("Cannot parse image format", preview.Name);
} }
} }
catch (Exception X) catch (Exception X)
{ {
SetStatusText (X.Message); SetStatusText (X.Message);
} }
} }
void SetPreviewImage (PreviewFile preview, BitmapSource bitmap) void SetPreviewImage (PreviewFile preview, BitmapSource bitmap)
{ {
if (bitmap.DpiX != Desktop.DpiX || bitmap.DpiY != Desktop.DpiY) if (bitmap.DpiX != Desktop.DpiX || bitmap.DpiY != Desktop.DpiY)
{ {
int stride = bitmap.PixelWidth * ((bitmap.Format.BitsPerPixel + 7) / 8); int stride = bitmap.PixelWidth * ((bitmap.Format.BitsPerPixel + 7) / 8);
var pixels = new byte[stride*bitmap.PixelHeight]; var pixels = new byte[stride*bitmap.PixelHeight];
bitmap.CopyPixels (pixels, stride, 0); bitmap.CopyPixels (pixels, stride, 0);
var fixed_bitmap = BitmapSource.Create (bitmap.PixelWidth, bitmap.PixelHeight, var fixed_bitmap = BitmapSource.Create (bitmap.PixelWidth, bitmap.PixelHeight,
Desktop.DpiX, Desktop.DpiY, bitmap.Format, bitmap.Palette, pixels, stride); Desktop.DpiX, Desktop.DpiY, bitmap.Format, bitmap.Palette, pixels, stride);
bitmap = fixed_bitmap; bitmap = fixed_bitmap;
} }
if (!bitmap.IsFrozen) if (!bitmap.IsFrozen)
bitmap.Freeze(); bitmap.Freeze();
Dispatcher.Invoke (() => Dispatcher.Invoke (() =>
{ {
if (m_current_preview == preview) // compare by reference if (m_current_preview == preview) // compare by reference
{ {
ActiveViewer = ImageView; ActiveViewer = ImageView;
ImageCanvas.Source = bitmap; ImageCanvas.Source = bitmap;
SetStatusText (string.Format (guiStrings.MsgImageSize, bitmap.PixelWidth, SetStatusText (string.Format (guiStrings.MsgImageSize, bitmap.PixelWidth,
bitmap.PixelHeight, bitmap.Format.BitsPerPixel)); bitmap.PixelHeight, bitmap.Format.BitsPerPixel));
} }
}); });
} }
/// <summary> /// <summary>
/// Fit window size to image. /// Fit window size to image.
/// </summary> /// </summary>
private void FitWindowExec (object sender, ExecutedRoutedEventArgs e) private void FitWindowExec (object sender, ExecutedRoutedEventArgs e)
{ {
var image = ImageCanvas.Source; var image = ImageCanvas.Source;
if (null == image) if (null == image)
return; return;
var width = image.Width + Settings.Default.lvPanelWidth.Value + 1; var width = image.Width + Settings.Default.lvPanelWidth.Value + 1;
var height = image.Height; var height = image.Height;
width = Math.Max (ContentGrid.ActualWidth, width); width = Math.Max (ContentGrid.ActualWidth, width);
height = Math.Max (ContentGrid.ActualHeight, height); height = Math.Max (ContentGrid.ActualHeight, height);
if (width > ContentGrid.ActualWidth || height > ContentGrid.ActualHeight) if (width > ContentGrid.ActualWidth || height > ContentGrid.ActualHeight)
{ {
ContentGrid.Width = width; ContentGrid.Width = width;
ContentGrid.Height = height; ContentGrid.Height = height;
this.SizeToContent = SizeToContent.WidthAndHeight; this.SizeToContent = SizeToContent.WidthAndHeight;
Dispatcher.InvokeAsync (() => { Dispatcher.InvokeAsync (() => {
this.SizeToContent = SizeToContent.Manual; this.SizeToContent = SizeToContent.Manual;
ContentGrid.Width = double.NaN; ContentGrid.Width = double.NaN;
ContentGrid.Height = double.NaN; ContentGrid.Height = double.NaN;
}, DispatcherPriority.ContextIdle); }, DispatcherPriority.ContextIdle);
} }
} }
} }
} }

View File

@ -1,400 +1,400 @@
<Window x:Class="GARbro.GUI.MainWindow" x:Name="AppWindow" <Window x:Class="GARbro.GUI.MainWindow" x:Name="AppWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:GARbro.GUI" xmlns:local="clr-namespace:GARbro.GUI"
xmlns:jv="clr-namespace:JustView" xmlns:jv="clr-namespace:JustView"
xmlns:s="clr-namespace:GARbro.GUI.Strings" xmlns:s="clr-namespace:GARbro.GUI.Strings"
xmlns:p="clr-namespace:GARbro.GUI.Properties" xmlns:p="clr-namespace:GARbro.GUI.Properties"
Title="GARbro" MinHeight="250" ResizeMode="CanResizeWithGrip" Title="GARbro" MinHeight="250" ResizeMode="CanResizeWithGrip"
Loaded="WindowLoaded" Loaded="WindowLoaded"
KeyDown="WindowKeyDown" KeyDown="WindowKeyDown"
Top="{Binding Source={x:Static p:Settings.Default}, Path=winTop, Mode=TwoWay}" Top="{Binding Source={x:Static p:Settings.Default}, Path=winTop, Mode=TwoWay}"
Left="{Binding Source={x:Static p:Settings.Default}, Path=winLeft, Mode=TwoWay}" Left="{Binding Source={x:Static p:Settings.Default}, Path=winLeft, Mode=TwoWay}"
Height="{Binding Source={x:Static p:Settings.Default}, Path=winHeight, Mode=TwoWay}" Height="{Binding Source={x:Static p:Settings.Default}, Path=winHeight, Mode=TwoWay}"
Width="{Binding Source={x:Static p:Settings.Default}, Path=winWidth, Mode=TwoWay}" Width="{Binding Source={x:Static p:Settings.Default}, Path=winWidth, Mode=TwoWay}"
WindowState="{Binding Source={x:Static p:Settings.Default}, Path=winState, Mode=TwoWay}"> WindowState="{Binding Source={x:Static p:Settings.Default}, Path=winState, Mode=TwoWay}">
<Window.Resources> <Window.Resources>
<!-- alternate colors for directory view --> <!-- alternate colors for directory view -->
<SolidColorBrush x:Key="AlternateColor1" Color="#f2f5f9" /> <SolidColorBrush x:Key="AlternateColor1" Color="#f2f5f9" />
<SolidColorBrush x:Key="AlternateColor2" Color="White" /> <SolidColorBrush x:Key="AlternateColor2" Color="White" />
<SolidColorBrush x:Key="InactiveInputBackground" Color="#ebf5fe" /> <SolidColorBrush x:Key="InactiveInputBackground" Color="#ebf5fe" />
<!-- toolbar icons --> <!-- toolbar icons -->
<BitmapImage x:Key="Icon32x32Back" UriSource="Images/32x32/back button.png"/> <BitmapImage x:Key="Icon32x32Back" UriSource="Images/32x32/back button.png"/>
<BitmapImage x:Key="Icon32x32Forward" UriSource="Images/32x32/forward button.png"/> <BitmapImage x:Key="Icon32x32Forward" UriSource="Images/32x32/forward button.png"/>
<BitmapImage x:Key="Icon32x32Help" UriSource="Images/32x32/help.png"/> <BitmapImage x:Key="Icon32x32Help" UriSource="Images/32x32/help.png"/>
<BitmapImage x:Key="Icon48x48Refresh" UriSource="Images/48x48/refresh.png"/> <BitmapImage x:Key="Icon48x48Refresh" UriSource="Images/48x48/refresh.png"/>
<!-- directory view internals --> <!-- directory view internals -->
<CollectionViewSource x:Key="ListViewSource" Source="{Binding}"/> <CollectionViewSource x:Key="ListViewSource" Source="{Binding}"/>
<local:BooleanToCollapsedVisibilityConverter x:Key="booleanToCollapsedVisibilityConverter" /> <local:BooleanToCollapsedVisibilityConverter x:Key="booleanToCollapsedVisibilityConverter" />
<local:EntryTypeConverter x:Key="entryTypeConverter"/> <local:EntryTypeConverter x:Key="entryTypeConverter"/>
<local:SortModeToBooleanConverter x:Key="sortModeToBooleanConverter" /> <local:SortModeToBooleanConverter x:Key="sortModeToBooleanConverter" />
<Style x:Key="HeaderLeftAlign" TargetType="{x:Type GridViewColumnHeader}"> <Style x:Key="HeaderLeftAlign" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Left"></Setter> <Setter Property="HorizontalContentAlignment" Value="Left"></Setter>
</Style> </Style>
<DataTemplate x:Key="SortArrowUp"> <DataTemplate x:Key="SortArrowUp">
<DockPanel> <DockPanel>
<TextBlock Margin="5,0,5,0" Text="{Binding}" /> <TextBlock Margin="5,0,5,0" Text="{Binding}" />
<Path VerticalAlignment="Center" Fill="Gray" Data="M 5,5 15,5 10,0 5,5" /> <Path VerticalAlignment="Center" Fill="Gray" Data="M 5,5 15,5 10,0 5,5" />
</DockPanel> </DockPanel>
</DataTemplate> </DataTemplate>
<DataTemplate x:Key="SortArrowDown"> <DataTemplate x:Key="SortArrowDown">
<DockPanel> <DockPanel>
<TextBlock Margin="5,0,5,0" Text="{Binding}" /> <TextBlock Margin="5,0,5,0" Text="{Binding}" />
<Path VerticalAlignment="Center" Fill="Gray" Data="M 5,0 10,5 15,0 5,0" /> <Path VerticalAlignment="Center" Fill="Gray" Data="M 5,0 10,5 15,0 5,0" />
</DockPanel> </DockPanel>
</DataTemplate> </DataTemplate>
<DataTemplate x:Key="SortArrowNone"> <DataTemplate x:Key="SortArrowNone">
<TextBlock Margin="5,0,5,0" Text="{Binding}"/> <TextBlock Margin="5,0,5,0" Text="{Binding}"/>
</DataTemplate> </DataTemplate>
<Style x:Key="DefaultMenuItemStyle" TargetType="{x:Type MenuItem}"> <Style x:Key="DefaultMenuItemStyle" TargetType="{x:Type MenuItem}">
<Setter Property="FontWeight" Value="Bold" /> <Setter Property="FontWeight" Value="Bold" />
</Style> </Style>
<!-- Sort-by submenu --> <!-- Sort-by submenu -->
<MenuItem x:Key="sortByMenu" Header="{x:Static s:guiStrings.CtxMenuSortBy}"> <MenuItem x:Key="sortByMenu" Header="{x:Static s:guiStrings.CtxMenuSortBy}">
<MenuItem Header="{x:Static s:guiStrings.CtxMenuSortByName}" IsCheckable="True" <MenuItem Header="{x:Static s:guiStrings.CtxMenuSortByName}" IsCheckable="True"
IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}, ConverterParameter=Name}" IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}, ConverterParameter=Name}"
Command="{x:Static local:Commands.SortBy}" CommandParameter="Name"/> Command="{x:Static local:Commands.SortBy}" CommandParameter="Name"/>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuSortByType}" IsCheckable="True" <MenuItem Header="{x:Static s:guiStrings.CtxMenuSortByType}" IsCheckable="True"
IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}, ConverterParameter=Type}" IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}, ConverterParameter=Type}"
Command="{x:Static local:Commands.SortBy}" CommandParameter="Type"/> Command="{x:Static local:Commands.SortBy}" CommandParameter="Type"/>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuSortBySize}" IsCheckable="True" <MenuItem Header="{x:Static s:guiStrings.CtxMenuSortBySize}" IsCheckable="True"
IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}, ConverterParameter=Size}" IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}, ConverterParameter=Size}"
Command="{x:Static local:Commands.SortBy}" CommandParameter="Size"/> Command="{x:Static local:Commands.SortBy}" CommandParameter="Size"/>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuUnsorted}" IsCheckable="True" <MenuItem Header="{x:Static s:guiStrings.CtxMenuUnsorted}" IsCheckable="True"
IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}}" IsChecked="{Binding ElementName=AppWindow, Path=SortMode, Mode=OneWay, Converter={StaticResource sortModeToBooleanConverter}}"
Command="{x:Static local:Commands.SortBy}"/> Command="{x:Static local:Commands.SortBy}"/>
</MenuItem> </MenuItem>
<!-- Default listview context menu --> <!-- Default listview context menu -->
<ContextMenu x:Key="lvDirContextMenu"> <ContextMenu x:Key="lvDirContextMenu">
<MenuItem Header="{x:Static s:guiStrings.CtxMenuOpen}" InputGestureText="Enter" <MenuItem Header="{x:Static s:guiStrings.CtxMenuOpen}" InputGestureText="Enter"
Style="{StaticResource DefaultMenuItemStyle}" Style="{StaticResource DefaultMenuItemStyle}"
Command="{x:Static local:Commands.OpenItem}" /> Command="{x:Static local:Commands.OpenItem}" />
<MenuItem Header="{x:Static s:guiStrings.CtxMenuCreate}" InputGestureText="F3" <MenuItem Header="{x:Static s:guiStrings.CtxMenuCreate}" InputGestureText="F3"
Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}"
Command="{x:Static local:Commands.CreateArchive}" /> Command="{x:Static local:Commands.CreateArchive}" />
<MenuItem Header="{x:Static s:guiStrings.CtxMenuExtract}" InputGestureText="F4" <MenuItem Header="{x:Static s:guiStrings.CtxMenuExtract}" InputGestureText="F4"
Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}"
Command="{x:Static local:Commands.ExtractItem}" /> Command="{x:Static local:Commands.ExtractItem}" />
<MenuItem Header="{x:Static s:guiStrings.CtxMenuFileType}"> <MenuItem Header="{x:Static s:guiStrings.CtxMenuFileType}">
<MenuItem DataContext="image" Header="{Binding Converter={StaticResource entryTypeConverter}}" <MenuItem DataContext="image" Header="{Binding Converter={StaticResource entryTypeConverter}}"
Command="{x:Static local:Commands.SetFileType}" CommandParameter="{Binding}"/> Command="{x:Static local:Commands.SetFileType}" CommandParameter="{Binding}"/>
<MenuItem DataContext="audio" Header="{Binding Converter={StaticResource entryTypeConverter}}" <MenuItem DataContext="audio" Header="{Binding Converter={StaticResource entryTypeConverter}}"
Command="{x:Static local:Commands.SetFileType}" CommandParameter="{Binding}"/> Command="{x:Static local:Commands.SetFileType}" CommandParameter="{Binding}"/>
<MenuItem DataContext="script" Header="{Binding Converter={StaticResource entryTypeConverter}}" <MenuItem DataContext="script" Header="{Binding Converter={StaticResource entryTypeConverter}}"
Command="{x:Static local:Commands.SetFileType}" CommandParameter="{Binding}"/> Command="{x:Static local:Commands.SetFileType}" CommandParameter="{Binding}"/>
<MenuItem Header="{x:Static s:guiStrings.Type_NONE}" <MenuItem Header="{x:Static s:guiStrings.Type_NONE}"
Command="{x:Static local:Commands.SetFileType}" CommandParameter=""/> Command="{x:Static local:Commands.SetFileType}" CommandParameter=""/>
</MenuItem> </MenuItem>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuExplorer}" InputGestureText="Ctrl+E" <MenuItem Header="{x:Static s:guiStrings.CtxMenuExplorer}" InputGestureText="Ctrl+E"
Command="{x:Static local:Commands.ExploreItem}"/> Command="{x:Static local:Commands.ExploreItem}"/>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuDelete}" InputGestureText="Del" <MenuItem Header="{x:Static s:guiStrings.CtxMenuDelete}" InputGestureText="Del"
Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}"
Command="{x:Static local:Commands.DeleteItem}"/> Command="{x:Static local:Commands.DeleteItem}"/>
<Separator/> <Separator/>
<!-- <!--
<MenuItem Header="{x:Static s:guiStrings.CtxMenuRename}" InputGestureText="F2" <MenuItem Header="{x:Static s:guiStrings.CtxMenuRename}" InputGestureText="F2"
Command="{x:Static local:Commands.RenameItem}"/> Command="{x:Static local:Commands.RenameItem}"/>
--> -->
<MenuItem Header="{x:Static s:guiStrings.CtxMenuRefresh}" InputGestureText="F5" <MenuItem Header="{x:Static s:guiStrings.CtxMenuRefresh}" InputGestureText="F5"
Command="{x:Static local:Commands.Refresh}"/> Command="{x:Static local:Commands.Refresh}"/>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuConvert}" InputGestureText="F6" <MenuItem Header="{x:Static s:guiStrings.CtxMenuConvert}" InputGestureText="F6"
Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToCollapsedVisibilityConverter}}"
Command="{x:Static local:Commands.ConvertMedia}" /> Command="{x:Static local:Commands.ConvertMedia}" />
</ContextMenu> </ContextMenu>
</Window.Resources> </Window.Resources>
<DockPanel LastChildFill="True"> <DockPanel LastChildFill="True">
<StackPanel x:Name="MainMenuBar" DockPanel.Dock="Top" Orientation="Vertical" <StackPanel x:Name="MainMenuBar" DockPanel.Dock="Top" Orientation="Vertical"
Visibility="{Binding Source={x:Static p:Settings.Default}, Path=winMenuBarVisibility, Mode=TwoWay}"> Visibility="{Binding Source={x:Static p:Settings.Default}, Path=winMenuBarVisibility, Mode=TwoWay}">
<Menu IsMainMenu="True" Background="{DynamicResource {x:Static SystemColors.MenuBrushKey}}"> <Menu IsMainMenu="True" Background="{DynamicResource {x:Static SystemColors.MenuBrushKey}}">
<MenuItem Header="{x:Static s:guiStrings.MenuFile}"> <MenuItem Header="{x:Static s:guiStrings.MenuFile}">
<MenuItem Header="{x:Static s:guiStrings.MenuOpen}" Command="{x:Static local:Commands.OpenFile}" InputGestureText="Ctrl+O"/> <MenuItem Header="{x:Static s:guiStrings.MenuOpen}" Command="{x:Static local:Commands.OpenFile}" InputGestureText="Ctrl+O"/>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuCreate}" InputGestureText="F3" <MenuItem Header="{x:Static s:guiStrings.CtxMenuCreate}" InputGestureText="F3"
Command="{x:Static local:Commands.CreateArchive}" /> Command="{x:Static local:Commands.CreateArchive}" />
<MenuItem Header="{x:Static s:guiStrings.CtxMenuConvert}" InputGestureText="F6" <MenuItem Header="{x:Static s:guiStrings.CtxMenuConvert}" InputGestureText="F6"
Command="{x:Static local:Commands.ConvertMedia}" /> Command="{x:Static local:Commands.ConvertMedia}" />
<MenuItem Header="{x:Static s:guiStrings.MenuRecent}" x:Name="RecentFilesMenu"> <MenuItem Header="{x:Static s:guiStrings.MenuRecent}" x:Name="RecentFilesMenu">
<MenuItem.ItemContainerStyle> <MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem"> <Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Item2}"/> <Setter Property="Header" Value="{Binding Path=Item2}"/>
<Setter Property="Command" Value="{x:Static local:Commands.OpenRecent}"/> <Setter Property="Command" Value="{x:Static local:Commands.OpenRecent}"/>
<Setter Property="CommandParameter" Value="{Binding Path=Item1}"/> <Setter Property="CommandParameter" Value="{Binding Path=Item1}"/>
</Style> </Style>
</MenuItem.ItemContainerStyle> </MenuItem.ItemContainerStyle>
</MenuItem> </MenuItem>
<Separator/> <Separator/>
<MenuItem Header="{x:Static s:guiStrings.MenuExit}" Command="{x:Static local:Commands.Exit}" InputGestureText="Ctrl+Q"/> <MenuItem Header="{x:Static s:guiStrings.MenuExit}" Command="{x:Static local:Commands.Exit}" InputGestureText="Ctrl+Q"/>
</MenuItem> </MenuItem>
<MenuItem Header="{x:Static s:guiStrings.MenuView}"> <MenuItem Header="{x:Static s:guiStrings.MenuView}">
<MenuItem Header="{x:Static s:guiStrings.MenuFitWindow}" InputGestureText="Ctrl+H" <MenuItem Header="{x:Static s:guiStrings.MenuFitWindow}" InputGestureText="Ctrl+H"
Command="{x:Static local:Commands.FitWindow}"/> Command="{x:Static local:Commands.FitWindow}"/>
<MenuItem Header="{x:Static s:guiStrings.CtxMenuRefresh}" InputGestureText="F5" <MenuItem Header="{x:Static s:guiStrings.CtxMenuRefresh}" InputGestureText="F5"
Command="{x:Static local:Commands.Refresh}"/> Command="{x:Static local:Commands.Refresh}"/>
<Separator/> <Separator/>
<MenuItem Header="{x:Static s:guiStrings.MenuToggleToolBar}" InputGestureText="Alt+Shift+T" <MenuItem Header="{x:Static s:guiStrings.MenuToggleToolBar}" InputGestureText="Alt+Shift+T"
Command="{x:Static local:Commands.HideToolBar}"/> Command="{x:Static local:Commands.HideToolBar}"/>
<MenuItem Header="{x:Static s:guiStrings.MenuToggleMenuBar}" InputGestureText="Alt+Shift+M" <MenuItem Header="{x:Static s:guiStrings.MenuToggleMenuBar}" InputGestureText="Alt+Shift+M"
Command="{x:Static local:Commands.HideMenuBar}"/> Command="{x:Static local:Commands.HideMenuBar}"/>
<MenuItem Header="{x:Static s:guiStrings.MenuToggleStatusBar}" InputGestureText="Alt+Shift+S" <MenuItem Header="{x:Static s:guiStrings.MenuToggleStatusBar}" InputGestureText="Alt+Shift+S"
Command="{x:Static local:Commands.HideStatusBar}"/> Command="{x:Static local:Commands.HideStatusBar}"/>
<Separator/> <Separator/>
<StaticResource ResourceKey="sortByMenu"/> <StaticResource ResourceKey="sortByMenu"/>
</MenuItem> </MenuItem>
<MenuItem Header="{x:Static s:guiStrings.MenuHelp}"> <MenuItem Header="{x:Static s:guiStrings.MenuHelp}">
<MenuItem Header="{x:Static s:guiStrings.MenuAbout}" Command="{x:Static local:Commands.About}"/> <MenuItem Header="{x:Static s:guiStrings.MenuAbout}" Command="{x:Static local:Commands.About}"/>
</MenuItem> </MenuItem>
</Menu> </Menu>
<Separator Height="1" Margin="0"/> <Separator Height="1" Margin="0"/>
</StackPanel> </StackPanel>
<Menu Visibility="Collapsed" x:Name="HelperMenuBar"/> <Menu Visibility="Collapsed" x:Name="HelperMenuBar"/>
<DockPanel x:Name="MainToolBar" Background="{Binding Path=Background, ElementName=HelperMenuBar}" <DockPanel x:Name="MainToolBar" Background="{Binding Path=Background, ElementName=HelperMenuBar}"
HorizontalAlignment="Stretch" DockPanel.Dock="Top" HorizontalAlignment="Stretch" DockPanel.Dock="Top"
Visibility="{Binding Source={x:Static p:Settings.Default}, Path=winToolBarVisibility, Mode=TwoWay}"> Visibility="{Binding Source={x:Static p:Settings.Default}, Path=winToolBarVisibility, Mode=TwoWay}">
<DockPanel.Resources> <DockPanel.Resources>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"> <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
<Setter Property="ToolTipService.ShowOnDisabled" Value="True"/> <Setter Property="ToolTipService.ShowOnDisabled" Value="True"/>
<Setter Property="Focusable" Value="False"/> <Setter Property="Focusable" Value="False"/>
<Setter Property="Margin" Value="1,2,1,2"/> <Setter Property="Margin" Value="1,2,1,2"/>
</Style> </Style>
<Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}"> <Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Static ToolBar.ToggleButtonStyleKey}}">
<Setter Property="ToolTipService.ShowOnDisabled" Value="True"/> <Setter Property="ToolTipService.ShowOnDisabled" Value="True"/>
<Setter Property="Focusable" Value="False"/> <Setter Property="Focusable" Value="False"/>
<Setter Property="Margin" Value="2,2,2,2"/> <Setter Property="Margin" Value="2,2,2,2"/>
</Style> </Style>
<Style TargetType="{x:Type Separator}" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}"> <Style TargetType="{x:Type Separator}" BasedOn="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}">
<Setter Property="Margin" Value="5,0,5,0"/> <Setter Property="Margin" Value="5,0,5,0"/>
</Style> </Style>
<!-- Path input textbox mouseover highlight --> <!-- Path input textbox mouseover highlight -->
<Style TargetType="{x:Type local:ExtAutoCompleteBox}"> <Style TargetType="{x:Type local:ExtAutoCompleteBox}">
<Setter Property="Background" Value="White"/> <Setter Property="Background" Value="White"/>
<Style.Triggers> <Style.Triggers>
<MultiTrigger> <MultiTrigger>
<MultiTrigger.Conditions> <MultiTrigger.Conditions>
<Condition Property="IsTextBoxFocused" Value="False"/> <Condition Property="IsTextBoxFocused" Value="False"/>
<Condition Property="IsMouseOver" Value="False"/> <Condition Property="IsMouseOver" Value="False"/>
</MultiTrigger.Conditions> </MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource InactiveInputBackground}"/> <Setter Property="Background" Value="{StaticResource InactiveInputBackground}"/>
</MultiTrigger> </MultiTrigger>
</Style.Triggers> </Style.Triggers>
</Style> </Style>
<Style TargetType="{x:Type Image}"> <Style TargetType="{x:Type Image}">
<Setter Property="UseLayoutRounding" Value="True"/> <Setter Property="UseLayoutRounding" Value="True"/>
<Setter Property="SnapsToDevicePixels" Value="True"/> <Setter Property="SnapsToDevicePixels" Value="True"/>
<!-- <!--
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Self}, Path=Source.Width}"/> <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Self}, Path=Source.Width}"/>
<Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Self}, Path=Source.Height}"/> <Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Self}, Path=Source.Height}"/>
<Setter Property="Stretch" Value="None"/> <Setter Property="Stretch" Value="None"/>
--> -->
<Setter Property="Width" Value="24"/> <Setter Property="Width" Value="24"/>
<Setter Property="Height" Value="24"/> <Setter Property="Height" Value="24"/>
<Setter Property="Stretch" Value="Uniform"/> <Setter Property="Stretch" Value="Uniform"/>
<!-- hack to make images within disabled toolbar buttons appear 'grayed out'. <!-- hack to make images within disabled toolbar buttons appear 'grayed out'.
This doesn't gray them at all, but lowers their opacity so the (usually gray) This doesn't gray them at all, but lowers their opacity so the (usually gray)
background of the button shows through. If WPF had a built-in facility for background of the button shows through. If WPF had a built-in facility for
grayscaling images in disabled buttons, this kind of icky kludgery wouldn't be grayscaling images in disabled buttons, this kind of icky kludgery wouldn't be
necessary --> necessary -->
<Style.Triggers> <Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}, AncestorLevel=1}, Path=IsEnabled}" Value="False"> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}, AncestorLevel=1}, Path=IsEnabled}" Value="False">
<Setter Property="Opacity" Value="0.33"/> <Setter Property="Opacity" Value="0.33"/>
</DataTrigger> </DataTrigger>
</Style.Triggers> </Style.Triggers>
</Style> </Style>
</DockPanel.Resources> </DockPanel.Resources>
<Separator DockPanel.Dock="Bottom" Height="1" Margin="0"/> <Separator DockPanel.Dock="Bottom" Height="1" Margin="0"/>
<Button x:Name="ButtonBack" ToolTip="{x:Static s:guiStrings.TooltipBack}" Margin="5,2,0,2" <Button x:Name="ButtonBack" ToolTip="{x:Static s:guiStrings.TooltipBack}" Margin="5,2,0,2"
Command="{x:Static local:Commands.GoBack}"> Command="{x:Static local:Commands.GoBack}">
<Image Source="{StaticResource Icon32x32Back}"/> <Image Source="{StaticResource Icon32x32Back}"/>
</Button> </Button>
<Button x:Name="ButtonForward" ToolTip="{x:Static s:guiStrings.TooltipForward}" <Button x:Name="ButtonForward" ToolTip="{x:Static s:guiStrings.TooltipForward}"
Command="{x:Static local:Commands.GoForward}"> Command="{x:Static local:Commands.GoForward}">
<Image Source="{StaticResource Icon32x32Forward}"/> <Image Source="{StaticResource Icon32x32Forward}"/>
</Button> </Button>
<Separator/> <Separator/>
<StackPanel Orientation="Horizontal" x:Name="PathWidget"> <StackPanel Orientation="Horizontal" x:Name="PathWidget">
<local:ExtAutoCompleteBox x:Name="pathLine" Height="22" Width="100" Margin="0" BorderThickness="1,1,0,1"/> <local:ExtAutoCompleteBox x:Name="pathLine" Height="22" Width="100" Margin="0" BorderThickness="1,1,0,1"/>
<Button ToolTip="{x:Static s:guiStrings.CtxMenuRefresh}" Height="22" Width="22" Margin="0" <Button ToolTip="{x:Static s:guiStrings.CtxMenuRefresh}" Height="22" Width="22" Margin="0"
Background="{Binding ElementName=pathLine, Path=Background}" Background="{Binding ElementName=pathLine, Path=Background}"
BorderBrush="{Binding ElementName=pathLine, Path=BorderBrush}" BorderThickness="1"> BorderBrush="{Binding ElementName=pathLine, Path=BorderBrush}" BorderThickness="1">
<Image Source="Images/48x48/refresh.png" Height="16" Width="16"/> <Image Source="Images/48x48/refresh.png" Height="16" Width="16"/>
</Button> </Button>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" x:Name="EncodingWidget" Visibility="{Binding ElementName=TextView, Path=Visibility}"> <StackPanel Orientation="Horizontal" x:Name="EncodingWidget" Visibility="{Binding ElementName=TextView, Path=Visibility}">
<Separator/> <Separator/>
<TextBlock Text="{x:Static s:guiStrings.LabelEncoding}" VerticalAlignment="Center" Margin="5,0,5,0"/> <TextBlock Text="{x:Static s:guiStrings.LabelEncoding}" VerticalAlignment="Center" Margin="5,0,5,0"/>
<ComboBox x:Name="EncodingChoice" IsEditable="False" Height="22" DisplayMemberPath="EncodingName" <ComboBox x:Name="EncodingChoice" IsEditable="False" Height="22" DisplayMemberPath="EncodingName"
ItemsSource="{Binding ElementName=AppWindow, Path=TextEncodings}" ItemsSource="{Binding ElementName=AppWindow, Path=TextEncodings}"
SelectedValue="{Binding Source={x:Static p:Settings.Default}, Path=appTextEncoding, Mode=TwoWay}" SelectedValue="{Binding Source={x:Static p:Settings.Default}, Path=appTextEncoding, Mode=TwoWay}"
SelectedValuePath="CodePage" SelectionChanged="OnEncodingSelect"/> SelectedValuePath="CodePage" SelectionChanged="OnEncodingSelect"/>
<Separator/> <Separator/>
</StackPanel> </StackPanel>
<Button ToolTip="{x:Static s:guiStrings.MenuAbout}" DockPanel.Dock="Right" Margin="0,2,10,2" <Button ToolTip="{x:Static s:guiStrings.MenuAbout}" DockPanel.Dock="Right" Margin="0,2,10,2"
Command="{x:Static local:Commands.About}"> Command="{x:Static local:Commands.About}">
<Image Source="{StaticResource Icon32x32Help}"/> <Image Source="{StaticResource Icon32x32Help}"/>
</Button> </Button>
<TextBlock Visibility="Hidden"/> <TextBlock Visibility="Hidden"/>
</DockPanel> </DockPanel>
<StackPanel DockPanel.Dock="Bottom" x:Name="AppStatusBar" <StackPanel DockPanel.Dock="Bottom" x:Name="AppStatusBar"
Visibility="{Binding Source={x:Static p:Settings.Default}, Path=winStatusBarVisibility, Mode=TwoWay}"> Visibility="{Binding Source={x:Static p:Settings.Default}, Path=winStatusBarVisibility, Mode=TwoWay}">
<Separator Height="1" Margin="0"/> <Separator Height="1" Margin="0"/>
<StatusBar> <StatusBar>
<StatusBarItem Width="{Binding ElementName=CurrentDirectory, Path=ActualWidth}"> <StatusBarItem Width="{Binding ElementName=CurrentDirectory, Path=ActualWidth}">
<TextBlock x:Name="appStatusText"/> <TextBlock x:Name="appStatusText"/>
</StatusBarItem> </StatusBarItem>
<Separator Width="1"/> <Separator Width="1"/>
<StatusBarItem> <StatusBarItem>
<TextBlock x:Name="appResourceText"/> <TextBlock x:Name="appResourceText"/>
</StatusBarItem> </StatusBarItem>
</StatusBar> </StatusBar>
</StackPanel> </StackPanel>
<Grid x:Name="ContentGrid" DockPanel.Dock="Left" VerticalAlignment="Stretch" <Grid x:Name="ContentGrid" DockPanel.Dock="Left" VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" ShowGridLines="False"> HorizontalAlignment="Stretch" ShowGridLines="False">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Source={x:Static p:Settings.Default}, Path=lvPanelWidth, Mode=TwoWay}" MinWidth="200" /> <ColumnDefinition Width="{Binding Source={x:Static p:Settings.Default}, Path=lvPanelWidth, Mode=TwoWay}" MinWidth="200" />
<ColumnDefinition Width="1"/> <ColumnDefinition Width="1"/>
<ColumnDefinition Width="*" MinWidth="100"/> <ColumnDefinition Width="*" MinWidth="100"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<local:ListViewEx x:Name="CurrentDirectory" Grid.Column="0" BorderThickness="0" <local:ListViewEx x:Name="CurrentDirectory" Grid.Column="0" BorderThickness="0"
ItemsSource="{Binding Source={StaticResource ListViewSource}}" ItemsSource="{Binding Source={StaticResource ListViewSource}}"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
BorderBrush="Transparent" SelectedValuePath="Name" BorderBrush="Transparent" SelectedValuePath="Name"
SelectionMode="Extended" Foreground="Black" AlternationCount="2" SelectionMode="Extended" Foreground="Black" AlternationCount="2"
ContextMenu="{StaticResource lvDirContextMenu}" ContextMenu="{StaticResource lvDirContextMenu}"
PreviewTextInput="lv_TextInput" IsSynchronizedWithCurrentItem="True" PreviewTextInput="lv_TextInput" IsSynchronizedWithCurrentItem="True"
PreviewKeyDown="lv_KeyDown" PreviewKeyDown="lv_KeyDown"
SelectionChanged="lv_SelectionChanged" SelectionChanged="lv_SelectionChanged"
GridViewColumnHeader.Click="lv_ColumnHeaderClicked"> GridViewColumnHeader.Click="lv_ColumnHeaderClicked">
<ListView.Resources> <ListView.Resources>
<SolidColorBrush x:Key="ItemInactiveBackground" Color="#ffcbcbcb" /> <SolidColorBrush x:Key="ItemInactiveBackground" Color="#ffcbcbcb" />
</ListView.Resources> </ListView.Resources>
<ListView.InputBindings> <ListView.InputBindings>
<KeyBinding Key="Enter" Command="{x:Static local:Commands.OpenItem}"/> <KeyBinding Key="Enter" Command="{x:Static local:Commands.OpenItem}"/>
<KeyBinding Gesture="Ctrl+E" Command="{x:Static local:Commands.ExploreItem}"/> <KeyBinding Gesture="Ctrl+E" Command="{x:Static local:Commands.ExploreItem}"/>
<KeyBinding Gesture="F2" Command="{x:Static local:Commands.RenameItem}"/> <KeyBinding Gesture="F2" Command="{x:Static local:Commands.RenameItem}"/>
<KeyBinding Gesture="Space" Command="{x:Static local:Commands.NextItem}"/> <KeyBinding Gesture="Space" Command="{x:Static local:Commands.NextItem}"/>
<MouseBinding Gesture="LeftDoubleClick" Command="{x:Static local:Commands.OpenItem}" /> <MouseBinding Gesture="LeftDoubleClick" Command="{x:Static local:Commands.OpenItem}" />
</ListView.InputBindings> </ListView.InputBindings>
<ListView.ItemContainerStyle> <ListView.ItemContainerStyle>
<Style TargetType="ListViewItem"> <Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="HorizontalContentAlignment" Value="Stretch" />
<EventSetter Event="ListViewItem.MouseDoubleClick" Handler="lvi_DoubleClick" /> <EventSetter Event="ListViewItem.MouseDoubleClick" Handler="lvi_DoubleClick" />
<Style.Triggers> <Style.Triggers>
<!-- BEGIN alternate row color --> <!-- BEGIN alternate row color -->
<MultiTrigger> <MultiTrigger>
<MultiTrigger.Conditions> <MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" /> <Condition Property="IsSelected" Value="False" />
<Condition Property="IsMouseOver" Value="False" /> <Condition Property="IsMouseOver" Value="False" />
<Condition Property="ItemsControl.AlternationIndex" Value="0"/> <Condition Property="ItemsControl.AlternationIndex" Value="0"/>
</MultiTrigger.Conditions> </MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource AlternateColor1}"/> <Setter Property="Background" Value="{StaticResource AlternateColor1}"/>
</MultiTrigger> </MultiTrigger>
<MultiTrigger> <MultiTrigger>
<MultiTrigger.Conditions> <MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" /> <Condition Property="IsSelected" Value="False" />
<Condition Property="IsMouseOver" Value="False" /> <Condition Property="IsMouseOver" Value="False" />
<Condition Property="ItemsControl.AlternationIndex" Value="1"/> <Condition Property="ItemsControl.AlternationIndex" Value="1"/>
</MultiTrigger.Conditions> </MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource AlternateColor2}"/> <Setter Property="Background" Value="{StaticResource AlternateColor2}"/>
</MultiTrigger> </MultiTrigger>
<!-- END alternate row color --> <!-- END alternate row color -->
<!-- BEGIN context menu trigger --> <!-- BEGIN context menu trigger -->
<!-- <!--
<DataTrigger Binding="{Binding Path=IsArchive}" Value="True"> <DataTrigger Binding="{Binding Path=IsArchive}" Value="True">
<Setter Property="ContextMenu" Value="{StaticResource lvArcContextMenu}"/> <Setter Property="ContextMenu" Value="{StaticResource lvArcContextMenu}"/>
</DataTrigger> </DataTrigger>
<DataTrigger Binding="{Binding Path=IsArchive}" Value="False"> <DataTrigger Binding="{Binding Path=IsArchive}" Value="False">
<Setter Property="ContextMenu" Value="{StaticResource lvDirContextMenu}"/> <Setter Property="ContextMenu" Value="{StaticResource lvDirContextMenu}"/>
</DataTrigger> </DataTrigger>
--> -->
<!-- END context menu trigger --> <!-- END context menu trigger -->
</Style.Triggers> </Style.Triggers>
</Style> </Style>
</ListView.ItemContainerStyle> </ListView.ItemContainerStyle>
<ListView.View> <ListView.View>
<GridView AllowsColumnReorder="False"> <GridView AllowsColumnReorder="False">
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Width="{Binding Source={x:Static p:Settings.Default}, Path=lvNameColumnWidth, Mode=TwoWay}" HeaderTemplate="{StaticResource SortArrowNone}"> <GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Width="{Binding Source={x:Static p:Settings.Default}, Path=lvNameColumnWidth, Mode=TwoWay}" HeaderTemplate="{StaticResource SortArrowNone}">
<GridViewColumn.Header> <GridViewColumn.Header>
<GridViewColumnHeader Tag="Name" Content="{x:Static s:guiStrings.HeaderName}"/> <GridViewColumnHeader Tag="Name" Content="{x:Static s:guiStrings.HeaderName}"/>
</GridViewColumn.Header> </GridViewColumn.Header>
<GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate>
<DataTemplate><TextBlock x:Name="item_Name" Text="{Binding Path=Name}"/></DataTemplate> <DataTemplate><TextBlock x:Name="item_Name" Text="{Binding Path=Name}"/></DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Width="{Binding Source={x:Static p:Settings.Default}, Path=lvTypeColumnWidth, Mode=TwoWay}" HeaderTemplate="{StaticResource SortArrowNone}" DisplayMemberBinding="{Binding Path=Type, Mode=OneWay, Converter={StaticResource entryTypeConverter}}"> <GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Width="{Binding Source={x:Static p:Settings.Default}, Path=lvTypeColumnWidth, Mode=TwoWay}" HeaderTemplate="{StaticResource SortArrowNone}" DisplayMemberBinding="{Binding Path=Type, Mode=OneWay, Converter={StaticResource entryTypeConverter}}">
<GridViewColumn.Header> <GridViewColumn.Header>
<GridViewColumnHeader Tag="Type" Content="{x:Static s:guiStrings.HeaderType}"/> <GridViewColumnHeader Tag="Type" Content="{x:Static s:guiStrings.HeaderType}"/>
</GridViewColumn.Header> </GridViewColumn.Header>
</GridViewColumn> </GridViewColumn>
<GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Width="{Binding Source={x:Static p:Settings.Default}, Path=lvSizeColumnWidth, Mode=TwoWay}" HeaderTemplate="{StaticResource SortArrowNone}"> <GridViewColumn HeaderContainerStyle="{StaticResource HeaderLeftAlign}" Width="{Binding Source={x:Static p:Settings.Default}, Path=lvSizeColumnWidth, Mode=TwoWay}" HeaderTemplate="{StaticResource SortArrowNone}">
<GridViewColumn.Header> <GridViewColumn.Header>
<GridViewColumnHeader Tag="Size" Content="{x:Static s:guiStrings.HeaderSize}"/> <GridViewColumnHeader Tag="Size" Content="{x:Static s:guiStrings.HeaderSize}"/>
</GridViewColumn.Header> </GridViewColumn.Header>
<GridViewColumn.CellTemplate> <GridViewColumn.CellTemplate>
<DataTemplate><TextBlock Text="{Binding Path=Size}" TextAlignment="Right"/></DataTemplate> <DataTemplate><TextBlock Text="{Binding Path=Size}" TextAlignment="Right"/></DataTemplate>
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>
</GridView> </GridView>
</ListView.View> </ListView.View>
</local:ListViewEx> </local:ListViewEx>
<Grid Grid.Column="2" Name="PreviewPane" SnapsToDevicePixels="True"> <Grid Grid.Column="2" Name="PreviewPane" SnapsToDevicePixels="True">
<ScrollViewer Name="ImageView" Background="LightGray" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> <ScrollViewer Name="ImageView" Background="LightGray" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<Image Name="ImageCanvas" Stretch="None" UseLayoutRounding="True" SnapsToDevicePixels="True" <Image Name="ImageCanvas" Stretch="None" UseLayoutRounding="True" SnapsToDevicePixels="True"
local:TouchScrolling.IsEnabled="True" RenderOptions.BitmapScalingMode="NearestNeighbor"/> local:TouchScrolling.IsEnabled="True" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
</ScrollViewer> </ScrollViewer>
<jv:TextViewer x:Name="TextView" Visibility="Collapsed" BorderThickness="1,0,0,0" BorderBrush="Black"/> <jv:TextViewer x:Name="TextView" Visibility="Collapsed" BorderThickness="1,0,0,0" BorderBrush="Black"/>
</Grid> </Grid>
<!-- Margin and BorderThickness help to react early on mouse pointer --> <!-- Margin and BorderThickness help to react early on mouse pointer -->
<GridSplitter Grid.Column="1" Background="Black" ShowsPreview="False" Focusable="False" <GridSplitter Grid.Column="1" Background="Black" ShowsPreview="False" Focusable="False"
Margin="-3,0" BorderThickness="3,0" BorderBrush="Transparent" Margin="-3,0" BorderThickness="3,0" BorderBrush="Transparent"
HorizontalAlignment="Center" VerticalAlignment="Stretch" /> HorizontalAlignment="Center" VerticalAlignment="Stretch" />
</Grid> </Grid>
</DockPanel> </DockPanel>
<Window.InputBindings> <Window.InputBindings>
<KeyBinding Gesture="Ctrl+O" Command="{x:Static local:Commands.OpenFile}"/> <KeyBinding Gesture="Ctrl+O" Command="{x:Static local:Commands.OpenFile}"/>
<KeyBinding Gesture="Ctrl+Q" Command="{x:Static local:Commands.Exit}"/> <KeyBinding Gesture="Ctrl+Q" Command="{x:Static local:Commands.Exit}"/>
<KeyBinding Gesture="Ctrl+H" Command="{x:Static local:Commands.FitWindow}"/> <KeyBinding Gesture="Ctrl+H" Command="{x:Static local:Commands.FitWindow}"/>
<KeyBinding Gesture="Ctrl+A" Command="{x:Static local:Commands.SelectAll}"/> <KeyBinding Gesture="Ctrl+A" Command="{x:Static local:Commands.SelectAll}"/>
<KeyBinding Gesture="Backspace" Command="{x:Static local:Commands.GoBack}"/> <KeyBinding Gesture="Backspace" Command="{x:Static local:Commands.GoBack}"/>
<KeyBinding Gesture="Alt+Left" Command="{x:Static local:Commands.GoBack}"/> <KeyBinding Gesture="Alt+Left" Command="{x:Static local:Commands.GoBack}"/>
<KeyBinding Gesture="Alt+Right" Command="{x:Static local:Commands.GoForward}"/> <KeyBinding Gesture="Alt+Right" Command="{x:Static local:Commands.GoForward}"/>
<KeyBinding Gesture="Alt+Shift+M" Command="{x:Static local:Commands.HideMenuBar}"/> <KeyBinding Gesture="Alt+Shift+M" Command="{x:Static local:Commands.HideMenuBar}"/>
<KeyBinding Gesture="Alt+Shift+T" Command="{x:Static local:Commands.HideToolBar}"/> <KeyBinding Gesture="Alt+Shift+T" Command="{x:Static local:Commands.HideToolBar}"/>
<KeyBinding Gesture="Alt+Shift+S" Command="{x:Static local:Commands.HideStatusBar}"/> <KeyBinding Gesture="Alt+Shift+S" Command="{x:Static local:Commands.HideStatusBar}"/>
<KeyBinding Gesture="F3" Command="{x:Static local:Commands.CreateArchive}"/> <KeyBinding Gesture="F3" Command="{x:Static local:Commands.CreateArchive}"/>
<KeyBinding Gesture="F4" Command="{x:Static local:Commands.ExtractItem}"/> <KeyBinding Gesture="F4" Command="{x:Static local:Commands.ExtractItem}"/>
<KeyBinding Gesture="F5" Command="{x:Static local:Commands.Refresh}"/> <KeyBinding Gesture="F5" Command="{x:Static local:Commands.Refresh}"/>
<KeyBinding Gesture="F6" Command="{x:Static local:Commands.ConvertMedia}"/> <KeyBinding Gesture="F6" Command="{x:Static local:Commands.ConvertMedia}"/>
<KeyBinding Gesture="Delete" Command="{x:Static local:Commands.DeleteItem}"/> <KeyBinding Gesture="Delete" Command="{x:Static local:Commands.DeleteItem}"/>
<KeyBinding Gesture="Add" Command="{x:Static local:Commands.AddSelection}"/> <KeyBinding Gesture="Add" Command="{x:Static local:Commands.AddSelection}"/>
<KeyBinding Gesture="Space" Command="{x:Static local:Commands.NextItem}"/> <KeyBinding Gesture="Space" Command="{x:Static local:Commands.NextItem}"/>
</Window.InputBindings> </Window.InputBindings>
<Window.CommandBindings> <Window.CommandBindings>
<CommandBinding Command="{x:Static local:Commands.OpenItem}" Executed="OpenItemExec" CanExecute="CanExecuteOnSelected"/> <CommandBinding Command="{x:Static local:Commands.OpenItem}" Executed="OpenItemExec" CanExecute="CanExecuteOnSelected"/>
<CommandBinding Command="{x:Static local:Commands.OpenFile}" Executed="OpenFileExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.OpenFile}" Executed="OpenFileExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.OpenRecent}" Executed="OpenRecentExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.OpenRecent}" Executed="OpenRecentExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.AddSelection}" Executed="AddSelectionExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.AddSelection}" Executed="AddSelectionExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.SelectAll}" Executed="SelectAllExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.SelectAll}" Executed="SelectAllExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.NextItem}" Executed="NextItemExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.NextItem}" Executed="NextItemExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.ExtractItem}" Executed="ExtractItemExec" CanExecute="CanExecuteExtract"/> <CommandBinding Command="{x:Static local:Commands.ExtractItem}" Executed="ExtractItemExec" CanExecute="CanExecuteExtract"/>
<CommandBinding Command="{x:Static local:Commands.CreateArchive}" Executed="CreateArchiveExec" CanExecute="CanExecuteCreateArchive"/> <CommandBinding Command="{x:Static local:Commands.CreateArchive}" Executed="CreateArchiveExec" CanExecute="CanExecuteCreateArchive"/>
<CommandBinding Command="{x:Static local:Commands.DeleteItem}" Executed="DeleteItemExec" CanExecute="CanExecuteOnPhysicalFile" /> <CommandBinding Command="{x:Static local:Commands.DeleteItem}" Executed="DeleteItemExec" CanExecute="CanExecuteOnPhysicalFile" />
<CommandBinding Command="{x:Static local:Commands.RenameItem}" Executed="RenameItemExec" CanExecute="CanExecuteInDirectory" /> <CommandBinding Command="{x:Static local:Commands.RenameItem}" Executed="RenameItemExec" CanExecute="CanExecuteInDirectory" />
<CommandBinding Command="{x:Static local:Commands.ExploreItem}" Executed="ExploreItemExec" CanExecute="CanExecuteInDirectory" /> <CommandBinding Command="{x:Static local:Commands.ExploreItem}" Executed="ExploreItemExec" CanExecute="CanExecuteInDirectory" />
<CommandBinding Command="{x:Static local:Commands.ConvertMedia}" Executed="ConvertMediaExec" CanExecute="CanExecuteConvertMedia" /> <CommandBinding Command="{x:Static local:Commands.ConvertMedia}" Executed="ConvertMediaExec" CanExecute="CanExecuteConvertMedia" />
<CommandBinding Command="{x:Static local:Commands.SortBy}" Executed="SortByExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.SortBy}" Executed="SortByExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.SetFileType}" Executed="SetFileTypeExec" CanExecute="CanExecuteOnSelected"/> <CommandBinding Command="{x:Static local:Commands.SetFileType}" Executed="SetFileTypeExec" CanExecute="CanExecuteOnSelected"/>
<CommandBinding Command="{x:Static local:Commands.GoBack}" Executed="GoBackExec" CanExecute="CanExecuteGoBack"/> <CommandBinding Command="{x:Static local:Commands.GoBack}" Executed="GoBackExec" CanExecute="CanExecuteGoBack"/>
<CommandBinding Command="{x:Static local:Commands.GoForward}" Executed="GoForwardExec" CanExecute="CanExecuteGoForward"/> <CommandBinding Command="{x:Static local:Commands.GoForward}" Executed="GoForwardExec" CanExecute="CanExecuteGoForward"/>
<CommandBinding Command="{x:Static local:Commands.Refresh}" Executed="RefreshExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.Refresh}" Executed="RefreshExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.FitWindow}" Executed="FitWindowExec" CanExecute="CanExecuteFitWindow"/> <CommandBinding Command="{x:Static local:Commands.FitWindow}" Executed="FitWindowExec" CanExecute="CanExecuteFitWindow"/>
<CommandBinding Command="{x:Static local:Commands.HideStatusBar}" Executed="HideStatusBarExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.HideStatusBar}" Executed="HideStatusBarExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.HideMenuBar}" Executed="HideMenuBarExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.HideMenuBar}" Executed="HideMenuBarExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.HideToolBar}" Executed="HideToolBarExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.HideToolBar}" Executed="HideToolBarExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.About}" Executed="AboutExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.About}" Executed="AboutExec" CanExecute="CanExecuteAlways"/>
<CommandBinding Command="{x:Static local:Commands.Exit}" Executed="ExitExec" CanExecute="CanExecuteAlways"/> <CommandBinding Command="{x:Static local:Commands.Exit}" Executed="ExitExec" CanExecute="CanExecuteAlways"/>
</Window.CommandBindings> </Window.CommandBindings>
</Window> </Window>

File diff suppressed because it is too large Load Diff

View File

@ -1,88 +1,88 @@
//! \file ModalWindow.cs //! \file ModalWindow.cs
//! \date Tue Aug 02 10:20:50 2011 //! \date Tue Aug 02 10:20:50 2011
//! \brief Window without an icon. //! \brief Window without an icon.
// //
// Copyright (C) 2011 by poddav // Copyright (C) 2011 by poddav
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.Windows; using System.Windows;
using System.Windows.Interop; using System.Windows.Interop;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
namespace Rnd.Windows namespace Rnd.Windows
{ {
/// <summary> /// <summary>
/// Window without an icon. /// Window without an icon.
/// </summary> /// </summary>
public class ModalWindow : Window public class ModalWindow : Window
{ {
protected override void OnSourceInitialized(EventArgs e) protected override void OnSourceInitialized(EventArgs e)
{ {
base.OnSourceInitialized(e); base.OnSourceInitialized(e);
HideIcon (this); HideIcon (this);
} }
internal class NativeMethods internal class NativeMethods
{ {
[DllImport ("user32.dll")] [DllImport ("user32.dll")]
internal static extern int GetWindowLong (IntPtr hwnd, int index); internal static extern int GetWindowLong (IntPtr hwnd, int index);
[DllImport ("user32.dll")] [DllImport ("user32.dll")]
internal static extern int SetWindowLong (IntPtr hwnd, int index, int newStyle); internal static extern int SetWindowLong (IntPtr hwnd, int index, int newStyle);
[DllImport ("user32.dll")] [DllImport ("user32.dll")]
internal static extern bool SetWindowPos (IntPtr hwnd, IntPtr hwndInsertAfter, int x, int y, int width, int height, uint flags); internal static extern bool SetWindowPos (IntPtr hwnd, IntPtr hwndInsertAfter, int x, int y, int width, int height, uint flags);
[DllImport ("user32.dll")] [DllImport ("user32.dll")]
internal static extern IntPtr SendMessage (IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam); internal static extern IntPtr SendMessage (IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam);
} }
const int GWL_EXSTYLE = -20; const int GWL_EXSTYLE = -20;
const int WS_EX_DLGMODALFRAME = 0x0001; const int WS_EX_DLGMODALFRAME = 0x0001;
const int SWP_NOSIZE = 0x0001; const int SWP_NOSIZE = 0x0001;
const int SWP_NOMOVE = 0x0002; const int SWP_NOMOVE = 0x0002;
const int SWP_NOZORDER = 0x0004; const int SWP_NOZORDER = 0x0004;
const int SWP_FRAMECHANGED = 0x0020; const int SWP_FRAMECHANGED = 0x0020;
const uint WM_SETICON = 0x0080; const uint WM_SETICON = 0x0080;
/// <summary> /// <summary>
/// Win32 mumbo-jumbo to hide window icon and its menu. /// Win32 mumbo-jumbo to hide window icon and its menu.
/// </summary> /// </summary>
public static void HideIcon (Window window) public static void HideIcon (Window window)
{ {
// Get this window's handle // Get this window's handle
IntPtr hwnd = new WindowInteropHelper (window).Handle; IntPtr hwnd = new WindowInteropHelper (window).Handle;
// Change the extended window style to not show a window icon // Change the extended window style to not show a window icon
int extendedStyle = NativeMethods.GetWindowLong (hwnd, GWL_EXSTYLE); int extendedStyle = NativeMethods.GetWindowLong (hwnd, GWL_EXSTYLE);
NativeMethods.SetWindowLong (hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME); NativeMethods.SetWindowLong (hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME);
NativeMethods.SendMessage (hwnd, WM_SETICON, IntPtr.Zero, IntPtr.Zero); NativeMethods.SendMessage (hwnd, WM_SETICON, IntPtr.Zero, IntPtr.Zero);
NativeMethods.SendMessage (hwnd, WM_SETICON, new IntPtr (1), IntPtr.Zero); NativeMethods.SendMessage (hwnd, WM_SETICON, new IntPtr (1), IntPtr.Zero);
// Update the window's non-client area to reflect the changes // Update the window's non-client area to reflect the changes
NativeMethods.SetWindowPos (hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); NativeMethods.SetWindowPos (hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
} }
} }
} }

View File

@ -1,55 +1,55 @@
using System.Reflection; using System.Reflection;
using System.Resources; using System.Resources;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows; using System.Windows;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("Game Resource browser")] [assembly: AssemblyTitle("Game Resource browser")]
[assembly: AssemblyDescription("Game Resource browser")] [assembly: AssemblyDescription("Game Resource browser")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany ("mørkt")] [assembly: AssemblyCompany ("mørkt")]
[assembly: AssemblyProduct("GARbro.GUI")] [assembly: AssemblyProduct("GARbro.GUI")]
[assembly: AssemblyCopyright ("Copyright © 2014-2015 mørkt")] [assembly: AssemblyCopyright ("Copyright © 2014-2015 mørkt")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible // Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from // to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type. // COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
//In order to begin building localizable applications, set //In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file //<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english //inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment //in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in //the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file. //the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo( [assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page, //(used if a resource is not found in the page,
// or application resource dictionaries) // or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page, //(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries) // app, or any theme specific resource dictionaries)
)] )]
// Version information for an assembly consists of the following four values: // Version information for an assembly consists of the following four values:
// //
// Major Version // Major Version
// Minor Version // Minor Version
// Build Number // Build Number
// Revision // Revision
// //
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion ("1.2.12.953")] [assembly: AssemblyVersion ("1.2.12.0")]
[assembly: AssemblyFileVersion ("1.2.12.953")] [assembly: AssemblyFileVersion ("1.2.12.0")]

View File

@ -1,63 +1,63 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.18444 // Runtime Version:4.0.30319.18444
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace GARbro.GUI.Properties { namespace GARbro.GUI.Properties {
using System; using System;
/// <summary> /// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc. /// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary> /// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder // This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources { internal class Resources {
private static global::System.Resources.ResourceManager resourceMan; private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture; private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() { internal Resources() {
} }
/// <summary> /// <summary>
/// Returns the cached ResourceManager instance used by this class. /// Returns the cached ResourceManager instance used by this class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager { internal static global::System.Resources.ResourceManager ResourceManager {
get { get {
if (object.ReferenceEquals(resourceMan, null)) { if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GARbro.GUI.Properties.Resources", typeof(Resources).Assembly); global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GARbro.GUI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;
} }
} }
/// <summary> /// <summary>
/// Overrides the current thread's CurrentUICulture property for all /// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class. /// resource lookups using this strongly typed resource class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture { internal static global::System.Globalization.CultureInfo Culture {
get { get {
return resourceCulture; return resourceCulture;
} }
set { set {
resourceCulture = value; resourceCulture = value;
} }
} }
} }
} }

View File

@ -1,117 +1,117 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader> <resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value> <value>[base64 mime encoded serialized .NET Framework object]</value>
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment> <comment>This is a comment</comment>
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter : System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
</root> </root>

View File

@ -1,361 +1,361 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.34209 // Runtime Version:4.0.30319.34209
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace GARbro.GUI.Properties { namespace GARbro.GUI.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default { public static Settings Default {
get { get {
return defaultInstance; return defaultInstance;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool UpgradeRequired { public bool UpgradeRequired {
get { get {
return ((bool)(this["UpgradeRequired"])); return ((bool)(this["UpgradeRequired"]));
} }
set { set {
this["UpgradeRequired"] = value; this["UpgradeRequired"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("NaN")] [global::System.Configuration.DefaultSettingValueAttribute("NaN")]
public double winTop { public double winTop {
get { get {
return ((double)(this["winTop"])); return ((double)(this["winTop"]));
} }
set { set {
this["winTop"] = value; this["winTop"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("NaN")] [global::System.Configuration.DefaultSettingValueAttribute("NaN")]
public double winLeft { public double winLeft {
get { get {
return ((double)(this["winLeft"])); return ((double)(this["winLeft"]));
} }
set { set {
this["winLeft"] = value; this["winLeft"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("1024")] [global::System.Configuration.DefaultSettingValueAttribute("1024")]
public double winWidth { public double winWidth {
get { get {
return ((double)(this["winWidth"])); return ((double)(this["winWidth"]));
} }
set { set {
this["winWidth"] = value; this["winWidth"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("600")] [global::System.Configuration.DefaultSettingValueAttribute("600")]
public double winHeight { public double winHeight {
get { get {
return ((double)(this["winHeight"])); return ((double)(this["winHeight"]));
} }
set { set {
this["winHeight"] = value; this["winHeight"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Normal")] [global::System.Configuration.DefaultSettingValueAttribute("Normal")]
public global::System.Windows.WindowState winState { public global::System.Windows.WindowState winState {
get { get {
return ((global::System.Windows.WindowState)(this["winState"])); return ((global::System.Windows.WindowState)(this["winState"]));
} }
set { set {
this["winState"] = value; this["winState"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("265")] [global::System.Configuration.DefaultSettingValueAttribute("265")]
public double lvNameColumnWidth { public double lvNameColumnWidth {
get { get {
return ((double)(this["lvNameColumnWidth"])); return ((double)(this["lvNameColumnWidth"]));
} }
set { set {
this["lvNameColumnWidth"] = value; this["lvNameColumnWidth"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("75")] [global::System.Configuration.DefaultSettingValueAttribute("75")]
public double lvTypeColumnWidth { public double lvTypeColumnWidth {
get { get {
return ((double)(this["lvTypeColumnWidth"])); return ((double)(this["lvTypeColumnWidth"]));
} }
set { set {
this["lvTypeColumnWidth"] = value; this["lvTypeColumnWidth"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("75")] [global::System.Configuration.DefaultSettingValueAttribute("75")]
public double lvSizeColumnWidth { public double lvSizeColumnWidth {
get { get {
return ((double)(this["lvSizeColumnWidth"])); return ((double)(this["lvSizeColumnWidth"]));
} }
set { set {
this["lvSizeColumnWidth"] = value; this["lvSizeColumnWidth"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Name")] [global::System.Configuration.DefaultSettingValueAttribute("Name")]
public string lvSortColumn { public string lvSortColumn {
get { get {
return ((string)(this["lvSortColumn"])); return ((string)(this["lvSortColumn"]));
} }
set { set {
this["lvSortColumn"] = value; this["lvSortColumn"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Ascending")] [global::System.Configuration.DefaultSettingValueAttribute("Ascending")]
public global::System.ComponentModel.ListSortDirection lvSortDirection { public global::System.ComponentModel.ListSortDirection lvSortDirection {
get { get {
return ((global::System.ComponentModel.ListSortDirection)(this["lvSortDirection"])); return ((global::System.ComponentModel.ListSortDirection)(this["lvSortDirection"]));
} }
set { set {
this["lvSortDirection"] = value; this["lvSortDirection"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("448")] [global::System.Configuration.DefaultSettingValueAttribute("448")]
public global::System.Windows.GridLength lvPanelWidth { public global::System.Windows.GridLength lvPanelWidth {
get { get {
return ((global::System.Windows.GridLength)(this["lvPanelWidth"])); return ((global::System.Windows.GridLength)(this["lvPanelWidth"]));
} }
set { set {
this["lvPanelWidth"] = value; this["lvPanelWidth"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool appExtractImages { public bool appExtractImages {
get { get {
return ((bool)(this["appExtractImages"])); return ((bool)(this["appExtractImages"]));
} }
set { set {
this["appExtractImages"] = value; this["appExtractImages"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool appExtractText { public bool appExtractText {
get { get {
return ((bool)(this["appExtractText"])); return ((bool)(this["appExtractText"]));
} }
set { set {
this["appExtractText"] = value; this["appExtractText"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")] [global::System.Configuration.DefaultSettingValueAttribute("")]
public string appImageFormat { public string appImageFormat {
get { get {
return ((string)(this["appImageFormat"])); return ((string)(this["appImageFormat"]));
} }
set { set {
this["appImageFormat"] = value; this["appImageFormat"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("65001")] [global::System.Configuration.DefaultSettingValueAttribute("65001")]
public int appTextEncoding { public int appTextEncoding {
get { get {
return ((int)(this["appTextEncoding"])); return ((int)(this["appTextEncoding"]));
} }
set { set {
this["appTextEncoding"] = value; this["appTextEncoding"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")] [global::System.Configuration.DefaultSettingValueAttribute("")]
public string appLastDirectory { public string appLastDirectory {
get { get {
return ((string)(this["appLastDirectory"])); return ((string)(this["appLastDirectory"]));
} }
set { set {
this["appLastDirectory"] = value; this["appLastDirectory"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")] [global::System.Configuration.DefaultSettingValueAttribute("")]
public string appArchiveFormat { public string appArchiveFormat {
get { get {
return ((string)(this["appArchiveFormat"])); return ((string)(this["appArchiveFormat"]));
} }
set { set {
this["appArchiveFormat"] = value; this["appArchiveFormat"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Collections.Specialized.StringCollection appRecentFiles { public global::System.Collections.Specialized.StringCollection appRecentFiles {
get { get {
return ((global::System.Collections.Specialized.StringCollection)(this["appRecentFiles"])); return ((global::System.Collections.Specialized.StringCollection)(this["appRecentFiles"]));
} }
set { set {
this["appRecentFiles"] = value; this["appRecentFiles"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")] [global::System.Configuration.DefaultSettingValueAttribute("")]
public string appLastCreatedArchive { public string appLastCreatedArchive {
get { get {
return ((string)(this["appLastCreatedArchive"])); return ((string)(this["appLastCreatedArchive"]));
} }
set { set {
this["appLastCreatedArchive"] = value; this["appLastCreatedArchive"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Visible")] [global::System.Configuration.DefaultSettingValueAttribute("Visible")]
public global::System.Windows.Visibility winMenuBarVisibility { public global::System.Windows.Visibility winMenuBarVisibility {
get { get {
return ((global::System.Windows.Visibility)(this["winMenuBarVisibility"])); return ((global::System.Windows.Visibility)(this["winMenuBarVisibility"]));
} }
set { set {
this["winMenuBarVisibility"] = value; this["winMenuBarVisibility"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Visible")] [global::System.Configuration.DefaultSettingValueAttribute("Visible")]
public global::System.Windows.Visibility winToolBarVisibility { public global::System.Windows.Visibility winToolBarVisibility {
get { get {
return ((global::System.Windows.Visibility)(this["winToolBarVisibility"])); return ((global::System.Windows.Visibility)(this["winToolBarVisibility"]));
} }
set { set {
this["winToolBarVisibility"] = value; this["winToolBarVisibility"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Visible")] [global::System.Configuration.DefaultSettingValueAttribute("Visible")]
public global::System.Windows.Visibility winStatusBarVisibility { public global::System.Windows.Visibility winStatusBarVisibility {
get { get {
return ((global::System.Windows.Visibility)(this["winStatusBarVisibility"])); return ((global::System.Windows.Visibility)(this["winStatusBarVisibility"]));
} }
set { set {
this["winStatusBarVisibility"] = value; this["winStatusBarVisibility"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("PNG")] [global::System.Configuration.DefaultSettingValueAttribute("PNG")]
public string appLastImageFormat { public string appLastImageFormat {
get { get {
return ((string)(this["appLastImageFormat"])); return ((string)(this["appLastImageFormat"]));
} }
set { set {
this["appLastImageFormat"] = value; this["appLastImageFormat"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")] [global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool appConvertAudio { public bool appConvertAudio {
get { get {
return ((bool)(this["appConvertAudio"])); return ((bool)(this["appConvertAudio"]));
} }
set { set {
this["appConvertAudio"] = value; this["appConvertAudio"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")] [global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool appExtractAudio { public bool appExtractAudio {
get { get {
return ((bool)(this["appExtractAudio"])); return ((bool)(this["appExtractAudio"]));
} }
set { set {
this["appExtractAudio"] = value; this["appExtractAudio"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")] [global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool appIgnoreConversionErrors { public bool appIgnoreConversionErrors {
get { get {
return ((bool)(this["appIgnoreConversionErrors"])); return ((bool)(this["appIgnoreConversionErrors"]));
} }
set { set {
this["appIgnoreConversionErrors"] = value; this["appIgnoreConversionErrors"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")] [global::System.Configuration.DefaultSettingValueAttribute("")]
public string appLastDestination { public string appLastDestination {
get { get {
return ((string)(this["appLastDestination"])); return ((string)(this["appLastDestination"]));
} }
set { set {
this["appLastDestination"] = value; this["appLastDestination"] = value;
} }
} }
} }
} }

View File

@ -1,90 +1,90 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="GARbro.GUI.Properties" GeneratedClassName="Settings"> <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="GARbro.GUI.Properties" GeneratedClassName="Settings">
<Profiles /> <Profiles />
<Settings> <Settings>
<Setting Name="UpgradeRequired" Type="System.Boolean" Scope="User"> <Setting Name="UpgradeRequired" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="winTop" Type="System.Double" Scope="User"> <Setting Name="winTop" Type="System.Double" Scope="User">
<Value Profile="(Default)">NaN</Value> <Value Profile="(Default)">NaN</Value>
</Setting> </Setting>
<Setting Name="winLeft" Type="System.Double" Scope="User"> <Setting Name="winLeft" Type="System.Double" Scope="User">
<Value Profile="(Default)">NaN</Value> <Value Profile="(Default)">NaN</Value>
</Setting> </Setting>
<Setting Name="winWidth" Type="System.Double" Scope="User"> <Setting Name="winWidth" Type="System.Double" Scope="User">
<Value Profile="(Default)">1024</Value> <Value Profile="(Default)">1024</Value>
</Setting> </Setting>
<Setting Name="winHeight" Type="System.Double" Scope="User"> <Setting Name="winHeight" Type="System.Double" Scope="User">
<Value Profile="(Default)">600</Value> <Value Profile="(Default)">600</Value>
</Setting> </Setting>
<Setting Name="winState" Type="System.Windows.WindowState" Scope="User"> <Setting Name="winState" Type="System.Windows.WindowState" Scope="User">
<Value Profile="(Default)">Normal</Value> <Value Profile="(Default)">Normal</Value>
</Setting> </Setting>
<Setting Name="lvNameColumnWidth" Type="System.Double" Scope="User"> <Setting Name="lvNameColumnWidth" Type="System.Double" Scope="User">
<Value Profile="(Default)">265</Value> <Value Profile="(Default)">265</Value>
</Setting> </Setting>
<Setting Name="lvTypeColumnWidth" Type="System.Double" Scope="User"> <Setting Name="lvTypeColumnWidth" Type="System.Double" Scope="User">
<Value Profile="(Default)">75</Value> <Value Profile="(Default)">75</Value>
</Setting> </Setting>
<Setting Name="lvSizeColumnWidth" Type="System.Double" Scope="User"> <Setting Name="lvSizeColumnWidth" Type="System.Double" Scope="User">
<Value Profile="(Default)">75</Value> <Value Profile="(Default)">75</Value>
</Setting> </Setting>
<Setting Name="lvSortColumn" Type="System.String" Scope="User"> <Setting Name="lvSortColumn" Type="System.String" Scope="User">
<Value Profile="(Default)">Name</Value> <Value Profile="(Default)">Name</Value>
</Setting> </Setting>
<Setting Name="lvSortDirection" Type="System.ComponentModel.ListSortDirection" Scope="User"> <Setting Name="lvSortDirection" Type="System.ComponentModel.ListSortDirection" Scope="User">
<Value Profile="(Default)">Ascending</Value> <Value Profile="(Default)">Ascending</Value>
</Setting> </Setting>
<Setting Name="lvPanelWidth" Type="System.Windows.GridLength" Scope="User"> <Setting Name="lvPanelWidth" Type="System.Windows.GridLength" Scope="User">
<Value Profile="(Default)">448</Value> <Value Profile="(Default)">448</Value>
</Setting> </Setting>
<Setting Name="appExtractImages" Type="System.Boolean" Scope="User"> <Setting Name="appExtractImages" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="appExtractText" Type="System.Boolean" Scope="User"> <Setting Name="appExtractText" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="appImageFormat" Type="System.String" Scope="User"> <Setting Name="appImageFormat" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
<Setting Name="appTextEncoding" Type="System.Int32" Scope="User"> <Setting Name="appTextEncoding" Type="System.Int32" Scope="User">
<Value Profile="(Default)">65001</Value> <Value Profile="(Default)">65001</Value>
</Setting> </Setting>
<Setting Name="appLastDirectory" Type="System.String" Scope="User"> <Setting Name="appLastDirectory" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
<Setting Name="appArchiveFormat" Type="System.String" Scope="User"> <Setting Name="appArchiveFormat" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
<Setting Name="appRecentFiles" Type="System.Collections.Specialized.StringCollection" Scope="User"> <Setting Name="appRecentFiles" Type="System.Collections.Specialized.StringCollection" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
<Setting Name="appLastCreatedArchive" Type="System.String" Scope="User"> <Setting Name="appLastCreatedArchive" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
<Setting Name="winMenuBarVisibility" Type="System.Windows.Visibility" Scope="User"> <Setting Name="winMenuBarVisibility" Type="System.Windows.Visibility" Scope="User">
<Value Profile="(Default)">Visible</Value> <Value Profile="(Default)">Visible</Value>
</Setting> </Setting>
<Setting Name="winToolBarVisibility" Type="System.Windows.Visibility" Scope="User"> <Setting Name="winToolBarVisibility" Type="System.Windows.Visibility" Scope="User">
<Value Profile="(Default)">Visible</Value> <Value Profile="(Default)">Visible</Value>
</Setting> </Setting>
<Setting Name="winStatusBarVisibility" Type="System.Windows.Visibility" Scope="User"> <Setting Name="winStatusBarVisibility" Type="System.Windows.Visibility" Scope="User">
<Value Profile="(Default)">Visible</Value> <Value Profile="(Default)">Visible</Value>
</Setting> </Setting>
<Setting Name="appLastImageFormat" Type="System.String" Scope="User"> <Setting Name="appLastImageFormat" Type="System.String" Scope="User">
<Value Profile="(Default)">PNG</Value> <Value Profile="(Default)">PNG</Value>
</Setting> </Setting>
<Setting Name="appConvertAudio" Type="System.Boolean" Scope="User"> <Setting Name="appConvertAudio" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value> <Value Profile="(Default)">False</Value>
</Setting> </Setting>
<Setting Name="appExtractAudio" Type="System.Boolean" Scope="User"> <Setting Name="appExtractAudio" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="appIgnoreConversionErrors" Type="System.Boolean" Scope="User"> <Setting Name="appIgnoreConversionErrors" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value> <Value Profile="(Default)">False</Value>
</Setting> </Setting>
<Setting Name="appLastDestination" Type="System.String" Scope="User"> <Setting Name="appLastDestination" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -1,56 +1,56 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> <assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security> <security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options <!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following. requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization. Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node. compatibility then delete the requestedExecutionLevel node.
--> -->
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges> </requestedPrivileges>
<!-- <!--
<applicationRequestMinimum> <applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" /> <defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" /> <PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
</applicationRequestMinimum> </applicationRequestMinimum>
--> -->
</security> </security>
</trustInfo> </trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application> <application>
<!-- A list of all Windows versions that this application is designed to work with. <!-- A list of all Windows versions that this application is designed to work with.
Windows will automatically select the most compatible environment.--> Windows will automatically select the most compatible environment.-->
<!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node--> <!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>--> <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>-->
<!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node--> <!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>--> <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
<!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node--> <!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>--> <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>-->
<!-- If your application is designed to work with Windows 8.1, uncomment the following supportedOS node--> <!-- If your application is designed to work with Windows 8.1, uncomment the following supportedOS node-->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>--> <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>-->
</application> </application>
</compatibility> </compatibility>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) --> <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<dependency> <dependency>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity <assemblyIdentity
type="win32" type="win32"
name="Microsoft.Windows.Common-Controls" name="Microsoft.Windows.Common-Controls"
version="6.0.0.0" version="6.0.0.0"
processorArchitecture="*" processorArchitecture="*"
publicKeyToken="6595b64144ccf1df" publicKeyToken="6595b64144ccf1df"
language="*" language="*"
/> />
</dependentAssembly> </dependentAssembly>
</dependency> </dependency>
</asmv1:assembly> </asmv1:assembly>

View File

@ -1,43 +1,43 @@
namespace GARbro.GUI.Properties { namespace GARbro.GUI.Properties {
// This class allows you to handle specific events on the settings class: // This class allows you to handle specific events on the settings class:
// The SettingChanging event is raised before a setting's value is changed. // The SettingChanging event is raised before a setting's value is changed.
// The PropertyChanged event is raised after a setting's value is changed. // The PropertyChanged event is raised after a setting's value is changed.
// The SettingsLoaded event is raised after the setting values are loaded. // The SettingsLoaded event is raised after the setting values are loaded.
// The SettingsSaving event is raised before the setting values are saved. // The SettingsSaving event is raised before the setting values are saved.
internal sealed partial class Settings { internal sealed partial class Settings {
public Settings() { public Settings() {
// // To add event handlers for saving and changing settings, uncomment the lines below: // // To add event handlers for saving and changing settings, uncomment the lines below:
// //
// this.SettingChanging += this.SettingChangingEventHandler; // this.SettingChanging += this.SettingChangingEventHandler;
// //
// this.SettingsSaving += this.SettingsSavingEventHandler; // this.SettingsSaving += this.SettingsSavingEventHandler;
// //
this.SettingsLoaded += OnSettingsLoadedHandler; this.SettingsLoaded += OnSettingsLoadedHandler;
} }
void OnSettingsLoadedHandler (object sender, System.Configuration.SettingsLoadedEventArgs e) void OnSettingsLoadedHandler (object sender, System.Configuration.SettingsLoadedEventArgs e)
{ {
if (Settings.Default.UpgradeRequired) if (Settings.Default.UpgradeRequired)
{ {
Settings.Default.Upgrade(); Settings.Default.Upgrade();
Settings.Default.UpgradeRequired = false; Settings.Default.UpgradeRequired = false;
Settings.Default.Save(); Settings.Default.Save();
} }
// do not restore in minimized state // do not restore in minimized state
if (Settings.Default.winState == System.Windows.WindowState.Minimized) if (Settings.Default.winState == System.Windows.WindowState.Minimized)
Settings.Default.winState = System.Windows.WindowState.Normal; Settings.Default.winState = System.Windows.WindowState.Normal;
} }
private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
// Add code to handle the SettingChangingEvent event here. // Add code to handle the SettingChangingEvent event here.
} }
private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
// Add code to handle the SettingsSaving event here. // Add code to handle the SettingsSaving event here.
} }
} }
} }

View File

@ -1,345 +1,345 @@
//! \file Shell.cs //! \file Shell.cs
//! \date Tue Aug 02 13:48:55 2011 //! \date Tue Aug 02 13:48:55 2011
//! \brief Win32 shell functions. //! \brief Win32 shell functions.
// //
// Copyright (C) 2011 by poddav // Copyright (C) 2011 by poddav
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
namespace GARbro.Shell namespace GARbro.Shell
{ {
/// <summary> /// <summary>
/// Wrapper around MoveFileEx WINAPI call. /// Wrapper around MoveFileEx WINAPI call.
/// </summary> /// </summary>
class File class File
{ {
[DllImport("kernel32.dll", EntryPoint="MoveFileExW", SetLastError=true, CharSet=CharSet.Unicode)] [DllImport("kernel32.dll", EntryPoint="MoveFileExW", SetLastError=true, CharSet=CharSet.Unicode)]
public static extern bool MoveFileEx (string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags); public static extern bool MoveFileEx (string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags);
[Flags] [Flags]
public enum MoveFileFlags : uint public enum MoveFileFlags : uint
{ {
ReplaceExisting = 0x00000001, ReplaceExisting = 0x00000001,
CopyAllowed = 0x00000002, CopyAllowed = 0x00000002,
DelayUntilReboot = 0x00000004, DelayUntilReboot = 0x00000004,
WriteThrough = 0x00000008, WriteThrough = 0x00000008,
CreateHardlink = 0x00000010, CreateHardlink = 0x00000010,
FailIfNotTrackable = 0x00000020 FailIfNotTrackable = 0x00000020
} }
public static bool Rename (string szFrom, string szTo) public static bool Rename (string szFrom, string szTo)
{ {
return MoveFileEx (szFrom, szTo, MoveFileFlags.ReplaceExisting); return MoveFileEx (szFrom, szTo, MoveFileFlags.ReplaceExisting);
} }
public static int GetLastError () public static int GetLastError ()
{ {
return Marshal.GetLastWin32Error(); return Marshal.GetLastWin32Error();
} }
/// <summary> /// <summary>
/// Possible flags for the SHFileOperation method. /// Possible flags for the SHFileOperation method.
/// </summary> /// </summary>
[Flags] [Flags]
public enum FileOperationFlags : ushort public enum FileOperationFlags : ushort
{ {
/// <summary> /// <summary>
/// Do not show a dialog during the process /// Do not show a dialog during the process
/// </summary> /// </summary>
FOF_SILENT = 0x0004, FOF_SILENT = 0x0004,
/// <summary> /// <summary>
/// Do not ask the user to confirm selection /// Do not ask the user to confirm selection
/// </summary> /// </summary>
FOF_NOCONFIRMATION = 0x0010, FOF_NOCONFIRMATION = 0x0010,
/// <summary> /// <summary>
/// Delete the file to the recycle bin. (Required flag to send a file to the bin /// Delete the file to the recycle bin. (Required flag to send a file to the bin
/// </summary> /// </summary>
FOF_ALLOWUNDO = 0x0040, FOF_ALLOWUNDO = 0x0040,
/// <summary> /// <summary>
/// Do not show the names of the files or folders that are being recycled. /// Do not show the names of the files or folders that are being recycled.
/// </summary> /// </summary>
FOF_SIMPLEPROGRESS = 0x0100, FOF_SIMPLEPROGRESS = 0x0100,
/// <summary> /// <summary>
/// Surpress errors, if any occur during the process. /// Surpress errors, if any occur during the process.
/// </summary> /// </summary>
FOF_NOERRORUI = 0x0400, FOF_NOERRORUI = 0x0400,
/// <summary> /// <summary>
/// Warn if files are too big to fit in the recycle bin and will need /// Warn if files are too big to fit in the recycle bin and will need
/// to be deleted completely. /// to be deleted completely.
/// </summary> /// </summary>
FOF_WANTNUKEWARNING = 0x4000, FOF_WANTNUKEWARNING = 0x4000,
} }
/// <summary> /// <summary>
/// File Operation Function Type for SHFileOperation /// File Operation Function Type for SHFileOperation
/// </summary> /// </summary>
public enum FileOperationType : uint public enum FileOperationType : uint
{ {
/// <summary> /// <summary>
/// Move the objects /// Move the objects
/// </summary> /// </summary>
FO_MOVE = 0x0001, FO_MOVE = 0x0001,
/// <summary> /// <summary>
/// Copy the objects /// Copy the objects
/// </summary> /// </summary>
FO_COPY = 0x0002, FO_COPY = 0x0002,
/// <summary> /// <summary>
/// Delete (or recycle) the objects /// Delete (or recycle) the objects
/// </summary> /// </summary>
FO_DELETE = 0x0003, FO_DELETE = 0x0003,
/// <summary> /// <summary>
/// Rename the object(s) /// Rename the object(s)
/// </summary> /// </summary>
FO_RENAME = 0x0004, FO_RENAME = 0x0004,
} }
/// <summary> /// <summary>
/// SHFILEOPSTRUCT for SHFileOperation from COM /// SHFILEOPSTRUCT for SHFileOperation from COM
/// </summary> /// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
private struct SHFILEOPSTRUCT private struct SHFILEOPSTRUCT
{ {
public IntPtr hwnd; public IntPtr hwnd;
[MarshalAs(UnmanagedType.U4)] [MarshalAs(UnmanagedType.U4)]
public FileOperationType wFunc; public FileOperationType wFunc;
public string pFrom; public string pFrom;
public string pTo; public string pTo;
public FileOperationFlags fFlags; public FileOperationFlags fFlags;
[MarshalAs(UnmanagedType.Bool)] [MarshalAs(UnmanagedType.Bool)]
public bool fAnyOperationsAborted; public bool fAnyOperationsAborted;
public IntPtr hNameMappings; public IntPtr hNameMappings;
public string lpszProgressTitle; public string lpszProgressTitle;
} }
[DllImport("shell32.dll", CharSet = CharSet.Auto)] [DllImport("shell32.dll", CharSet = CharSet.Auto)]
private static extern int SHFileOperation (ref SHFILEOPSTRUCT FileOp); private static extern int SHFileOperation (ref SHFILEOPSTRUCT FileOp);
/// <summary> /// <summary>
/// Send file to recycle bin /// Send file to recycle bin
/// </summary> /// </summary>
/// <param name="path">Location of directory or file to recycle</param> /// <param name="path">Location of directory or file to recycle</param>
/// <param name="flags">FileOperationFlags to add in addition to FOF_ALLOWUNDO</param> /// <param name="flags">FileOperationFlags to add in addition to FOF_ALLOWUNDO</param>
public static bool Delete (string path, FileOperationFlags flags) public static bool Delete (string path, FileOperationFlags flags)
{ {
var fs = new SHFILEOPSTRUCT var fs = new SHFILEOPSTRUCT
{ {
wFunc = FileOperationType.FO_DELETE, wFunc = FileOperationType.FO_DELETE,
pFrom = path + '\0' + '\0', pFrom = path + '\0' + '\0',
fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags
}; };
return 0 == SHFileOperation (ref fs); return 0 == SHFileOperation (ref fs);
} }
public static bool Delete (IEnumerable<string> file_list, FileOperationFlags flags) public static bool Delete (IEnumerable<string> file_list, FileOperationFlags flags)
{ {
var files = new StringBuilder(); var files = new StringBuilder();
foreach (var file in file_list) foreach (var file in file_list)
{ {
files.Append (file); files.Append (file);
files.Append ('\0'); files.Append ('\0');
} }
if (0 == files.Length) if (0 == files.Length)
return false; return false;
files.Append ('\0'); files.Append ('\0');
var fs = new SHFILEOPSTRUCT var fs = new SHFILEOPSTRUCT
{ {
wFunc = FileOperationType.FO_DELETE, wFunc = FileOperationType.FO_DELETE,
pFrom = files.ToString(), pFrom = files.ToString(),
fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags
}; };
return 0 == SHFileOperation (ref fs); return 0 == SHFileOperation (ref fs);
} }
public static bool Delete (IEnumerable<string> file_list) public static bool Delete (IEnumerable<string> file_list)
{ {
return Delete (file_list, FileOperationFlags.FOF_WANTNUKEWARNING); return Delete (file_list, FileOperationFlags.FOF_WANTNUKEWARNING);
} }
/// <summary> /// <summary>
/// Send file to recycle bin. Display dialog, display warning if files are too big to fit (FOF_WANTNUKEWARNING) /// Send file to recycle bin. Display dialog, display warning if files are too big to fit (FOF_WANTNUKEWARNING)
/// </summary> /// </summary>
/// <param name="path">Location of directory or file to recycle</param> /// <param name="path">Location of directory or file to recycle</param>
public static bool Delete (string path) public static bool Delete (string path)
{ {
return Delete (path, FileOperationFlags.FOF_NOCONFIRMATION | FileOperationFlags.FOF_WANTNUKEWARNING); return Delete (path, FileOperationFlags.FOF_NOCONFIRMATION | FileOperationFlags.FOF_WANTNUKEWARNING);
} }
/// <summary> /// <summary>
/// Send file silently to recycle bin. Surpress dialog, surpress errors, delete if too large. /// Send file silently to recycle bin. Surpress dialog, surpress errors, delete if too large.
/// </summary> /// </summary>
/// <param name="path">Location of directory or file to recycle</param> /// <param name="path">Location of directory or file to recycle</param>
public static bool MoveToRecycleBin (string path) public static bool MoveToRecycleBin (string path)
{ {
return Delete (path, FileOperationFlags.FOF_NOCONFIRMATION | FileOperationFlags.FOF_NOERRORUI | FileOperationFlags.FOF_SILENT); return Delete (path, FileOperationFlags.FOF_NOCONFIRMATION | FileOperationFlags.FOF_NOERRORUI | FileOperationFlags.FOF_SILENT);
} }
} }
public class TemporaryFile : IDisposable public class TemporaryFile : IDisposable
{ {
private string m_name; private string m_name;
public string Name { get { return m_name; } } public string Name { get { return m_name; } }
public TemporaryFile () public TemporaryFile ()
{ {
m_name = Path.GetRandomFileName(); m_name = Path.GetRandomFileName();
} }
public TemporaryFile (string filename) public TemporaryFile (string filename)
{ {
m_name = filename; m_name = filename;
} }
public TemporaryFile (string path, string filename) public TemporaryFile (string path, string filename)
{ {
m_name = Path.Combine (path, filename); m_name = Path.Combine (path, filename);
} }
#region IDisposable Members #region IDisposable Members
bool disposed = false; bool disposed = false;
public void Dispose () public void Dispose ()
{ {
Dispose (true); Dispose (true);
GC.SuppressFinalize (this); GC.SuppressFinalize (this);
} }
protected virtual void Dispose (bool disposing) protected virtual void Dispose (bool disposing)
{ {
if (!disposed) if (!disposed)
{ {
if (disposing) if (disposing)
{ {
System.IO.File.Delete (m_name); System.IO.File.Delete (m_name);
} }
disposed = true; disposed = true;
} }
} }
#endregion #endregion
}; };
/// <summary> /// <summary>
/// Wrapper around SHGetFileInfo WINAPI call. /// Wrapper around SHGetFileInfo WINAPI call.
/// </summary> /// </summary>
class FileInfo class FileInfo
{ {
[DllImport("shell32.dll", CharSet=CharSet.Auto)] [DllImport("shell32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SHGetFileInfo( public static extern IntPtr SHGetFileInfo(
string pszPath, Int32 dwFileAttributes, string pszPath, Int32 dwFileAttributes,
ref SHFILEINFO psfi, int cbFileInfo, int uFlags); ref SHFILEINFO psfi, int cbFileInfo, int uFlags);
[DllImport("User32.dll")] [DllImport("User32.dll")]
public static extern int DestroyIcon(IntPtr hIcon); public static extern int DestroyIcon(IntPtr hIcon);
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct SHFILEINFO public struct SHFILEINFO
{ {
public IntPtr hIcon; public IntPtr hIcon;
public int iIcon; public int iIcon;
public uint dwAttributes; public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName; public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName; public string szTypeName;
public SHFILEINFO(bool b) public SHFILEINFO(bool b)
{ {
hIcon = IntPtr.Zero; hIcon = IntPtr.Zero;
iIcon = 0; iIcon = 0;
dwAttributes = 0; dwAttributes = 0;
szDisplayName = ""; szDisplayName = "";
szTypeName = ""; szTypeName = "";
} }
}; };
[Flags] [Flags]
public enum SHGFI : uint public enum SHGFI : uint
{ {
/// <summary>get icon</summary> /// <summary>get icon</summary>
Icon = 0x000000100, Icon = 0x000000100,
/// <summary>get display name</summary> /// <summary>get display name</summary>
DisplayName = 0x000000200, DisplayName = 0x000000200,
/// <summary>get type name</summary> /// <summary>get type name</summary>
TypeName = 0x000000400, TypeName = 0x000000400,
/// <summary>get attributes</summary> /// <summary>get attributes</summary>
Attributes = 0x000000800, Attributes = 0x000000800,
/// <summary>get icon location</summary> /// <summary>get icon location</summary>
IconLocation = 0x000001000, IconLocation = 0x000001000,
/// <summary>return exe type</summary> /// <summary>return exe type</summary>
ExeType = 0x000002000, ExeType = 0x000002000,
/// <summary>get system icon index</summary> /// <summary>get system icon index</summary>
SysIconIndex = 0x000004000, SysIconIndex = 0x000004000,
/// <summary>put a link overlay on icon</summary> /// <summary>put a link overlay on icon</summary>
LinkOverlay = 0x000008000, LinkOverlay = 0x000008000,
/// <summary>show icon in selected state</summary> /// <summary>show icon in selected state</summary>
Selected = 0x000010000, Selected = 0x000010000,
/// <summary>get only specified attributes</summary> /// <summary>get only specified attributes</summary>
Attr_Specified = 0x000020000, Attr_Specified = 0x000020000,
/// <summary>get large icon</summary> /// <summary>get large icon</summary>
LargeIcon = 0x000000000, LargeIcon = 0x000000000,
/// <summary>get small icon</summary> /// <summary>get small icon</summary>
SmallIcon = 0x000000001, SmallIcon = 0x000000001,
/// <summary>get open icon</summary> /// <summary>get open icon</summary>
OpenIcon = 0x000000002, OpenIcon = 0x000000002,
/// <summary>get shell size icon</summary> /// <summary>get shell size icon</summary>
ShellIconSize = 0x000000004, ShellIconSize = 0x000000004,
/// <summary>pszPath is a pidl</summary> /// <summary>pszPath is a pidl</summary>
PIDL = 0x000000008, PIDL = 0x000000008,
/// <summary>use passed dwFileAttribute</summary> /// <summary>use passed dwFileAttribute</summary>
UseFileAttributes= 0x000000010, UseFileAttributes= 0x000000010,
/// <summary>apply the appropriate overlays</summary> /// <summary>apply the appropriate overlays</summary>
AddOverlays = 0x000000020, AddOverlays = 0x000000020,
/// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary> /// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary>
OverlayIndex = 0x000000040, OverlayIndex = 0x000000040,
} }
public static string GetTypeName (string filename) public static string GetTypeName (string filename)
{ {
SHFILEINFO info = new SHFILEINFO(true); SHFILEINFO info = new SHFILEINFO(true);
int szInfo = Marshal.SizeOf (info); int szInfo = Marshal.SizeOf (info);
int result = (int)SHGetFileInfo (filename, 0, ref info, szInfo, (int)SHGFI.TypeName); int result = (int)SHGetFileInfo (filename, 0, ref info, szInfo, (int)SHGFI.TypeName);
// If uFlags does not contain SHGFI_EXETYPE or SHGFI_SYSICONINDEX, // If uFlags does not contain SHGFI_EXETYPE or SHGFI_SYSICONINDEX,
// the return value is nonzero if successful, or zero otherwise. // the return value is nonzero if successful, or zero otherwise.
if (result != 0) if (result != 0)
return info.szTypeName; return info.szTypeName;
else else
return string.Empty; return string.Empty;
} }
public static SHFILEINFO? GetInfo (string filename, SHGFI flags) public static SHFILEINFO? GetInfo (string filename, SHGFI flags)
{ {
SHFILEINFO info = new SHFILEINFO(true); SHFILEINFO info = new SHFILEINFO(true);
int szInfo = Marshal.SizeOf (info); int szInfo = Marshal.SizeOf (info);
int result = (int)SHGetFileInfo (filename, 0, ref info, szInfo, (int)flags); int result = (int)SHGetFileInfo (filename, 0, ref info, szInfo, (int)flags);
return result != 0? new Nullable<SHFILEINFO> (info): null; return result != 0? new Nullable<SHFILEINFO> (info): null;
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,452 +1,452 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader> <resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value> <value>[base64 mime encoded serialized .NET Framework object]</value>
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment> <comment>This is a comment</comment>
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" /> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="ButtonCancel" xml:space="preserve"> <data name="ButtonCancel" xml:space="preserve">
<value>Cancel</value> <value>Cancel</value>
</data> </data>
<data name="ButtonExtract" xml:space="preserve"> <data name="ButtonExtract" xml:space="preserve">
<value>Extract</value> <value>Extract</value>
</data> </data>
<data name="ButtonOK" xml:space="preserve"> <data name="ButtonOK" xml:space="preserve">
<value>OK</value> <value>OK</value>
</data> </data>
<data name="CtxMenuClose" xml:space="preserve"> <data name="CtxMenuClose" xml:space="preserve">
<value>_Close</value> <value>_Close</value>
</data> </data>
<data name="CtxMenuCopy" xml:space="preserve"> <data name="CtxMenuCopy" xml:space="preserve">
<value>Copy</value> <value>Copy</value>
</data> </data>
<data name="CtxMenuCreate" xml:space="preserve"> <data name="CtxMenuCreate" xml:space="preserve">
<value>Create archive...</value> <value>Create archive...</value>
</data> </data>
<data name="CtxMenuCut" xml:space="preserve"> <data name="CtxMenuCut" xml:space="preserve">
<value>Cut</value> <value>Cut</value>
</data> </data>
<data name="CtxMenuDelete" xml:space="preserve"> <data name="CtxMenuDelete" xml:space="preserve">
<value>_Delete</value> <value>_Delete</value>
</data> </data>
<data name="CtxMenuExplorer" xml:space="preserve"> <data name="CtxMenuExplorer" xml:space="preserve">
<value>Browse in _Explorer</value> <value>Browse in _Explorer</value>
</data> </data>
<data name="CtxMenuExtract" xml:space="preserve"> <data name="CtxMenuExtract" xml:space="preserve">
<value>Extract</value> <value>Extract</value>
</data> </data>
<data name="CtxMenuOpen" xml:space="preserve"> <data name="CtxMenuOpen" xml:space="preserve">
<value>Open</value> <value>Open</value>
</data> </data>
<data name="CtxMenuPaste" xml:space="preserve"> <data name="CtxMenuPaste" xml:space="preserve">
<value>Paste</value> <value>Paste</value>
</data> </data>
<data name="CtxMenuRefresh" xml:space="preserve"> <data name="CtxMenuRefresh" xml:space="preserve">
<value>Refresh</value> <value>Refresh</value>
</data> </data>
<data name="CtxMenuRename" xml:space="preserve"> <data name="CtxMenuRename" xml:space="preserve">
<value>_Rename</value> <value>_Rename</value>
</data> </data>
<data name="CtxMenuSortBy" xml:space="preserve"> <data name="CtxMenuSortBy" xml:space="preserve">
<value>Sort by</value> <value>Sort by</value>
</data> </data>
<data name="CtxMenuSortByName" xml:space="preserve"> <data name="CtxMenuSortByName" xml:space="preserve">
<value>Name</value> <value>Name</value>
</data> </data>
<data name="CtxMenuSortBySize" xml:space="preserve"> <data name="CtxMenuSortBySize" xml:space="preserve">
<value>Size</value> <value>Size</value>
</data> </data>
<data name="CtxMenuSortByType" xml:space="preserve"> <data name="CtxMenuSortByType" xml:space="preserve">
<value>Type</value> <value>Type</value>
</data> </data>
<data name="CtxMenuUnsorted" xml:space="preserve"> <data name="CtxMenuUnsorted" xml:space="preserve">
<value>Unsorted</value> <value>Unsorted</value>
</data> </data>
<data name="HeaderName" xml:space="preserve"> <data name="HeaderName" xml:space="preserve">
<value>Name</value> <value>Name</value>
</data> </data>
<data name="HeaderSize" xml:space="preserve"> <data name="HeaderSize" xml:space="preserve">
<value>Size</value> <value>Size</value>
</data> </data>
<data name="HeaderType" xml:space="preserve"> <data name="HeaderType" xml:space="preserve">
<value>Type</value> <value>Type</value>
</data> </data>
<data name="LabelArchiveFormat" xml:space="preserve"> <data name="LabelArchiveFormat" xml:space="preserve">
<value>Archive format</value> <value>Archive format</value>
</data> </data>
<data name="LabelArchiveName" xml:space="preserve"> <data name="LabelArchiveName" xml:space="preserve">
<value>Archive name</value> <value>Archive name</value>
</data> </data>
<data name="LabelArchiveOptions" xml:space="preserve"> <data name="LabelArchiveOptions" xml:space="preserve">
<value>Archive options</value> <value>Archive options</value>
</data> </data>
<data name="LabelExtractAllTo" xml:space="preserve"> <data name="LabelExtractAllTo" xml:space="preserve">
<value>Extract files from {0} to</value> <value>Extract files from {0} to</value>
</data> </data>
<data name="LabelExtractFileTo" xml:space="preserve"> <data name="LabelExtractFileTo" xml:space="preserve">
<value>Extract {0} to</value> <value>Extract {0} to</value>
</data> </data>
<data name="MenuAbout" xml:space="preserve"> <data name="MenuAbout" xml:space="preserve">
<value>About Game Resource browser</value> <value>About Game Resource browser</value>
</data> </data>
<data name="MsgDeletedItem" xml:space="preserve"> <data name="MsgDeletedItem" xml:space="preserve">
<value>Deleted {0}</value> <value>Deleted {0}</value>
</data> </data>
<data name="MsgDirectoryNotFound" xml:space="preserve"> <data name="MsgDirectoryNotFound" xml:space="preserve">
<value>directory not found</value> <value>directory not found</value>
</data> </data>
<data name="MsgEmptyArchive" xml:space="preserve"> <data name="MsgEmptyArchive" xml:space="preserve">
<value>archive is empty</value> <value>archive is empty</value>
</data> </data>
<data name="MsgErrorExtracting" xml:space="preserve"> <data name="MsgErrorExtracting" xml:space="preserve">
<value>Error extracting file</value> <value>Error extracting file</value>
</data> </data>
<data name="MsgErrorOpening" xml:space="preserve"> <data name="MsgErrorOpening" xml:space="preserve">
<value>Error opening file</value> <value>Error opening file</value>
</data> </data>
<data name="MsgExtractComplete" xml:space="preserve"> <data name="MsgExtractComplete" xml:space="preserve">
<value>Extracted {0} into {1}</value> <value>Extracted {0} into {1}</value>
</data> </data>
<data name="MsgExtractedFiles1" xml:space="preserve"> <data name="MsgExtractedFiles1" xml:space="preserve">
<value>Extracted {0} file</value> <value>Extracted {0} file</value>
</data> </data>
<data name="MsgExtractingArchive" xml:space="preserve"> <data name="MsgExtractingArchive" xml:space="preserve">
<value>Extracting files from {0}</value> <value>Extracting files from {0}</value>
</data> </data>
<data name="MsgExtractingFile" xml:space="preserve"> <data name="MsgExtractingFile" xml:space="preserve">
<value>Extracting file from {0}</value> <value>Extracting file from {0}</value>
</data> </data>
<data name="MsgExtractingTo" xml:space="preserve"> <data name="MsgExtractingTo" xml:space="preserve">
<value>Extracting files from {0} to {1}</value> <value>Extracting files from {0} to {1}</value>
</data> </data>
<data name="MsgImageSize" xml:space="preserve"> <data name="MsgImageSize" xml:space="preserve">
<value>Image {0} x {1} x {2}bpp</value> <value>Image {0} x {1} x {2}bpp</value>
</data> </data>
<data name="MsgNoFiles" xml:space="preserve"> <data name="MsgNoFiles" xml:space="preserve">
<value>no files to extract</value> <value>no files to extract</value>
</data> </data>
<data name="MsgReady" xml:space="preserve"> <data name="MsgReady" xml:space="preserve">
<value>Ready</value> <value>Ready</value>
</data> </data>
<data name="MsgUnableInterpretImage" xml:space="preserve"> <data name="MsgUnableInterpretImage" xml:space="preserve">
<value>unable to interpret image format</value> <value>unable to interpret image format</value>
</data> </data>
<data name="MsgVersion" xml:space="preserve"> <data name="MsgVersion" xml:space="preserve">
<value>Version {0}</value> <value>Version {0}</value>
</data> </data>
<data name="TextAboutBuiltin" xml:space="preserve"> <data name="TextAboutBuiltin" xml:space="preserve">
<value>[builtin]</value> <value>[builtin]</value>
</data> </data>
<data name="TextAboutArchives" xml:space="preserve"> <data name="TextAboutArchives" xml:space="preserve">
<value>Archives</value> <value>Archives</value>
</data> </data>
<data name="TextAboutImages" xml:space="preserve"> <data name="TextAboutImages" xml:space="preserve">
<value>Images</value> <value>Images</value>
</data> </data>
<data name="TextAboutTitle" xml:space="preserve"> <data name="TextAboutTitle" xml:space="preserve">
<value>About Game Resource browser</value> <value>About Game Resource browser</value>
</data> </data>
<data name="TextAllFiles" xml:space="preserve"> <data name="TextAllFiles" xml:space="preserve">
<value>All Files</value> <value>All Files</value>
</data> </data>
<data name="TextAsIs" xml:space="preserve"> <data name="TextAsIs" xml:space="preserve">
<value>as is</value> <value>as is</value>
</data> </data>
<data name="TextChooseArchive" xml:space="preserve"> <data name="TextChooseArchive" xml:space="preserve">
<value>Choose archive location</value> <value>Choose archive location</value>
</data> </data>
<data name="TextChooseDestDir" xml:space="preserve"> <data name="TextChooseDestDir" xml:space="preserve">
<value>Choose destination directory</value> <value>Choose destination directory</value>
</data> </data>
<data name="TextCreateArchive" xml:space="preserve"> <data name="TextCreateArchive" xml:space="preserve">
<value>Create archive</value> <value>Create archive</value>
</data> </data>
<data name="TextCreateArchiveError" xml:space="preserve"> <data name="TextCreateArchiveError" xml:space="preserve">
<value>Archive creation error</value> <value>Archive creation error</value>
</data> </data>
<data name="Type_directory" xml:space="preserve"> <data name="Type_directory" xml:space="preserve">
<value>&lt;DIR&gt;</value> <value>&lt;DIR&gt;</value>
</data> </data>
<data name="TextEncoding" xml:space="preserve"> <data name="TextEncoding" xml:space="preserve">
<value>Text encoding</value> <value>Text encoding</value>
</data> </data>
<data name="TextExtractImages" xml:space="preserve"> <data name="TextExtractImages" xml:space="preserve">
<value>Extract images</value> <value>Extract images</value>
</data> </data>
<data name="TextExtractText" xml:space="preserve"> <data name="TextExtractText" xml:space="preserve">
<value>Extract text</value> <value>Extract text</value>
</data> </data>
<data name="TextExtractTitle" xml:space="preserve"> <data name="TextExtractTitle" xml:space="preserve">
<value>Extract from archive</value> <value>Extract from archive</value>
</data> </data>
<data name="TextParametersTitle" xml:space="preserve"> <data name="TextParametersTitle" xml:space="preserve">
<value>Archive parameters</value> <value>Archive parameters</value>
</data> </data>
<data name="TextSaveAs" xml:space="preserve"> <data name="TextSaveAs" xml:space="preserve">
<value>Save as</value> <value>Save as</value>
</data> </data>
<data name="TextSaveImagesAs" xml:space="preserve"> <data name="TextSaveImagesAs" xml:space="preserve">
<value>Save images as</value> <value>Save images as</value>
</data> </data>
<data name="TextTitle" xml:space="preserve"> <data name="TextTitle" xml:space="preserve">
<value>Game Resource browser</value> <value>Game Resource browser</value>
</data> </data>
<data name="TooltipBack" xml:space="preserve"> <data name="TooltipBack" xml:space="preserve">
<value>Back</value> <value>Back</value>
</data> </data>
<data name="TooltipForward" xml:space="preserve"> <data name="TooltipForward" xml:space="preserve">
<value>Forward</value> <value>Forward</value>
</data> </data>
<data name="MsgOverwrite" xml:space="preserve"> <data name="MsgOverwrite" xml:space="preserve">
<value>File {0} <value>File {0}
already exists. already exists.
Overwrite?</value> Overwrite?</value>
</data> </data>
<data name="TextConfirmOverwrite" xml:space="preserve"> <data name="TextConfirmOverwrite" xml:space="preserve">
<value>Confirm overwrite</value> <value>Confirm overwrite</value>
</data> </data>
<data name="MsgCreatingArchive" xml:space="preserve"> <data name="MsgCreatingArchive" xml:space="preserve">
<value>Creating archive {0}</value> <value>Creating archive {0}</value>
</data> </data>
<data name="MenuOpen" xml:space="preserve"> <data name="MenuOpen" xml:space="preserve">
<value>Open...</value> <value>Open...</value>
</data> </data>
<data name="MenuRecent" xml:space="preserve"> <data name="MenuRecent" xml:space="preserve">
<value>Recent files</value> <value>Recent files</value>
</data> </data>
<data name="MsgChooseFiles" xml:space="preserve"> <data name="MsgChooseFiles" xml:space="preserve">
<value>Choose files to extract</value> <value>Choose files to extract</value>
</data> </data>
<data name="MenuExit" xml:space="preserve"> <data name="MenuExit" xml:space="preserve">
<value>E_xit</value> <value>E_xit</value>
</data> </data>
<data name="MenuFile" xml:space="preserve"> <data name="MenuFile" xml:space="preserve">
<value>_File</value> <value>_File</value>
</data> </data>
<data name="MenuHelp" xml:space="preserve"> <data name="MenuHelp" xml:space="preserve">
<value>_Help</value> <value>_Help</value>
</data> </data>
<data name="MsgExtractedFiles2" xml:space="preserve"> <data name="MsgExtractedFiles2" xml:space="preserve">
<value>Extracted {0} files</value> <value>Extracted {0} files</value>
</data> </data>
<data name="MsgFiles1" xml:space="preserve"> <data name="MsgFiles1" xml:space="preserve">
<value>{0} file</value> <value>{0} file</value>
</data> </data>
<data name="MsgFiles2" xml:space="preserve"> <data name="MsgFiles2" xml:space="preserve">
<value>{0} files</value> <value>{0} files</value>
</data> </data>
<data name="MsgConfirmDeleteFiles" xml:space="preserve"> <data name="MsgConfirmDeleteFiles" xml:space="preserve">
<value>Are you sure you want to delete these files?</value> <value>Are you sure you want to delete these files?</value>
</data> </data>
<data name="TextDeleteFiles" xml:space="preserve"> <data name="TextDeleteFiles" xml:space="preserve">
<value>Delete files</value> <value>Delete files</value>
</data> </data>
<data name="MsgDeletedItems1" xml:space="preserve"> <data name="MsgDeletedItems1" xml:space="preserve">
<value>Deleted {0} file</value> <value>Deleted {0} file</value>
</data> </data>
<data name="MsgDeletedItems2" xml:space="preserve"> <data name="MsgDeletedItems2" xml:space="preserve">
<value>Deleted {0} files</value> <value>Deleted {0} files</value>
</data> </data>
<data name="MenuFitWindow" xml:space="preserve"> <data name="MenuFitWindow" xml:space="preserve">
<value>Fit preview _window to image</value> <value>Fit preview _window to image</value>
</data> </data>
<data name="MenuToggleMenuBar" xml:space="preserve"> <data name="MenuToggleMenuBar" xml:space="preserve">
<value>Show/hide main _menu bar</value> <value>Show/hide main _menu bar</value>
</data> </data>
<data name="MenuToggleStatusBar" xml:space="preserve"> <data name="MenuToggleStatusBar" xml:space="preserve">
<value>Show/hide _status bar</value> <value>Show/hide _status bar</value>
</data> </data>
<data name="MenuToggleToolBar" xml:space="preserve"> <data name="MenuToggleToolBar" xml:space="preserve">
<value>Show/hide _toolbar</value> <value>Show/hide _toolbar</value>
</data> </data>
<data name="MenuView" xml:space="preserve"> <data name="MenuView" xml:space="preserve">
<value>_View</value> <value>_View</value>
</data> </data>
<data name="CtxMenuConvert" xml:space="preserve"> <data name="CtxMenuConvert" xml:space="preserve">
<value>Convert multimedia...</value> <value>Convert multimedia...</value>
</data> </data>
<data name="ButtonConvert" xml:space="preserve"> <data name="ButtonConvert" xml:space="preserve">
<value>Convert</value> <value>Convert</value>
</data> </data>
<data name="LabelDestinationFormat" xml:space="preserve"> <data name="LabelDestinationFormat" xml:space="preserve">
<value>Choose destination format for images</value> <value>Choose destination format for images</value>
</data> </data>
<data name="TextConvertMedia" xml:space="preserve"> <data name="TextConvertMedia" xml:space="preserve">
<value>Media conversion</value> <value>Media conversion</value>
</data> </data>
<data name="MsgConvertingFile" xml:space="preserve"> <data name="MsgConvertingFile" xml:space="preserve">
<value>Converting file {0}</value> <value>Converting file {0}</value>
</data> </data>
<data name="TextMediaConvertError" xml:space="preserve"> <data name="TextMediaConvertError" xml:space="preserve">
<value>Multimedia conversion error</value> <value>Multimedia conversion error</value>
</data> </data>
<data name="LabelEncoding" xml:space="preserve"> <data name="LabelEncoding" xml:space="preserve">
<value>Encoding</value> <value>Encoding</value>
</data> </data>
<data name="TextConvertAudio" xml:space="preserve"> <data name="TextConvertAudio" xml:space="preserve">
<value>Convert audio to common format</value> <value>Convert audio to common format</value>
</data> </data>
<data name="TextExtractAudio" xml:space="preserve"> <data name="TextExtractAudio" xml:space="preserve">
<value>Extract audio</value> <value>Extract audio</value>
</data> </data>
<data name="TooltipAudioFormats" xml:space="preserve"> <data name="TooltipAudioFormats" xml:space="preserve">
<value>Either WAV, MP3 or OGG</value> <value>Either WAV, MP3 or OGG</value>
</data> </data>
<data name="TextAboutAudio" xml:space="preserve"> <data name="TextAboutAudio" xml:space="preserve">
<value>Audio</value> <value>Audio</value>
</data> </data>
<data name="TextAboutLicense" xml:space="preserve"> <data name="TextAboutLicense" xml:space="preserve">
<value>License</value> <value>License</value>
</data> </data>
<data name="MsgUnableInterpretAudio" xml:space="preserve"> <data name="MsgUnableInterpretAudio" xml:space="preserve">
<value>unable to interpret audio format</value> <value>unable to interpret audio format</value>
</data> </data>
<data name="MsgNoMediaFiles" xml:space="preserve"> <data name="MsgNoMediaFiles" xml:space="preserve">
<value>No media files selected.</value> <value>No media files selected.</value>
</data> </data>
<data name="TextAudioConversion" xml:space="preserve"> <data name="TextAudioConversion" xml:space="preserve">
<value>Audio will be converted to either WAV, MP3 or OGG.</value> <value>Audio will be converted to either WAV, MP3 or OGG.</value>
</data> </data>
<data name="LabelSkipFailures" xml:space="preserve"> <data name="LabelSkipFailures" xml:space="preserve">
<value>Skip incovertible files.</value> <value>Skip incovertible files.</value>
</data> </data>
<data name="MsgNoMatching" xml:space="preserve"> <data name="MsgNoMatching" xml:space="preserve">
<value>No entries matching "{0}"</value> <value>No entries matching "{0}"</value>
</data> </data>
<data name="MsgSelectedFiles1" xml:space="preserve"> <data name="MsgSelectedFiles1" xml:space="preserve">
<value>{0} file added to selection</value> <value>{0} file added to selection</value>
</data> </data>
<data name="MsgSelectedFiles2" xml:space="preserve"> <data name="MsgSelectedFiles2" xml:space="preserve">
<value>{0} files added to selection</value> <value>{0} files added to selection</value>
</data> </data>
<data name="LabelEnterMask" xml:space="preserve"> <data name="LabelEnterMask" xml:space="preserve">
<value>Enter wildcard mask</value> <value>Enter wildcard mask</value>
</data> </data>
<data name="TextSelectFiles" xml:space="preserve"> <data name="TextSelectFiles" xml:space="preserve">
<value>Select files</value> <value>Select files</value>
</data> </data>
<data name="TextErrorExtracting" xml:space="preserve"> <data name="TextErrorExtracting" xml:space="preserve">
<value>Error occured while extracting file <value>Error occured while extracting file
{0} {0}
{1}</value> {1}</value>
</data> </data>
<data name="CtxMenuFileType" xml:space="preserve"> <data name="CtxMenuFileType" xml:space="preserve">
<value>Assign file type</value> <value>Assign file type</value>
</data> </data>
<data name="Type_NONE" xml:space="preserve"> <data name="Type_NONE" xml:space="preserve">
<value>none</value> <value>none</value>
</data> </data>
</root> </root>

View File

@ -1,473 +1,473 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
The primary goals of this format is to allow a simple XML format The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes various data types are done through the TypeConverter classes
associated with the data types. associated with the data types.
Example: Example:
... ado.net/XML headers & schema ... ... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader> <resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader> <resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value> <value>[base64 mime encoded serialized .NET Framework object]</value>
</data> </data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment> <comment>This is a comment</comment>
</data> </data>
There are any number of "resheader" rows that contain simple There are any number of "resheader" rows that contain simple
name/value pairs. name/value pairs.
Each data row contains a name, and value. The row also contains a Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture. text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the Classes that don't support this are serialized and stored with the
mimetype set. mimetype set.
The mimetype is used for serialized objects, and tells the The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly: extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below. read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64 mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64 mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata"> <xsd:element name="metadata">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" /> <xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" /> <xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="assembly"> <xsd:element name="assembly">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="data"> <xsd:element name="data">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" /> <xsd:attribute ref="xml:space" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="resheader"> <xsd:element name="resheader">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" /> <xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:choice> </xsd:choice>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="ButtonCancel" xml:space="preserve"> <data name="ButtonCancel" xml:space="preserve">
<value>Отмена</value> <value>Отмена</value>
</data> </data>
<data name="ButtonExtract" xml:space="preserve"> <data name="ButtonExtract" xml:space="preserve">
<value>Извлечь</value> <value>Извлечь</value>
</data> </data>
<data name="CtxMenuClose" xml:space="preserve"> <data name="CtxMenuClose" xml:space="preserve">
<value>_Закрыть</value> <value>_Закрыть</value>
</data> </data>
<data name="CtxMenuCopy" xml:space="preserve"> <data name="CtxMenuCopy" xml:space="preserve">
<value>Копировать</value> <value>Копировать</value>
</data> </data>
<data name="CtxMenuCreate" xml:space="preserve"> <data name="CtxMenuCreate" xml:space="preserve">
<value>Создать архив...</value> <value>Создать архив...</value>
</data> </data>
<data name="CtxMenuCut" xml:space="preserve"> <data name="CtxMenuCut" xml:space="preserve">
<value>Вырезать</value> <value>Вырезать</value>
</data> </data>
<data name="CtxMenuDelete" xml:space="preserve"> <data name="CtxMenuDelete" xml:space="preserve">
<value>Удалить</value> <value>Удалить</value>
</data> </data>
<data name="CtxMenuExplorer" xml:space="preserve"> <data name="CtxMenuExplorer" xml:space="preserve">
<value>Просмотр в Explorer</value> <value>Просмотр в Explorer</value>
</data> </data>
<data name="CtxMenuExtract" xml:space="preserve"> <data name="CtxMenuExtract" xml:space="preserve">
<value>Извлечь</value> <value>Извлечь</value>
</data> </data>
<data name="CtxMenuOpen" xml:space="preserve"> <data name="CtxMenuOpen" xml:space="preserve">
<value>Открыть</value> <value>Открыть</value>
</data> </data>
<data name="CtxMenuPaste" xml:space="preserve"> <data name="CtxMenuPaste" xml:space="preserve">
<value>Вставить</value> <value>Вставить</value>
</data> </data>
<data name="CtxMenuRefresh" xml:space="preserve"> <data name="CtxMenuRefresh" xml:space="preserve">
<value>Обновить</value> <value>Обновить</value>
</data> </data>
<data name="CtxMenuRename" xml:space="preserve"> <data name="CtxMenuRename" xml:space="preserve">
<value>Переименовать</value> <value>Переименовать</value>
</data> </data>
<data name="CtxMenuSortBy" xml:space="preserve"> <data name="CtxMenuSortBy" xml:space="preserve">
<value>Сортировка</value> <value>Сортировка</value>
</data> </data>
<data name="CtxMenuSortByName" xml:space="preserve"> <data name="CtxMenuSortByName" xml:space="preserve">
<value>по имени</value> <value>по имени</value>
</data> </data>
<data name="CtxMenuSortBySize" xml:space="preserve"> <data name="CtxMenuSortBySize" xml:space="preserve">
<value>по размеру</value> <value>по размеру</value>
</data> </data>
<data name="CtxMenuSortByType" xml:space="preserve"> <data name="CtxMenuSortByType" xml:space="preserve">
<value>по типу</value> <value>по типу</value>
</data> </data>
<data name="CtxMenuUnsorted" xml:space="preserve"> <data name="CtxMenuUnsorted" xml:space="preserve">
<value>не сортировать</value> <value>не сортировать</value>
</data> </data>
<data name="HeaderName" xml:space="preserve"> <data name="HeaderName" xml:space="preserve">
<value>Имя</value> <value>Имя</value>
</data> </data>
<data name="HeaderSize" xml:space="preserve"> <data name="HeaderSize" xml:space="preserve">
<value>Размер</value> <value>Размер</value>
</data> </data>
<data name="HeaderType" xml:space="preserve"> <data name="HeaderType" xml:space="preserve">
<value>Тип</value> <value>Тип</value>
</data> </data>
<data name="LabelArchiveFormat" xml:space="preserve"> <data name="LabelArchiveFormat" xml:space="preserve">
<value>Формат архива</value> <value>Формат архива</value>
</data> </data>
<data name="LabelArchiveName" xml:space="preserve"> <data name="LabelArchiveName" xml:space="preserve">
<value>Имя архива</value> <value>Имя архива</value>
</data> </data>
<data name="LabelArchiveOptions" xml:space="preserve"> <data name="LabelArchiveOptions" xml:space="preserve">
<value>Настройки архивирования</value> <value>Настройки архивирования</value>
</data> </data>
<data name="LabelExtractAllTo" xml:space="preserve"> <data name="LabelExtractAllTo" xml:space="preserve">
<value>Извлечь файлы из {0} в</value> <value>Извлечь файлы из {0} в</value>
</data> </data>
<data name="LabelExtractFileTo" xml:space="preserve"> <data name="LabelExtractFileTo" xml:space="preserve">
<value>Извлечь {0} в</value> <value>Извлечь {0} в</value>
</data> </data>
<data name="MenuAbout" xml:space="preserve"> <data name="MenuAbout" xml:space="preserve">
<value>О программе</value> <value>О программе</value>
</data> </data>
<data name="MsgDeletedItem" xml:space="preserve"> <data name="MsgDeletedItem" xml:space="preserve">
<value>Удалён файл {0}</value> <value>Удалён файл {0}</value>
</data> </data>
<data name="MsgDirectoryNotFound" xml:space="preserve"> <data name="MsgDirectoryNotFound" xml:space="preserve">
<value>каталог не найден</value> <value>каталог не найден</value>
</data> </data>
<data name="MsgEmptyArchive" xml:space="preserve"> <data name="MsgEmptyArchive" xml:space="preserve">
<value>архив пуст</value> <value>архив пуст</value>
</data> </data>
<data name="MsgErrorExtracting" xml:space="preserve"> <data name="MsgErrorExtracting" xml:space="preserve">
<value>Ошибка извлечения файла</value> <value>Ошибка извлечения файла</value>
</data> </data>
<data name="MsgErrorOpening" xml:space="preserve"> <data name="MsgErrorOpening" xml:space="preserve">
<value>Ошибка открытия файла</value> <value>Ошибка открытия файла</value>
</data> </data>
<data name="MsgExtractComplete" xml:space="preserve"> <data name="MsgExtractComplete" xml:space="preserve">
<value>{0} извлечён в {1}</value> <value>{0} извлечён в {1}</value>
</data> </data>
<data name="MsgExtractingArchive" xml:space="preserve"> <data name="MsgExtractingArchive" xml:space="preserve">
<value>Извлекаются файлы из {0}</value> <value>Извлекаются файлы из {0}</value>
</data> </data>
<data name="MsgExtractingFile" xml:space="preserve"> <data name="MsgExtractingFile" xml:space="preserve">
<value>Файл извлекается из {0}</value> <value>Файл извлекается из {0}</value>
</data> </data>
<data name="MsgExtractingTo" xml:space="preserve"> <data name="MsgExtractingTo" xml:space="preserve">
<value>Извлекаются файлы из {0} в {1}</value> <value>Извлекаются файлы из {0} в {1}</value>
</data> </data>
<data name="MsgImageSize" xml:space="preserve"> <data name="MsgImageSize" xml:space="preserve">
<value>Изображение {0} x {1} x {2}bpp</value> <value>Изображение {0} x {1} x {2}bpp</value>
</data> </data>
<data name="MsgNoFiles" xml:space="preserve"> <data name="MsgNoFiles" xml:space="preserve">
<value>отсутствуют файлы, удовлетворяющие выбранным критериям</value> <value>отсутствуют файлы, удовлетворяющие выбранным критериям</value>
</data> </data>
<data name="MsgReady" xml:space="preserve"> <data name="MsgReady" xml:space="preserve">
<value>Готов</value> <value>Готов</value>
</data> </data>
<data name="MsgUnableInterpretImage" xml:space="preserve"> <data name="MsgUnableInterpretImage" xml:space="preserve">
<value>не удалось интерпретировать формат изображения</value> <value>не удалось интерпретировать формат изображения</value>
</data> </data>
<data name="MsgVersion" xml:space="preserve"> <data name="MsgVersion" xml:space="preserve">
<value>Версия {0}</value> <value>Версия {0}</value>
</data> </data>
<data name="TextAboutBuiltin" xml:space="preserve"> <data name="TextAboutBuiltin" xml:space="preserve">
<value>[встроен]</value> <value>[встроен]</value>
</data> </data>
<data name="TextAboutArchives" xml:space="preserve"> <data name="TextAboutArchives" xml:space="preserve">
<value>Архивы</value> <value>Архивы</value>
</data> </data>
<data name="TextAboutImages" xml:space="preserve"> <data name="TextAboutImages" xml:space="preserve">
<value>Изображения</value> <value>Изображения</value>
</data> </data>
<data name="TextAboutTitle" xml:space="preserve"> <data name="TextAboutTitle" xml:space="preserve">
<value>Об обозревателе игровых ресурсов</value> <value>Об обозревателе игровых ресурсов</value>
</data> </data>
<data name="TextAllFiles" xml:space="preserve"> <data name="TextAllFiles" xml:space="preserve">
<value>Все файлы</value> <value>Все файлы</value>
</data> </data>
<data name="TextAsIs" xml:space="preserve"> <data name="TextAsIs" xml:space="preserve">
<value>исходном</value> <value>исходном</value>
</data> </data>
<data name="TextChooseArchive" xml:space="preserve"> <data name="TextChooseArchive" xml:space="preserve">
<value>Выберите месторасположение архива</value> <value>Выберите месторасположение архива</value>
</data> </data>
<data name="TextChooseDestDir" xml:space="preserve"> <data name="TextChooseDestDir" xml:space="preserve">
<value>Выберите место извлечения</value> <value>Выберите место извлечения</value>
</data> </data>
<data name="TextCreateArchive" xml:space="preserve"> <data name="TextCreateArchive" xml:space="preserve">
<value>Создать архив</value> <value>Создать архив</value>
</data> </data>
<data name="TextCreateArchiveError" xml:space="preserve"> <data name="TextCreateArchiveError" xml:space="preserve">
<value>Ошибка при создании архива</value> <value>Ошибка при создании архива</value>
</data> </data>
<data name="TextEncoding" xml:space="preserve"> <data name="TextEncoding" xml:space="preserve">
<value>Кодировка текста</value> <value>Кодировка текста</value>
</data> </data>
<data name="TextExtractImages" xml:space="preserve"> <data name="TextExtractImages" xml:space="preserve">
<value>Извлекать изображения</value> <value>Извлекать изображения</value>
</data> </data>
<data name="TextExtractText" xml:space="preserve"> <data name="TextExtractText" xml:space="preserve">
<value>Извлекать текст</value> <value>Извлекать текст</value>
</data> </data>
<data name="TextExtractTitle" xml:space="preserve"> <data name="TextExtractTitle" xml:space="preserve">
<value>Извлечь из архива</value> <value>Извлечь из архива</value>
</data> </data>
<data name="TextOK" xml:space="preserve"> <data name="TextOK" xml:space="preserve">
<value>OK</value> <value>OK</value>
</data> </data>
<data name="TextParametersTitle" xml:space="preserve"> <data name="TextParametersTitle" xml:space="preserve">
<value>Параметры архива</value> <value>Параметры архива</value>
</data> </data>
<data name="TextSaveAs" xml:space="preserve"> <data name="TextSaveAs" xml:space="preserve">
<value>Сохранить в формате</value> <value>Сохранить в формате</value>
</data> </data>
<data name="TextSaveImagesAs" xml:space="preserve"> <data name="TextSaveImagesAs" xml:space="preserve">
<value>Сохранить в формате</value> <value>Сохранить в формате</value>
</data> </data>
<data name="TextTitle" xml:space="preserve"> <data name="TextTitle" xml:space="preserve">
<value>Обозреватель игровых ресурсов</value> <value>Обозреватель игровых ресурсов</value>
</data> </data>
<data name="TooltipBack" xml:space="preserve"> <data name="TooltipBack" xml:space="preserve">
<value>Назад</value> <value>Назад</value>
</data> </data>
<data name="TooltipForward" xml:space="preserve"> <data name="TooltipForward" xml:space="preserve">
<value>Вперёд</value> <value>Вперёд</value>
</data> </data>
<data name="MsgOverwrite" xml:space="preserve"> <data name="MsgOverwrite" xml:space="preserve">
<value>Файл под именем '{0}' <value>Файл под именем '{0}'
уже существует. уже существует.
Перезаписать?</value> Перезаписать?</value>
</data> </data>
<data name="TextConfirmOverwrite" xml:space="preserve"> <data name="TextConfirmOverwrite" xml:space="preserve">
<value>Подтвердите перезапись</value> <value>Подтвердите перезапись</value>
</data> </data>
<data name="MsgCreatingArchive" xml:space="preserve"> <data name="MsgCreatingArchive" xml:space="preserve">
<value>Создание архива {0}</value> <value>Создание архива {0}</value>
</data> </data>
<data name="Type_archive" xml:space="preserve"> <data name="Type_archive" xml:space="preserve">
<value>архив</value> <value>архив</value>
</data> </data>
<data name="Type_image" xml:space="preserve"> <data name="Type_image" xml:space="preserve">
<value>изображение</value> <value>изображение</value>
</data> </data>
<data name="Type_script" xml:space="preserve"> <data name="Type_script" xml:space="preserve">
<value>сценарий</value> <value>сценарий</value>
</data> </data>
<data name="MenuOpen" xml:space="preserve"> <data name="MenuOpen" xml:space="preserve">
<value>Открыть...</value> <value>Открыть...</value>
</data> </data>
<data name="MenuRecent" xml:space="preserve"> <data name="MenuRecent" xml:space="preserve">
<value>Недавние файлы</value> <value>Недавние файлы</value>
</data> </data>
<data name="MsgChooseFiles" xml:space="preserve"> <data name="MsgChooseFiles" xml:space="preserve">
<value>Выберите файлы для извлечения</value> <value>Выберите файлы для извлечения</value>
</data> </data>
<data name="MenuExit" xml:space="preserve"> <data name="MenuExit" xml:space="preserve">
<value>Выход</value> <value>Выход</value>
</data> </data>
<data name="MenuFile" xml:space="preserve"> <data name="MenuFile" xml:space="preserve">
<value>_Файл</value> <value>_Файл</value>
</data> </data>
<data name="MenuHelp" xml:space="preserve"> <data name="MenuHelp" xml:space="preserve">
<value>_Справка</value> <value>_Справка</value>
</data> </data>
<data name="MsgExtractedFiles1" xml:space="preserve"> <data name="MsgExtractedFiles1" xml:space="preserve">
<value>Извлечён {0} файл</value> <value>Извлечён {0} файл</value>
</data> </data>
<data name="MsgExtractedFiles2" xml:space="preserve"> <data name="MsgExtractedFiles2" xml:space="preserve">
<value>Извлечено {0} файла</value> <value>Извлечено {0} файла</value>
</data> </data>
<data name="MsgExtractedFiles3" xml:space="preserve"> <data name="MsgExtractedFiles3" xml:space="preserve">
<value>Извлечено {0} файлов</value> <value>Извлечено {0} файлов</value>
</data> </data>
<data name="MsgFiles1" xml:space="preserve"> <data name="MsgFiles1" xml:space="preserve">
<value>{0} файл</value> <value>{0} файл</value>
</data> </data>
<data name="MsgFiles2" xml:space="preserve"> <data name="MsgFiles2" xml:space="preserve">
<value>{0} файла</value> <value>{0} файла</value>
</data> </data>
<data name="MsgFiles3" xml:space="preserve"> <data name="MsgFiles3" xml:space="preserve">
<value>{0} файлов</value> <value>{0} файлов</value>
</data> </data>
<data name="MsgConfirmDeleteFiles" xml:space="preserve"> <data name="MsgConfirmDeleteFiles" xml:space="preserve">
<value>Вы действительно хотите удалить эти файлы?</value> <value>Вы действительно хотите удалить эти файлы?</value>
</data> </data>
<data name="TextDeleteFiles" xml:space="preserve"> <data name="TextDeleteFiles" xml:space="preserve">
<value>Удалить файлы</value> <value>Удалить файлы</value>
</data> </data>
<data name="MsgDeletedItems1" xml:space="preserve"> <data name="MsgDeletedItems1" xml:space="preserve">
<value>Удалён {0} файл</value> <value>Удалён {0} файл</value>
</data> </data>
<data name="MsgDeletedItems2" xml:space="preserve"> <data name="MsgDeletedItems2" xml:space="preserve">
<value>Удалено {0} файла</value> <value>Удалено {0} файла</value>
</data> </data>
<data name="MsgDeletedItems3" xml:space="preserve"> <data name="MsgDeletedItems3" xml:space="preserve">
<value>Удалено {0} файлов</value> <value>Удалено {0} файлов</value>
</data> </data>
<data name="MenuFitWindow" xml:space="preserve"> <data name="MenuFitWindow" xml:space="preserve">
<value>Подогнать размер окна под изображение</value> <value>Подогнать размер окна под изображение</value>
</data> </data>
<data name="MenuToggleMenuBar" xml:space="preserve"> <data name="MenuToggleMenuBar" xml:space="preserve">
<value>Вкл/выкл главное меню</value> <value>Вкл/выкл главное меню</value>
</data> </data>
<data name="MenuToggleStatusBar" xml:space="preserve"> <data name="MenuToggleStatusBar" xml:space="preserve">
<value>Вкл/выкл полосу статуса</value> <value>Вкл/выкл полосу статуса</value>
</data> </data>
<data name="MenuToggleToolBar" xml:space="preserve"> <data name="MenuToggleToolBar" xml:space="preserve">
<value>Вкл/выкл панель инструментов</value> <value>Вкл/выкл панель инструментов</value>
</data> </data>
<data name="MenuView" xml:space="preserve"> <data name="MenuView" xml:space="preserve">
<value>Просмотр</value> <value>Просмотр</value>
</data> </data>
<data name="CtxMenuConvert" xml:space="preserve"> <data name="CtxMenuConvert" xml:space="preserve">
<value>Конверсия мультимедиа...</value> <value>Конверсия мультимедиа...</value>
</data> </data>
<data name="ButtonConvert" xml:space="preserve"> <data name="ButtonConvert" xml:space="preserve">
<value>Преобразовать</value> <value>Преобразовать</value>
</data> </data>
<data name="LabelDestinationFormat" xml:space="preserve"> <data name="LabelDestinationFormat" xml:space="preserve">
<value>Формат преобразования изображений</value> <value>Формат преобразования изображений</value>
</data> </data>
<data name="TextConvertMedia" xml:space="preserve"> <data name="TextConvertMedia" xml:space="preserve">
<value>Преобразование мультимедиа</value> <value>Преобразование мультимедиа</value>
</data> </data>
<data name="MsgConvertingFile" xml:space="preserve"> <data name="MsgConvertingFile" xml:space="preserve">
<value>Преобразование файла {0}</value> <value>Преобразование файла {0}</value>
</data> </data>
<data name="TextMediaConvertError" xml:space="preserve"> <data name="TextMediaConvertError" xml:space="preserve">
<value>Ошибка конверсии мультимедиа</value> <value>Ошибка конверсии мультимедиа</value>
</data> </data>
<data name="LabelEncoding" xml:space="preserve"> <data name="LabelEncoding" xml:space="preserve">
<value>Кодировка</value> <value>Кодировка</value>
</data> </data>
<data name="TextConvertAudio" xml:space="preserve"> <data name="TextConvertAudio" xml:space="preserve">
<value>Преобразовывать аудио в стандартный формат</value> <value>Преобразовывать аудио в стандартный формат</value>
</data> </data>
<data name="TextExtractAudio" xml:space="preserve"> <data name="TextExtractAudio" xml:space="preserve">
<value>Извлекать аудио</value> <value>Извлекать аудио</value>
</data> </data>
<data name="TooltipAudioFormats" xml:space="preserve"> <data name="TooltipAudioFormats" xml:space="preserve">
<value>WAV, MP3, либо OGG</value> <value>WAV, MP3, либо OGG</value>
</data> </data>
<data name="TextAboutAudio" xml:space="preserve"> <data name="TextAboutAudio" xml:space="preserve">
<value>Аудио</value> <value>Аудио</value>
</data> </data>
<data name="TextAboutLicense" xml:space="preserve"> <data name="TextAboutLicense" xml:space="preserve">
<value>Лицензия</value> <value>Лицензия</value>
</data> </data>
<data name="Type_audio" xml:space="preserve"> <data name="Type_audio" xml:space="preserve">
<value>звук</value> <value>звук</value>
</data> </data>
<data name="MsgUnableInterpretAudio" xml:space="preserve"> <data name="MsgUnableInterpretAudio" xml:space="preserve">
<value>не удалось интерпретировать формат аудио</value> <value>не удалось интерпретировать формат аудио</value>
</data> </data>
<data name="LabelSkipFailures" xml:space="preserve"> <data name="LabelSkipFailures" xml:space="preserve">
<value>Пропускать файлы, не поддавшиеся конверсии.</value> <value>Пропускать файлы, не поддавшиеся конверсии.</value>
</data> </data>
<data name="MsgNoMediaFiles" xml:space="preserve"> <data name="MsgNoMediaFiles" xml:space="preserve">
<value>Среди выбранных файлов нет мультимедиа.</value> <value>Среди выбранных файлов нет мультимедиа.</value>
</data> </data>
<data name="TextAudioConversion" xml:space="preserve"> <data name="TextAudioConversion" xml:space="preserve">
<value>Аудио-файлы будут преобразованы в WAV, MP3 или OGG.</value> <value>Аудио-файлы будут преобразованы в WAV, MP3 или OGG.</value>
</data> </data>
<data name="MsgNoMatching" xml:space="preserve"> <data name="MsgNoMatching" xml:space="preserve">
<value>Нет файлов, подходящих под маску "{0}"</value> <value>Нет файлов, подходящих под маску "{0}"</value>
</data> </data>
<data name="MsgSelectedFiles1" xml:space="preserve"> <data name="MsgSelectedFiles1" xml:space="preserve">
<value>{0} файл добавлен к выбранным</value> <value>{0} файл добавлен к выбранным</value>
</data> </data>
<data name="MsgSelectedFiles2" xml:space="preserve"> <data name="MsgSelectedFiles2" xml:space="preserve">
<value>{0} файла добавлено к выбранным</value> <value>{0} файла добавлено к выбранным</value>
</data> </data>
<data name="MsgSelectedFiles3" xml:space="preserve"> <data name="MsgSelectedFiles3" xml:space="preserve">
<value>{0} файлов добавлено к выбранным</value> <value>{0} файлов добавлено к выбранным</value>
</data> </data>
<data name="LabelEnterMask" xml:space="preserve"> <data name="LabelEnterMask" xml:space="preserve">
<value>Маска для имён файлов</value> <value>Маска для имён файлов</value>
</data> </data>
<data name="TextSelectFiles" xml:space="preserve"> <data name="TextSelectFiles" xml:space="preserve">
<value>Выбрать файлы</value> <value>Выбрать файлы</value>
</data> </data>
<data name="TextErrorExtracting" xml:space="preserve"> <data name="TextErrorExtracting" xml:space="preserve">
<value>Произошёл сбой во время извлечения файла <value>Произошёл сбой во время извлечения файла
{0} {0}
{1}</value> {1}</value>
</data> </data>
<data name="CtxMenuFileType" xml:space="preserve"> <data name="CtxMenuFileType" xml:space="preserve">
<value>Задать тип файла</value> <value>Задать тип файла</value>
</data> </data>
<data name="Type_NONE" xml:space="preserve"> <data name="Type_NONE" xml:space="preserve">
<value>без типа</value> <value>без типа</value>
</data> </data>
</root> </root>

View File

@ -1,151 +1,151 @@
//! \file Utility.cs //! \file Utility.cs
//! \date Sun Jul 06 07:40:34 2014 //! \date Sun Jul 06 07:40:34 2014
//! \brief utility classes. //! \brief utility classes.
// //
// Copyright (C) 2014 by morkt // Copyright (C) 2014 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows.Input; using System.Windows.Input;
using GARbro.GUI.Strings; using GARbro.GUI.Strings;
namespace GARbro.GUI namespace GARbro.GUI
{ {
internal class NativeMethods internal class NativeMethods
{ {
[DllImport ("shlwapi.dll", CharSet = CharSet.Unicode)] [DllImport ("shlwapi.dll", CharSet = CharSet.Unicode)]
internal static extern int StrCmpLogicalW (string psz1, string psz2); internal static extern int StrCmpLogicalW (string psz1, string psz2);
[DllImport ("gdi32.dll")] [DllImport ("gdi32.dll")]
internal static extern int GetDeviceCaps (IntPtr hDc, int nIndex); internal static extern int GetDeviceCaps (IntPtr hDc, int nIndex);
[DllImport ("user32.dll")] [DllImport ("user32.dll")]
internal static extern IntPtr GetDC (IntPtr hWnd); internal static extern IntPtr GetDC (IntPtr hWnd);
[DllImport ("user32.dll")] [DllImport ("user32.dll")]
internal static extern int ReleaseDC (IntPtr hWnd, IntPtr hDc); internal static extern int ReleaseDC (IntPtr hWnd, IntPtr hDc);
} }
public static class Desktop public static class Desktop
{ {
public static int DpiX { get { return dpi_x; } } public static int DpiX { get { return dpi_x; } }
public static int DpiY { get { return dpi_y; } } public static int DpiY { get { return dpi_y; } }
public const int LOGPIXELSX = 88; public const int LOGPIXELSX = 88;
public const int LOGPIXELSY = 90; public const int LOGPIXELSY = 90;
private static int dpi_x = GetCaps (LOGPIXELSX); private static int dpi_x = GetCaps (LOGPIXELSX);
private static int dpi_y = GetCaps (LOGPIXELSY); private static int dpi_y = GetCaps (LOGPIXELSY);
public static int GetCaps (int cap) public static int GetCaps (int cap)
{ {
IntPtr hdc = NativeMethods.GetDC (IntPtr.Zero); IntPtr hdc = NativeMethods.GetDC (IntPtr.Zero);
if (hdc == IntPtr.Zero) if (hdc == IntPtr.Zero)
return 96; return 96;
int dpi = NativeMethods.GetDeviceCaps (hdc, cap); int dpi = NativeMethods.GetDeviceCaps (hdc, cap);
NativeMethods.ReleaseDC (IntPtr.Zero, hdc); NativeMethods.ReleaseDC (IntPtr.Zero, hdc);
return dpi; return dpi;
} }
} }
public sealed class NumericStringComparer : IComparer<string> public sealed class NumericStringComparer : IComparer<string>
{ {
public int Compare (string a, string b) public int Compare (string a, string b)
{ {
return NativeMethods.StrCmpLogicalW (a, b); return NativeMethods.StrCmpLogicalW (a, b);
} }
} }
public class WaitCursor : IDisposable public class WaitCursor : IDisposable
{ {
private Cursor m_previousCursor; private Cursor m_previousCursor;
public WaitCursor() public WaitCursor()
{ {
m_previousCursor = Mouse.OverrideCursor; m_previousCursor = Mouse.OverrideCursor;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.Wait;
} }
#region IDisposable Members #region IDisposable Members
bool disposed = false; bool disposed = false;
public void Dispose() public void Dispose()
{ {
Dispose (true); Dispose (true);
GC.SuppressFinalize (this); GC.SuppressFinalize (this);
} }
protected virtual void Dispose (bool disposing) protected virtual void Dispose (bool disposing)
{ {
if (!disposed) if (!disposed)
{ {
Mouse.OverrideCursor = m_previousCursor; Mouse.OverrideCursor = m_previousCursor;
disposed = true; disposed = true;
} }
} }
#endregion #endregion
} }
public static class Localization public static class Localization
{ {
public static string Plural (int n, string msg_id) public static string Plural (int n, string msg_id)
{ {
string suffix; string suffix;
if (CultureInfo.CurrentUICulture.Name == "ru-RU") if (CultureInfo.CurrentUICulture.Name == "ru-RU")
{ {
suffix = (n%10==1 && n%100!=11 ? "1" : n%10>=2 && n% 10<=4 && (n%100<10 || n%100>=20) ? "2" : "3"); suffix = (n%10==1 && n%100!=11 ? "1" : n%10>=2 && n% 10<=4 && (n%100<10 || n%100>=20) ? "2" : "3");
} }
else // assume en-EN else // assume en-EN
{ {
suffix = 1 == n ? "1" : "2"; suffix = 1 == n ? "1" : "2";
} }
try try
{ {
var res = guiStrings.ResourceManager.GetString (msg_id+suffix); var res = guiStrings.ResourceManager.GetString (msg_id+suffix);
if (null == res) if (null == res)
{ {
Trace.WriteLine (string.Format ("Missing string resource for '{0}' token", msg_id+suffix)); Trace.WriteLine (string.Format ("Missing string resource for '{0}' token", msg_id+suffix));
if (suffix != "1") if (suffix != "1")
res = guiStrings.ResourceManager.GetString (msg_id+"1"); res = guiStrings.ResourceManager.GetString (msg_id+"1");
if (null == res) if (null == res)
res = guiStrings.ResourceManager.GetString (msg_id); res = guiStrings.ResourceManager.GetString (msg_id);
} }
return res ?? msg_id; return res ?? msg_id;
} }
catch (Exception X) catch (Exception X)
{ {
Trace.WriteLine (X.Message, "Localization.Plural"); Trace.WriteLine (X.Message, "Localization.Plural");
return msg_id; return msg_id;
} }
} }
public static string Format (string msg_id, int n) public static string Format (string msg_id, int n)
{ {
return string.Format (Plural (n, msg_id), n); return string.Format (Plural (n, msg_id), n);
} }
// Localization.Format ("{0:file:files} copied", count); // Localization.Format ("{0:file:files} copied", count);
// public static string Format (string format, params object[] args); // public static string Format (string format, params object[] args);
} }
} }

View File

@ -1,230 +1,230 @@
//! \file ViewModel.cs //! \file ViewModel.cs
//! \date Wed Jul 02 07:29:11 2014 //! \date Wed Jul 02 07:29:11 2014
//! \brief GARbro directory list. //! \brief GARbro directory list.
// //
// Copyright (C) 2014 by morkt // Copyright (C) 2014 by morkt
// //
// Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the // deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is // sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions: // furnished to do so, subject to the following conditions:
// //
// The above copyright notice and this permission notice shall be included in // The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software. // all copies or substantial portions of the Software.
// //
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.ComponentModel; using System.ComponentModel;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Globalization; using System.Globalization;
using System.Windows.Data; using System.Windows.Data;
using GameRes; using GameRes;
using GARbro.GUI.Strings; using GARbro.GUI.Strings;
namespace GARbro.GUI namespace GARbro.GUI
{ {
public class DirectoryViewModel : ObservableCollection<EntryViewModel> public class DirectoryViewModel : ObservableCollection<EntryViewModel>
{ {
public IReadOnlyList<string> Path { get; private set; } public IReadOnlyList<string> Path { get; private set; }
public IEnumerable<Entry> Source { get; private set; } public IEnumerable<Entry> Source { get; private set; }
public bool IsArchive { get; private set; } public bool IsArchive { get; private set; }
public DirectoryViewModel (IEnumerable<string> path, IEnumerable<Entry> filelist, bool is_archive) public DirectoryViewModel (IEnumerable<string> path, IEnumerable<Entry> filelist, bool is_archive)
{ {
Path = path.ToList(); Path = path.ToList();
Source = filelist; Source = filelist;
IsArchive = is_archive; IsArchive = is_archive;
ImportFromSource(); ImportFromSource();
} }
protected void ImportFromSource () protected void ImportFromSource ()
{ {
var last_dir = Path.Last(); var last_dir = Path.Last();
if (IsArchive || !string.IsNullOrEmpty (last_dir) && null != Directory.GetParent (last_dir)) if (IsArchive || !string.IsNullOrEmpty (last_dir) && null != Directory.GetParent (last_dir))
{ {
Add (new EntryViewModel (new SubDirEntry (".."), -2)); Add (new EntryViewModel (new SubDirEntry (".."), -2));
} }
foreach (var entry in Source) foreach (var entry in Source)
{ {
int prio = entry is SubDirEntry ? -1 : 0; int prio = entry is SubDirEntry ? -1 : 0;
Add (new EntryViewModel (entry, prio)); Add (new EntryViewModel (entry, prio));
} }
} }
public EntryViewModel Find (string name) public EntryViewModel Find (string name)
{ {
return this.FirstOrDefault (e => e.Name.Equals (name, StringComparison.InvariantCultureIgnoreCase)); return this.FirstOrDefault (e => e.Name.Equals (name, StringComparison.InvariantCultureIgnoreCase));
} }
} }
public class EntryViewModel : INotifyPropertyChanged public class EntryViewModel : INotifyPropertyChanged
{ {
public EntryViewModel (Entry entry, int priority) public EntryViewModel (Entry entry, int priority)
{ {
Source = entry; Source = entry;
Name = Path.GetFileName (entry.Name); Name = Path.GetFileName (entry.Name);
Priority = priority; Priority = priority;
} }
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
public Entry Source { get; private set; } public Entry Source { get; private set; }
public string Name { get; private set; } public string Name { get; private set; }
public string Type public string Type
{ {
get { return Source.Type; } get { return Source.Type; }
set set
{ {
if (Source.Type != value) if (Source.Type != value)
{ {
Source.Type = value; Source.Type = value;
OnPropertyChanged ("Type"); OnPropertyChanged ("Type");
} }
} }
} }
public uint? Size { get { return IsDirectory ? null : (uint?)Source.Size; } } public uint? Size { get { return IsDirectory ? null : (uint?)Source.Size; } }
public int Priority { get; private set; } public int Priority { get; private set; }
public bool IsDirectory { get { return Priority < 0; } } public bool IsDirectory { get { return Priority < 0; } }
private void OnPropertyChanged (string property = "") private void OnPropertyChanged (string property = "")
{ {
if (PropertyChanged != null) if (PropertyChanged != null)
{ {
PropertyChanged (this, new PropertyChangedEventArgs (property)); PropertyChanged (this, new PropertyChangedEventArgs (property));
} }
} }
} }
public sealed class FileSystemComparer : IComparer public sealed class FileSystemComparer : IComparer
{ {
private string m_property; private string m_property;
private int m_direction; private int m_direction;
private static Comparer s_default_comparer = new Comparer (CultureInfo.CurrentUICulture); private static Comparer s_default_comparer = new Comparer (CultureInfo.CurrentUICulture);
public FileSystemComparer (string property, ListSortDirection direction) public FileSystemComparer (string property, ListSortDirection direction)
{ {
m_property = property; m_property = property;
m_direction = direction == ListSortDirection.Ascending ? 1 : -1; m_direction = direction == ListSortDirection.Ascending ? 1 : -1;
} }
public int Compare (object a, object b) public int Compare (object a, object b)
{ {
var v_a = a as EntryViewModel; var v_a = a as EntryViewModel;
var v_b = b as EntryViewModel; var v_b = b as EntryViewModel;
if (null == v_a || null == v_b) if (null == v_a || null == v_b)
return s_default_comparer.Compare (a, b) * m_direction; return s_default_comparer.Compare (a, b) * m_direction;
if (v_a.Priority < v_b.Priority) if (v_a.Priority < v_b.Priority)
return -1; return -1;
if (v_a.Priority > v_b.Priority) if (v_a.Priority > v_b.Priority)
return 1; return 1;
if (string.IsNullOrEmpty (m_property)) if (string.IsNullOrEmpty (m_property))
return 0; return 0;
int order; int order;
if (m_property != "Name") if (m_property != "Name")
{ {
if ("Type" == m_property) if ("Type" == m_property)
{ {
// empty strings placed in the end // empty strings placed in the end
if (string.IsNullOrEmpty (v_a.Type)) if (string.IsNullOrEmpty (v_a.Type))
order = string.IsNullOrEmpty (v_b.Type) ? 0 : m_direction; order = string.IsNullOrEmpty (v_b.Type) ? 0 : m_direction;
else if (string.IsNullOrEmpty (v_b.Type)) else if (string.IsNullOrEmpty (v_b.Type))
order = -m_direction; order = -m_direction;
else else
order = string.Compare (v_a.Type, v_b.Type, true) * m_direction; order = string.Compare (v_a.Type, v_b.Type, true) * m_direction;
} }
else else
{ {
var prop_a = a.GetType ().GetProperty (m_property).GetValue (a); var prop_a = a.GetType ().GetProperty (m_property).GetValue (a);
var prop_b = b.GetType ().GetProperty (m_property).GetValue (b); var prop_b = b.GetType ().GetProperty (m_property).GetValue (b);
order = s_default_comparer.Compare (prop_a, prop_b) * m_direction; order = s_default_comparer.Compare (prop_a, prop_b) * m_direction;
} }
if (0 == order) if (0 == order)
order = CompareNames (v_a.Name, v_b.Name); order = CompareNames (v_a.Name, v_b.Name);
} }
else else
order = CompareNames (v_a.Name, v_b.Name) * m_direction; order = CompareNames (v_a.Name, v_b.Name) * m_direction;
return order; return order;
} }
static int CompareNames (string a, string b) static int CompareNames (string a, string b)
{ {
// return NativeMethods.StrCmpLogicalW (a, b); // return NativeMethods.StrCmpLogicalW (a, b);
return string.Compare (a, b, StringComparison.CurrentCultureIgnoreCase); return string.Compare (a, b, StringComparison.CurrentCultureIgnoreCase);
} }
} }
/// <summary> /// <summary>
/// Image format model for formats drop-down list widgets. /// Image format model for formats drop-down list widgets.
/// </summary> /// </summary>
public class ImageFormatModel public class ImageFormatModel
{ {
public ImageFormat Source { get; private set; } public ImageFormat Source { get; private set; }
public string Tag { public string Tag {
get { return null != Source ? Source.Tag : guiStrings.TextAsIs; } get { return null != Source ? Source.Tag : guiStrings.TextAsIs; }
} }
public ImageFormatModel (ImageFormat impl = null) public ImageFormatModel (ImageFormat impl = null)
{ {
Source = impl; Source = impl;
} }
} }
/// <summary> /// <summary>
/// Stores current position within directory view model. /// Stores current position within directory view model.
/// </summary> /// </summary>
public class DirectoryPosition public class DirectoryPosition
{ {
public IEnumerable<string> Path { get; set; } public IEnumerable<string> Path { get; set; }
public string Item { get; set; } public string Item { get; set; }
public DirectoryPosition (DirectoryViewModel vm, EntryViewModel item) public DirectoryPosition (DirectoryViewModel vm, EntryViewModel item)
{ {
Path = vm.Path; Path = vm.Path;
Item = null != item ? item.Name : null; Item = null != item ? item.Name : null;
} }
public DirectoryPosition (string filename) public DirectoryPosition (string filename)
{ {
Path = new string[] { System.IO.Path.GetDirectoryName (filename) }; Path = new string[] { System.IO.Path.GetDirectoryName (filename) };
Item = System.IO.Path.GetFileName (filename); Item = System.IO.Path.GetFileName (filename);
} }
} }
public class EntryTypeConverter : IValueConverter public class EntryTypeConverter : IValueConverter
{ {
public object Convert (object value, Type targetType, object parameter, CultureInfo culture) public object Convert (object value, Type targetType, object parameter, CultureInfo culture)
{ {
var type = value as string; var type = value as string;
if (!string.IsNullOrEmpty (type)) if (!string.IsNullOrEmpty (type))
{ {
var translation = guiStrings.ResourceManager.GetString ("Type_"+type, guiStrings.Culture); var translation = guiStrings.ResourceManager.GetString ("Type_"+type, guiStrings.Culture);
if (!string.IsNullOrEmpty (translation)) if (!string.IsNullOrEmpty (translation))
return translation; return translation;
} }
return value; return value;
} }
public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture) public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
} }
} }

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="NAudio" version="1.7.3" targetFramework="net45" /> <package id="NAudio" version="1.7.3" targetFramework="net45" />
<package id="Ookii.Dialogs" version="1.0" targetFramework="net45" /> <package id="Ookii.Dialogs" version="1.0" targetFramework="net45" />
<package id="WindowsAPICodePack-Core" version="1.1.1" targetFramework="net45" /> <package id="WindowsAPICodePack-Core" version="1.1.1" targetFramework="net45" />
<package id="WindowsAPICodePack-Shell" version="1.1.1" targetFramework="net45" /> <package id="WindowsAPICodePack-Shell" version="1.1.1" targetFramework="net45" />
<package id="WPFToolkit" version="3.5.50211.1" targetFramework="net45" /> <package id="WPFToolkit" version="3.5.50211.1" targetFramework="net45" />
</packages> </packages>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<repositories>
<repository path="..\ArcFormats\packages.config" />
<repository path="..\GameRes\packages.config" />
<repository path="..\packages.config" />
</repositories>