private void SaveNodeFormats(ObjectEditor editor, bool UseSaveDialog, bool UseCompressDialog) { foreach (var node in editor.GetNodes()) { IFileFormat format = null; if (node is ArchiveBase) { format = (IFileFormat)((ArchiveBase)node).ArchiveFile; } else if (node is IFileFormat) { format = ((IFileFormat)node); } if (format != null) { if (!format.CanSave) { return; } string FileName = format.FilePath; if (!File.Exists(FileName)) { UseSaveDialog = true; } if (UseSaveDialog) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = Utils.GetAllFilters(format); sfd.FileName = format.FileName; if (sfd.ShowDialog() != DialogResult.OK) { return; } FileName = sfd.FileName; } Cursor.Current = Cursors.WaitCursor; //Use the export method for particular formats like bfres for special save operations if (format is STGenericWrapper && !(format is STGenericTexture)) { ((STGenericWrapper)format).Export(FileName); return; } if (node is ArchiveBase) { STFileSaver.SaveFileFormat(((IFileFormat)((ArchiveBase)node).ArchiveFile), FileName, UseCompressDialog); } else { STFileSaver.SaveFileFormat(((IFileFormat)node), FileName, UseCompressDialog); } Cursor.Current = Cursors.Default; } } }