choose destination directory for files conversion.

This commit is contained in:
morkt 2016-04-19 12:33:36 +04:00
parent e098a498ee
commit 5641c8b6ba
8 changed files with 93 additions and 7 deletions

View File

@ -4,6 +4,7 @@
xmlns:s="clr-namespace:GARbro.GUI.Strings"
xmlns:p="clr-namespace:GARbro.GUI.Properties"
xmlns:g="clr-namespace:GameRes;assembly=GameRes"
xmlns:local="clr-namespace:GARbro.GUI"
Title="{x:Static s:guiStrings.TextConvertMedia}" ShowInTaskbar="False" WindowStartupLocation="CenterOwner"
ResizeMode="NoResize" SizeToContent="WidthAndHeight"
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
@ -15,6 +16,18 @@
SelectedValue="{Binding Source={x:Static p:Settings.Default}, Path=appLastImageFormat, Mode=TwoWay}"/>
</StackPanel>
<TextBlock Text="{x:Static s:guiStrings.TextAudioConversion}" Margin="20,10,20,0"/>
<TextBlock x:Name="DestinationLabel" Text="{x:Static s:guiStrings.LabelDestinationDir}" Margin="20,10,20,10" VerticalAlignment="Top"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="350"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<local:ExtAutoCompleteBox x:Name="DestinationDir" Margin="20,0,0,0" VerticalAlignment="Bottom" Grid.Row="0" Grid.Column="0" Height="23"/>
<Button Margin="10,0,20,0" VerticalAlignment="Bottom" HorizontalAlignment="Right" Grid.Row="0" Grid.Column="1"
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"/>
</Button>
</Grid>
<CheckBox Name="IgnoreErrors" Content="{x:Static s:guiStrings.LabelSkipFailures}" Margin="20,10"
IsChecked="{Binding Source={x:Static p:Settings.Default}, Path=appIgnoreConversionErrors, Mode=TwoWay}"/>
<Separator/>
@ -23,4 +36,7 @@
<Button Content="{x:Static s:guiStrings.ButtonCancel}" Margin="10" IsCancel="True" Width="75" Height="25"/>
</StackPanel>
</StackPanel>
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:Commands.Browse}" Executed="BrowseExec" CanExecute="CanExecuteAlways"/>
</Window.CommandBindings>
</Window>

View File

