private void OpenImportTexture(TextureFormatMode mode) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = ConstructFilters(mode); var result = dialog.ShowDialog(); if (result != DialogResult.OK) { return; } string name = dialog.FileName; try { using (Stream s = File.Open(name, FileMode.Open)) { OpenImportStream(s, name, mode); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } FillListView(new[] { name }); }
private string ConstructFilters(TextureFormatMode mode) { if (mode == TextureFormatMode.Unspecified) { throw new ArgumentException("Should not happen"); } StringBuilder builder = new StringBuilder(); IEnumerable <TextureFormatSerializer> ordered = TextureFormatSerializerProvider.RegisteredSerializers.OrderBy(s => s.Name); StringBuilder allFormatsBuilder = new StringBuilder(); allFormatsBuilder.Append("All supported " + (mode == TextureFormatMode.Format ? "formats|" : "metadata formats|")); foreach (var serializer in ordered) { string ext = mode == TextureFormatMode.Format ? serializer.PreferredFormatExtension : ".xml"; allFormatsBuilder.AppendFormat("*{0};", ext); builder.AppendFormat("{0}|*{1}|", mode == TextureFormatMode.Format ? serializer.Name : serializer.Name + " metadata", ext); } string f = allFormatsBuilder.Remove(allFormatsBuilder.Length - 1, 1). Append('|').Append(builder). Append("All files|*.*").ToString(); return(f); }
private void OpenImportFolder(TextureFormatMode mode) { if (mode == TextureFormatMode.Unspecified) { throw new ArgumentException("Should not happen"); } FolderBrowserDialog dialog = new FolderBrowserDialog(); var result = dialog.ShowDialog(); if (result != DialogResult.OK) { return; } string path = dialog.SelectedPath; IEnumerable <string> extensions = TextureFormatSerializerProvider.RegisteredSerializers.Select( s => mode == TextureFormatMode.Format ? s.PreferredFormatExtension : ".xml"); extensions = extensions.OrderBy(s => s); var files = Directory.GetFiles(path, "*.*").Where(s => extensions.Contains(Path.GetExtension(s)) && TextureFormatSerializerProvider.FromFile(s) != null); FillListView(files); }
private void OpenImportStream(Stream stream, string fullPath, TextureFormatMode mode) { TextureFormatSerializer curSerializer = null; MetadataReader reader = null; if (mode == TextureFormatMode.Format) { curSerializer = TextureFormatSerializerProvider.FromStream(stream); } else if (mode == TextureFormatMode.Metadata) { reader = XmlMetadataReader.Create(stream); curSerializer = TextureFormatSerializerProvider.FromMetadata(reader); } else { curSerializer = TextureFormatSerializerProvider.FromStream(stream); mode = TextureFormatMode.Format; if (curSerializer == null) { reader = XmlMetadataReader.Create(stream); curSerializer = TextureFormatSerializerProvider.FromMetadata(reader); mode = TextureFormatMode.Metadata; } } if (curSerializer == null) { MessageBox.Show("Unsupported file format!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); if (reader != null) { reader.Dispose(); } return; } switch (mode) { case TextureFormatMode.Format: SetTexture(curSerializer.Open(stream)); break; case TextureFormatMode.Metadata: SetTexture(curSerializer.Import(reader, Path.GetDirectoryName(fullPath))); break; default: throw new ArgumentException("Should never happen!"); } if (reader != null) { reader.Dispose(); } SetFilename(Path.GetFileName(fullPath)); serializer = curSerializer; }
private void SaveExportTexture(TextureFormatMode mode) { if (texture == null) { return; } SaveFileDialog dialog = new SaveFileDialog(); dialog.FileName = Path.GetFileNameWithoutExtension(filename); if (mode == TextureFormatMode.Unspecified) { throw new ArgumentException("Should not happen"); } dialog.Filter = serializer.Name + (mode == TextureFormatMode.Format ? "|" : " metadata + editable data|") + (mode == TextureFormatMode.Format ? serializer.PreferredFormatExtension : ".xml"); var result = dialog.ShowDialog(); if (result != DialogResult.OK) { return; } try { using (Stream s = File.Open(dialog.FileName, FileMode.Create)) { if (mode == TextureFormatMode.Format) { serializer.Save(texture, s); } else { using (MetadataWriter writer = XmlMetadataWriter.Create(s)) { serializer.Export(texture, writer, Path.GetDirectoryName(dialog.FileName), Path.GetFileNameWithoutExtension(dialog.FileName)); } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }