mirror of https://github.com/naudio/NAudio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
7.5 KiB
229 lines
7.5 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.IO;
|
|
using System.ComponentModel.Composition;
|
|
|
|
namespace AudioFileInspector
|
|
{
|
|
[Export(typeof(AudioFileInspectorForm))]
|
|
public partial class AudioFileInspectorForm : Form
|
|
{
|
|
|
|
public ICollection<IAudioFileInspector> Inspectors { get; private set; }
|
|
string filterString;
|
|
int filterIndex;
|
|
string currentFile;
|
|
FindForm findForm;
|
|
|
|
public string[] CommandLineArguments { get; set; }
|
|
|
|
[ImportingConstructor]
|
|
public AudioFileInspectorForm([ImportMany(typeof(IAudioFileInspector))] IEnumerable<IAudioFileInspector> inspectors)
|
|
{
|
|
InitializeComponent();
|
|
this.Inspectors = new List<IAudioFileInspector>(inspectors);
|
|
}
|
|
|
|
private void DescribeFile(string fileName)
|
|
{
|
|
currentFile = fileName;
|
|
textLog.Text = String.Format("Opening {0}\r\n", fileName);
|
|
|
|
try
|
|
{
|
|
string extension = System.IO.Path.GetExtension(fileName).ToLower();
|
|
bool described = false;
|
|
foreach (IAudioFileInspector inspector in Inspectors)
|
|
{
|
|
if (extension == inspector.FileExtension)
|
|
{
|
|
textLog.AppendText(inspector.Describe(fileName));
|
|
described = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!described)
|
|
{
|
|
textLog.AppendText("Unrecognised file type");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
textLog.AppendText(ex.ToString());
|
|
}
|
|
}
|
|
|
|
private void CreateFilterString()
|
|
{
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
if (Inspectors.Count > 0)
|
|
{
|
|
stringBuilder.Append("All Supported Files|");
|
|
foreach (IAudioFileInspector inspector in Inspectors)
|
|
{
|
|
stringBuilder.AppendFormat("*{0};", inspector.FileExtension);
|
|
}
|
|
stringBuilder.Length--;
|
|
stringBuilder.Append("|");
|
|
foreach (IAudioFileInspector inspector in Inspectors)
|
|
{
|
|
stringBuilder.AppendFormat("{0}|*{1}|", inspector.FileTypeDescription, inspector.FileExtension);
|
|
}
|
|
}
|
|
stringBuilder.Append("All files (*.*)|*.*");
|
|
filterString = stringBuilder.ToString();
|
|
filterIndex = 1;
|
|
}
|
|
|
|
private void openToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
OpenFileDialog ofd = new OpenFileDialog();
|
|
|
|
ofd.Filter = filterString;
|
|
ofd.FilterIndex = filterIndex;
|
|
|
|
if (ofd.ShowDialog() == DialogResult.OK)
|
|
{
|
|
filterIndex = ofd.FilterIndex;
|
|
DescribeFile(ofd.FileName);
|
|
textLog.SelectionStart = 0;
|
|
textLog.SelectionLength = 0;
|
|
}
|
|
}
|
|
|
|
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
NAudio.Utils.AboutForm aboutForm = new NAudio.Utils.AboutForm();
|
|
aboutForm.ShowDialog();
|
|
}
|
|
|
|
private void AudioFileInspectorForm_Load(object sender, EventArgs e)
|
|
{
|
|
CreateFilterString();
|
|
if (CommandLineArguments != null && CommandLineArguments.Length > 0)
|
|
{
|
|
DescribeFile(CommandLineArguments[0]);
|
|
}
|
|
}
|
|
|
|
private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
OptionsForm optionsForm = new OptionsForm(Inspectors);
|
|
optionsForm.ShowDialog();
|
|
|
|
}
|
|
|
|
private void AudioFileInspectorForm_DragOver(object sender, DragEventArgs e)
|
|
{
|
|
if (e.Data.GetDataPresent(DataFormats.FileDrop))
|
|
{
|
|
e.Effect = DragDropEffects.Copy;
|
|
}
|
|
}
|
|
|
|
private void AudioFileInspectorForm_DragDrop(object sender, DragEventArgs e)
|
|
{
|
|
if (!e.Data.GetDataPresent(DataFormats.FileDrop))
|
|
{
|
|
return;
|
|
}
|
|
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
|
|
|
|
if (files.Length > 0)
|
|
{
|
|
DescribeFile(files[0]);
|
|
}
|
|
}
|
|
|
|
private void saveLogToolStripMenuItem_Click(object sender, EventArgs args)
|
|
{
|
|
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
|
saveFileDialog.DefaultExt = ".txt";
|
|
if (currentFile != null)
|
|
{
|
|
saveFileDialog.InitialDirectory = Path.GetDirectoryName(currentFile);
|
|
saveFileDialog.FileName = Path.GetFileNameWithoutExtension(currentFile) + ".txt";
|
|
}
|
|
saveFileDialog.Filter = "Text Files (*.txt)|*.txt";
|
|
saveFileDialog.FilterIndex = 1;
|
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
try
|
|
{
|
|
|
|
using (StreamWriter writer = new StreamWriter(saveFileDialog.FileName))
|
|
{
|
|
string text = textLog.Text;
|
|
if (!text.Contains("\r"))
|
|
{
|
|
text = text.Replace("\n", "\r\n");
|
|
}
|
|
writer.Write(text);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
MessageBox.Show(
|
|
String.Format("Error saving conversion log\r\n{0}", e.Message),
|
|
Application.ProductName,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Error);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void contentsToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
string helpFilePath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "audio_file_inspector.html");
|
|
try
|
|
{
|
|
System.Diagnostics.Process.Start(helpFilePath);
|
|
}
|
|
catch (Win32Exception)
|
|
{
|
|
MessageBox.Show("Could not display the help file", Application.ProductName);
|
|
}
|
|
}
|
|
|
|
private void clearLogToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
textLog.Clear();
|
|
}
|
|
|
|
private void findToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
if (findForm == null)
|
|
{
|
|
findForm = new FindForm(textLog);
|
|
findForm.Disposed += new EventHandler(findForm_Disposed);
|
|
}
|
|
findForm.Show(this);
|
|
}
|
|
|
|
void findForm_Disposed(object sender, EventArgs e)
|
|
{
|
|
findForm = null;
|
|
}
|
|
|
|
private void AudioFileInspectorForm_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
if (findForm != null)
|
|
{
|
|
findForm.Close();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|