@ -1,4 +1,7 @@
using System.Windows;
using System.Windows.Input;
using GARbro.GUI.Strings;
using Microsoft.WindowsAPICodePack.Dialogs;
namespace GARbro.GUI
{
@ -12,6 +15,32 @@ namespace GARbro.GUI
InitializeComponent ();
}
private void BrowseExec (object sender, ExecutedRoutedEventArgs e)
{
var dlg = new CommonOpenFileDialog
{
Title = guiStrings.TextChooseDestDir,
IsFolderPicker = true,
InitialDirectory = DestinationDir.Text,
AddToMostRecentlyUsedList = false,
AllowNonFileSystemItems = false,
EnsureFileExists = true,
EnsurePathExists = true,
EnsureReadOnly = false,
EnsureValidNames = true,
Multiselect = false,
ShowPlacesList = true,
};
if (dlg.ShowDialog (this) == CommonFileDialogResult.Ok)
DestinationDir.Text = dlg.FileName;
}
public void CanExecuteAlways (object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void ConvertButton_Click (object sender, RoutedEventArgs e)
{
this.DialogResult = true;

View File

@ -2,7 +2,7 @@
//! \date Fri Aug 22 08:22:47 2014
//! \brief Game resources conversion methods.
//
// Copyright (C) 2014-2015 by morkt
// Copyright (C) 2014-2016 by morkt
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
@ -56,6 +56,14 @@ namespace GARbro.GUI
return;
}
var convert_dialog = new ConvertMedia();
string destination = ViewModel.Path.First();
if (ViewModel.IsArchive)
destination = Path.GetDirectoryName (destination);
if (!IsWritableDirectory (destination) && Directory.Exists (Settings.Default.appLastDestination))
destination = Settings.Default.appLastDestination;
convert_dialog.DestinationDir.Text = destination;
convert_dialog.Owner = this;
var result = convert_dialog.ShowDialog() ?? false;
if (!result)
@ -68,16 +76,24 @@ namespace GARbro.GUI
}
try
{
Directory.SetCurrentDirectory (ViewModel.Path.First());
destination = convert_dialog.DestinationDir.Text;
Directory.SetCurrentDirectory (destination);
var converter = new GarConvertMedia (this);
converter.IgnoreErrors = convert_dialog.IgnoreErrors.IsChecked ?? false;
converter.Convert (source, format);
Settings.Default.appLastDestination = destination;
}
catch (Exception X)
{
PopupError (X.Message, guiStrings.TextMediaConvertError);
}
}
bool IsWritableDirectory (string path)
{
var info = new DirectoryInfo (path);
return !info.Attributes.HasFlag (FileAttributes.ReadOnly);
}
}
internal class GarConvertMedia
@ -165,13 +181,14 @@ namespace GARbro.GUI
{
if (null == input)
return;
string output_name = Path.GetFileName (filename);
var source_ext = Path.GetExtension (filename).TrimStart ('.').ToLowerInvariant();
string source_format = input.SourceFormat;
if (CommonAudioFormats.Contains (source_format))
{
if (source_ext == source_format)
return;
string output_name = Path.ChangeExtension (filename, source_format);
output_name = Path.ChangeExtension (output_name, source_format);
using (var output = CreateNewFile (output_name))
{
input.Source.Position = 0;
@ -182,7 +199,7 @@ namespace GARbro.GUI
{
if (source_ext == "wav")
return;
string output_name = Path.ChangeExtension (filename, "wav");
output_name = Path.ChangeExtension (output_name, "wav");
using (var output = CreateNewFile (output_name))
AudioFormat.Wav.Write (input, output);
}
@ -194,8 +211,9 @@ namespace GARbro.GUI
string source_ext = Path.GetExtension (filename).TrimStart ('.').ToLowerInvariant();
if (m_image_format.Extensions.Any (ext => ext == source_ext))
return;
string target_name = Path.GetFileName (filename);
string target_ext = m_image_format.Extensions.FirstOrDefault();
string target_name = Path.ChangeExtension (filename, target_ext);
target_name = Path.ChangeExtension (target_name, target_ext);
using (var file = File.OpenRead (filename))
{
var image = ImageFormat.Read (filename, file);

View File

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34209
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -312,6 +312,15 @@ namespace GARbro.GUI.Strings {
}
}
/// <summary>
/// Looks up a localized string similar to Destination directory.
/// </summary>
public static string LabelDestinationDir {
get {
return ResourceManager.GetString("LabelDestinationDir", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Choose destination format for images.
/// </summary>

View File

@ -448,4 +448,8 @@
<data name="Type_NONE" xml:space="preserve">
<value>없음</value>
</data>
</root>
<data name="LabelDestinationDir" xml:space="preserve">
<value>Destination directory</value>
<comment>translation pending</comment>
</data>
</root>

View File

@ -449,4 +449,7 @@ Overwrite?</value>
<data name="Type_NONE" xml:space="preserve">
<value>none</value>
</data>
<data name="LabelDestinationDir" xml:space="preserve">
<value>Destination directory</value>
</data>
</root>

View File

@ -470,4 +470,7 @@
<data name="Type_NONE" xml:space="preserve">
<value>без типа</value>
</data>
<data name="LabelDestinationDir" xml:space="preserve">
<value>Сохранить результаты в</value>
</data>
</root>

View File

@ -449,4 +449,8 @@
<data name="Type_NONE" xml:space="preserve">
<value>无</value>
</data>
<data name="LabelDestinationDir" xml:space="preserve">
<value>Destination directory</value>
<comment>translation pending</comment>
</data>
</root>